Faster-RCNN的个人理解

      两周前复现了一下pointnet++,本来想赶紧写博客记录一下梳理完的网络流程,但因为一些不可抗力必须去做一些浪费时间的事情,没时间整理,所以搁置了,pointnet++今天我也不写了,以后有时间吧。

     这两周也在断断续续学习目标检测的东西,因为之前只会分割,别人说cv的精髓都在检测,所以现在开始学习关于检测的东西,首先选择了Faster-RCNN作为开端,今天就记录一下我对此模型的理解。

     网上大神很多,不论是对论文的讲解还是对代码的分析,都很透彻,但我用了很长时间才真正明白pytorch版本代码的真正流程......,我就是笨,那么清楚的讲解,我居然还用这么久。

用到的代码是:https://github.com/chenyuntc/simple-faster-rcnn-pytorch

大神博客是:https://www.cnblogs.com/kerwins-AC/p/9752679.html

     以下就是我浅显的理解了:

  1. 提起图像特征,得到feature,代码是以extractor来实现这部分的,通常使用VGG16等等网络,这个大家都懂;
  2. RPN网络,使用卷积对feature进行处理,可得到rpn_locs(前向传播得到的偏移量),rpn_scores(前向传播得到的分数),roi(ProposalCreator函数得到的兴趣区域),roi_indices(rois在anchor中的位置),anchor(贯彻全文的所有有效anchor)。
  3. 通过RPN得到了前向传播的rpn了,最终目标是要求rpn和真实框框的损失值,那么真实框框的信息怎么得到呢?使用AnchorTargetCreator得到的,此函数的返回值为gt_rpn_locs,gt_rpn_label,这就和上一步得到的rpn_locs,rpn_scores一一对应上了,使用损失函数分别求一下,得到了两个值,先放一放;
  4. 针对roi这部分的损失函数,首先求前向的roi_cls_loc,roi_scores,这部分使用head网络来求,关于head,网上的图片也已经说明了其结构,真实的roi呢?通过ProposalTargetCreator来求,得到gt_roi_locs,gt_roi_label,又和前向的roi对应上了,好了,也是分别求一下对应的损失值;
  5. 以上得到了4个损失值,相加即为整个流程的损失值,也起到了参数共享的作用。之后就开始进行反向传播。

     刚开始看这个源码时真的是让我很头疼,我把每一个小函数都梳理了一下,记录其维度的转换变化,最终混在一起时,我真的晕了......后来看到上面提到的那个博主的流程图,一下豁然开朗,今天也赶紧记录下来自己的理解,关于代码细节的部分,呃,我不想一一复现了。而且现在好像目标检测都不用RCNN了,我也就是用这个入个门,理解理解原理就够了。

     哪位大神要是看到我的博客,若我的理解有错误,希望您能不吝赐教,我真的有点笨(~ ̄(OO) ̄)ブ

你可能感兴趣的:(python,深度学习)