持续创作,加速成长!这是我参加「日新计划 10 月更文应战」的第21天,点击检查活动概况
导读
细粒度图画分类的一些问题和应战。
自从2012年的ILSVRC比赛Alexnet赢得冠军以来,计算机视觉现已十分出色了。这是人们在开端研究这项快速发展的技术时经常会遇到的说法。这个博客是为了了解细粒度视觉分类(FGVC)这一具有应战性的问题,下面的文章将对此进行详细描绘。
有关Pytorch代码完成,请参考以下github库:github.com/yangze0930/…
在这个过程中,人们能够了解开端或许面临的应战,以及怎么运用本文有趣的架构从刚开端时的42%达到87%的验证精度(数字是基于我的经验)。运用的数据集是FGVC Aircraft variant。后边,我还在Stanford-Cars数据集上进行了练习。
这篇文章分为以下部分:
榜首部分扼要叙述了我是怎么开端的以及从这个问题开端所面临的应战。
第2部分描绘了上面说到的研究论文,其中第1节,第2节和第3节分别描绘了Region Proposal,它在NTS和各种自界说丢失中的用法。
榜首部分:初始尝试和误差
细粒度视觉分类
咱们知道,视觉分类使命指创建一个模型来捕获从输入图画到相应输出类的联系。然而,FGVC的使命和一般的分类不太相同,由于类内差异比类间差异更多。这便是为什么咱们的方针是在视觉上相似的类中捕获有区别的特征。寻找这样的特征具有应战性。此外,对样本中信息最丰厚的区域进行鸿沟框的标示代价贵重。
当开端处理问题时,能够运用图画分类的一般办法,即运用标准的预练习模型,并对其进行微调,以达到正确的使命参数调集。如本文所述,以下链接的数据集有三个层次进行分类,即manufacturer、family和variant 层次。细粒度分类是variant级别的。
开端的时候,我运用标准的pre-trained模型,并尝试了不同的调整,在manufacturer上能得到66%的验证准确性,在variant上能够得到42%的准确率,尝试了NTS后,在variant上榜首次就能够得到87%。关于像我这样的初学者来说,了解一个复杂问题的工作代码并获得正确的见地是十分有协助的。
第二部分:是什么导致了这个效果
NTS-NET
如前所述,收集每个样本中信息最丰厚区域的鸿沟框的标示样本是十分贵重的。这正是本文所供给的协助。它有效地部分化了这些信息区域,而不需要鸿沟框标示。
本文中创建的模型称为NTS-NET,运用三个协同工作的“agent”在基准数据集( FGVC aircraft、Stanford Cars、Caltech-UCSD Birds)中完成最先进的性能。
这三个署理被界说为Navigator、Teacher和Scrutinizer。让咱们讨论一下它们的效果。
The Navigator agent网络导航模型,以重视信息最丰厚的区域。关于图画中的每个区域,Navigator经过对丢失排序来猜测该区域的信息量(如下所述),并运用这些猜测来提出信息最丰厚的区域。现在的问题是:怎么在图画中得到有用的可变长度的“区域”?好了,这个问题前面现已有了答案,所以请耐性等待我来了解每个agent的高档功能。
Teacher agent对Navigator提出的信息量最大的区域进行评价,并供给反应:关于每个提出的区域,Teacher评价其概率为ground-truth class。置信度评价辅导navigator网络运用排序一致性丢失函数(在代码完成中称为“ranking loss”),提出信息更丰厚的区域。
当teacher供给更精确的监督时,navigator会将更多的信息区域部分化,从而使teacher获益。
Scrutinizer agent从Navigator中对提出的区域进行审查并进行细粒度分类:将每个提出的区域扩大到相同大小,agent从中提取特征,将区域特征与整幅图画的特征联合处理,进行细粒度分类,是处理这一复杂问题的主要办法。
信息区域有助于更好地表征物体,因而将信息区域的特征与全图画融合将获得更好的性能。
因而,方针是部分化物体中信息最丰厚的区域。

