【Faster RCNN源码解读/复现】Faster RCNN网络总览
写在前面
博主是一名刚转行CV不久的一枚小硕,大约半年前对目标检测相关的几个经典网络(RCNN, Fast RCNN, Faster RCNN, YOLO, SSD)等有一些简单的了解(听说而已)。这学期转行以来,准备从Faster RCNN着手,研读论文,理解并努力复现源码。经过大约一个月的努力,Faster RCNN已基本上复现完成,借****平台,分享自己的一些理解和感悟,希望和大家一起进步。
网络框图
在读完Faster RCNN论文之后,可以知道,Faster RCNN总体上可分为三部分,如下图所示,
- 用于提取图像特征,实现参数共享的多个卷积层;
- 用于得到Proposal(候选框)的RPN层,这也是Faster RCNN最经典的部分;
- 用于完成分类和边界框回归的RoI Pooling层和分类层。
在实现网络的过程中,必定会将这三部分进一步地划分为最小的功能单元。
对于提取特征的卷积层,通常使用VGG、ResNet等预训练模型,当前,也可使用ShuffleNet、Inception等实现,只需要在搭建出相应网络的基本结构,下载预训练模型并在源码上做出相应的更改即可;
对于RPN层,又可分为产生anchors的generate_anchors层,对anchors进行前景/背景分类和boungding box回归的rpn_anchor_target层,以及产生最终用于目标检测的proposals的proposal_layer;
对于ROI_Pooling层,则需要将尺寸不一的proposals通过相关的Pooling技术,转换为同样的尺寸,只有这样,才能将这些proposals作为一个batch输入分类层;
对于分类层,不单单是分类的功能,要同时实现分类和bounding box回归的功能,通过两个全连接层实现,完美地将分类任务和回顾任务相结合。
写在后面
接下来一段时间,将会基于PyTorch源码及自己复现源码,对Faster RCNN各部分进行解析。
欢迎关注!
参考
- https://www.cnblogs.com/wangyong/p/8513563.html
- Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks - https://github.com/jwyang/faster-rcnn.pytorch