目标检测-YOLOv3

传统的目标检测算法适用的场景有限,而且维护成本很大。深度学习方法应用于目标检测,不仅算法适应性好,还可以进行迁移学习,降低成本。

1. 基础概念

深度学习目标检测算法中,基于锚框(Anchor)的方法主要分为一阶段方法和两阶段方法。

两阶段方法先对感兴趣的区域进行选择,然后进一步对候选框内做分类和回归,最终输出选择的框以及对应的分类。两阶段的模型有R-CNN系列,比如R-CNN,Fast-RCNN,Faster-RCNN等。两阶段模型的优点是精度高,但是速度及较慢。

一阶段方法直接对anchor进行回归和分类,得到最终目标框和类别,算法有YOLOv2,v3,SSD,RetinaNet等。一阶段模型的推理速度较快,但是相对的精度会下降一些。

此外还有一些anchor-free的方法,包括基于关键点的检测算法以及基于中心检测算法等。

下面是一些基础概念和缩写:
BBox:Bounding Box 边界框
Anchor:锚框
RoI: Region of Interest 特定的感兴趣区域
Region Proposal: 候选区域
RPN: Region proposal network 提取候选区域的网络
IoU: Intersaction over Union (Area of Overlap/ Area of Union) 交并比,预测框的质量
mAP:mean average precision
NMS:non-maximum suppression 非极大值抑制

2. YOLO

YOLO系列的模型在保有一定精度的基础上拥有很快的推理速度,在下面图中YOLOv3的推理速度远超其他模型,因此在实时监测领域中有很好的应用。


推理速度比较

2.1 YOLOv1

YOLO的名字来源于you only look once,从名字上就道出了YOLO的精髓。

YOLOv1将图像划分为S*S个网络,物体真实框的中心落在哪个网格上,哪个网格对应的锚框就负责检测物体。
每个网格会预测一个边界框以及对应的置信度,这里的置信度反映的是模型认为这个框里包含着物体的把握以及它预测到这个物体的精确程度。所以置信度就等于Pr(Object)*IOU^{true}_{pred}。如果物体不存在,那么置信度应该等于零。
每个边界框会预测5个值(x,y,w,h,confidence)。(x,y)坐标表示框相对于网格单元边界的中心。 w,y是相对于整个图像预测宽度和高度。 最后,置信度预测表示预测框与任何真实框之间的IOU。

YOLOv1 Model

模型的检测网络如下图,包括24个卷积层和2个全连接层,最终输出的应该是一个S\times S \times (B*5+C),在图里是7 \times 7 \times (2*5+20)
在全连接层输出预测中,边界框的宽度和高度进行了归一化,落在0和1之间。边界框的x和y坐标参数化为特定网格单元位置的偏移量,因此它们也被限制在0和1之间 。
最终层使用线性激活函数,所有其他层均使用了leaky ReLU。
YOLOv1对于输出的平方和误差进行了优化,原因是平方和比较好优化。
YOLOv1模型结构

在训练过程中,网格上的每个格子只会输出一个预测框,在这里选取与真实框IoU最大的那个框,一个预测框只会预测一个类别。
因此这也限制了YOLO能预测的物体的数量。对于尺寸小数量多的物体,预测效果也不是很好。

2.2 YOLOv2,v3

YOLOv2在v1的基础上进行了优化,骨干网络使用了DarkNet19,并且将输入图片给尺寸从224增大到448,并且将网络结构设为全卷积网络结构加上Batch Norm,使用了Kmeans聚类方法来计算anchor,引入了多尺度训练,使网络在训练过程中学习不同尺度的图像。不过待改进的地方有在小目标上召回率不高,靠近的群体目标检测效果不好,检测精度还有优化空间。