图1:NTS模型结构
现在让咱们回到上面讨论的问题,即怎么在图画中得到有用的可变长度“区域”?导航到或许的信息区域能够看作是在R-CNN论文中引入的区域主张网络(RPN)的问题,我将在这儿讨论它的相关性。
第1节:区域主张
在讨论区域主张怎么在NTS上实施之前,我应该先简略介绍一下它的起源。假如你知道,请随意跳过这个部分。
有几个进行区域主张的办法:
i) 滑动窗口:滑动窗口中,你在所有固定大小的滑动图画的窗口上运转一个练习分类器,然后运转检测器来检查物体是什么。咱们能够运用这种算法,但缺陷是它或许会检查许多这样的没有物体的窗口,因而提出了R-CNN算法。
ii) R-CNN:在这个办法中进行分割算法,获取或许包括物体的区域,只在这些区域上运转分类器。缺陷是速度慢,由于主张的区域一次只分类一个类别。
iii) Fast R-CNN:用分割算法进行区域主张,与R-CNN不同的是,所有主张的区域都运用卷积式滑动窗口完成一起分类。
iv) Faster R-CNN:运用区域主张网络,简称RPN,它需要锚(以不同的大小、标准和长宽比散布在图画各处的鸿沟框)和ground truth鸿沟框来主张信息区域,而不是传统的分割算法。
第2节:NTS中的区域主张是什么样的?
在本文中,默认的锚被放置在整个图画中,而NTS-model,经过代码完成中的自界说丢失(学习是由于咱们没有运用带标示的边框)从这些锚点中学习了最具信息的锚点。这些锚界说了代码中界说的由Prosposal_Net(或Navigator Network)给出的主张区域的坐标,并运用NMS(非最大抑制)去除冗余(重叠区域)并给出top_n的主张区域。

图2:TOP 3 由NTS学到的最具信息的区域,FGVC Aircraft数据集

图2:TOP 3 由NTS学到的最具信息的区域,Stanford-Cars数据集
第3节:NTS-NET中各种丢失的描绘
在论文中运用的自界说丢失有许多,后来累计在总丢失中,即原始丢失、concat丢失、rank丢失和part_cls丢失。
注:代码中运用的丢失术语与论文中的不同,分别是Navigator、Teacher和Scrutinizer的丢失,这儿我运用代码中运用的丢失。
Total loss= Raw_loss+Rank_loss+Concat_loss+Part_cls_loss
注:咱们运用RESNET50模型作为原始图画和主张区域的特征提取器。
RAW LOSS:这是针对RESNET网络参数的图画分类的分类交叉熵丢失。咱们对原始图画的特征进行raw loss,然后将其与咱们的主张区域图画的特征结合进行细粒度分类。这儿的输出是图画的标签。
CONCAT LOSS:在Scrutinizer网络中,咱们从原始图画特征和主张区域特征CONCAT,输入到这个分类交叉熵丢失中国,输出图画的标签。
PART LOSS(LIST LOSS) :它被用作navigator网络的反应,由于在这儿咱们找到了每个主张的图画和它的ground truth类之间的交叉熵丢失。
RANK LOSS:运用top_n rpn分数(主张区域特征)和相应的丢失作为每一个主张区域收到的反应丢失的一部分,关于每一个主张区域,所有排序在主张区域之前的loss添加到rank loss中,这样rank loss能够进行优化。
PART_CLS LOSS:这是部分特征和标签之间的交叉熵丢失。部分特征运用代码中界说的part_images从RESNET-50中提取,该代码运用top_n主张区域的坐标从原始图画中生成。
现在part loss和part_cls丢失是相同的,可是part_cls丢失对total丢失有贡献,而其他loss则没有,并且part_loss在rank loss中还用作辅导/反应。
英文原文:medium.com/@parnika310…