目录
1、faster rcnn:
2、SSD:
3、YOLOv1:
小结:
拓展:anchor-based和anchor-free
anchor
1、faster rcnn:
FasterRcnn 算法原理讲解笔记(非常详细)https://blog.csdn.net/xjtdw/article/details/98945548
1)主要流程
将输入的图像按照短边设置为600后,等比例不失真缩放;
主干网络(VGG16、RESTNET)进行特征提取得到特征图38,38(下采样率为16);
特征图每个点生成九个anchor,共有38*38*9个anchors;
每个anchor等比例缩小16得到在特征图上的坐标,先将超出图像的anchor去掉,然后根据特征图可以得到每个anchor的得分(这个得分是二分类,前景or背景),根据得分筛选出12000个anchor,这里使用的分类网络为softmax+交叉熵损失;
NMS和得分再次筛选得到2000个anchor,这2000个就是建议框proposal;
2000个建议框再和标签框构建IOU矩阵,根据IOU来区分正负样本,然后选择3:1的正负样本数,总数256,这样就得到了256个roi;
将roi区域池化为7*7大小的区域,传输到全连接层,进行分类和回归(分类网络为softmax+交叉熵损失),回归损失使用的是smoothL1损失。
2)rpn和proposal以及roi层的区别
rpn是一个网络,主要作用是区域生成和对正样本的位置先进行调整,得到位置更加准确的建议框;proposal一般为2000个,是rpn网络的产物;roi是proposal和标签框构建iou矩阵后得到的区域;
3)为什么最后要池化为7*7
fasterrcnn原始使用的是VGG的全连接层,而全连接层是固定维度的,因此需要将维度编程适用于vgg
4)为什么小目标最后会消失
经过主干网络特征提取后,图像的下采样率为16,这样就导致了目标像素小于16的对象会被下采样过程中丢弃,同时后续使用的特征图是下采样后的,特征图中没有小目标的特征点存在,导致后续训练的网络并没有对小目标进行训练检测。
5)要注意什么?
fasterrcnn:尽量保证标签框在锚框的最大范围内,便于收敛;
是一个two stage模型,主要创新点在于RPN网络用于候选框的生成。首先利用先验知识对特征图上每一个点生成先验大小的9个ANCHOR框,然后第一阶段是训练RPN网络即生成候选区域,确定每一个框是否包含物体,这里主要是对固定的ANCHOR进行筛选和修正,将剩余的锚框作为候选区域;第二个阶段则是对候选区域进行分类和回归,确定物体的类别具体是什么,以此实现物体的检测
优点:精度高
缺点:训练时间长,且anchor是在同一个特征图上得到的,不利于小目标物体的检测
注意:先验大小——指的是根据现有的目标的纵横比来进行锚框的设计,以此来使得候选区域尽可能地接近真实的物体的位置
2、SSD:
是一个one stage模型,主要创新点在于多尺度训练。SSD是从多个特征层上进行anchor的获取,然后直接将这些anchor框作为候选框进行物体类别的预测与位置的预测。这里还是采用了先验知识来指导anchor的生成,每个特征层每个点生成的anchor的个数不一样,主要为4个或者是6个,为了样本平衡,也会对样本进行筛选,使得正负样本1:3.
优点:速度快
缺点:精度不够
注意:先验大小——指的是根据现有的目标的纵横比来进行锚框的设计,以此来使得候选区域尽可能地接近真实的物体的位置
3、YOLOv1:
是一个one stage模型,主要创新点在于最后7*7*30的特征矩阵当中。YOLOV1是一个没有先验框的模型,它主要是将输入的图像分割成7*7大小的网格,然后每个网格生成2个预测框,最后每个网格含有30个信息值(2个预测框的x,y,h,w,c以及20个类别的条件概率)。
优点:速度比SSD快,是目前性能综合最高的了
小结:
以上三种模型都需要生成候选框,且训练数据都需要有标记的图像数据。不同的是前二者有先验框来指导候选框的生成,而YOLO没有;且rcnn系列是二阶段,后两者是一阶段。前两者可以看成是anchor_based,yolov1可以看成是anchor_free.
拓展:anchor-based和anchor-free
参考链接:https://www.zhihu.com/question/356551927/answer/926659692
目标检测算法一般可分为anchor-based、anchor-free、两者融合类,区别就在于有没有利用anchor提取候选目标框。
A. anchor-based类算法代表是fasterRCNN、SSD、YoloV2/V3等
B. anchor-free类算法代表是CornerNet、ExtremeNet、CenterNet、FCOS,yolov1等
anchor
(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。在推理时生成的特征图上由这些anchor滑动提取n个候选矩形框再做进一步的分类和回归(详细叙述请参考提出anchor思想的fasterRCNN一文)。也就是传统目标检测算法中,在图像金字塔上使用的那个m*n的滑窗。只不过传统方法中特征图是不同尺度的,滑窗一般是固定大小的;而类似于fasterRCNN算法中特征图是固定的,anchor是多尺度的。