检测9000类物体的YOLO9000-程序员宅基地

技术标签: YOLOv2  YOLO9000  物体检测  Deep Learning  

YOLO9000

原文为Joseph Redmon与Ali Farhadi的文章“YOLO9000: Better, Faster, Stronger”。本想总结一下,看完发现整篇文章多余的话有点少。YOLO的实时性众所周知,所以还等什么,皮皮虾我们走~

摘要

多尺度训练YOLOv2;权衡速度和准确率,运行在不同大小图像上。YOLOv2测试VOC 2007 数据集: 67 FPS时, 76.8 mAP; 40 FPS时, 78.6 mAP。

联合训练物体检测和分类,可检测未标签检测数据的物体的类别。ImageNet检测验证集上,YOLO9000仅用 200 类中的 44 类检测数据获得 19.7 mAP;对COCO中缺少的 156 类检测数据获得 16.0 mAP。

这里写图片描述

1. 简介

神经网络引入后,检测框架变得更快更准确。然而,大多数检测方法受限于少量物体。相比分类和加标签等其它任务的数据集,目前物体检测的数据集有限。
将检测扩展到分类层面。然而,标注检测图像相比其它任务更加昂贵。因此,提出新方法扩展目前检测系统的范围。对物体分类的分层视图可合并不同的数据集。
检测和训练数据上联合训练物体检测器,用有标签的检测图像来学习精确定位,同时用分类图像来增加词汇和鲁棒性。

原YOLO系统上生成YOLOv2检测器;在ImageNet中超过 9000 类的数据和COCO的检测数据上,合并数据集和联合训练YOLO9000。

2. 更好

相比Fast R-CNN对YOLO误差分析,显示YOLO有显著的定位误差。YOLO与其它基于区域建议的方法召回率相对较低。因此,保持分类准确率的同时,着重改善召回率和定位。

计算机视觉一般倾向更大更深的模型。训练更大网络或集成多个模型通常会有更好的效果。然而,我们希望YOLOv2检测器保留速度的同时更加精确,因此,简化网络来易于学习表示。结果见表 2

这里写图片描述

2.1 块归一化(Batch Normalization)

无需其它形式的正则,块归一化收敛时显著变好。块归一化有助于模型正则,可从未过拟合的模型中删除dropout。YOLO上所有卷积层上添加块归一化,mAP提高 2 %。

2.2 分类器输入更高分辨率

所有领先的检测方法都使用ImageNet上预训练好的分类器。从AlexNet起,大多分类器的输入图像分辨率都小于 256×256
- 原YOLO: 224×224 大小的图像上训练分类器,检测时分辨率提高至448。网络须同时切换至学习物体检测,并调整至新的输入分辨率。
- YOLOv2:ImageNet上按 448×448 分辨率,微调分类网络 10 个周期(epochs);检测数据上微调网络。高分辨率的分类网络使mAP提高 4 %。

2.3 用锚箱(Anchor Boxes)的卷积

YOLO用卷积特征提取器顶部的全连接层来直接预测边界框的坐标。
Faster R-CNN用精心挑选的先验来预测边界框。Faster R-CNN中的区域建议网络(RPN)仅用卷积层直接预测锚箱的偏移和置信度。因预测层为卷积层,RPN预测特征图中每个位置上锚箱的偏移。
预测偏移而非坐标,简化了问题,且使网络更易学。

删除YOLO的全连接层,用锚箱预测边界框:删除一池化层使网络卷积层的输出有更高的分辨率。将网络输入图像的分辨率从 448×448 缩小至 416×416 ,此时特征图有奇数个位置,出现了一中心单元。
输入图像分辨率为 416×416 ,YOLO卷积层按 32 倍数下采样图像,输出特征图大小为 13×13

锚箱的使用从空间位置中解耦出类别预测,并预测每个锚箱的类别和物体(objectness):
- 物体预测:同YOLO,仍为预测建议框与真实框的IOU;
- 类别预测:给定已存在物体,预测该类的条件概率。

使用锚箱,准确度略降。YOLO对每幅图仅预测98个建议框,而用锚箱模型可预测上千个建议框。无锚箱时的中间模型得 69.5 mAP和 81 %召回率;有锚箱时的模型得 69.2 mAP和 88 %召回率。mAP略减,但召回率的提高说明模型仍可能改进。

2.4 维度聚类

