最近研究一个文本检测网络时,用到了RFCN,但是发现pytorch版本没有简洁的实现版本,故复现论文并开源在github上:
项目链接
结构分析
RFCN以ResNet101为backbone,从layer3输出的特征用于训练RPN; layer4中的步长被更改为stride=1
, 使用空洞卷积替换,整个resnet101的下采样倍数为16x
,输出特征用于训练PsRoI Head.
PsRoI 与 RoI 相似,只是不同位置的感兴趣区域的特征分别从不同输入通道上获取,使用cuda实现时主要将输入特征索引匹配好。
PyTorch实现
Pytorch实现主要把握PsRoI的cuda实现,注:实验发现PyTorch自带的PsROI模块输入和反传结果与MxNet不一致,mAP也低了约5个点,也没有group_size选项,故使用了自己写的PsROI模块。
将RPN和PsROI Head 进行联合训练
- 在voc2007上训练,使用OHEM,在voc2007上测试mAP可达72.5%(论文为voc07+12训练)
- 在voc07+12训练还可提升近5个点
==>项目指路:
https://github.com/elbert-xiao/Simple-RFCN-PyTorch
该项目完全基于PyTorch实现,内存占用非常小(训练时约为3GB),效果还不错。欢迎查看交流,star or fork . ^_^