一种联合分类与检测训练的方法——YOLO9000

简介: 一种联合分类与检测训练的方法——YOLO9000

yolo9000是yolov2论文中的Stronger章节的内容,由于在查找总结yolov2的时候要看yolo9000看得有点迷糊,想以这篇文章进行进一步的总结与归纳。


有关yolov2的内容,此处不再提及,详细的可以查看:目标检测算法——YOLOv2


对章节直接进行一个翻译,论文链接:YOLO9000:Better, Faster, Stronger可能翻译的不算准确,若有错误恳请指教。

1.YOLO9000介绍


我们提出了一种联合训练分类和检测数据的机制。我们的方法使用标记用于检测的图像学习检测特定的信息,如边界框坐标预测和目标度,以及如何分类普通目标。它使用只有类标签的图像来扩大它可以检测的类别的数量。在训练过程中,我们混合来自检测和分类数据集的图像当我们的网络看到一个标记为检测的图像时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,我们只反向传播体系结构中特定于分类的部分的损失。


这种方法带来了一些挑战。检测数据集只有通用的对象和通用的标签,如“狗”或“船”。分类数据集有更广泛和更深的标签范围。ImageNet网站上有一百多个品种的狗, “Norfolk terrier”, “Yorkshire terrier”, 与“Bedlington terrier”。如果我们想在两个数据集上训练,我们需要一个连贯的方式来合并这些标签。


大多数分类方法使用跨所有可能类别的softmax层来计算最终的概率分布。使用softmax假定这些类是互斥的。这给组合数据集带来了问题,例如,您不希望使用这个模型组合ImageNet和COCO,因为类“Norfolk terrier”和“dog”不是互斥的。而是包含的关系,“Norfolk terrier”属于“dog”


我们可以使用一个多标签模型来组合不假设互斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构,例如所有的COCO类都是互斥的。


1)Hierarchical classification(分层分类)

ImageNet标签是从WordNet中提取的,WordNet是一个语言数据库,它构造概念以及它们如何与Introduction to wordnet: An on-line lexical database.

International journal of lexicography相关联。在WordNet中,“Norfolk terrier” and “Yorkshire terrier”都是“terrier”的下义词(这两种都属于“terrier”)。而且他们还属于猎狗“hunting dog”,而且他们还属于狗类 “dog”,而且他们还属于犬科动物“canine”。大多数分类方法假设标签是一个扁平的结构,但是对于组合数据集,结构正是我们所需要的。


WordNet的结构是有向图,而不是树,因为语言是复杂的。例如,“dog”既是“canine”(犬科)的一种,也是“domestic animal”(家畜)的一种,它们都是WordNet中的同义词集。我们不是使用完整的图结构,而是通过根据ImageNet中的概念构建一个层次树来简化问题。


为了构建这棵树,我们检查了ImageNet中的可视名词,并查看它们通过WordNet图到根节点(这里的根节点是“physical object”)的路径。许多synsets(同义词集)在图中只有一条路径,所以首先我们将所有这些路径添加到树中。然后我们反复检查我们留下的概念,并添加尽可能少的路径。所以如果一个概念有两条到根结点的路径,其中一条会向树中添加三条边而另一条只会添加一条边,那么我们就会选择一条较短的路径。


最终的结果是WordTree,一个视觉概念的层次模型。为了使用 WordTree 执行分类,我们预测每个节点的条件概率,以获得给定同义词集的同义词集的每个下位词的概率。(这里感觉不好翻译,原文论述:To perform classification with WordTree we predict conditional probabilities at every node for the prob-ability of each hyponym of that synset given that synset. )。例如,在“terrier”节点,我们预测:

image.png

如果我们想计算一个特定节点的绝对概率我们只需沿着树的路径到根节点然后乘以条件概率。(原文论述:If we want to compute the absolute probability for a par-ticular node we simply follow the path through the tree to the root node and multiply to conditional probabilities.)所以,如果我们想知道一张照片是不是“Norfolk terrier”,我们可以计算:

image.png

分析:

计算“Norfolk terrier”的概率 =

(当目标是为"terrier"条件下,其为“Norfolk terrier”的概率)x

(当目标是为"hunting dog"(猎狗)条件下,其为“terrier”的概率)x

(当目标是为"animal"条件下,其为“mammal”(哺乳动物)的概率)x

(当目标是为"physical object"条件下,其为“animal”的概率)


一个特定节点的绝对概率 = 沿着树的路径到根节点然后乘以条件概率


为了分类,我们假设图像中的一个定理:Pr(physical object) = 1。


为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有中间节点,将标签空间从1000扩展到1369。(我的理解是,因为后续还需要联合coco,所以会将标签值进行扩充,也就是本来没有“mammal”类的,但是因为coco数据集中有他的子类,所以这里也会将“mammal”扩充上去)。在训练期间,我们把ground truth labels传到树上,这样,如果一个图像被标记为 “Norfolk terrier”,它也会被标记为“dog” 与 “mammal”,等等。为了计算条件概率,我们的模型预测了1369个值的向量,并且我们计算了相同概念的所有sysnsets(同义词集)的softmax,见图5。ImageNet和WordTree的预测不同,大多数ImageNet模型使用一个大型的softmax来预测概率分布。我们使用WordTree对下位词进行多重softmax操作。