YOLO中用锚箱会碰到两个问题。第1个问题:锚箱的维度为手动挑选,网络可学习合适地调整锚箱,但为网络挑选更好的先验能更容易学到更好的检测器。

训练集边界框上用K-means聚类来自动找好的先验:用标准K-means(欧几里德距离)时,更大的边界框会产生更大的误差。而获得好的IOU分数的先验应与建议框的大小无关。因此,使用如下距离测量:

d(box,centroid)=1IOU(box,centroid)

选多个k值,画出最近中心的平均IOU,如下图。权衡模型复杂度和高召回率,选择 k=5 。聚类的中心与手动挑选的锚箱明显不同, 窄长的边界框更多。

这里写图片描述

比较表1中聚类策略的最近先验与手动挑选的锚箱的平均IOU。 5 个先验中心( 61 %)与 9 个锚箱( 60.9 %)的效果接近。 9 个先验中心的平均IOU高得多( 67.2 %)。
K-means生成的边界框有更好的表示,任务更易学。

这里写图片描述

2.5 直接预测位置

YOLO中用锚箱时遇到的第2个问题:模型不稳定,尤其是早期迭代时。大多不稳定来自预测锚箱的位置 (x,y) 。区域建议网络预测值 tx ty ,中心坐标 (x,y) 计算如下:

x=(txwa)+xay=(tyha)+ya

如, tx=1 时, x=wa+xa ,预测的位置右移一个锚箱宽度; tx=1 时, x=xawa ,预测的位置左移相同的宽度。
该公式无约束,使锚箱可到达图像中任意位置。随机初始化的模型要花很长时间稳定,才可预测出合理的偏移。
除了预测偏移,同YOLO一样,预测相对网格单元的位置坐标。真实边界框的位置范围落入 [0,1] 之间。Logistic激活约束网络预测落入该范围。

对输出特征图中的每个单元,网络预测 5 个边界框。网络预测每个边界框的 5 个坐标 tx,ty,tw,th to 。若单元从图像的左上角偏移 (cx,cy) ,且边界框有先验 pw,ph ,则预测为:

bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr(object)IOU(b,object)=σ(to)

这里写图片描述

约束位置预测更易学参数化,使网络更稳定。带直接预测边界框的中心位置聚类相比带锚箱的中心位置聚类提高近 5 %。

2.6 细粒度特征

更改后的YOLO在 13×13 的特征图上检测。大物体上检测充分,但小物体可能需要更为细粒度的特征。Faster R-CNN和SSD在不同大小的特征图上运行RPN,从而获得不同的分辨率。这里仅用穿越层(pass-through layer)取出分辨率为 2626 的上一层。

类似残差网络的恒等映射,穿越层堆叠相邻特征至不同的通道(而非空间位置)来关联高分辨率特征和低分辨率特征。此时关联原有的特征, 26×26×512 个特征图变为 13×13×2048 个特征图。扩展的特征图上运行的检测器有更精细的特征,性能提高 1 %。

2.7 多尺度训练

原YOLO的输入分辨率为 448×448 。引入锚箱后,分辨率改为 416×416 。希望YOLOv2鲁棒运行在不同大小的图像上。

每隔几次迭代改变网络结构:每 10 个图像块,网络会选择新的图像大小。因网络下采样因子为 32 { 320,352,...608} 。因此,可选的最小分辨率为 320×320 ,且最大分辨率为 608×608 。缩放网络至相应维度,继续训练。

缩放网络至不同的维度:对图像输入分辨率最大时的网络,每个卷积层输出的特征图维度固定。所以,对不同分辨率的图像,应是优先保留顶层的权重,底层的卷积层用相同分辨率的输入图像替换来完成训练,同时屏蔽高于输入图像分辨率的卷积层。

输入 288×288 大小的图像时,YOLOv2的mAP接近Fast R-CNN的mAP时,运行速度超过 90 FPS;输入高分辨率的图像时,YOLOv2实时运行,且在VOC 2007上的mAP为 78.6 。YOLOv2与VOC 2007上其他框架的比较见表 3 和图 4

这里写图片描述

这里写图片描述

2.8 更多实验

VOC 2007+2012上,YOLOv2运行快过其它方法,mAP为 73.4 ,见表 4 ;COCO上,YOLOv2的mAP为 44.0 ,与SSD和Faster R-CNN差不多,见表 5

这里写图片描述

这里写图片描述

3. 更快

