整体思路 GeneralizedRCNNTransform主要用在图像进入backbone网络前的预处理以及预测结果输出时的后处理两个阶段.主要工作是图像的标准化处理以及resize操作. 函数细节 __init__ __init__函数主要输入图像的均值和方差,以及resize时图片的最小(大)边长范围 normalize 最后一行通过添加None这个维度可以增加一维维度,再利用广播机制对image的每个像素都进行操作. resize 这个方法首先调用_resize_image使用双线性插值调整图片大小,再通过resize_boxes调整对应的box大小. _resize_image 根据宽高限制来确定缩放比例,调用interpolate对图像进行双线性插值,这里在image又添加一个维度,是因为interpolate方法输入需要是4D图像 resize_boxes 按照缩放比例调整box坐标即可.这里torch.stack()会在tensor最后新增一个维度,这里就是在最后一个维度摞起来 batch_images 这
整体思路 以上是Faster RCNN的整体网络框架图,首先需要构建一个基础的网络框架类FasterRCNNBase,随后在此基础上构建子类FasterRCNN,在这个类中进行各个模块如RPN/ROI Header的实例化. FasterRCNNBase init函数接收backbone/rpn/roi_heads/transform四个变量并初始化参数. 主要看forward函数.首先会对训练数据(bbox的tensor格式)进行检查.然后记录图片原始的大小. 接着进行预处理,丢到骨干网络中得到特征图(如果在多个特征图上预测,得到的特征图将是一个字典) 在特征图上使用RPN网络提取Proposal,并得到RPN网络的损失. 将RPN生成的Proposal,随同特征图与标注target丢入ROI_Header中得到预测结果和预测损失.最后还需要将预测结果进行预处理. 最后当然就是把RPN Loss和Fast RCNN Loss加起来反向传播~(如果是预测模式直接返回detections即可,eager_outpus就是
Faster RCNN框架图 图源: deep-learning-for-image-processing/pytorch_object_detection/faster_rcnn at master · WZMIAOMIAO/deep-learning-for-image-processing (github.com) 源码主要内容 Faster R-CNN源码阅读将从以下几个方面展开,详见其他文档 DataSet 网络框架 GeneralizedRCNNTransform RPN Predict Header 正负样本划分与采样 Loss函数 PostProcess Change Backbone(with FPN) 环境配置 Python 3.6/3.7/3.8 Pytorch>=1.6.0 pycocotools Ubuntu or Centos Use Gpu to train model more details see requirements.txt 文件结构 ├── backbone: 特征提取网络,
Axuanz
Updating as per fate.