image.png


使用相同的训练参数,我们的分级Darknet-19达到71.9%的top-1准确率和90.4%的top-5准确率。尽管增加了369个额外的概念,并且让我们的网络预测树状结构,但我们的准确率只略微下降。以这种方式执行分类也有一些好处。对于新的或未知的对象类别,性能会优雅地下降。例如,如果网络看到一张狗的照片,但不确定它是什么类型的狗,它仍然会高度自信地预测“狗”,但在上下义词中概率预测信心较低。


这个公式也适用于检测。现在,我们不再假设每个图像都有一个(检测)对象,而是使用YOLOv2的目标预测器来给出P r(physical object)的值。检测器预测出一个边界框和树上的概率。我们向下遍历树,在每个分割处取最高置信路径,直到达到某个阈值,然后预测该对象类。(原文论述:The detector predicts a bounding box and the tree of probabilities. We traverse the tree down, tak-ing the highest confidence path at every split until we reach some threshold and we predict that object class.)


2)Dataset combination with WordTree(使用WordTree组合数据集)

我们可以使用WordTree以一种合理的方式将多个数据集组合在一起。我们只是将数据集中的类别映射到树中的同义词集。图6显示了一个使用WordTree组合来自ImageNet和COCO的标签的示例。WordNet非常多样化,所以我们可以对大多数数据集使用这种技术。

20210613133901200.png

使用WordTree层次结构组合数据集。利用WordNet概念图,我们建立了一个可视化概念的层次树。然后,我们可以通过将数据集中的类映射到树中的同义词集synsets来合并数据集。为了便于说明,这是一个简化的WordTree视图。


3)Joint classification and detection(联合分类与检测)

现在我们可以使用WordTree组合数据集,我们可以训练我们的联合模型在分类和检测方面。我们想训练一个超大规模的检测器,所以我们使用COCO检测数据集和完整的ImageNet发布中的top9000个类创建我们的组合数据集。我们还需要评估我们的方法,以便添加来自ImageNet检测挑战中尚未包含的任何类。这个数据集对应的WordTree有9418个类。ImageNet是一个更大的数据集,所以我们通过对COCO进行过采样来平衡数据集,这样ImageNet就只比原来大4:1倍。(也就是通过重采样保证Imagenet和COCO的数据比例为4:1。)(原文论述:ImageNet is a much larger dataset so we balance the dataset by oversampling COCO so that ImageNet is only larger by a factor of 4:1.)


使用这个数据集,我们训练YOLO9000。我们使用基本的YOLOv2架构,但只有3个priors限制输出大小,而不是5个priors。当我们的网络看到一个检测图像,我们反向传播的正常。对于分类损失,我们只反向传播在标签的相应级别或以上的损失。即对于检测数据集中的图片计算完整的Loss并反方向传播,对于分类数据集图片,则只计算分类的loss。(原文论述:When our network sees a detection image we backpropagate loss as normal. For classification loss, we only backpropagate loss at or above the corresponding level of the label. )


例如,如果标签是“狗”,我们确实将任何错误分配给树中更下方的预测,“德国牧羊犬”与“金毛猎犬”,因为我们没有这些信息。(原文论述:For example, if the label is “dog” we do assign any error to predictions further down in the tree, “German Shepherd” versus “Golden Retriever”, because we do not have that information.)


当它看到一个分类图像时,我们只反向传播分类损失。这个简单的方法是找到预测该类的最高概率的边界框,然后我们在它的预测树上计算损失。我们还假设预测的盒子与地面真实标签重叠至少为0.3个IOU,我们基于这个假设反向传播物体损失。(即对于分类数据集图片,则只计算分类的loss,同时假设IOU最少为0 .3)

使用这种联合训练,YOLO9000学习使用COCO中的检测数据在图像中寻找目标,并学习使用ImageNet中的数据对各种各样的目标进行分类。


我们在ImageNet检测任务上评估YOLO9000。ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000在156个不相交的对象类上总共得到19.7个mAP,其中16.0个mAP,它从未见过任何标记检测数据。该mAP比DPM得到的结果要高,但YOLO9000是在不同的数据集上训练的,只有部分监督。它还可以同时检测9000个其他对象类别,所有都是实时的。


插曲:

不知道我理解得对不对,我的理解是,YOLO9000从coco数据集中学习到了目标定位的能力,而从imagenet数据集中学习到了目标分类的能力,所以对于一个新的,没有检测标签ground truth的数据集,YOLO9000根据学习到的能力还能对这些数据集的目标进行一个较有效的定位,虽然mAP不算太高。突然出现了一个脑洞,那么如果YOLO9000对于没有ground truth标签的数据集可以做一个定位的标注,那么是不是以后就不需要人工标注数据集了?不过又好像有点问题,如果YOLO9000都可以进行自行标注,无需人工标注了,那么目标检测不就迎来了完结吗…?YOLO9000可以检测一切内容,自行标注了。这么说来,刚刚的脑洞好像就是个悖论罢。