大多检测框架基于VGG-16来提取特征。VGG-16网络分类强大准确,但却不必要的复杂。VGG-16的卷积层在单幅 224×224 大小图像上 1 次传递的浮点操作 306.9 亿次。
YOLO框架基于Googlenet结构,快过VGG-16, 1 次传递仅用 85.2 亿次操作。但准确率略低于VGG-16。对 224×224 大小图像上的top- 5 准确率,用Googlenet结构的YOLO为 88 %,VGG-16为 90.0 %。

3.1 Darknet-19

类似VGG模型,大多用 3×3 的滤波器且每次池化通道数加一倍。按Network in Network用全局平均池化预测和 1×1 大小的滤波器来压缩 3×3 大小卷积间的特征表示。块归一化来稳定训练,加快收敛和正则化模型。

最终的模型 Darknet-19有 19 个卷积层和 5 个池化层,见表 6 。Imagenet上,Darknet-19处理单幅图像仅 55.8 亿次操作,但top-1和top-5准确率分别为 72.9 %和 91.2 %。

这里写图片描述

3.2 分类训练

标准Imagenet 分类数据集(1000类)上训练网络 160 个周期(epoch)。训练Darknet网络框架:学习率为 0.1 ,多项式速率衰减(?)的幂为 4 ,权重衰减为 0.0005 ,动量为 0.9 。训练时用标准的数据增广方法,包括随机裁剪,旋转,色调,饱和度和曝光偏移。
224×224 大小图像上开始训练, 448×448 大小图像上微调。微调时用初始的参数。仅 10 步训练后,学习率用 103 微调。更高分辨率上网络的top-1和top-5准确率为 76.5 %和 93.3 %。

3.3 检测训练

删除最后一卷积层,不用 3 3×3 的卷积层(每层有 1024 个滤波器),替换为 3 1×1 的卷积层(每层的滤波器数目等于检测所需的输出数目)。VOC上,预测 5 个框(每个框 5 个坐标,共 20 类, (5+20)×5 ),所以输出数目为 125 。添加 3×3×512 层至后面的第 2 层和最后一卷积层,模型可用到细粒度的特征。
训练网络时的初始学习率为 103 6090 个周期上除以 10 ;权重衰减为 0.0005 ,动量为 0.9 。类似的数据增广,COCO和VOC上用相同的训练策略。

4. 更强

联合训练检测和分类。检测时用有标签图像来预测边界框坐标,物体(objectness)和分类日常物体。用有类标签的图像来扩展可检测的类数目。

训练检测时,基于整个YOLOv2损失函数来反向传播;训练分类时,仅用网络结构中的分类部分来反传损失。
联合训练的挑战:检测数据集只有日常物体和一般的标签,如“狗”或“船”;分类数据集标签的范围更广更深。 Imagenet有上千种狗,如“诺福克梗犬”,“约克郡犬”和“贝得灵顿厚毛犬”等。所以,训练两个数据集时,须合并标签

大多方法对所有可能的类别用 1 个softmax层来计算最后的概率分布。用softmax时假设类间互斥。合并数据集出现的问题:“诺福克梗犬”和“狗”类不互斥

4.1 分层分类

Imagenet的标签取自WordNet(排列概念及其关联的语言数据库)。WordNet中,“诺福克梗犬”和“约克郡犬”为“小猎狗”的难判名,“小猎狗”为“狗”的一类,是“犬科动物”。大多方法却用扁平的标签结构

WordNet的结构为有向图,而非树。如,“狗”是“犬科动物”类和“家畜”类,两者为WordNet中的同义词集。为简化问题,不用完整的图结构,仅用Imagenet中的概念来搭建分层树

为搭建分层树,检查Imagenet中的视觉名词,从WordNet图至根节点(“物体”)寻找这些名词的路径。图中很多同义词集仅有 1 条路径,所以,先将这些名词加入树。接着迭代检查剩下的概念,一点点在树里添加路径。若 1 个概念到根节点有 2 条路,其中 1 路有 3 条边,另外 1 路有 1 条边,选择更短的路径。

最终得到WordTree,视觉名词的分层模型。用WordTree分类时,给定同义词集,预测每个节点的条件概率来获得该词集中每个难判名的概率。如,“小猎狗(terrier)”节点上预测:

Pr(Norfolk terrier|terrier)Pr(Yorkshire terrier|terrier)Pr(Bedlington terrier|terrier)...

