【文末赠书】 | 一文看尽目标检测经典模型!

来源:https://zhuanlan.zhihu.com/p/34142321

【写在前面】

如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。深度学习模型由于其强大的表示能力,加之数据量的积累和计算力的进步,成为机器视觉的热点研究方向。

那么,如何理解一张图片?根据后续任务的需要,有三个主要的层次。

图像理解的三个层次

一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中,ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等都可以归为分类任务。

二是检测(Detection)。分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。

三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。

本系列文章关注的领域是目标检测,即图像理解的中层次。

(一)目标检测经典工作回顾

本文结构

两阶段(2-stage)检测模型

两阶段模型因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法,我们选取R-CNN系列工作作为这一类型的代表。

R-CNN: R-CNN系列的开山之作

论文链接: Rich feature hierarchies for accurate object detection and semantic segmentation

本文的两大贡献:1)CNN可用于基于区域的定位和分割物体;2)监督训练样本数紧缺时,在额外的数据上预训练的模型经过fine-tuning可以取得很好的效果。第一个贡献影响了之后几乎所有2-stage方法,而第二个贡献中用分类任务(Imagenet)中训练好的模型作为基网络,在检测问题上fine-tuning的做法也在之后的工作中一直沿用。

传统的计算机视觉方法常用精心设计的手工特征(如SIFT, HOG)描述图像,而深度学习的方法则倡导习得特征,从图像分类任务的经验来看,CNN网络自动习得的特征取得的效果已经超出了手工设计的特征。本篇在局部区域应用卷积网络,以发挥卷积网络学习高质量特征的能力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcUmze9D-1661390896878)(https://pic2.zhimg.com/80/v2-ec320f9a52d0d5630be4a8fc9ea93c61_720w.jpg “R-CNN网络结构”)]

R-CNN将检测抽象为两个过程,一是基于图片提出若干可能包含物体的区域(即图片的局部裁剪,被称为Region Proposal),文中使用的是Selective Search算法;二是在提出的这些区域上运行当时表现最好的分类网络(AlexNet),得到每个区域内物体的类别。

另外,文章中的两个做法值得注意。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hw9Q8rL0-1661390896878)(https://pic2.zhimg.com/80/v2-316f0ffd2d0b0fed3c206bd7616e9edd_720w.jpg “IoU的计算”)]

一是数据的准备。输入CNN前,我们需要根据Ground Truth对提出的Region Proposal进行标记,这里使用的指标是IoU(Intersection over Union,交并比)。IoU计算了两个区域之交的面积跟它们之并的比,描述了两个区域的重合程度。

文章中特别提到,IoU阈值的选择对结果影响显著,这里要谈两个threshold,一个用来识别正样本(如跟ground truth的IoU大于0.5),另一个用来标记负样本(即背景类,如IoU小于0.1),而介于两者之间的则为难例(Hard Negatives),若标为正类,则包含了过多的背景信息,反之又包含了要检测物体的特征,因而这些Proposal便被忽略掉。

另一点是位置坐标的回归(Bounding-Box Regression),这一过程是Region Proposal向Ground Truth调整,实现时加入了log/exp变换来使损失保持在合理的量级上,可以看做一种标准化(Normalization)操作。

小结

R-CNN的想法直接明了,即将检测任务转化为区域上的分类任务,是深度学习方法在检测任务上的试水。模型本身存在的问题也很多,如需要训练三个不同的模型(proposal, classification, regression)、重复计算过多导致的性能问题等。尽管如此,这篇论文的很多做法仍然广泛地影响着检测任务上的深度模型革命,后续的很多工作也都是针对改进这一工作而展开,此篇可以称得上"The First Paper"。

Fast R-CNN: 共享卷积运算

论文链接:Fast R-CNN

文章指出R-CNN耗时的原因是CNN是在每一个Proposal上单独进行的,没有共享计算,便提出将基础网络在图片整体上运行完毕后,再传入R-CNN子网络,共享了大部分计算,故有Fast之名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOZ9BrrV-1661390896878)(https://pic4.zhimg.com/80/v2-597bf75a922c054ca038fe4c2fc9655f_720w.jpg “Fast R-CNN网络结构”)]

上图是Fast R-CNN的架构。图片经过feature extractor得到feature map, 同时在原图上运行Selective Search算法并将RoI(Region of Interset,实为坐标组,可与Region Proposal混用)映射到到feature map上,再对每个RoI进行RoI Pooling操作便得到等长的feature vector,将这些得到的feature vector进行正负样本的整理(保持一定的正负样本比例),分batch传入并行的R-CNN子网络,同时进行分类和回归,并将两者的损失统一起来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kPeXey2s-1661390896879)(https://pic4.zhimg.com/v2-e55e66c9c21136efa62beacfcb02f9ef_b.webp “RoI Pooling图示,来源:https://blog.deepsense.ai/region-of-interest-pooling-explained/”)]

RoI Pooling 是对输入R-CNN子网络的数据进行准备的关键操作。我们得到的区域常常有不同的大小,在映射到feature map上之后,会得到不同大小的特征张量。RoI Pooling先将RoI等分成目标个数的网格,再在每个网格上进行max pooling,就得到等长的RoI feature vector。

文章最后的讨论也有一定的借鉴意义:

  • multi-loss traing相比单独训练classification确有提升

  • multi-scale相比single-scale精度略有提升,但带来的时间开销更大。一定程度上说明CNN结构可以内在地学习尺度不变性

  • 在更多的数据(VOC)上训练后,精度是有进一步提升的

  • Softmax分类器比"one vs rest"型的SVM表现略好,引入了类间的竞争

  • 更多的Proposal并不一定带来精度的提升

小结

Fast R-CNN的这一结构正是检测任务主流2-stage方法所采用的元结构的雏形。文章将Proposal, Feature Extractor, Object Classification&Localization统一在一个整体的结构中,并通过共享卷积计算提高特征利用效率,是最有贡献的地方。

Faster R-CNN: 两阶段模型的深度化

论文链接:Faster R-CNN: Towards Real Time Object Detection with Region Proposal Networks

Faster R-CNN是2-stage方法的奠基性工作,提出的RPN网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成。粗略的讲,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷积计算的特性使得RPN引入的计算量很小,使得Faster R-CNN可以在单个GPU上以5fps的速度运行,而在精度方面达到SOTA(State of the Art,当前最佳)。

本文的主要贡献是提出Regional Proposal Networks,替代之前的SS算法。RPN网络将Proposal这一任务建模为二分类(是否为物体)的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZGUSQzn-1661390896879)(https://pic4.zhimg.com/80/v2-35ce8d4e9f9d2c8493f6ca2f894c508f_720w.jpg “Faster R-CNN网络结构”)]

第一步是在一个滑动窗口上生成不同大小和长宽比例的anchor box(如上图右边部分),取定IoU的阈值,按Ground Truth标定这些anchor box的正负。于是,传入RPN网络的样本数据被整理为anchor box(坐标)和每个anchor box是否有物体(二分类标签)。RPN网络将每个样本映射为一个概率值和四个坐标值,概率值反应这个anchor box有物体的概率,四个坐标值用于回归定义物体的位置。最后将二分类和坐标回归的损失统一起来,作为RPN网络的目标训练。

由RPN得到Region Proposal在根据概率值筛选后经过类似的标记过程,被传入R-CNN子网络,进行多分类和坐标回归,同样用多任务损失将二者的损失联合。

小结

Faster R-CNN的成功之处在于用RPN网络完成了检测任务的"深度化"。使用滑动窗口生成anchor box的思想也在后来的工作中越来越多地被采用(YOLO v2等)。这项工作奠定了"RPN+RCNN"的两阶段方法元结构,影响了大部分后续工作。

单阶段(1-stage)检测模型

单阶段模型没有中间的区域检出过程,直接从图片获得预测结果,也被成为Region-free方法。

YOLO

论文链接:You Only Look Once: Unified, Real-Time Object Detection

YOLO是单阶段方法的开山之作。它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类而得名。

YOLO的主要优点:

  • 快。

  • 全局处理使得背景错误相对少,相比基于局部(区域)的方法, 如Fast RCNN。

  • 泛化性能好,在艺术作品上做检测时,YOLO表现比Fast R-CNN好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0jx2hOn-1661390896879)(https://pic3.zhimg.com/80/v2-7eeffb8bd247c714f7b5f381b774145a_720w.jpg “YOLO网络结构”)]

YOLO的工作流程如下:

1.准备数据:将图片缩放,划分为等分的网格,每个网格按跟Ground Truth的IoU分配到所要预测的样本。

2.卷积网络:由GoogLeNet更改而来,每个网格对每个类别预测一个条件概率值,并在网格基础上生成B个box,每个box预测五个回归值,四个表征位置,第五个表征这个box含有物体(注意不是某一类物体)的概率和位置的准确程度(由IoU表示)。测试时,分数如下计算:

等式左边第一项由网格预测,后两项由每个box预测,以条件概率的方式得到每个box含有不同类别物体的分数。 因而,卷积网络共输出的预测值个数为S×S×(B×5+C),其中S为网格数,B为每个网格生成box个数,C为类别数。

3.后处理:使用NMS(Non-Maximum Suppression,非极大抑制)过滤得到最后的预测框

损失函数的设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gCl74Esn-1661390896880)(https://pic1.zhimg.com/80/v2-d3de934214afa4a5790463f7f23f2e38_720w.jpg “YOLO的损失函数分解,来源:https://zhuanlan.zhihu.com/p/24916786”)]

损失函数被分为三部分:坐标误差、物体误差、类别误差。为了平衡类别不均衡和大小物体等带来的影响,损失函数中添加了权重并将长宽取根号。

小结

YOLO提出了单阶段的新思路,相比两阶段方法,其速度优势明显,实时的特性令人印象深刻。但YOLO本身也存在一些问题,如划分网格较为粗糙,每个网格生成的box个数等限制了对小尺度物体和相近物体的检测。

SSD: Single Shot Multibox Detector

论文链接:SSD: Single Shot Multibox Detector

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4Qwknrn-1661390896880)(https://pic2.zhimg.com/80/v2-32884ad14bc74f5cc17b17ffccb0e2f5_720w.jpg “SSD网络结构”)]

SSD相比YOLO有以下突出的特点:

  • 多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。

  • 更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上),得到的输出值个数为(C+4)×k×m×n,其中C为类别数,k为box个数,m×n为feature map的大小。

