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”节点,我们预测:
如果我们想计算一个特定节点的绝对概率我们只需沿着树的路径到根节点然后乘以条件概率。(原文论述: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”,我们可以计算:
分析:
计算“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操作。
使用相同的训练参数,我们的分级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非常多样化,所以我们可以对大多数数据集使用这种技术。
使用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努力为“太阳镜”或“泳裤”等类别建模。
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