![efb0a9ead98c3a7ea9a2c71c00127780.png](https://i-blog.csdnimg.cn/blog_migrate/34e2966cc7d1ee117ef03488ef4c27c7.jpeg)
GitHub(代码中有详尽注释):
liuyuemaicha/simple_faster_rcnngithub.com![d1600d88d7583da7dd8a7bc1eec8c230.png](https://i-blog.csdnimg.cn/blog_migrate/4be2c2260e18f221d763b2e46d7b391c.jpeg)
注:
- github代码依赖python 2.7 和pytorch,pytorch支持0.4.1和0.3.1
2.Faster RCNN理解,主要参考:
白裳:一文读懂Faster RCNNzhuanlan.zhihu.com![ed9e6397bf689151bf3007ee32f9d7b8.png](https://i-blog.csdnimg.cn/blog_migrate/308703fccd8c28170ff4073b6932a3ce.jpeg)
3. 本文是认为读者对Faster RCNN有初步的认识。如果是初学者,建议先阅读上面的文章,再结合本代码,会有更好的理解。
在objects detection算法中,大概可以分为两大方向
一、Two-Stage,这是一种Proposal-based的方法,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。
- R-CNN
- Fast R-CNN
- Faster R-CNN
- Mask R-CNN
二、One-Stage,这是一种Proposal-free的方法,不需要先计算Proposal,直接使用一个CNN网络预测不同目标的类别与位置
- YOLO系列
- SSD
- RetinaNet
关于One-Stage的YOLOV3的简介和代码注释,可以查阅:
KevinCK:目标检测——YOLO V3简介及代码注释(附github代码——已跑通)zhuanlan.zhihu.com![7a27e723656a9a4a83f86487023348f7.png](https://i-blog.csdnimg.cn/blog_migrate/ce7f13df776f507ed77cd6e30fdb098a.jpeg)
Two Stage的框架如下:
![3476d28f2c8674253137e035b2d26423.png](https://i-blog.csdnimg.cn/blog_migrate/26133ce6c27ca730412d47523ef4505c.jpeg)
Faster RCNN基于Two Stage框架的详细设计:
![a7fc1ffb392921128f6cbf3876077a85.png](https://i-blog.csdnimg.cn/blog_migrate/af748439c803685ab66091e958702d4e.jpeg)
下图是本文根据代码流程设计的结构图:
![bae8b6cccaca4300b90b8c1f071ebd8c.png](https://i-blog.csdnimg.cn/blog_migrate/8b60c7a7b97b6141bb7e1fa3d352ff02.jpeg)
Faster RCNN使用了VGG16模型提取特征,提取得到的特征用到了RPN处理和ROI Pooling处理。 图像经过VGG16模型提取特征后:
- step_1: 初始化anchors,计算有效anchors(valid_anchors),并获取目标anchors的置信度(anchor_conf)和平移缩放系数(anchor_locs)
- step_2: RPN计算:特征图feature map通过RPN预测anchor参数:置信度(foreground)和转为预测框的坐标系数
- step_3: 计算