目标检测的任务是对画面中的目标进行定位和分类。定位是指回归目标的矩形框,分类是指对目标框进行类别区分。
目标检测任务主要解决以下几个问题:目标的种类和数量、目标的尺寸、外界的干扰因素、特定场景任务等;
目标检测算法可以分为传统目标检测算法和基于深度学习的目标检测算法。其中传统的目标检测算法的主要工作集中在手工设计中低层面的特征提取算法,如SIFT、HOG特征等;基于深度学习的目标检测算法的主要功能是通过网络的设计,结合数据和loss的使用,使特征提取这个工作智能化,并将整个目标检测任务简单化。近些年随着计算领域的突破和深度学习算法架构的突破,基于深度学习的算法性能大大优于传统的方法,传统的算法已经渐渐退出历史舞台了。不过很多深度学习的方法也是基于传统算法的思路去做实现的,接下来文章会给大家介绍传统算法和深度学习算法的发展过程,让大家对目标检测算法有个大致的概念。
候选框提取:通过滑动窗口算法、SS算法等选取目标候选框;
特征提取:手工设计算法提取特征,如VJ、HOG特征等算法,传统方法的主要工作都集中在底层和中层特征提取的算法设计上;
分类器:通过SVM等算法对每一个候选框进行分类;
NMS非极大值抑制:
目前基于深度学习的目标算法技术方向可以分为基于anchor base和基于anchor free的方法。anchor base和anchor free 的区别在于,有没有使用anchor来提取候选框。目标检测领域的发展从anchor free到anchor base,现在又有回到anchor-free的趋势,学术界技术的迭代更新也引导着工业界的变革。其中基于anchor base的技术路线中又可以分为two-stage和one-stage的方法。
Anchor也叫做锚,其实是一组预设的边界框用于在训练时学习真实的边框位置相对于预设边框的偏移。通俗点说就是预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。
锚作为一系列先验框信息,其生成涉及以下几个部分:
anchor(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。
代表算法:CornerNet、ExtremeNet、CenterNet、FCOS等;
Anchor-Base即有先验锚框,先通过一定量的数据做聚类等方法得到一些锚框尺度与大小,然后结合先验锚框与预测偏移量得到预测锚框。
基于Anchor-Free的目标检测算法有两种方式:
Faster R-CNN-设置了3种尺度3种宽高ratio一共9个anchor提取候选框
代表算法:Faster R-CNN、SSD、Yolo(2、3、4、5)等;
Anchor-Free即无先验锚框,直接通过预测具体的点得到锚框。
前几年目标检测领域一直被基于锚的检测器所统治,此类算法的流程可以分为三步:
CornerNet直接预测每个点是左上、右下角点的概率,通过左上右下角点配对提取目标框。
RCNN系列网络是two-stage网络的经典之作,其中RCNN网络首次将CNN网络引入目标检测领域,是CNN在目标检测领域的开山之作。
下图是RCNN系列迭代示意图:
论文地址:Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper
算法流程:
论文地址:https://arxiv.org/abs/1504.08083v2
算法流程:
论文地址:https://arxiv.org/abs/1506.01497
算法流程:Faster RCNN网络可以看做是RPN + Fast RCNN
整个网络流程与Fast RCNN类似,只是将其中耗费大量时间的区域建议网络(Region Proposal)SS算法修改为RPN网络直接提取候选框,并将其融入进整体网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
改进点:
论文地址:https://arxiv.org/abs/1512.02325
SSD算法的全名是Single Shot MultiBox Detector,其是在是YOLO V1出来后,YOLO V2出来前的一款One-stage目标检测器。SSD用到了多尺度的特征图,在之后的YOLO V3的darknet53中,也是用到了多尺度特征图的思想。较浅层的特征图上,每个cell的感受野不是很大,所以适合检测较小的物体,而在较深的特征图上,每个cell的感受野就比较大了,适合检测较大的物体。
SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。如下图所示:
网络分为三部分:
SSD的特点:
YOLO系列算法出自Joseph Redmon之手,可以说是one-stage目标检测算法的奠基之作。YOLO全称you only look once,意思是把将类别分类和框回归的任务进行统一。从YOLOv1 到YOLOv3,作者完成了YOLO系列网络的基础框架搭建,后续的网络大部分(YOLOv4、YOLOv5、YOLObile和YOLOX等等)都是基于YOLOv3的网络做的一些修改。作者Joseph Redmon在2020年2月,在推文上宣布退出了CV领域(原因是军方邀请他观看了YOLOv3在军事无人机上的应用,作者认为这有违他的初衷)。在作者宣布退出CV界之后的4月23号和6月25号,YOLOv4和YOLOv5相续发表。
论文地址:https://arxiv.org/abs/1506.02640
算法流程:
论文地址:https://arxiv.org/abs/1612.08242
YOLO9000就是YOLOv2网络,在YOLO系列网络中起着承上启下的作用。
上表是论文中列出的改进点以及每个改进点的提升:
改进点:
论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf
YOLOv3是一篇不是严格意义上的学术论文,而是一篇技术报告。作者是因为需要在另外一篇文章中需要引用YOLOv3,临时写的一篇报告。所以在描述和结果对比上表达得很随意。
上图,源自YOLOv3原文开头,作者把YOLOv3的结果画到了坐标轴的外面,以此来表明YOLOv3的结果明显优于比当的前SOTA网络RetinaNet(有装逼的嫌疑,也可能是作者直接取了RetinaNet论文的图,不想再重新绘制,直接在上面添加了YOLOv3的结果)。但是不管怎么样,YOLOv3基本上奠定了YOLO系列检测网络的基本框架,后续的改进都是基于这个框架增加一些当前work的方法进去。
改进点:
论文地址:https://arxiv.org/abs/2004.10934
YOLOv4像一篇目标检测网络的tricks文献综述,作者把目标检测领域当时work的方法基本都用试了一遍,可见作者的“炼丹”水平。YOLOv4网络在保持和YOLOv3相同速度的情况下大幅提升了网络的精度。
改进点:
项目地址:https://github.com/ultralytics/yolov5
YOLOv5主要是针对工程化做了一系列的优化。相比YOLOv4在同精度的情况下,速度由原来的50FPS达到了140FPS,这对工业界来说是很有意义的。
改进点:
论文地址:http://arxiv.org/abs/2107.08430
YOLOX的Backbone沿用了YOLOv3的Backbone结构
改进点:
YOLOv6的Backbone侧在YOLOv5的基础上,设计了EfficientRep Backbone结构。
和YOLOv5的Backbone相比,YOLOv6的Backbone不但能够高效利用硬件算力,而且还具有较强的表征能力。
YOLOv6的Backbone中将普通卷积都替换成了RepConv结构。同时,在RepConv基础上设计了RepBlock结构,其中RepBlock中的第一个RepConv会做channel维度的变换和对齐。
另外,YOLOv6将SPPF优化设计为更加高效的SimSPPF,增加特征重用的效率。
改进点:
YOLOv7的Backbone侧在YOLOv5的基础上,设计了E-ELAN和MPConv结构。
改进点:
自从Transformer出来以后,Transformer便开始在NLP领域一统江湖。而Transformer在CV领域反响平平,一度认为不适合CV领域,直到早些时间计算机视觉领域出来几篇Transformer文章,性能直逼基于CNN的SOTA,给予了计算机视觉领域新的想象空间。
在基于Transformer的计算机视觉相关研究中,ViT用于图像分类,DETR和Deformable DETR等用于目标检测。从这几篇可以看出,Transformer在计算机视觉领域的范式已经初具雏形,可以大致概括为:Embedding -> Transformer -> Head
论文地址:https://arxiv.org/abs/2010.11929
Vision Transformer(ViT)将输入图片拆分成16x16个patches,每个patch做一次线性变换降维同时嵌入位置信息,然后送入Transformer,避免了像素级attention的运算。类似BERT[class]标记位的设置,ViT在Transformer输入序列前增加了一个额外可学习的[class]标记位,并且该位置的Transformer Encoder输出作为图像特征。
ViT舍弃了CNN的归纳偏好问题,更加有利于在超大规模数据上学习知识,即大规模训练优归纳偏好,在众多图像分类任务上直逼SOTA。
论文地址:https://arxiv.org/abs/2005.12872
DETR 即 DEtection TRansformer, 是 Facebook AI 研究院提出的 CV 模型,主要用于目标检测,也可以用于分割任务。该模型使用 Transformer 替代了复杂的目标检测传统套路,比如 two-stage 或 one-stage、anchor-based 或 anchor-free、nms 后处理等;也没有使用一些骚里骚气的技巧,比如在使用多尺度特征融合、使用一些特殊类型的卷积(如分组卷积、可变性卷积、动态生成卷积等)来抽取特征、对特征图作不同类型的映射以将分类与回归任务解耦、甚至是数据增强,整个过程就是使用 CNN 提取特征后编码解码得到预测输出。
可以说,整体工作很 solid,虽然效果未至于 SOTA,但将炼丹者们通常认为是属于 NLP 领域的 Transformer 拿来跨界到 CV 领域使用,并且能 work,这是具有重大意义的,其中的思想也值得我们学习。这种突破传统与开创时代的工作往往是深得人心的,比如 Faster R-CNN 和 YOLO,你可以看到之后的许多工作都是在它们的基础上做改进的。
概括地说,DETR 将目标检测任务看作集合预测问题, 对于一张图片,固定预测一定数量的物体(原作是 100 个,在代码中可更改),**模型根据这些物体对象与图片中全局上下文的关系直接并行输出预测集,**也就是 Transformer 一次性解码出图片中所有物体的预测结果,这种并行特性使得 DETR 非常高效。
网络架构:
DETR存在的缺点:
基于此,提出了Deformable DETR模型,deformable detr结合了deformable conv的空间稀疏采样优势和transformer的元素间关系建模能力。detr的计算复杂性来自于其中的transformer结构在全局上下文中的注意力计算,而且作者注意到,尽管这种注意力是在全局上下文中计算的,但最终某一个视觉元素只会与很小一部分其他视觉元素通过权重建立起强的联系。
因此deformable detr不再采用全局的注意力计算,只计算reference point周围一小部分点的注意力,而不是计算全局的,这样可以减少计算量,加快收敛速度。
Deformable DETR提出的Deformable Attention可以可以缓解DETR的收敛速度慢和复杂度高的问题。同时结合了deformable convolution的稀疏空间采样能力和transformer的关系建模能力。Deformable Attention可以考虑小的采样位置集作为一个pre-filter突出所有feature map的关键特征,并且可以自然地扩展到融合多尺度特征,并且Multi-scale Deformable Attention本身就可以在多尺度特征图之间进行交换信息,不需要FPN操作。
网络架构:
- 目标检测综述(RCNN系列/YOLO系列(v1-v5)
- YOLOX优点介绍与解析
- YOLOV6主要创新点
- YOLOv7主要改进点详解
- 目标检测中的anchor-base与anchor-free
- 什么是anchor-based 和anchor free?
- SSD算法解析
- 基于Transformer的ViT、DETR、Deformable DETR原理详解
- 源码解析目标检测的跨界之星 DETR
- transformer系列——detr详解
- DETR详解
- DETR系列
- Deformable DETR讲解