沿特定节点至树的根节点,乘以路径上的条件概率,即可计算该特定节点上的绝对概率。如,计算图中为“约克郡犬”的绝对概率:

Pr(Norfolk terrier)=Pr(Norfolk terrier|terrier)Pr(terrier|hunting dog)...Pr(mammal|animal)Pr(animal|physical object)

分类时,假设图中包含物体: Pr(physical object)=1

1000 类Imagenet上搭WordTree,训练Darknet-19模型。搭建WordTree1k时,添加所有中间节点,标签空间从 1000 扩展至 1369 。训练时传递标签,真实标签传递至树的上层节点。若图像标签为“诺福克梗犬”,该图像也应标为“狗”和“哺乳动物”等。为计算条件概率,模型预测 1369 值的 1 个向量,计算所有相同概念下难判名的同义词集的softmax,见图 5

这里写图片描述

WordTree向量中,除根节点为“physical object”,从左向右名词描述得越来越具体,从而使难判名的同义词集会集中在向量的某段,便于每个softmax的连接。

用与之前相同的训练参数,分层Draknet-19的top-1和top-5准确率分别为 71.9 %和 90.4 %。尽管添加了额外的 369 个概念,并用网络预测树结构,但准确率仅略降。如此分类使新的或未知类上的表现平稳降低。如,网络看到狗,但不确定为哪种狗,此时网络仍会以高置信度来预测狗,但各难判名间的置信度会更低。

该表述同样使用于检测。分类时,假设每幅图会包含 1 个物体;但检测时,YOLOv2物体检测器要给出 Pr(physical object) 的值。检测器预测 1 个物体边界框及其概率树。沿WordTree树结构往右,找每个softmax分支的最高置信度路径直至达到某阈值,此时,路径上离根节点最远的节点名词即为预测类。

4.2 与词数(WordTree)结合的数据集

用WordTree合并Imagenet与COCO的标签,见图 6

这里写图片描述

4.3 联合分类与检测

用合并的数据集来联合训练分类和检测模型。为训练极大规模的检测器,合并COCO检测数据集和整个Imagenet的前 9000 类标签,创建出新的数据集。合并后数据集的WordTree有 9418 类。Imagenet为更大的数据集,所以,过采样COCO来平衡合并的数据集,此时,Imagenet大小为过采样COCO的 4 倍。

合并数据集训练YOLO9000。用基YOLOv2结构,但改为 3 个(而非 5 )先验(见“维度聚类”)来限制输出大小。检测时,网络反传检测损失;分类时,网络反传标签所在节点以上节点的损失。如,标签为“狗”时,深入树更下层(“德国牧羊犬”还是“金毛犬”)会对预测引入误差,因为标签未给出狗种类信息。

分类时,网络仅反传分类损失。假设预测框与真实标签框的IOU大于 0.3 时,反传物体(objectness)损失。

Imagenet检测任务与COCO共享 44 个物体类,所以YOLO9000只能看到大多测试图像的分类数据,而非检测数据。YOLO9000的总体mAP为 19.7 ,未知的 156 物体类上的mAP为 16.0 。该mAP高于DPM,且仅用部分监督(partial supervision)在不同数据集上训练YOLO9000。同时实时检测9000类物体

分析Imagenet上YOLO9000的表现,发现它很好地学到新动物物种(与COCO中动物类有很好的泛化),但衣物和设备等类学习困难(COCO无对人的衣物类标签,难学到“太阳镜”或“泳裤”),见表 7 <script type="math/tex" id="MathJax-Element-154">7</script>。

这里写图片描述

YOLO9000的表现换一解释。前面提到,检测器用来检测物体(objectness),分类器用于分类对象(object)类别。训练检测器时,网络会将COCO中所包含的对象类视为物体,但COCO的对象标签不包括衣物和设备,所以,YOLO9000自然不会轻易把衣物或设备等对象视为物体。

作者实验的目的是:验证合并了COCO检测数据集和Imagenet分类数据集后,模型在Imagenet检测数据集上的效果。省去标定巨大的检测数据集的高昂成本,利用有限的检测数据集和巨大的分类数据集来完成巨大的检测数据集上的检测任务。

5. 小结

“更好”和“更快”部分可能并不会有多大影响,毕竟那些小技巧改善的效果有限。但“更强”部分现实意义很强啊,真是有意思~

全文未经校正,有问题欢迎指出。 这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shadow_guo/article/details/54598458

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签