(部分可见 https://www.cnblogs.com/EstherLjy/p/9328996.html )
一、理论效果对比:
二、算法理论:
1.Faster Rcnn
1.1 框架
1)用基础网络(VGG16)获得feature map;2)将feature map输入到RPN网络中,提取proposal,并将proposal映射到原feature上;3)将proposal的feature map用ROI pooling池化到固定长度;4)进行类别的分类和位置的回归。
1.2 ROI-pooling
1)目的:由于有全链接层,需要将proposal对应的feature_map转成固定长度
2)方法:ROI-pooling,ROI-align
ROI-pooling:直接量化,整个流程中有两次量化,一次是proposal对应到fature map(直接向下取整),一次是ROI-pooling,分n*n的块不能完全且分(舍弃一部分)
ROI-align:对proposal对应的feature map(非整数)切成n*n,对每个cell双线性插值获得k(一般是4)个采样点,对采样点取最大值/平均值
1.3 RPN
思想:输入公共feature map,做3*3的卷积得到H*W*256的feature map,在feature map的每个cell上(真实是原图上,一个点对应原图上一个框)赋予9=3(3种size)*3(3种比例,1:1,1:2,2:1)个anchor,每个anchor需要检测该cell是不是目标(9*2=18维),以及目标的更精确的位置(9*4=36维),整个feature map得到W/4*H/4*(18+36=54)大小的feature map,接着就可以按分数取正负样本。
2.Cascade Rcnn
2.1 原因:
1)BBox精度不够高,原因为RPN提取的proposal>0.5认为是正样本,输入到分类器进行回归;
2)0.5附近这部分正样本并不太正,回归起来较难,且这种正样本输入训练出的分类器,容易把更高IOU(比如0.8)的的proposal回归的不好;
3)单纯提高阈值会导致正样本比例不够,容易过拟合
2.2 思路:
1)单次回归不足以产生准确的信息,需要多次迭代
2)使用分类器集合,针对不同IOU层次的box进行不同回归,使得每个阶段的proposal都能较好回归
3)前面分类器回归后的proposal(IOU从0.5到0.6)可以作为后面分类器的正样本,因此高层的正样本也是够的
很难让一个在指定IOU阈值界定的训练集上训练得到的检测模型对IOU跨度较大的proposal输入都达到最佳,因此采取cascade的方式能够让每一个stage的detector都专注于检测IOU在某一范围内的proposal,因为输出IOU普遍大于输入IOU,因此检测效果会越来越好
3.YOLO相关
3.1 YOLO-V1
1)将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。每个网络需要预测B个BBox的位置信息和confidence(置信度)信息,一个BBox对应着四个位置信息和一个confidence信息。confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息。
2)由于存在全连接层输入大小需要固定;一个网格最多检测一个物体;损失是绝对值;效果不好;
3.2 YOLO-V2
1)分类和检测联合训练(类似扩充数据集并移植);放9个先验框;去除全连接层;约束学习到的边框;passthrough层;图像多尺度训练;
3.2 YOLO-V3
1)darknet53;sofmax->多个二分类;FPN;
3.3 Yolo-v5
1)数据增强(随机缩放、随机裁剪、随机排布),自适应锚框计算,自适应图片缩放
4.Fcos
4.1 思想:避免anchor设置中的各种超参数
1)把分割运用到检测,anchor free,对图上每个位置进行回归和分类
2)负样本会很多,用与目标中心点的距离抑制错误
4.2 做法:
1)将feature_map的每一个cell映射回原图上成一个框,如果这个映射框处在待检测目标的范围内(有交集)则这个cell为正样本,否则为负样本
2)模糊case(真实处在多个目标框)判为面积最小的边界框,
3)确定GT后,回归与原图框的相对位移,不同层回归不同大小的目标
4)分类回归的同时学习离目标中心的距离抑制错误
4.3 与基于anchor的方法(下面称为anchor法)不同之处:
1)Fcos对feature map对应的原图框进行回归,anchor法是对anchor进行回归;2)Fcos的gt是 如果原图框与真实框有交集就是正样本,anchor法是anchor与真实边框的iou大于一定阈值时正样本;3)Fcos训练C个二元分类器,anchor法回归一个多元分类器。4)FCOS通过直接限定不同特征级别的边界框的回归范围来解决模糊case。5)FCOS添加Center-ness分支,用于抑制低质量的预测边界框。
5.OHEN
5.1 目的:区分难分样本
5.2 方法:多学习难例
对于一次SGD迭代:先计算出特征图,可读RoI网络对所 有RoI执行前向计算并计算每个RoI的损失,然后选择hard RoIs。把这 些hard RoIs输入到可读可写的RoI网络中执行前向前向计算和反向传播更新网络,并把可读可写的RoI网络的参数赋值给只可读的网络,一次 迭代完成。
6.Focol Loss
6.1 目的:解决难易样本不均衡问题
6.2 方法:降低易分类样本的权重
6.2 与OHEM区别:ohem按loss大小选负样本,但忽略了那些loss较小的easy的负样本,虽然这些easy负样本loss很小,但数量多,加起来的loss较大,对最终loss有一定贡献。Focol Loss想把这些loss较小的也融入到loss计算中。想融入一些easy example,希望他们能有助于训练,但又不希望他们主导loss。
7.RetinaNet:Resnet+FPN+FCN+Focal_loss,效果不如Faster Rcnn
8.Mask Rcnn:在Faster Rcnn基础上添加一个Mask预测分支,每个类一张特征图
8.1 网络框架
三、算法实践结论:
1.OHEM一般用在RCNN层,在类别判断上效果明显,准召上提升也较明显
2.Focol_Loss一般用在RPN层,可以提升目标召回,但会带来噪声
3.deform可提升小目标召回,但会带来噪声
4.Fcos比Faster召回高但带来大量噪声,实际可能不适用