OpenPifPaf 的encoder过程
图像预处理
- 源代码
train.py
中给出了两个方案,一个是带有data augmentation
的, 一个是不带的, 因为图像预处理无非是对图像和对应的label进行处理使其满足网络的输入条件, 因此就以不带data augmentation
的预处理过程简单梳理下. - 首先是读入传入的coco label, 根据传入的coco label, 使用
PIL Image.open()
打开图像并转成RGB
格式. 接着, 对图像以图像的长边为标准缩放成401的大小, 短边按比例缩放, 图像保持原来的比例, 接着再对短边上下(或者左右)进行(124, 116, 104)的内容填充, 最后会有一个减均值除方差的操作, 最终得到的图像大小是401 x 401
的. 预处理的过程中, 保持图像的label
按照同样的步骤操作, 最终, 得到预处理之后的image
和ann
. - 在操作2完成之后, 会根据其中得到的
meta['valid_area']
值对image再做一次更新, 就是让image处于valid_area之外的区域值为0, 意思就是让网络专注于去学只有人的区域, 非人的区域不要去学, 接着根据得到的ann
值去生成pif label 和 paf label.
pif:
- 首先对
ann
的值进行scale操作. 因为网络的输出和输入大小不一致, 而传入的ann
是按照输入的大小计算得到的值, 因此需要根据网络的缩放倍数对ann
值进行更新, 符合网络的输出尺度范围, 就是对象rescalar