YOLOv3使用了更加深的骨干网络DarkNet53,同时加入了多尺度预测,在COCO数据集上聚类; 9中不同尺度的anchor,在分类上使用sigmoid激活函数,支持了目标的多分类。YOLOv3的优点是推理速度快,性价比高,通用性强;缺点是召回率较低,定位精度较差,对于靠近或者遮挡的群体、小物体的检测能力相对较弱。

YOLOv3在v1的基础上做了很多改动。

边界框预测
YOLOv3使用聚类预测到的边界框作为锚框。网络为边界框预测4个坐标值(t_x,y_y,t_w,t_h),如果单元格从图像的左上角偏移了(c_x, c_y),并且先验边界框的宽度和高度为p_w,p_h,则预测如下图:

有维度先验和位置预测的边界框

将上图公式里的反一下,就能通过真实框的坐标得到监督信息t_x^*,t_y^*,t_w^*,t_h^*

YOLOv3给每个边界框用逻辑回归预测一个objectness score,如果某个边界框和真实框重合度比其他都高,那么它的objectness score应该是1。而其他框虽然也与真实框有重叠,会被忽略掉。

类别预测
使用的是sigmoid函数,没有用softmax因为没必要。

不同尺度的预测
YOLOv3使用k-means聚类来确定bounding box priors,选择了9个clusters和3个scales,然后在整个scales上均匀分割clusters。在COCO数据集上,9个cluster分别为(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90) ,(156×198),(373×326)。

特征提取
YOLOv3使用了Darknet-53,特点是加入了残差,比之前的网络更深了(有53层卷积层所以叫Darknet-53)。

Darknet-53

借一张图看一下YOLOv3的整个流程:

yolov3结构[4]

输入图像(N,416,416,3),通过DarkNet53进行特征提取,网络会经过5个阶段,每个阶段经行一个倍数为2的下采样,也就是说5次的下采样是2^5=32倍的下采样。这个32倍的下采样(N,13,13,85)通过特征提取后得到一个输出网格,同时也会经过一个上采样之后,与16倍的下采样之后的特征图(N,26,26,85)进行堆叠,然后进一步进行特征提取得到第二个网格。32倍与16倍下采样堆叠得到的特征图,再一次通过上采样,与8倍下采样的结果(N,52,52,85)进行堆叠,得到了第三个网格。

每个输出分支上对应着三个尺寸的先验框(总共33=9种尺度)。经过32倍下采样的网格,每一个网格对应着输入图像上3232的区域,适合检测尺寸较大的目标,而8倍下采样的网格适合检测尺寸小的目标。

输出特征的高度H和宽度W,相当于将图像划分为H*W个网格,而不是直接在图像上画网格。也就是说32倍下采样之后得到的(N,13,13,85),相当于在输入图像上划一个32 \times 32的网格,每一个网格对应着输出特征图上的一个点。

特征图的C通道上表示预测框的信息,包括坐标信息t_x,t_y,t_w,t_h,目标置信度,分类。
C=B*(1+4+class_num),B为特征图上分配的锚框个数。

损失函数有三个,分类损失,定位损失和objectness损失。分类使用sigmoid激活函数,loss是sigmoid cross entropy。定位损失在x,y上使用sigmoid函数和sigmoid cross entropy损失,在w,h上使用L1损失。objectness损失用的是sigmoid激活函数和sigmoid cross entropy损失。

对于与真实框重叠的框,三种损失都要计算 (t_x,t_y,t_w,t_h)->(t_x^*,t_y^*,t_w^*,t_h^*), objectness->1, predition->true label)
对于没有真实框重叠的框,只计算objectness(0);对于与真实框重叠但不是最匹配的框,忽略它们。

参考资料:
[1]YOLOv1 paper:You Only Look Once: Unified, Real-Time Object Detection
[2]Yolo三部曲解读——Yolov1
[3]YOLOv3论文解析: An Incremental Improvement
[4]yolo v3 的keras 版本(转载)
[5]YOLOv3 paper:YOLOv3: An Incremental Improvement

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355