检测论文笔记
检测论文笔记
对于目标检测方向并不是特别熟悉,本文记录一下RCNN, fast-RCNN, faster-RCNN, mask-RCNN这4篇有关目标检测的论文笔记和学习心得。
R-CNN的意思就是Region based,主要思路就是根据一张图像,提取多个region,再将每个Region输入CNN来进行特征的提取。因此RCNN就可以分为 Region proposals , Feature extraction 两个主要部分,提取的特征就可以输入任意一个分类器来进行分类。 模型的流程图如下:
在训练的时候,首先使用的是已经训练好的CNN网络作为特征提取器,但是由于预训练是在分类数据集上,因此在应用到检测之前要做finetune。也就是说,为了将用ImageNet数据集训练的网络应用到新的任务(检测),新的数据集(region)上,作者将原来的CNN最后的1000类的fc层,更改为了 层, 代表待检测的物体的类别数。然后,对于所有的region,如果它和ground truth的重叠率大于0.5,就认为是正类。 对于分类器的训练,作者发现选择多大的IoU来区分正类和负类非常关键。并且,对于每一类,都会训练一个分类器。
框的回归非常重要,在对每一个region proposal使用分类器进行打分评价之后,作者使用一个回归器来预测一个新的框作为结果。这个回归器使用的特征是从CNN中提取的特征。回归器的训练中,输入是 region proposal 的 和ground truth的 ,目标是学习一种变换,使得region proposal通过该变换能够接近ground truth。同时,希望这种变换拥有尺度不变性,也就是说尺度变化的话,变换不会改变。 如下图所示,每一个regressor会学习一组参数,特征输入是pool 5的特征输出,拟合的目标是 。
Fast-RCNN 主要解决的问题是在RCNN中对于每一个region proposal都进行特征提取,会产生非常多的冗余计算,因此可以先对一张图像进行特征提取,再根据region proposal在相应的特征上进行划分得到对应region的特征(映射关系)。 这样便可以实现共享计算提高速度,但是与SPPnets不同,SPPnets在一副图像得到对应的特征后,从这张图像的特征上proposal对应的部分,采用空间金字塔池化,如下图:
RoI pooling的方法很简单,类似于空间金字塔pooling,它将proposal部分对应卷积层输出的特征(称之为RoI,因为用于做pooling的特征是 region of interest,也就是我们感兴趣的区域)划分成 块,然后对每一块求最大值,最终得到了一个 的特征图。可以看出,它只是空间金字塔pooling的一部分。 但是SPP-nets的空间金字塔也是可以求导的,那么它到底不好在哪里呢?因为当每一个RoI都可能来源于不同的图像的时候(R-CNN和SPPnets的训练策略是从一个batch的不同图像中,分别挑选一个proposal region),SPPNets的训练非常地低效,这种低效来源于在SPPnets的训练中,每个RoI的感受野都非常地大,很可能对应了原图的整个图像,因此,得到的特征也几乎对应了整张图像,所以输入的图像也就很大。 为了提高效率,Fast-RCNN首先选取 个图像,再从每个图像上选择 个RoI,这样的效率就比从每个图像提取一个RoI提高了 倍。
为了将分类和框回归结合起来,作者采用了多任务的loss,来进行联合的训练。具体来说就是将分类的loss和框回归的loss结合起来。网络的设计上非常直接,就是将RoI得到的特征接几个FC层后,分别接不同的输出层。对应于分类部分,特征会接一个softmax输出,用于分类,对于框回归部分,会接一个输出4维特征的输出层,然后分别计算loss,用于反向传播。loss的公式如下:
回归的target可以参考前面的R-CNN部分。
notes
为什么比fast还fast呢?主要原因是在这篇论文中提出了一个新的层:RPN(region proposal networks)用于替代之前的selective search。这个层还可以在GPU上运算来提高速度。 RPN的目的:
为了能够进行region proposal,作者使用了一个小的网络,在基础的卷积层输出的特征上进行滑动,这个网络输入大小为 ,输入后会映射(用 的卷积)为一个固定长度的特征向量,然后接两个并联的fc层(用 的卷积层代替),这两个fc层,一个为box-regressoin,一个为box-classification。如下图:
在每一个滑动窗口(可以参考 ),为了考虑到尽可能多的框的情况,作者设计了anchors来作为region proposal。anchors就是对于每一个滑动窗口的中心位置,在该位置对应的原图位置的基础上,按照不同的尺度,长宽比例框出 个不同的区域。然后根据这些anchors对应的原始图像位置以及区域,和ground truth,就可以给每一个滑动窗口的每一个anchor进行标记,也就是赋予label,满足一定条件标记为正类(比如和ground truth重叠大于一个值),一定条件为负类。对于正类,就可以根据ground truth和该anchor对应的原图的区域之间的变换关系(参考前面的R-CNN的框回归),得到回归器中的目标,用于训练。也就是论文中的loss function部分:
自然地,也就要求RPN的两个并联的FC层一个输出2k个值用于表示这k个anchor对应的区域的正类,负类的概率,另一个输出4k个值,用于表示框回归的变换的预测值。
对于整个网络的训练,作者采用了一种叫做 4-step Alternating Training 的方法。具体可以参考论文。
与之前的检测任务稍有不同,mask r-cnn的任务是做instance segmentation。因此,它需要对每一个像素点进行分类。 与Faster R-CNN不同,Faster R-CNN对每一个候选框产生两个输出,一个是类别,一个是bounding box的offset。Mask R-CNN新增加了一个输出,作为物体的mask。这个mask类似于ps中的蒙版。
与Faster R-CNN类似的是,Mask R-CNN同样采用RPN来进行Region Proposal。但是在之后,对于每一个RoI,mask r-cnn还输出了一个二值化的mask。
不像类别,框回归,输出都可以是一个向量,mask必须保持一定的空间信息。因此,作者采用FCN来从每个RoI中预测一个 的mask。
由于属于像素级别的预测问题,就需要RoI能够在进行特征提取的时候保持住空间信息,至少在像素级别上能够对应起来。因此,传统的取最大值的方法就显得不合适。 RoI Pooling,经历了两个量化的过程: 第一个:从roi proposal到feature map的映射过程。 第二个:从feature map划分成7*7的bin,每个bin使用max pooling。
为此,作者使用了RoIAlign。如下图
为了避免上面提到的量化过程
可以参考
作者使用ResNet作为基础的特征提取的网络。 对于预测类别,回归框,mask的网络使用如下图结构:
整体看完这几篇大佬的论文,虽说没有弄清楚每一个实现细节,但是大体上了解了算法的思路。可以看出,出发点都源于深度神经网络在特征提取上的卓越能力,因此一众大神试图将这种能力应用在检测问题中。从R-CNN中简单地用于特征提取,到为了提高速度减少计算的Fast R-CNN,再到为了将region proposal集成进入整个模型中,并且利用GPU加速的RPN,也就是Faster R-CNN。再到为了应用于instance segmentation任务中,设计的RoIAlign和mask。包括bounding box regression,pooling层的设计,训练方法的选择,loss的设计等等细节,无一不体现了大师们的思考和创造力。 可能在我们这些“拿来”者的眼中,这些方法都显得“理所应当”和巧妙,好用,但是,它们背后隐藏的选择和这些选择的思考却更值得我们学习。 以及,对待每一个问题,如何设计出合理的解决方案,以及方案的效率,通用性,更是应该我们努力的方向。
【CV论文笔记】Focal Loss for Dense Object Detection(Focal Loss 理解)
本文主要用于介绍各路大神(包括rbg, kaiming he等)于2017年提出的适用于目标领域的一种新的损失函数。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接: github主页: rbg大神个人主页:
基本目录如下:
------------------第一菇 - 摘要------------------
目前最准确的目标检测模型就是以两阶段的R-CNN系列为代表的。相比之下,单阶段的目标检测模型虽然在准确率上依然落后于两阶段的模型,但是其简易和速度快的特性毫无疑问具有巨大的潜力。在这篇文章中,我们就深入调研为什么单阶段的模型其准确率会不甚理想。在调研过程中,我们发现最主要的一个问题就是在训练过程中的正负样本(背景和真实目标)不均匀。因此,我们设计了一个新的损失函数,来减少那些易于分类的样本带来的损失。我们新的Focal Loss损失函数重点关注那些难于被训练的(hard examples),并且尽量避免被那些负样本所带偏。为了验证我们模型的有效性,我们还重新设计了一个新的检测器,命名为RetinaNet,我们的实验表明,运用了新的损失函数以后,我们的RetinaNet在速度上已经能够媲美那些单阶段模型,同时在准确率上能够压制现存所有的两阶段模型(存疑)。
------------------第二菇 - 核心思想------------------
既然本文把单阶段的模型不如多阶段的主要归因于正负样本不均衡这件事情,那我们就直接列出原文的观点。作者认为,正负样本不均衡将会导致,
1)training is inefficient as most locations are easy negatives that contribute no useful learning signal
2)en masse, the easy negatives can overwhelm training and lead to degenerate models
还是拿目标检测的场景来理解,单阶段的目标检测器通常会在第一阶段产生高达100k的候选目标,其中只有极少数是正样本,因此该场景就是一个典型的正负样本不平衡的问题(如下图所示),然后,正样本和负样本又都各自有难易之分,即有些正样本很容易区分,有些又很难区分,因此,正负样本又可以分为如下四类,
(注:如果有不明白的,结合具体的网上盗的一张示意图明白了【1】)
弄清楚了数据分布以后,我们再来看损失函数。我们最常用的在计算分类的时候常用的损失就是交叉熵损失(以二分类为例),
其中 就是模型输出的概率(y=1),为了方便表述,通常定义,
此时,
然后,为了解决正负样本不平衡的问题,很自然的我们都会添加一个 ,该参数通常取决于正负样本的比例,
当然, 只是平衡了正负样本对于最终损失的贡献度,但对难易不平衡的事情完全没有帮助。事实上,如上述第二条理由所述,在目标检测的任务中,存在着大量的易分样本,虽然单个来看每一个易分样本(置信度很高的样本)带来的损失很低,但是如果总的易分样本数量过多的话,积少成多,也会引领总的损失走向错误的方向。因此,本文作者也认为,模型应该重点关注那些难分的样本(hard examples),于是据此理论就提出了一个新的损失计算方法,
大家仔细研究一下这个公式就会发现, 1)当样本被错分的时候,通常 是会比较小的,因此我们新加的权值项 也是接近于1的,意思就是该项损失应该都有贡献; 2)而当样本是正确分类的时候, 就会相对比较大,权值项也就对应变小了,意思就是该项损失的贡献是很少的;
因此,最终的Facal Loss就是结合了上述的2个点提出的,
这里也贴一张原论文中的图,作者发现 的时候效果最佳~
其实整一套网络架构,跟RPN网络是比较像的,这里直接贴一张原论文中的网络架构图,
这里简单提几个关键的变化点, 1)其基础提取图片特征的模型采用的是ResNet,并且结合了FPN网络,用以构建不同层级对应的特征图,因此其基本的架构(backbone)就是ResNet + FPN的组合。
2)对应每一层级提出的特征,都会输入到2个结构一摸一样的子网络中(subnetworks),分别用于分类和回归!俩个子网络的架构是一样的,但是参数是不一样的(sharing a common structure, use separate parameters)。
3)Anchors的设计机制跟RPN中的是相似的,只不过对应到FPN中,每一层级特征图对应的Anchor大小是不一样的。每一个层级对应设置的Anchor比例为 ,每一种比例对应3种大小尺度 ,因此总的anchors数为9。
这里贴一张具体的实验结果图,方便以后查看(具体实验过程不再阐述),
当然作者本文的结论肯定就是,证明了这种Focal Loss设计的有效性了~
------------------第三菇 - 总结------------------
到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一个新的对于样本不均衡问题的损失函数的设计方法,并实验证明其可行性,为后续发展奠定了基础。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对Focal Loss的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~?
参考文献: 【1】
论文笔记
本篇论文关注的焦点在于多跳问答问题中,对于问题的拆分,在本文中,作者对问题的处理方法是将其分为多个子问题,其中这每个子问题通过一个单跳的阅读理解模型去解决回答问题,最后再将他们合并。将问题拆分作者使用的是对原问题进行跨度分割,根据问题的类型不同进行不同的处理,最后通过一个加权得到最后答案。
作者提出了DECOMPRC,这是一种用于多跳RC的系统,它将多跳问题分解为更简单的单跳子问题。 我们将子问题生成作为跨度预测问题,将模型训练在400个带标签的示例上可以生成高质量的子问题。 此外,DECOMPRC从分解评分步骤中获得了更多收益。 DECOMPRC在HOTPOTQA干扰项设置和完整的Wiki设置方面达到了最先进的水平,同时以子问题的形式为其决策提供了可解释的证据,并且在对抗性设置方面比强大的基线更强大。
回答复杂的问题对于人类来说是一项耗时的活动,需要推理和信息整合。最近在阅读理解方面的工作在回答简单问题方面取得了进展,但是解决复杂问题仍然是持续的研究挑战。相反,语义解析器已经成功地处理了组合性,但前提是该信息位于目标知识库中。在本文中,作者提出了一个新颖的框架,用于回答广泛和复杂的问题,假设使用搜索引擎和阅读理解模型可以回答简单的问题。我们建议将复杂的问题分解为一系列简单的问题,并从一系列答案中计算出最终答案
在本文中,作者提出了一个基于问题分解和与Web交互的新框架,用于回答复杂问题。 作者在此框架下开发了一个模型,并证明了该模型可以提高两个数据集上的复杂QA性能,并使用两个RC模型。 我们还发布了一个新的数据集COMPLEXWEBQUESTIONS,其中包括问题,SPARQL程序,答案和作者的模型收集的Web片段。 作者认为,该数据集将为质量保证和语义解析社区提供服务,推动对组成性的研究,并推动社区为质量保证提供整体解决方案。 在以后的工作中,作者计划对模型进行训练,直接从薄弱的监管(即表示法)中提取信息,并不仅要从网络中提取信息,还要从结构化信息源(例如网络表格和知识库)中提取信息。
在这项工作中,作者专注于复杂问题的语义解析,并提出了一种新颖的层次语义解析(HSP)方法,该方法利用复杂问题的分解性进行语义解析。 作者的模型是基于分解-集成的思想在三阶段的解析体系结构中设计的。 在第一阶段,提出了一个问题分解器,它将一个复杂的问题分解为一系列子问题。 在第二阶段,设计了一个信息提取器来导出这些问题的类型和谓词信息。 在最后一个阶段,将先前阶段生成的信息进行整合,并为复杂问题生成逻辑形式。 最后对复杂的语义复杂数据集COMPLEXWEBQUESTIONS进行了实验,结果表明,与最新方法相比,该模型取得了显着改进。
在这项工作中,作者提出了一种基于序列到序列范式的新颖的分层语义解析(HSP)模型。 实验表明,与以前的几个系统相比,HSP有效地提高了性能。 作者还设计了一种神经生成问题分解器,该分解器比基于拆分的问题分解方法具有更高的性能。 进一步的实验还证明,提出的神经生成问题分解器也受益于HSP机制
用于回答问题的语义解析的最新工作集中在冗长而复杂的问题上,如果在两个人之间的正常对话中提出问题,其中许多问题似乎是不自然的。 为了探索对话式质量检查环境,我们提出了一个更为现实的任务:回答一系列简单但相互关联的问题。 作者从Wikipedia收集了6,066个问题序列的数据集,这些问题序列查询了半结构化表格,总共有17,553个问题-答案对。 现有的QA系统在作者的数据集上进行评估时面临两个主要问题:(1)处理包含对先前问题或答案的共同引用的问题,以及(2)将问题中的单词或短语与关联表中的对应条目进行匹配。
作者提出了这样一个数据集,其中的问题是简单问题但是是有内在关联的,这样的数据集转向了一种更具对话性的多回合方案,在这种方案中,系统必须依靠先前的上下文来回答用户当前的问题。 为此,作者引入了SQA,该数据集由6,066个有关Wikipedia表的相互关联的问题的唯一序列组成,总共有17,553个问题-答案对。 据我们所知,SQA是第一个处理顺序问题解答的语义分析数据集,这是信息访问的更自然的界面
实际Web数据上的机器阅读理解(MRC)通常要求机器通过分析搜索引擎检索到的多个段落来回答问题。 与单通道的MRC相比,多通道的MRC更具挑战性,因为我们很可能会从不同的通道中获得多个令人困惑的答案候选者。 为了解决这个问题,我们提出了一种端到端的神经模型,该模型可使那些来自不同段落的答案候选者根据其内容表示来相互验证。 具体来说,我们联合训练三个模块,这些模块可以基于三个因素来预测最终答案:答案边界,答案内容和跨通道答案验证。 实验结果表明,我们的方法在很大程度上优于基线,并且在英语MS-MARCO数据集和中文DuReader数据集上均达到了最先进的性能,这两种数据集都是为实际环境中的MRC设计的 。
在本文中,我们提出了一个端到端的框架来解决多通道MRC任务。 我们在模型中创造性地设计了三个不同的模块,它们可以找到答案边界,对答案内容进行建模并进行跨通道答案验证。 可以使用不同形式的答案标签来训练所有这三个模块,并且一起训练它们可以提供进一步的改进。 实验结果表明,我们的模型在很大程度上优于基线模型,并且在两个具有挑战性的数据集上均达到了最新的性能,这两个数据集都是为在实际Web数据上的MRC设计的。
判别式问答模型可能过度适合数据集中的表面偏见,因为当任何线索使答案成为可能时,它们的损失函数就会饱和。 我们介绍了问题和答案的联合分布的生成模型,这些模型经过训练可以解释整个问题,而不仅仅是回答它。 我们的问题回答(QA)模型是通过学习先验答案和条件语言模型来实现的,该条件语言模型根据给定的答案来生成问题-在逐字生成问题时允许进行可扩展且可解释的多跳推理。 我们的模型通过在SQUAD和CLEVR基准测试中具有可比性的判别模型而获得了具有竞争力的性能,这表明与以前的工作相比,它是用于语言理解和推理的更通用的体系结构。 该模型极大地提高了从有偏见的训练数据到对抗测试数据的通用性,从而在ADVERSARIALSQUAD上获得了最新的结果
本文提出基于生成模型架构的机器阅读模型,其优化的目标是:给定context,最大化question和answer的联合概率,用概率表示为p(a,q|c)。该概率可以分解为p(a|c)p(q|a,c)。对于这两部分,分别训练两个模型,最后在预测时,遍历所有候选的answer选出最大化联合概率p(a,q|c)的answer作为预测结果。
基于知识库的问题解答(KB-QA)在处理需要分解为子问题的复杂问题时提出了挑战。 这里要解决的一个重要案例是时间问题,需要发现和处理时间关系的线索。 我们提出TEQUILA,这是一种可以在任何KB-QA引擎之上运行的时间QA的使能方法。 TEQUILA有四个阶段。 它检测问题是否具有时间意图。 它分解问题并将其重写为非时间子问题和时间约束。 然后,从基础KB-QA引擎检索对子问题的答案。 最后,TEQUILA在时间间隔上使用约束推理来计算完整问题的最终答案。 与最先进的基准进行比较显示了我们方法的可行性。
TEQUILA将复合时间问题分解为一个或多个非时间子问题(返回候选答案)和一个或多个时间子问题(返回时间约束)。子问题的结果通过相交的答案相结合。 将约束应用于与非时间子问题的结果相关的时间范围。 作者使用从第一原理设计的一组词汇语法规则来分解问题并将其重写为其组成部分
理解复杂问题的组成语义是质量检查的一个公开挑战。 我们专注于暂时性问题解答(KB),这是应付重要信息需求的重要步骤。 我们的方法在最近的基准测试中表现出了提高的性能,并且在一般复杂问题上的表现优于最新的基准。 我们的工作强调了构建可重复使用的模块的价值,这些模块可改进多个KB-QA系统
上一篇:主题班会策划论文
下一篇:维普论文查重大学