将模型进行对比,试着描述一下不同系列模型的根本差异与各自的优缺点,会更有益记忆。
SSD论文:https://arxiv.org/pdf/1512.02325.pdf
YOLOv4论文:https://arxiv.org/pdf/2004.10934v1.pdf
EfficicnetDet论文:https://arxiv.org/pdf/1911.09070.pdf
DETR论文:https://ai.facebook.com/research/publications/end-to-end-object-detection-with-transformers
YOLO系和RCNN系的区别
这两个系的区别就应该是One-stage和Two-stage的区别
YOLO和SSD属于One-stage类型的算法,其主要思路就是均匀地在input image上不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用backbone CNN提取特征后直接进行分类和回归,整个过程只需要一步,所以优势在于速度快,但是均匀密集采样的一个重要缺点就是训练比较困难,这主要是因为正样本和负样本极度不均衡,导致模型准确度比较低。另外还有些模型各自的缺点之后再说。
RCNN、SSP-Net、Fast RCNN、Faster RCNN均属于Two-stage,都是利用选择性搜索算法(SS)或者利用backbone CNN获取特征图然后通过region proposal network获取anchor box,然后再分类和回归,Two-stage即先得到region proposal,然后再分类回归。另外还有些模型各自的缺点之后再说。
One-stage和Two-stage相比也可以说YOLO的缺点:虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的天生缺陷。
YOLO系和SSD系的区别
YOLO系在上篇文章(行为分析(六):人形检测部分(一):YOLOv1-v5的学习笔记_是魏小白吗的博客-CSDN博客_yolov5提升精度)中我们已经详细的分析过了:将输入图像划分为S*S(最终feature map的大小)个grid cell,每一个cell预测B个bounding boxes,以及C个类别概率。训练过程中,ground truth的中心落在哪个grid cell中,那个grid cell就负责预测这个ground truth框。
SSD也是一种非常优秀的one-stage目标检测方法,One-stage算法就是目标检测和分类是同时完成的,其主要思路是利用CNN提取特征后,均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,物体分类与预测框的回归同时进行,整个过程只需要一步,所以其优势是速度快。但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致模型准确度稍低。SSD论文中采用的主干网络是VGG网络:
文中给出SSD网络架构的同时也给出了YOLO和SSD基本结构的根本性不同:SSD 模型在基础网络的末端添加了几个特征层,用于预测不同尺度和纵横比的默认框的偏移量及其相关的置信度。通俗的理解就是:
第一,SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小特征图用来检测大物体(虽然这只是一种期望,但确实多尺度有一定道理)
第二,SSD采用了不同尺度和长宽比的先验框,在faster r-cnn中称为Anchors。YOLOv1(注意时间线,这时候对比的应该是v1版本)算法缺点是难以检测小物体,而且定位不准,但是对于这几点,SSD在一定程度上克服这些缺点
第三,这点上面没有提到但是要说一下,SSD相比于YOLOv1的小目标检测准确率要高些,但是YOLOv4的对小目标检测的准确率高出了SSD很多,这并不是说YOLO系列已经解决了小目标的检测这一缺陷。而是要将同时期base SSD的模型和base YOLO的模型相对比。比如将EfficinetDet和YOLOv3相比,YOLO对于小模型的检测仍然是稍逊一筹的,这是由YOLO的结构天生决定的。
EfficinetDet系的独特性
要说明一点,EfficinetNet应该是base SSD系的,理由如下
首先谷歌大脑提出了EfficientNets,然后提出了BiFPN,将其结合就诞生了EfficicnetDet
BiFPN是一个双向的、可加权的FPN:BiFPN是从 FPN 发展过来的原始的FPN实现的自顶向下(top-down)融合,所谓的BiFPN就是两条路线既有top-down也有down-top。在融合过程中,之前的一些模型方法没有考虑到各级特征对融合后特征的g共享度问题,即之前模型认为各级特征的贡献度相同,而本文作者认为它们的分辨率不同,其对融合后特征的贡献度不同,因此在特征融合阶段引入了weight。
EfficientNets自然而然的就可以结合成一个目标检测网络EfficinetDet,结构如下
从 EfficinetDet我们可以验证上面提到的结论,EfficinetDet的确应该是属于SSD系的,突出的各尺度(各等级)特征的抽取和融合。不同的是EfficinetDet的backbone是EfficiNets以及BiFPN的加入
Transformer系与其他系
Transformer系与其他几个系相比,更多的是利用和突出Transformer这个backbone的特性与优势
DETR
基于Transformer的目标检测任务做的最出色的是Facebook的DETR
图2:DETR使用传统的CNN主干来学习输入图像的2D表示。该模型将其展平,并在将其传递到Transformer编码器之前用位置编码对其进行补充。然后,Transformer解码器将少量固定数量的学习位置嵌入作为输入,我们对这些位置嵌入进行查询,并额外处理编码器输出。我们将解码器的每个输出嵌入传递到一个共享前馈网络(FFN),该网络预测一个检测(类和边界框)或一个“无对象”类。
Prediction feed-forward networks (FFNs):最终的预测由一个具有RELU激活函数和隐维数的三层感知器和一个线性投影层来计算。FFN预测归一化中心坐标、长方体的高度和宽度。输入图像,并且线性层使用Softmax函数预测类别标签。由于我们预测了一组固定大小的N个边界框,其中N通常比图像中感兴趣的对象的实际数量大得多,所以使用附加的特殊类别标签∅来表示在槽内没有检测到对象。在标准的目标检测方法中,这个类扮演着类似于“背景”类的角色。
Toward Transformer-Based Object Detection
这是另外一种比较有趣的思路
图 1:我们提出利用Vision Transformer主干,通过最终Transformer 层中的per-patch输出来执行对象检测。 通过在空间上重新解释这些输出,我们创建了一个特征图,自然地将自己作为检测模型的输入送入模型,模型产生类别预测并回归box的坐标。 由此产生的模型 ViT-FRCNN 实现了强大的性能,同时展示了基于Transformer模型的许多理想特性。
以下内容仅是突发奇想
YOLO系列或者说One-stage系列对于小目标检测的效果一直不太好,能否借鉴Transformer这种将一张大图片分割成很多的小图片,然后送入网络。可能会被问到一个问题:如果我们正好切割到了目标物体该怎么办?这个问题其实忽略了一个问题,我们将图片切分成N个patch送入网络去预测,是为了放大每个patch以便突出小物体,但是最后在预测阶段仍然是在整张图片上进行回归物体类别与box的坐标值也就是物体位置。
参考
链接1:SSD算法精度 - nanmi - 博客园
链接2:目标检测(YOLO,SSD,Efficientdet,RCNN系列)_不会写作文的李华的博客-CSDN博客_efficientdet和yolo
链接3:EfficientDet_ResneSt_YOLOV4_baidu_36557924的博客-CSDN博客_efficientdet和yolov4
链接4:ViT-FRCNN:面向基于Transformer的目标检测_Amusi(CVer)的博客-CSDN博客_vit目标检测
链接5:源码解析目标检测的跨界之星DETR(一)、概述与模型推断 - 简书