源码阅读|Faster RCNN(三)——GeneralizedRCNNTransform

源码阅读·目标检测 · 2023-03-24 · 326 人浏览

整体思路

​ GeneralizedRCNNTransform主要用在图像进入backbone网络前的预处理以及预测结果输出时的后处理两个阶段.主要工作是图像的标准化处理以及resize操作.

函数细节

__init__

__init__函数主要输入图像的均值和方差,以及resize时图片的最小(大)边长范围

image-20230322015154826

normalize

​ 最后一行通过添加None这个维度可以增加一维维度,再利用广播机制对image的每个像素都进行操作.

image-20230322015319593

resize

​ 这个方法首先调用_resize_image使用双线性插值调整图片大小,再通过resize_boxes调整对应的box大小.

image-20230322015549491

_resize_image

​ 根据宽高限制来确定缩放比例,调用interpolate对图像进行双线性插值,这里在image又添加一个维度,是因为interpolate方法输入需要是4D图像

image-20230322020119938

resize_boxes

​ 按照缩放比例调整box坐标即可.这里torch.stack()会在tensor最后新增一个维度,这里就是在最后一个维度摞起来

image-20230322020416714

batch_images

​ 这个方法是将一个batch图像中再次resize到统一尺寸,加速训练.这个统一尺寸被调整为size_divisible的整数倍

​ 具体实现时寻找一个batch中图片的高宽最大值,以此作为最大图像.其他图像跟该图像做左上角对齐,空余位置填充零.

​ 这种方法的好处是保证了图像的比例.

image-20230322020955182

forward

​ 对于每张图片,以此调用normalizeresize方法进行标准化和缩放.而在进行batch_images前,需要记录当前图像尺寸,存入image_sizes_list,最后与image打包成一个list,跟target标注一起返回.

​ 之所以要这么做是因为经过batch_images后,图像变成统一尺寸,但是图像有效区域在原先的图片大小范围内,所以需要保存batch_resize前的图像大小.

image-20230322021547272

postprocess

​ 这个方法是预测模式下最后的后处理操作.

image-20230322022153342

Faster-RCNN 源码阅读
Theme Jasmine by Kent Liao