续之前的内容。当我们在ImageNet上分析YOLO9000的表现时,我们发现它能很好地学习新物种的动物,但在学习服装和设备等类别时却遇到了困难。新的动物更容易学习,因为从COCO的动物中可以很好地归纳出客观性预测。相反,COCO没有任何类型的服装边框标签,只针对人,所以YOLO9000努力为“太阳镜”或“泳裤”等类别建模。

image.png

ImageNet上的YOLO9000最佳和最差类。在156个缺乏监督的classes中,AP水平最高和最低的classes。YOLO9000学习各种动物的优秀模型,但在服装或设备等新类别上遇到困难。


2.总结


我们介绍了YOLOv2和YOLO9000,实时检测系统。YOLOv2是最先进的,比其他检测系统在各种检测数据集更快。此外,它可以在各种图像大小上运行,在速度和精度之间提供一个平滑的权衡。


YOLO9000是一个实时检测9000多个对象类别的框架,通过联合优化检测和分类。我们使用WordTree来组合来自不同来源的数据,并使用我们的联合优化技术同时在ImageNet和COCO上进行训练。YOLO9000是缩小检测和分类之间数据集大小差距的有力一步。


我们的许多技术都适用于对象检测之外。ImageNet的WordTree表示为图像分类提供了更丰富、更详细的输出空间。采用分层分类的数据集组合将在分类和分割领域发挥重要作用。像多尺度训练这样的训练技术(yolov2中提到的Multi-Scale Training方法,每过10个batch调整分辨率)可以在各种视觉任务中提供好处。


对于未来的工作,我们希望使用类似的技术对弱监督图像分割。我们还计划在训练过程中使用更强大的匹配策略为分类数据分配弱标签来改进我们的检测结果。计算机视觉拥有大量的标记数据。我们将继续寻找将不同来源和结构的数据结合在一起的方法,以打造更强大的视觉世界模型。

参考资料:


https://blog.csdn.net/weixin_44751294/article/details/117851548

https://blog.csdn.net/shuzfan/article/details/54018736

https://arxiv.org/abs/1612.08242


目录
相关文章
|
7月前
|
vr&ar
垃圾分类模型想上maixpy(2)
1-1 关于模型部署,MaixPy文档的这一部分中可能有些有用的参考:部署模型到 Maix-I(M1) K210 系列开发板 - Sipeed Wiki 。 实际用数字图片进行测试时,手写数字识别的模型无法产生正确的输出。
177 1
|
7月前
|
存储 XML JSON
开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)
开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)
|
7月前
|
编解码 并行计算 TensorFlow
垃圾分类模型想上maixpy(3)
1-5 对比Params与模型文件实际体积。 结果:模型实际大小与Params大小是可以对上的,参数应该是以float32存储。我把“字节”与“位”搞混了,应该是一个字节为8位。
88 0
|
数据处理 计算机视觉 Python
【目标检测】指定划分COCO数据集训练(车类,行人类,狗类...)
【目标检测】指定划分COCO数据集训练(车类,行人类,狗类...)
3850 0
|
4月前
|
JSON 算法 数据可视化
5.3 目标检测YOLOv3实战:叶病虫害检测——损失函数、模型训练
这篇文章详细介绍了使用YOLOv3模型进行叶病虫害检测时的损失函数配置、模型训练过程、评估方法以及模型预测步骤,并提供了相应的代码实现和可能的改进方案。
|
2月前
|
数据可视化 计算机视觉
训练数据集(一):真实场景下采集的煤矸石目标检测数据集,可直接用于YOLOv5/v6/v7/v8训练
本文介绍了一个用于煤炭与矸石分类的煤矸石目标检测数据集,包含891张训练图片和404张验证图片,分为煤炭、矸石和混合物三类。数据集已标注并划分为训练和验证集,适用于YOLOv5/v6/v7/v8训练。数据集可通过提供的链接下载。
91 1
训练数据集(一):真实场景下采集的煤矸石目标检测数据集,可直接用于YOLOv5/v6/v7/v8训练
|
2月前
|
机器学习/深度学习 算法
五、分类模型
五、分类模型
49 0
|
4月前
|
API 异构计算
4.3.2 图像分类ResNet实战:眼疾识别——模型构建
这篇文章介绍了如何使用飞桨框架中的ResNet50模型进行眼疾识别的实战,通过5个epoch的训练,在验证集上达到了约96%的准确率,并提供了模型构建、训练、评估和预测的详细代码实现。
|
算法 数据可视化 API
使用Yolov5实现智能垃圾分类系统
使用Yolov5实现智能垃圾分类系统
1397 0