小结

SSD是单阶段模型早期的集大成者,达到跟接近两阶段模型精度的同时,拥有比两阶段模型快一个数量级的速度。后续的单阶段模型工作大多基于SSD改进展开。

检测模型基本特点

最后,我们对检测模型的基本特征做一个简单的归纳。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWGiUWBl-1661390896881)(https://pic4.zhimg.com/80/v2-b9035cba50015fbde5a89c044951ebe7_720w.jpg “两阶段检测模型Pipeline,来源:https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/”)]

检测模型整体上由基础网络(Backbone Network)和检测头部(Detection Head)构成。前者作为特征提取器,给出图像不同大小、不同抽象层次的表示;后者则依据这些表示和监督信息学习类别和位置关联。检测头部负责的类别预测和位置回归两个任务常常是并行进行的,构成多任务的损失进行联合训练。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wc8J0Q5y-1661390896881)(https://pic4.zhimg.com/80/v2-6732b9bda769344e21d4e80419876faf_720w.jpg “检测模型头部并行的分支,来源同上”)]

相比单阶段,两阶段检测模型通常含有一个串行的头部结构,即完成前背景分类和回归后,把中间结果作为RCNN头部的输入再进行一次多分类和位置回归。这种设计带来了一些优点:

  • 对检测任务的解构,先进行前背景的分类,再进行物体的分类,这种解构使得监督信息在不同阶段对网络参数的学习进行指导

  • RPN网络为RCNN网络提供良好的先验,并有机会整理样本的比例,减轻RCNN网络的学习负担

这种设计的缺点也很明显:中间结果常常带来空间开销,而串行的方式也使得推断速度无法跟单阶段相比;级联的位置回归则会导致RCNN部分的重复计算(如两个RoI有重叠)。

【赠书活动】

FightingCV公众号创建一年以来,感谢各位老粉和新粉的支持。为了回馈各位粉丝的支持,今后我们会不定期的进行抽奖、赠书等活动回馈粉丝。

本次赠送4本书,赠送的书籍为《深度学习与目标检测:工具、原理与算法》,赠送对象为FightingCV公众号的阅读榜第一、二名分享榜第一、二名(阅读榜和分享榜是根据最近15天文章阅读量和分享量的排行榜),开奖日期为9月10日(将在9月10日的推送中公布名单)。想要参与赠书活动的朋友,请添加小助手微信FightngCV666(备注“城市-方向-ID”),方便联系获得邮寄地址。(包邮哦~)

本次赠书:《深度学习与目标检测:工具、原理与算法》

75折购买链接
http://product.dangdang.com/29304802.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340