转载 https://blog.csdn.net/JNingWei/article/details/80651660
算法 | 优点 | 缺点 | 改进方案 |
---|---|---|---|
RetinaNet | 很简单、精度较高、速度快 | fp较多 | 增加后处理 |
FPN + Faster R-CNN | 较简单、精度很高、fp少 | 速度有待提高 | 简化basemodel |
无人驾驶这种对实时性要求极高的应用场景,也多采用FPN+Faster R-CNN作为其基本算法。
还有的会用 Light-head R-CNN、Deformable R-FCN 等。
其他算法,诸如YOLO系、SSD等等,都因为检测精度太差,而空有那么高的速度,采用较少。
SNIP一类的,普通显卡甚至都带不起来,更别提落地了
ResNet之前
在ResNet (2015.12) 出来之前,basemodel经历了从AlexNet一家独大,到VGG和GoogleNet平分天下的时期。
ResNet之后
ResNet出来后,由于其简单和强大,成为了basemodel的绝对标杆。
如今从业者一般遵循以下流程:
先用ResNet-50来验证算法的有效性;
直接导入pre-train好的模型,在自己的数据集上fine-tune一、二十个epoch即可;
当该算法在ResNet-50上切实有效后,如果要追求算法速度 (例如落地到移动端),则将basemodel替换为 Xception (较常用的是Xception-145) 、ShuffleNet、MobileNet等等;如果要追求精度 (例如发论文、打比赛刷榜),则将basemodel替换为 ResNet-101 / ResNeXt-101 / DenseNet / DPN 等等。
算法的训练
Basemodel部分,一般直接导入现成训练好的。之后在自己的数据集上fine-tune整个网络。
Training
市面上的涨点方法汗牛充栋,主要有Large/small kernel(大/小卷积核)、Loss function(目标函数)、Stronger basemodel(更强的basemodel)、Scale handling(尺度设计)、RoIAlign(对齐RoIPooling)、Deformable convolution(形变卷积)、Atrous convolution(空洞卷积)、Cascade(级联)、OHEM(在线困难样本挖掘)、BN(规范化)、Regulation(正则化)、Large mini-batch、Emsemble learning(集成学习)、Multi-scale training and testing等等。
But,绝大部分trick,都不如根据test情况,针对性地 加数据 来得实在。