技术标签: YOLOv2 YOLO9000 物体检测 Deep Learning
原文为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。
神经网络引入后,检测框架变得更快更准确。然而,大多数检测方法受限于少量物体。相比分类和加标签等其它任务的数据集,目前物体检测的数据集有限。
将检测扩展到分类层面。然而,标注检测图像相比其它任务更加昂贵。因此,提出新方法扩展目前检测系统的范围。对物体分类的分层视图可合并不同的数据集。
检测和训练数据上联合训练物体检测器,用有标签的检测图像来学习精确定位,同时用分类图像来增加词汇和鲁棒性。
原YOLO系统上生成YOLOv2检测器;在ImageNet中超过 9000 类的数据和COCO的检测数据上,合并数据集和联合训练YOLO9000。
相比Fast R-CNN对YOLO误差分析,显示YOLO有显著的定位误差。YOLO与其它基于区域建议的方法召回率相对较低。因此,保持分类准确率的同时,着重改善召回率和定位。
计算机视觉一般倾向更大更深的模型。训练更大网络或集成多个模型通常会有更好的效果。然而,我们希望YOLOv2检测器保留速度的同时更加精确,因此,简化网络来易于学习表示。结果见表 2 。
无需其它形式的正则,块归一化收敛时显著变好。块归一化有助于模型正则,可从未过拟合的模型中删除dropout。YOLO上所有卷积层上添加块归一化,mAP提高
所有领先的检测方法都使用ImageNet上预训练好的分类器。从AlexNet起,大多分类器的输入图像分辨率都小于 256×256 。
- 原YOLO: 224×224 大小的图像上训练分类器,检测时分辨率提高至448。网络须同时切换至学习物体检测,并调整至新的输入分辨率。
- YOLOv2:ImageNet上按 448×448 分辨率,微调分类网络 10 个周期(epochs);检测数据上微调网络。高分辨率的分类网络使mAP提高 4 %。
YOLO用卷积特征提取器顶部的全连接层来直接预测边界框的坐标。
Faster R-CNN用精心挑选的先验来预测边界框。Faster R-CNN中的区域建议网络(RPN)仅用卷积层直接预测锚箱的偏移和置信度。因预测层为卷积层,RPN预测特征图中每个位置上锚箱的偏移。
预测偏移而非坐标,简化了问题,且使网络更易学。
删除YOLO的全连接层,用锚箱预测边界框:删除一池化层使网络卷积层的输出有更高的分辨率。将网络输入图像的分辨率从
输入图像分辨率为 416×416 ,YOLO卷积层按 32 倍数下采样图像,输出特征图大小为 13×13 。
锚箱的使用从空间位置中解耦出类别预测,并预测每个锚箱的类别和物体(objectness):
- 物体预测:同YOLO,仍为预测建议框与真实框的IOU;
- 类别预测:给定已存在物体,预测该类的条件概率。
使用锚箱,准确度略降。YOLO对每幅图仅预测98个建议框,而用锚箱模型可预测上千个建议框。无锚箱时的中间模型得 69.5 mAP和 81 %召回率;有锚箱时的模型得 69.2 mAP和 88 %召回率。mAP略减,但召回率的提高说明模型仍可能改进。
YOLO中用锚箱会碰到两个问题。第1个问题:锚箱的维度为手动挑选,网络可学习合适地调整锚箱,但为网络挑选更好的先验能更容易学到更好的检测器。
训练集边界框上用K-means聚类来自动找好的先验:用标准K-means(欧几里德距离)时,更大的边界框会产生更大的误差。而获得好的IOU分数的先验应与建议框的大小无关。因此,使用如下距离测量:
比较表1中聚类策略的最近先验与手动挑选的锚箱的平均IOU。 5 个先验中心(
K-means生成的边界框有更好的表示,任务更易学。
YOLO中用锚箱时遇到的第2个问题:模型不稳定,尤其是早期迭代时。大多不稳定来自预测锚箱的位置 (x,y) 。区域建议网络预测值 tx 和 ty ,中心坐标 (x,y) 计算如下:
对输出特征图中的每个单元,网络预测 5 个边界框。网络预测每个边界框的
约束位置预测更易学参数化,使网络更稳定。带直接预测边界框的中心位置聚类相比带锚箱的中心位置聚类提高近 5 %。
更改后的YOLO在
类似残差网络的恒等映射,穿越层堆叠相邻特征至不同的通道(而非空间位置)来关联高分辨率特征和低分辨率特征。此时关联原有的特征, 26×26×512 个特征图变为 13×13×2048 个特征图。扩展的特征图上运行的检测器有更精细的特征,性能提高 1 %。
原YOLO的输入分辨率为
每隔几次迭代改变网络结构:每 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 和图
VOC 2007+2012上,YOLOv2运行快过其它方法,mAP为 73.4 ,见表 4 ;COCO上,YOLOv2的mAP为
大多检测框架基于VGG-16来提取特征。VGG-16网络分类强大准确,但却不必要的复杂。VGG-16的卷积层在单幅
YOLO框架基于Googlenet结构,快过VGG-16, 1 次传递仅用
类似VGG模型,大多用 3×3 的滤波器且每次池化通道数加一倍。按Network in Network用全局平均池化预测和 1×1 大小的滤波器来压缩 3×3 大小卷积间的特征表示。块归一化来稳定训练,加快收敛和正则化模型。
最终的模型 Darknet-19有 19 个卷积层和 5 个池化层,见表
标准Imagenet 分类数据集(1000类)上训练网络 160 个周期(epoch)。训练Darknet网络框架:学习率为 0.1 ,多项式速率衰减(?)的幂为 4 ,权重衰减为
224×224 大小图像上开始训练, 448×448 大小图像上微调。微调时用初始的参数。仅 10 步训练后,学习率用 10−3 微调。更高分辨率上网络的top-1和top-5准确率为 76.5 %和 93.3 %。
删除最后一卷积层,不用 3 个
训练网络时的初始学习率为
联合训练检测和分类。检测时用有标签图像来预测边界框坐标,物体(objectness)和分类日常物体。用有类标签的图像来扩展可检测的类数目。
训练检测时,基于整个YOLOv2损失函数来反向传播;训练分类时,仅用网络结构中的分类部分来反传损失。
联合训练的挑战:检测数据集只有日常物体和一般的标签,如“狗”或“船”;分类数据集标签的范围更广更深。 Imagenet有上千种狗,如“诺福克梗犬”,“约克郡犬”和“贝得灵顿厚毛犬”等。所以,训练两个数据集时,须合并标签。
大多方法对所有可能的类别用 1 个softmax层来计算最后的概率分布。用softmax时假设类间互斥。合并数据集出现的问题:“诺福克梗犬”和“狗”类不互斥。
Imagenet的标签取自WordNet(排列概念及其关联的语言数据库)。WordNet中,“诺福克梗犬”和“约克郡犬”为“小猎狗”的难判名,“小猎狗”为“狗”的一类,是“犬科动物”。大多方法却用扁平的标签结构。
WordNet的结构为有向图,而非树。如,“狗”是“犬科动物”类和“家畜”类,两者为WordNet中的同义词集。为简化问题,不用完整的图结构,仅用Imagenet中的概念来搭建分层树。
为搭建分层树,检查Imagenet中的视觉名词,从WordNet图至根节点(“物体”)寻找这些名词的路径。图中很多同义词集仅有
最终得到WordTree,视觉名词的分层模型。用WordTree分类时,给定同义词集,预测每个节点的条件概率来获得该词集中每个难判名的概率。如,“小猎狗(terrier)”节点上预测:
沿特定节点至树的根节点,乘以路径上的条件概率,即可计算该特定节点上的绝对概率。如,计算图中为“约克郡犬”的绝对概率:
分类时,假设图中包含物体: Pr(physical object)=1 。
1000 类Imagenet上搭WordTree,训练Darknet-19模型。搭建WordTree1k时,添加所有中间节点,标签空间从 1000 扩展至 1369 。训练时传递标签,真实标签传递至树的上层节点。若图像标签为“诺福克梗犬”,该图像也应标为“狗”和“哺乳动物”等。为计算条件概率,模型预测 1369 值的 1 个向量,计算所有相同概念下难判名的同义词集的softmax,见图
WordTree向量中,除根节点为“physical object”,从左向右名词描述得越来越具体,从而使难判名的同义词集会集中在向量的某段,便于每个softmax的连接。
用与之前相同的训练参数,分层Draknet-19的top-1和top-5准确率分别为 71.9 %和 90.4 %。尽管添加了额外的 369 个概念,并用网络预测树结构,但准确率仅略降。如此分类使新的或未知类上的表现平稳降低。如,网络看到狗,但不确定为哪种狗,此时网络仍会以高置信度来预测狗,但各难判名间的置信度会更低。
该表述同样使用于检测。分类时,假设每幅图会包含 1 个物体;但检测时,YOLOv2物体检测器要给出
用WordTree合并Imagenet与COCO的标签,见图
用合并的数据集来联合训练分类和检测模型。为训练极大规模的检测器,合并COCO检测数据集和整个Imagenet的前 9000 类标签,创建出新的数据集。合并后数据集的WordTree有 9418 类。Imagenet为更大的数据集,所以,过采样COCO来平衡合并的数据集,此时,Imagenet大小为过采样COCO的 4 倍。
合并数据集训练YOLO9000。用基YOLOv2结构,但改为
分类时,网络仅反传分类损失。假设预测框与真实标签框的IOU大于
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检测数据集上的效果。省去标定巨大的检测数据集的高昂成本,利用有限的检测数据集和巨大的分类数据集来完成巨大的检测数据集上的检测任务。
“更好”和“更快”部分可能并不会有多大影响,毕竟那些小技巧改善的效果有限。但“更强”部分现实意义很强啊,真是有意思~
全文未经校正,有问题欢迎指出。
文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别
文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具
文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量
文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置
文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖
文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...
文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序
文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码
文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型
文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件
文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令
文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线