首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >检测9000类物体的YOLO9000 更好 更快 更强

检测9000类物体的YOLO9000 更好 更快 更强

作者头像
CreateAMind
发布于 2018-07-24 10:00:52
发布于 2018-07-24 10:00:52
1.9K0
举报
文章被收录于专栏:CreateAMindCreateAMind

YOLO9000

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

摘要

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

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

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.5mAP和81%召回率;有锚箱时的模型得69.2mAP和88%召回率。mAP略减,但召回率的提高说明模型仍可能改进。

2.4 维度聚类

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

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

d(box,centroid)=1−IOU(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)计算如下:

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

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

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

2.6 细粒度特征

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

类似残差网络的恒等映射,穿越层堆叠相邻特征至不同的通道(而非空间位置)来关联高分辨率特征和低分辨率特征。此时关联原有的特征,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时,运行速度超过90FPS;输入高分辨率的图像时,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步训练后,学习率用10−3微调。更高分辨率上网络的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层和最后一卷积层,模型可用到细粒度的特征。 训练网络时的初始学习率为10−3,60−90个周期上除以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(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。

YOLO9000的表现换一解释。前面提到,检测器用来检测物体(objectness),分类器用于分类对象(object)类别。训练检测器时,网络会将COCO中所包含的对象类视为物体,但COCO的对象标签不包括衣物和设备,所以,YOLO9000自然不会轻易把衣物或设备等对象视为物体。 作者实验的目的是:验证合并了COCO检测数据集和Imagenet分类数据集后,模型在Imagenet检测数据集上的效果。省去标定巨大的检测数据集的高昂成本,利用有限的检测数据集和巨大的分类数据集来完成巨大的检测数据集上的检测任务。

5. 小结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
海康 面试:说说MyBatis 插件机制
上周末,一位朋友去海康面试,面试中被问到MyBatis插件的问题,如果你还没掌握,那请你认真看完本文。
田维常
2022/11/25
4120
海康 面试:说说MyBatis 插件机制
彻底搞懂MyBatis插件原理及PageHelper原理
提到插件,相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样。
公众号 IT老哥
2020/12/29
1.4K0
彻底搞懂MyBatis插件原理及PageHelper原理
MyBatis插件深度解析:功能、原理、使用、应用场景与最佳实践
MyBatis作为一款流行的Java ORM(对象关系映射)框架,以其简洁、灵活和高效的特点受到了广大开发者的喜爱。而MyBatis插件机制更是为这一框架注入了强大的扩展能力,允许开发者在不修改框架源代码的情况下对MyBatis的功能进行定制和增强。本文将深入探索MyBatis插件的方方面面,包括其功能、原理、详细使用方法以及最佳实践,旨在帮助对MyBatis插件感兴趣的开发者更好地掌握这一强大工具。
公众号:码到三十五
2024/03/19
2K0
Java小白学习MyBatis:Mybatis插件运行原理是什么?
MyBatis 插件可以用来扩展/定制 MyBatis 核心的功能,可以对一些核心接口方法进行拦截和增强。插件需要实现 Interceptor 接口,并且在 MyBatis 配置文件中注册。一个插件可以通过动态代理或者反射的方式来改变 MyBatis 的行为,使得插件使用者可以在不修改 Mybatis 源代码的情况下,自定义一些特殊的逻辑处理(比如拦截 SQL 语句并输出到日志文件里面)。
用户1289394
2023/08/22
2000
Java小白学习MyBatis:Mybatis插件运行原理是什么?
Mybatis源码学习第七天(插件开发原理)
插件是用来改变或者扩展mybatis的原有功能,mybatis的插件就是通过继承Interceptor拦截器实现的,在没有完全理解插件之前j禁止使用插件对mybatis进行扩展,有可能会导致严重的问题;
彼岸舞
2020/09/30
4390
Mybatis源码学习(四)拦截器与插件原理
回顾前几文加载mybatis时,会通过sqlSessionFactoryBuilder的build方法对xml文件进行解析,解析成document树后,再依次对树中的XNode结点进行解析,如xml配置中的plugins、environments、mappers、typeHandlers等基础配置信息,初始化后赋值给configuration,解析结束。
虞大大
2020/09/01
7900
面试官:说一下Mybatis插件的实现原理?
动态代理可以对SQL语句执行过程中的某一点进行拦截,当配置多个插件时,责任链模式可以进行多次拦截,责任链模式的UML图如下
Java识堂
2020/02/26
5700
其实MyBatis的插件机制可以帮我们解决工作的很多问题,建议收藏!
  在实际的工作对于MyBatis的使用我们更多的还是停留在应用层,如果你对于MyBatis的底层,尤其是插件这块掌握的比较好的,可以帮助我们解决很多工作中比较棘手的问题,本篇文章就给大伙详细的来介绍下MyBatis的插件机制。对于MyBatis的底层原理还有不清楚的可以看看我的MyBatis底层专题哦。
用户4919348
2021/06/01
1.3K0
其实MyBatis的插件机制可以帮我们解决工作的很多问题,建议收藏!
美团面试官:你说你们公司的Mybatis分页插件是你写的,给我说说它的设计原理?
大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。
乔戈里
2020/02/12
4190
掌握MyBatis插件原理轻松写出自己的PageHelper分页插件
提到插件,相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样。
程序员追风
2020/12/24
8960
MyBatis拦截器(Interceptor)的理解与实践
在MyBatis中,拦截器(Interceptor)是一种强大的机制,它允许开发者在执行SQL语句或处理结果集的过程中介入,并且可以进行自定义的处理逻辑。本文将深入探讨MyBatis拦截器的基本概念、工作原理,以及如何在实际项目中应用拦截器来解决常见问题和优化性能。
IT_陈寒
2025/06/01
5360
MyBatis拦截器(Interceptor)的理解与实践
Mybatis扩展点:自定义拦截器Interceptor原理及应用
主要功能是:生成代理类,invoke方法会匹配拦截器配置信息,调用我们自定义的拦截器中的intercept()方法。
崔认知
2023/06/19
7950
Mybatis扩展点:自定义拦截器Interceptor原理及应用
Mybatis源码解析(九):插件机制
Java微观世界
2025/01/21
1040
Mybatis源码解析(九):插件机制
MyBatis快速入门——第六章、MyBatis拦截器接口
创建【MybatisInterceptor】类,并继承【Interceptor】接口
红目香薰
2022/11/30
2640
MyBatis快速入门——第六章、MyBatis拦截器接口
MyBatis源码阅读(九) --- 插件原理
插件功能也是Mybatis框架中的一个核心功能,Mybatis提供了自定义插件功能来帮我们扩展个性化业务需求。本篇文章我们将总结Mybatis的插件机制以及如何自定义一个插件。
终有救赎
2024/01/30
1910
MyBatis源码阅读(九) --- 插件原理
mybatis 开发自定义插件,你学废了吗
MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。比如执行前、执行后或者对SQL结果集处理、sql入参处理等,这样就可以在不修改mybatis源码的情况下对sql执行的过程或结果进行修改,实现了解耦。
索码理
2022/09/20
5930
mybatis 开发自定义插件,你学废了吗
建议收藏,mybatis插件原理详解
上次发文说到了如何集成分页插件MyBatis插件原理分析,看完感觉自己better了,今天我们接着来聊mybatis插件的原理。
田维常
2020/12/30
7430
【mybatis系列】自定义实现拦截器插件Interceptor
Intercepts注解需要一个Signature(拦截点)参数数组。通过Signature来指定拦截哪个对象里面的哪个方法。@Intercepts注解定义如下:
沁溪源
2020/10/29
4.3K0
【mybatis系列】自定义实现拦截器插件Interceptor
mybatis拦截器不能拦截哪个类_信号发生器的使用方法总结
MyBatis拦截器可以做的工作:SQL修改,分页操作,数据过滤,SQL执行时间性能监控等。
全栈程序员站长
2022/09/30
1.4K0
mybatis拦截器不能拦截哪个类_信号发生器的使用方法总结
mybatis插件拦截原理学习
mybatis中,我们知道如果需要对分页或者排序进行增强时,可以采用拦截来实现增强,那它的增强原理又是怎样的呢?
路行的亚洲
2021/03/04
3710
推荐阅读
相关推荐
海康 面试:说说MyBatis 插件机制
更多 >
LV.8
公众号:赵KK日常技术记录AIGC生成式
目录
  • YOLO9000
    • 摘要
    • 1. 简介
    • 2. 更好
      • 2.1 块归一化(Batch Normalization)
      • 2.2 分类器输入更高分辨率
      • 2.3 用锚箱(Anchor Boxes)的卷积
      • 2.4 维度聚类
      • 2.5 直接预测位置
      • 2.6 细粒度特征
      • 2.7 多尺度训练
      • 2.8 更多实验
    • 3. 更快
      • 3.1 Darknet-19
      • 3.2 分类训练
      • 3.3 检测训练
    • 4. 更强
      • 4.1 分层分类
      • 4.2 与词数(WordTree)结合的数据集
      • 4.3 联合分类与检测
    • 5. 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档