检测9000类物体的YOLO9000
来源:互联网 发布:秦舞阳知乎 编辑:程序博客网 时间:2024/05/17 23:49
YOLO9000
原文为Joseph Redmon与Ali Farhadi的文章“YOLO9000: Better, Faster, Stronger”。本想总结一下,看完发现整篇文章多余的话有点少。YOLO的实时性众所周知,所以还等什么,皮皮虾我们走~
摘要
多尺度训练YOLOv2;权衡速度和准确率,运行在不同大小图像上。YOLOv2测试VOC 2007 数据集:
联合训练物体检测和分类,可检测未标签检测数据的物体的类别。ImageNet检测验证集上,YOLO9000仅用
1. 简介
神经网络引入后,检测框架变得更快更准确。然而,大多数检测方法受限于少量物体。相比分类和加标签等其它任务的数据集,目前物体检测的数据集有限。
将检测扩展到分类层面。然而,标注检测图像相比其它任务更加昂贵。因此,提出新方法扩展目前检测系统的范围。对物体分类的分层视图可合并不同的数据集。
检测和训练数据上联合训练物体检测器,用有标签的检测图像来学习精确定位,同时用分类图像来增加词汇和鲁棒性。
原YOLO系统上生成YOLOv2检测器;在ImageNet中超过
2. 更好
相比Fast R-CNN对YOLO误差分析,显示YOLO有显著的定位误差。YOLO与其它基于区域建议的方法召回率相对较低。因此,保持分类准确率的同时,着重改善召回率和定位。
计算机视觉一般倾向更大更深的模型。训练更大网络或集成多个模型通常会有更好的效果。然而,我们希望YOLOv2检测器保留速度的同时更加精确,因此,简化网络来易于学习表示。结果见表
2.1 块归一化(Batch Normalization)
无需其它形式的正则,块归一化收敛时显著变好。块归一化有助于模型正则,可从未过拟合的模型中删除dropout。YOLO上所有卷积层上添加块归一化,mAP提高
2.2 分类器输入更高分辨率
所有领先的检测方法都使用ImageNet上预训练好的分类器。从AlexNet起,大多分类器的输入图像分辨率都小于
- 原YOLO:
- YOLOv2:ImageNet上按
2.3 用锚箱(Anchor Boxes)的卷积
YOLO用卷积特征提取器顶部的全连接层来直接预测边界框的坐标。
Faster R-CNN用精心挑选的先验来预测边界框。Faster R-CNN中的区域建议网络(RPN)仅用卷积层直接预测锚箱的偏移和置信度。因预测层为卷积层,RPN预测特征图中每个位置上锚箱的偏移。
预测偏移而非坐标,简化了问题,且使网络更易学。
删除YOLO的全连接层,用锚箱预测边界框:删除一池化层使网络卷积层的输出有更高的分辨率。将网络输入图像的分辨率从
输入图像分辨率为
锚箱的使用从空间位置中解耦出类别预测,并预测每个锚箱的类别和物体(objectness):
- 物体预测:同YOLO,仍为预测建议框与真实框的IOU;
- 类别预测:给定已存在物体,预测该类的条件概率。
使用锚箱,准确度略降。YOLO对每幅图仅预测98个建议框,而用锚箱模型可预测上千个建议框。无锚箱时的中间模型得
2.4 维度聚类
YOLO中用锚箱会碰到两个问题。第1个问题:锚箱的维度为手动挑选,网络可学习合适地调整锚箱,但为网络挑选更好的先验能更容易学到更好的检测器。
训练集边界框上用K-means聚类来自动找好的先验:用标准K-means(欧几里德距离)时,更大的边界框会产生更大的误差。而获得好的IOU分数的先验应与建议框的大小无关。因此,使用如下距离测量:
选多个k值,画出最近中心的平均IOU,如下图。权衡模型复杂度和高召回率,选择
比较表1中聚类策略的最近先验与手动挑选的锚箱的平均IOU。
K-means生成的边界框有更好的表示,任务更易学。
2.5 直接预测位置
YOLO中用锚箱时遇到的第2个问题:模型不稳定,尤其是早期迭代时。大多不稳定来自预测锚箱的位置
如,
该公式无约束,使锚箱可到达图像中任意位置。随机初始化的模型要花很长时间稳定,才可预测出合理的偏移。
除了预测偏移,同YOLO一样,预测相对网格单元的位置坐标。真实边界框的位置范围落入
对输出特征图中的每个单元,网络预测
约束位置预测更易学参数化,使网络更稳定。带直接预测边界框的中心位置聚类相比带锚箱的中心位置聚类提高近
2.6 细粒度特征
更改后的YOLO在
类似残差网络的恒等映射,穿越层堆叠相邻特征至不同的通道(而非空间位置)来关联高分辨率特征和低分辨率特征。此时关联原有的特征,
2.7 多尺度训练
原YOLO的输入分辨率为
每隔几次迭代改变网络结构:每
缩放网络至不同的维度:对图像输入分辨率最大时的网络,每个卷积层输出的特征图维度固定。所以,对不同分辨率的图像,应是优先保留顶层的权重,底层的卷积层用相同分辨率的输入图像替换来完成训练,同时屏蔽高于输入图像分辨率的卷积层。
输入
2.8 更多实验
VOC 2007+2012上,YOLOv2运行快过其它方法,mAP为
3. 更快
大多检测框架基于VGG-16来提取特征。VGG-16网络分类强大准确,但却不必要的复杂。VGG-16的卷积层在单幅
YOLO框架基于Googlenet结构,快过VGG-16,
3.1 Darknet-19
类似VGG模型,大多用
最终的模型 Darknet-19有
3.2 分类训练
标准Imagenet 分类数据集(1000类)上训练网络
3.3 检测训练
删除最后一卷积层,不用
训练网络时的初始学习率为
4. 更强
联合训练检测和分类。检测时用有标签图像来预测边界框坐标,物体(objectness)和分类日常物体。用有类标签的图像来扩展可检测的类数目。
训练检测时,基于整个YOLOv2损失函数来反向传播;训练分类时,仅用网络结构中的分类部分来反传损失。
联合训练的挑战:检测数据集只有日常物体和一般的标签,如“狗”或“船”;分类数据集标签的范围更广更深。 Imagenet有上千种狗,如“诺福克梗犬”,“约克郡犬”和“贝得灵顿厚毛犬”等。所以,训练两个数据集时,须合并标签。
大多方法对所有可能的类别用
4.1 分层分类
Imagenet的标签取自WordNet(排列概念及其关联的语言数据库)。WordNet中,“诺福克梗犬”和“约克郡犬”为“小猎狗”的难判名,“小猎狗”为“狗”的一类,是“犬科动物”。大多方法却用扁平的标签结构。
WordNet的结构为有向图,而非树。如,“狗”是“犬科动物”类和“家畜”类,两者为WordNet中的同义词集。为简化问题,不用完整的图结构,仅用Imagenet中的概念来搭建分层树。
为搭建分层树,检查Imagenet中的视觉名词,从WordNet图至根节点(“物体”)寻找这些名词的路径。图中很多同义词集仅有
最终得到WordTree,视觉名词的分层模型。用WordTree分类时,给定同义词集,预测每个节点的条件概率来获得该词集中每个难判名的概率。如,“小猎狗(terrier)”节点上预测:
沿特定节点至树的根节点,乘以路径上的条件概率,即可计算该特定节点上的绝对概率。如,计算图中为“约克郡犬”的绝对概率:
分类时,假设图中包含物体:
WordTree向量中,除根节点为“physical object”,从左向右名词描述得越来越具体,从而使难判名的同义词集会集中在向量的某段,便于每个softmax的连接。
用与之前相同的训练参数,分层Draknet-19的top-1和top-5准确率分别为
该表述同样使用于检测。分类时,假设每幅图会包含
4.2 与词数(WordTree)结合的数据集
用WordTree合并Imagenet与COCO的标签,见图
4.3 联合分类与检测
用合并的数据集来联合训练分类和检测模型。为训练极大规模的检测器,合并COCO检测数据集和整个Imagenet的前
合并数据集训练YOLO9000。用基YOLOv2结构,但改为
分类时,网络仅反传分类损失。假设预测框与真实标签框的IOU大于
Imagenet检测任务与COCO共享
分析Imagenet上YOLO9000的表现,发现它很好地学到新动物物种(与COCO中动物类有很好的泛化),但衣物和设备等类学习困难(COCO无对人的衣物类标签,难学到“太阳镜”或“泳裤”),见表
YOLO9000的表现换一解释。前面提到,检测器用来检测物体(objectness),分类器用于分类对象(object)类别。训练检测器时,网络会将COCO中所包含的对象类视为物体,但COCO的对象标签不包括衣物和设备,所以,YOLO9000自然不会轻易把衣物或设备等对象视为物体。
作者实验的目的是:验证合并了COCO检测数据集和Imagenet分类数据集后,模型在Imagenet检测数据集上的效果。省去标定巨大的检测数据集的高昂成本,利用有限的检测数据集和巨大的分类数据集来完成巨大的检测数据集上的检测任务。
5. 小结
“更好”和“更快”部分可能并不会有多大影响,毕竟那些小技巧改善的效果有限。但“更强”部分现实意义很强啊,真是有意思~
全文未经校正,有问题欢迎指出。
- 检测9000类物体的YOLO9000
- YOLO9000(一个先进实时的目标检测系统)
- 物体检测的总结
- 运动物体检测的问题
- 物体检测的提速方法
- 空间圆形物体的检测
- UE4物体的碰撞检测
- 运动物体的检测 初
- YOLO9000
- YOLO9000
- YOLO9000
- 运动物体的检测--对视频检测
- 一个超高效的不规则物体碰撞检测的类
- 快速多目标检测——YOLO9000
- 目标检测 - YOLO9000 : Better, Faster, Stronger
- 物体检测
- 物体检测
- 物体检测
- mysql 更新某字段的值+1
- unity3d,制作自己的第一个射击游戏demo,实现镜头跟随和键盘控制移动
- mipi 转HDMI
- freemarker
- 基于MFC的串口类CSerialPort的使用
- 检测9000类物体的YOLO9000
- zoj1314
- ios系统判断设备上是否有安装某app的两个方法
- JS中变量名和函数名重名
- zoj1312
- 二叉搜索树(Binary Search Tree)
- 2016.5.3号的工作经验分享总结
- mybatis通用DAO
- 无法启动mysql服务