MMDetection源码解析:Faster RCNN(3)–RPN Head类

Faster RCNN配置文件faster_rcnn_r50_fpn.py中的

设置了Backbone为ResNet.

设置了Neck为FPN.Backbone和Neck比较简单,就不详细介绍了,详细介绍一下RPN Head.

以上文件设置了RPN Head为RPNHead(RPNHead定义在mmdetection/mmdet/models/dense_heads/rpn_head.py文件里面);同时定义了anchor_generator为AnchorGenerator(AnchorGenerator定义在mmdetection/mmdet/core/anchor/anchor_generator.py里面),指定了Anchor生成的方式;bbox_coder为DeltaXYWHBBoxCoder(DeltaXYWHBBoxCoder定义在mmdetection/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py里面),指定了BBox的编码解码方式;loss_cls和loss_bbox设置了BBox的分类损失和回归损失.

rpn_head.py文件内容如下:

RPNHead的主要包括以下函数:

(1)init(),初始化函数.

(2)_init_layers(),该函数主要实现Head的Layer的初始化,从代码可知,有3个Layer:卷积层rpn_conv,分类层rpn_cls,回归层rpn_reg.

这3层都用到了nn.Conv2d这个类(定义在torch/nn/modules/conv.py里面),默认的第1个参数in_channels,第2个参数是out_channels,第3个参数是kernel_size.rpn_cls的out_channels是每一个点的Anchor数量乘以cls_out_channels(等于类的数量+1).rpn_reg的out_channels是Anchor的数量乘以4,因为一个BBox由4个输出决定.

(3)init_weights(),初始化权重.

(4)forward_single(),把FPN的1个特征图Forward,也就是输出这一层的分类和BBox预测.

(5)loss(),计算损失函数.

(6)_get_bboxes_single(),根据forward_single()的输出,以及每一层的Anchor,得到最终的预测结果,再进行NMS.

Original: https://www.cnblogs.com/mstk/p/14658987.html
Author: MSTK
Title: MMDetection源码解析:Faster RCNN(3)–RPN Head类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/566541/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球