首页 > 学术论文知识库 > 弱监督目标检测论文讲解

弱监督目标检测论文讲解

发布时间:

弱监督目标检测论文讲解

场景文本检测器由文本检测和识别模块组成。已经进行了许多研究,以将这些模块统一为端到端的可训练模型,以实现更好的性能。典型的结构将检测和识别模块放置在单独的分支中,并且RoI pooling通常用于让分支共享视觉特征。然而,当采用识别器时,仍然有机会在模块之间建立更互补的连接,该识别器使用基于注意力的解码器和检测器来表示字符区域的空间信息。这是可能的,因为两个模块共享一个共同的子任务,该任务将查找字符区域的位置。基于这些见解,我们构建了紧密耦合的单管道模型。通过使用检测输出作为识别器输入,并在检测阶段传播识别损失来形成此结构。字符得分图的使用有助于识别器更好地关注字符中心点,并且识别损失传播到检测器模块会增强字符区域的定位。此外,增强的共享阶段允许对任意形状的文本区域进行特征校正和边界定位。大量实验证明了公开提供的直线和曲线基准数据集的最新性能。

场景文本定位,包括文本检测和识别,由于在即时翻译,图像检索和场景解析中的各种应用,最近引起了广泛的关注。尽管现有的文本检测器和识别器在水平文本上很有效,但是在场景图像中发现弯曲的文本实例时,仍然是一个挑战。

为了在图像中发现弯曲的文本,一种经典的方法是将现有的检测和识别模型进行级联,以管理每一侧的文本实例。检测器[32、31、2]尝试通过应用复杂的后处理技术来捕获弯曲文本的几何属性,而识别器则应用多向编码[6]或采用修正模块[37、46、11]来增强弯曲文本上识别器的准确性。

随着深度学习的发展,已经进行了将检测器和识别器组合成可共同训练的端到端网络的研究[14,29]。拥有统一的模型不仅可以提高模型的尺寸效率和速度,还可以帮助模型学习共享功能,从而提高整体性能。为了从该属性中受益,还尝试使用端到端模型[32、34、10、44]处理弯曲文本实例。但是,大多数现有的工作仅采用RoI pooling 在检测和识别分支之间共享底层特征。在训练阶段,不是训练整个网络,而是使用检测和识别损失来训练共享特征层。

如图1所示,我们提出了一种新颖的端到端字符区域注意文本定位模型,称为CRAFTS。而不是将检测和识别模块隔离在两个单独的分支中,我们通过在模块之间建立互补连接来建立一个单一的pipline。我们观察到,使用基于注意力的解码器的识别器[1]和封装字符空间信息的检测器[2]共享一个公用的子任务,该子任务用于定位字符区域。通过将两个模块紧密集成,检测级的输出可帮助识别器更好地识别字符中心点,并且从识别器传播到检测器级的损失会增强字符区域的定位。而且,网络能够使在公共子任务中使用的特征表示的质量最大化。据我们所知,这是构建紧密耦合损失的首个端到端工作。 我们的贡献总结如下: (1)我们提出了一种可以检测和识别任意形状的文本的端到端网络。 (2)通过利用来自修正和识别模块上检测器的空间字符信息,我们在模块之间构造互补关系。 (3)通过在整个网络的所有特征中传播识别损失来建立单个pipline。 (4)我们在包含大量水平,弯曲和多语言文本的IC13,IC15,IC19-MLT和TotalText [20、19、33、7]数据集中实现了最先进的性能。

文本检测和识别方法 检测网络使用基于回归的[16、24、25、48]或基于分割的[9、31、43、45]方法来生成文本边界框。诸如[17,26,47]之类的一些最新方法将Mask-RCNN [13]作为基础网络,并通过采用多任务学习从回归和分割方法中获得了优势。就文本检测的单元而言,所有方法还可以依赖单词级别或字符级别[16,2]预测的使用进行子分类。

文本识别器通常采用基于CNN的特征提取器和基于RNN的序列生成器,并按其序列生成器进行分类。连接主义的时间分类(CTC)[35]和基于注意力的顺序解码器[21、36]。 检测模型提供了文本区域的信息,但是对于识别器而言,要提取任意形状的文本中的有用信息仍然是一个挑战。 为了帮助识别网络处理不规则文本,一些研究[36、28、37]利用 空间变换器网络(STN) [18]。而且,论文[11,46]通过迭代执行修正方法进一步扩展了STN的使用。这些研究表明,递归运行STN有助于识别器提取极端弯曲文本中的有用特征。在[27]中,提出了循环RoIWarp层, 在识别单个字符之前对其进行裁剪。这项工作证明,找到字符区域的任务与基于注意力的解码器中使用的注意力机制密切相关。

构造文本定位模型的一种方法是依次放置检测和识别网络。众所周知的两阶段结构将TextBox ++ [24]检测器和CRNN [35]识别器耦合在一起。简单来说,该方法取得了良好的效果。

端到端的使用基于RNN的识别器 EAA [14]和FOTS [29]是基于EAST检测器[49]的端到端模型。这两个网络之间的区别在于识别器。 FOTS模型使用CTC解码器[35],而EAA模型使用注意力解码器[36]。两项工作都实现了仿射变换层来合并共享功能。提出的仿射变换在水平文本上效果很好,但在处理任意形状的文本时显示出局限性。 TextNet [42]提出了一种在特征池化层中具有透视RoI变换的空间感知文本识别器, 网络保留RNN层以识别2D特征图中的文本序列,但是由于缺乏表现力的四边形,在检测弯曲文本时,网络仍然显示出局限性。

Qin等[34]提出了一种基于Mask-RCNN [13]的端到端网络。给定box proposals,从共享层合并特征,并使用ROI遮罩层过滤掉背景杂波。提出的方法通过确保注意力仅在文本区域中来提高其性能。Busta等提出了Deep TextSpotter [3]网络,并在E2E-MLT [4]中扩展了他们的工作。该网络由基于FPN的检测器和基于CTC的识别器组成。该模型以端到端的方式预测多种语言。

端到端的使用基于CNN的识别器 在处理任意形状的文本时,大多数基于CNN的模型在识别字符级文本都具有优势。 MaskTextSpotter [32]是使用分割方法识别文本的模型。尽管它在检测和识别单个字符方面具有优势, 但由于通常不会在公共数据集中提供字符级别的注释,因此很难训练网络。 CharNet [44]是另一种基于分割的方法,可以进行字符级预测。该模型以弱监督的方式进行训练,以克服缺乏字符级注释的问题。在训练期间,该方法执行迭代字符检测以创建伪ground-truths。

尽管基于分割的识别器已经取得了巨大的成功,但是当目标字符的数量增加时,该方法会受到影响。随着字符集数量的增加,基于分割的模型需要更多的输出通道,这增加了内存需求。journal版本的MaskTextSpotter [23]扩展了字符集以处理多种语言,但是作者添加了基于RNN的解码器,而不是使用他们最初提出的基于CNN的识别器。 基于分割的识别器的另一个限制是识别分支中缺少上下文信息。 由于缺少像RNN这样的顺序建模,在嘈杂的图像下,模型的准确性下降。

TextDragon [10]是另一种基于分割的方法,用于定位和识别文本实例。但是, 不能保证预测的字符段会覆盖单个字符区域。为了解决该问题,该模型合并了CTC来删除重叠字符。 该网络显示出良好的检测性能,但是由于缺少顺序建模而在识别器中显示出局限性。

由于CRAFT检测器[2]具有表示字符区域语义信息的能力,因此被选作基础网络。 CRAFT网络的输出表示字符区域以及它们之间的连接的中心概率。由于两个模块的目标是定位字符的中心位置,我们设想此字符居中信息可用于支持识别器中的注意模块。 在这项工作中,我们对原始的CRAFT模型进行了三处更改;骨干替换,连接表示和方向估计。

骨干置换 最近的研究表明,使用ResNet50可以捕获检测器和识别器定义的明确的特征表示[30,1]。因此,我们将骨干网络由VGG-16 [40]换成ResNet50 [15]。

连接表示 垂直文本在拉丁文本中并不常见,但是在东亚语言(例如中文,日语和韩语)中经常出现。在这项工作中,使用二进制中心线连接顺序字符区域。进行此改变的原因是,在垂直文本上使用原始的亲和力图经常会产生不适定的透视变换,从而生成无效的框坐标。为了生成 ground truth连接图,在相邻字符之间绘制一条粗细为t的线段。这里,t = max((d 1 + d 2)/ 2 *α,1),其中d 1和d 2是相邻字符盒的对角线长度,α是缩放系数。使用该方程式可使中心线的宽度与字符的大小成比例。我们在实现中将α设置为。

方向估计 重要的是获取文本框的正确方向,因为识别阶段需要定义明确的框坐标才能正确识别文本。为此,我们在检测阶段增加了两个通道的输出,通道用于预测字符沿x轴和y轴的角度。为了生成定向图的 ground truth.

共享阶段包括两个模块:文本纠正模块和字符区域注意力( character region attention: CRA)模块。为了纠正任意形状的文本区域,使用了薄板样条(thin-plate spline:TPS)[37]转换。受[46]的启发,我们的纠正模块结合了迭代式TPS,以更好地表示文本区域。通过有吸引力地更新控制点,可以改善图像中文本的弯曲几何形状。 通过实证研究,我们发现三个TPS迭代足以校正。

典型的TPS模块将单词图像作为输入,但是我们提供了字符区域图和连接图,因为它们封装了文本区域的几何信息。我们使用二十个控制点来紧密覆盖弯曲的文本区域。为了将这些控制点用作检测结果,将它们转换为原始输入图像坐标。我们可以选择执行2D多项式拟合以平滑边界多边形。迭代TPS和最终平滑多边形输出的示例如图4所示。

识别阶段的模块是根据[1]中报告的结果形成的。 识别阶段包含三个组件:特征提取,序列建模和预测。 由于特征提取模块采用高级语义特征作为输入,因此它比单独的识别器更轻便。

表1中显示了特征提取模块的详细架构。提取特征后,将双向LSTM应用于序列建模,然后基于注意力的解码器进行最终文本预测。

在每个时间步,基于注意力的识别器都会通过屏蔽对特征的注意力输出来解码文本信息。 尽管注意力模块在大多数情况下都能很好地工作,但是当注意点未对齐或消失时,它无法预测字符[5,14]。 图5显示了使用CRA模块的效果。 适当放置的注意点可以进行可靠的文本预测。

用于训练的最终损失L由检测损失和识别损失组成,取L = Ldet + Lreg。 识别损失的总体流程如图6所示。损失在识别阶段流经权重,并通过字符区域注意模块传播到检测阶段。 另一方面,检测损失被用作中间损失,因此使用检测和识别损失来更新检测阶段之前的权重。

English datasets IC13 [20]数据集由高分辨率图像组成,229张图像用于训练和233张图像用于测试。 矩形框用于注释单词级文本实例。 IC15 [20]包含1000个训练图像和500个测试图像。 四边形框用于注释单词级文本实例。 TotalText [7] 拥有1255个训练图像和300张测试图像。与IC13和IC15数据集不同,它包含弯曲的文本实例,并使用多边形点进行注释。

Multi-language dataset IC19 [33]数据集包含10,000个训练和10,000个测试图像。 数据集包含7种不同语言的文本,并使用四边形点进行注释。

我们联合训练CRAFTS模型中的检测器和识别器。为了训练检测阶段,我们遵循[2]中描述的弱监督训练方法。通过在每个图像中进行批随机采样的裁剪单词特征来计算识别损失。每个图像的最大单词数设置为16,以防止出现内存不足错误。检测器中的数据增强应用了诸如裁剪,旋转和颜色变化之类的技术。对于识别器来说,ground truth框的角点在框的较短长度的0%到10%之间的范围内受到干扰。

该模型首先在SynthText数据集[12]上进行了50k迭代训练,然后我们进一步在目标数据集上训练了网络。使用Adam优化器,并应用在线困难样本挖掘On-line Hard Negative Mining(OHEM) [39]来在检测损失中强制使用正负像素的1:3比例。微调模型时,SynthText数据集以1:5的比例混合。我们采用94个字符来覆盖字母,数字和特殊字符,对于多语言数据集则采用4267个字符。

水平数据集(IC13,IC15) 为了达到IC13基准,我们采用在SynthText数据集上训练的模型,并在IC13和IC19数据集进行微调。在;推理过程中,我们将输入的较长边调整为1280。 结果表明,与以前的最新技术相比,性能显着提高。

然后在IC15数据集上对在IC13数据集上训练的模型进行微调。在评估过程中,模型的输入大小设置为2560x1440。请注意,我们在没有通用词汇集的情况下执行通用评估。表2中列出了IC13和IC15数据集的定量结果。

使用热图来说明字符区域图和连接图,并且在HSV颜色空间中可视化了加权的像素角度值。 如图所示,网络成功定位了多边形区域并识别了弯曲文本区域中的字符。左上角的两个图显示成功识别了完全旋转和高度弯曲的文本实例。

由字符区域注意辅助的注意力 在本节中,我们将通过训练没有CRA的单独网络来研究字符区域注意(CRA)如何影响识别器的性能。

表5显示了在基准数据集上使用CRA的效果。没有CRA,我们观察到在所有数据集上性能均下降。特别是在远景数据集(IC15)和弯曲数据集(TotalText)上,我们观察到与水平数据集(IC13)相比,差距更大。这意味着在处理不规则文本时,送入字符注意力信息可以提高识别器的性能。(?表格中的实验数据是对远景文本更有效,不知道这个结论如何得出来的?)

方向估计的重要性 方向估计很重要,因为场景文本图像中有许多多方向文本。我们的逐像素平均方案对于识别器接收定义良好的特征非常有用。当不使用方向信息时,我们比较模型的结果。在IC15数据集上,性能从%下降到%(%),在TotalText数据集上,h-mean值从%下降到%(%)。 结果表明,使用正确的角度信息可以提高旋转文本的性能。

推理速度 由于推理速度随输入图像大小而变化,因此我们在不同的输入分辨率下测量FPS,每个分辨率的较长边分别为960、1280、1600和2560。测试结果得出的FPS分别为、、和。对于所有实验,我们使用Nvidia P40 GPU和Intel®Xeon®CPU。与基于VGG的CRAFT检测器的 FPS [2]相比,基于ResNet的CRAFTS网络在相同大小的输入上可获得更高的FPS。而且,直接使用来自修正模块的控制点可以减轻对多边形生成进行后期处理的需要。

粒度差异问题 我们假设 ground-truth与预测框之间的粒度差异导致IC15数据集的检测性能相对较低。 字符级分割方法倾向于基于空间和颜色提示来概括字符连接性,而不是捕获单词实例的全部特征。 因此,输出不遵循基准测试要求的框的注释样式。图9显示了IC15数据集中的失败案例,这证明了当我们观察到可接受的定性结果时,检测结果被标记为不正确。

在本文中,我们提出了一种将检测和识别模块紧密耦合的端到端可训练单管道模型。 共享阶段中的字符区域注意力充分利用了字符区域图,以帮助识别器纠正和更好地参与文本区域。 此外,我们设计了识别损失通过在检测阶段传播并增强了检测器的字符定位能力。 此外,共享阶段的修正模块可以对弯曲的文本进行精细定位,并且无需开发手工后期处理。 实验结果验证了CRAFTS在各种数据集上的最新性能。

近年来,无监督的深度神经网络在计算机视觉技术、自然语言处理和语音识别任务上都已经取得了很大的进步,而在信息检索的排序上却仍在原地踏步,没有太大的改进。其中的原因可能在于排序问题本身的复杂性,因为在没有监督信号的情况下,神经网络很难从查询内容和文档中获取信息。因此,我们在这篇文章中提出了使用“弱监督”来训练神经排序模型。也就是说,所有训练所需的标签都是机器自己获取的,不存在任何人工输入的标签。

为此,我们把一个“无监督”排序模型的输出结果,比如BM25,当做一个“弱监督”模型的信号来使用。接下来,我们会进一步基于“前馈神经网络”对一系列简单却十分高效的排序模型进行训练。我们还会考察它们在不同的训练场景下的效果,例如:使用不同的输入表征(密集/稀疏表征向量,或者是“嵌入”文字表征),分别训练“逐点模型”和“成对模型”。我们能够从无监督IR模型中轻易地获得“弱标记数据”,实验的结果反映,提前对大量的“弱标记数据”进行训练,对有监督的神经排序模型非常有益。

我们调查的三个主要问题:

问题一:单凭来自无监督IR模型的标签作为弱监督训练数据,比如BM25,有可能完成一个神经排序模型的训练吗?

问题二:在这样的情况下,什么样的输入表征和学习目标是最适合模型训练的?

问题三:弱监督的操作过程,尤其是在标记数据有限的情况下,能否优化有监督的学习模型?

排序的体系结构

我们对三种神经排序模型进行了尝试:

1、分数模型

这种架构实际上是一个预测“查询文档”组合的检索分数的逐点排序模型。专业地来说,这种架构的目标就是掌握一个“分数功能”,这一功能能够决定一个“查询文档”的检索分数。我们可以用线性回归图来大致地表示这个问题:

2、排序模型

与第一种“分数模型”相同的是,“排序模型”的目标也是掌握“分数功能”。但不同的是,“排序模型”并不是为了使分数搜索功能标准化。因此我们在“排序模型”的训练中使用了“双情境”。具体来说就是我们在训练中使用了两个参数相同的逐点模型。为了最大程度地降低损耗,我们更新了其中的参数:

在推导过程中,由于两个模型是完全一样的,我们只取了其中一个作为最终的分数功能模型,并且把经过训练的模型以逐点的方式使用。

3、试验排序模型

第三种排序架构的基础是一个包括训练和推导的“双情境”。这种模型是为了学习包含一个查询内容和两个文档(d1和d2)的“排序功能”而设计的。根据查询内容,模型会预测d1文档排名高于d2文档的可能性。这个问题可以用回归图大致表达:

我们在路边看到萌犬可爱至极,然后却不知道这个是哪种狗;看见路边的一个野花却不知道叫什么名字,吃着一种瓜,却不知道是甜瓜还是香瓜傻傻分不清…… 细粒度图像分析任务相对通用图像任务的区别和难点在于其图像所属类别的粒度更为精细。 细粒度分类目前的应用场景很广泛,现在的网络大多分为有监督的和半监督的。 有监督的做法基于强监督信息的细粒度图像分类模型,是在模型训练时,为了获得更好的分类精度,除了图像的类别标签外,还使用了物体标注框(bounding box)和部位标注点(part annotation)等额外的人工标注信息。 基于弱监督信息的细粒度图像分类模型,基于强监督信息的分类模型虽然取得了较满意的分类精度,但由于标注信息的获取代价十分昂贵,在一定程度上也局限了这类算法的实际应用。因此,目前细粒度图像分类的一个明显趋势是,希望在模型训练时仅使用图像级别标注信息,而不再使用额外的partannotation信息时,也能取得与强监督分类模型可比的分类精度。 了解了大体的做法,我将从一些paper入手,讲解目前细粒度图像分析的具体实现。 是基于深度学习的细粒度图像检索方法。在SCDA中,细粒度图像作为输入送入Pre-Trained CNN模型得到卷积特征/全连接特征,如下图所示。 区别于传统图像检索的深度学习方法,针对细粒度图像检索问题,作者发现卷积特征优于全连接层特征,同时创新性的提出要对卷积描述子进行选择。 不过SCDA与之前提到的Mask-CNN的不同点在于,在图像检索问题中,不仅没有精细的Part Annotation,就连图像级别标记都无从获取。这就要求算法在无监督条件下依然可以完成物体的定位,根据定位结果进行卷积特征描述子的选择。对保留下来的深度特征,分别做以平均和最大池化操作,之后级联组成最终的图像表示。 很明显,在SCDA中,最重要的就是如何在无监督条件下对物体进行定位。 通过观察得到的卷积层特征,如下图所示,可以发现明显的"分布式表示"特性。 对两种不同鸟类/狗,同一层卷积层的最强响应也差异很大。如此一来,单独选择一层卷积层特征来指导无监督物体定位并不现实,同时全部卷积层特征都拿来帮助定位也不合理。例如,对于第二张鸟的图像来说,第108层卷积层较强响应竟然是一些背景的噪声。 基于这样的观察,作者提出将卷积特征(HxWxD)在深度方向做加和,之后可以获得Aggregation Map(HxWx1)。 在这张二维图中,可以计算出所有HxW个元素的均值,而此均值m便是该图物体定位的关键:Aggregation Map中大于m的元素位置的卷积特征需保留;小于的则丢弃。 这一做法的一个直观解释是,细粒度物体出现的位置在卷积特征张量的多数通道都有响应,而将卷积特征在深度方向加和后,可以将这些物体位置的响应累积--有点"众人拾柴火焰高"的意味。 而均值则作为一把"尺子",将"不达标"的响应处标记为噪声,将"达标"的位置标为物体所在。而这些被保留下来的位置,也就对应了应保留卷积特征描述子的位置。 实验中,在细粒度图像检索中,SCDA同样获得了最好结果;同时SCDA在传统图像检索任务中,也可取得同目前传统图像检索任务最好方法相差无几(甚至优于)的结果,如下图所示。 RA-CNN算法不需要对数据做类似bounding box的标注就能取得和采用类似bounding box标注的算法效果。在网络结构设计上主要包含3个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,在每个scale子网络中包含两种类型的网络:分类网络和APN网络。 数据流是这样的:输入图像通过分类网络提取特征并进行分类,然后attention proposal network(APN)网络基于提取到的特征进行训练得到attention区域信息,再将attention区域crop出来并放大,再作为第二个scale网络的输入,这样重复进行3次就能得到3个scale网络的输出结果,通过融合不同scale网络的结果能达到更好的效果。 针对分类网络和APN网络设计两个loss,通过固定一个网络的参数训练另一个网络的参数来达到交替训练的目的. 如下图所示,网络能够逐渐定位attention area,然后再将此区域放大,继续作为第二个scale网络的输入。

无监督异常检测论文集

雷锋网 AI 科技评论按: 百度研究院、华中科技大学、悉尼科技大学联合新作——关于无监督领域自适应语义分割的论文《 Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation》被 CCF A 类学术会议 CVPR2019 收录为 Oral 论文 。该论文提出了一种从「虚拟域」泛化到「现实域」的无监督语义分割算法,旨在利用易获取的虚拟场景标注数据来完成对标注成本高昂的现实场景数据的语义分割,大大减少了人工标注成本。 本文是论文作者之一罗亚威为雷锋网 AI 科技评论提供的论文解读。 论文地址: 1.问题背景 基于深度学习的语义分割方法效果出众,但需要大量的人工标注进行监督训练。不同于图像分类等任务,语义分割需要像素级别的人工标注,费时费力,无法大规模实施。借助于计算机虚拟图像技术,如3D游戏,用户可以几乎无成本地获得无限量自动标注数据。然而虚拟图像和现实图像间存在严重的视觉差异(域偏移),如纹理、光照、视角差异等等,这些差异导致在虚拟图像上训练出的深度模型往往在真实图像数据集上的分割精度很低。 2. 传统方法 针对上述域偏移问题,一种广泛采用的方法是在网络中加入一个域判别器Discriminator (D),利用对抗训练的机制,减少源域Source (S)和目标域Target(T)之间不同分布的差异,以加强原始网络(G)在域间的泛化能力。方法具体包括两方面: (1)利用源域的有标签数据进行有监督学习,提取领域知识: 其中Xs,Ys为源域数据及其对应标签。 (2)通过对抗学习,降低域判别器(D)的精度,以对齐源域与目标域的特征分布: 其中XT为目标域数据,无标签。 3.我们针对传统方法的改进 以上基于对抗学习的传统域适应方法只能对齐全局特征分布(Marginal Distribution),而忽略了不同域之间,相同语义特征的语义一致性(Joint Distribution),在训练过程中容易造成负迁移,如图2(a)所示。举例来说,目标域中的车辆这一类,可能与源域中的车辆在视觉上是接近的。因此,在没有经过域适应算法之前,目标域车辆也能够被正确分割。然而,为了迎合传统方法的全局对齐,目标域中的车辆特征反而有可能会被映射到源域中的其他类别,如火车等,造成语义不一致。 针对这一问题,我们在今年CVPR的论文中,向对抗学习框架里加入了联合训练的思想,解决了传统域适应方法中的语义不一致性和负迁移等键问题。具体做法见图2(b),我们采用了两个互斥分类器对目标域特征进行分类。当两个分类器给出的预测很一致时,我们认为该特征已经能被很好的分类,语义一致性较高,所以应减少全局对齐策略对这些特征产生的负面影响。反之,当两个分类器给出的预测不一致,说明该目标域特征还未被很好地分类,依然需要用对抗损失进行与源域特征的对齐。所以应加大对齐力度,使其尽快和源域特征对应。 4.网络结构 为了实现上述语义级对抗目标,我们提出了Category-Level Adversarial Network (CLAN)。 遵循联合训练的思想,我们在生成网络中采用了互斥分类器的结构,以判断目标域的隐层特征是否已达到了局部语义对齐。在后续对抗训练时,  网络依据互斥分类器产生的两个预测向量之差(Discrepancy)来对判别网络所反馈的对抗损失进行加权。网络结构如下图3所示。  图3中,橙色的线条表示源域流,蓝色的线条表示目标域流,绿色的双箭头表示我们在训练中强迫两个分类器的参数正交,以达到互斥分类器的目的。源域流和传统的方法并无很大不同,唯一的区别是我们集成了互斥分类器产生的预测作为源域的集成预测。该预测一方面被标签监督,产生分割损失(Segmentation Loss),如式(3)所示: 另一方面,该预测进入判别器D,作为源域样本。 绿色的双箭头处,我们使用余弦距离作为损失,训练两个分类器产生不同的模型参数: 目标域流中,集成预测同样进入判别器D。不同的是,我们维持两个分类器预测的差值,作为局部对齐程度的依据 (local alignment score map)。该差值与D所反馈的损失相乘,生成语义级别的对抗损失: 该策略加大了语义不一致特征的对齐力度,而减弱了语义一致的特征受全局对齐的影响,从而加强了特征间的语义对齐,防止了负迁移的产生。 最后,根据以上三个损失,我们可以得出最终的总体损失函数: 基于以上损失函数,算法整体的优化目标为: 在训练中,我们交替优化G和D,直至损失收敛。 5. 特征空间分析 我们重点关注不常见类,如图4(a)中黄框内的柱子,交通标志。这些类经过传统方法的分布对齐,反而在分割结果中消失了。结合特征的t-SNE图,我们可以得出结论,有些类的特征在没有进行域迁移之前,就已经是对齐的。传统的全局域适应方法反而会破坏这种语义一致性,造成负迁移。而我们提出的语义级别对抗降低了全局对齐对这些已对齐类的影响,很好的解决了这一问题。 6. 实验结果  我们在两个域适应语义分割任务,即GTA5 -> Cityscapes 和 SYNTHIA -> Cityscapes 上进行了实验验证。我们采用最常见的Insertion over Union作为分割精度的衡量指标,实验结果如下。从表1和表2中可以看出,在不同网络结构(VGG16,ResNet101)中,我们的方法(CLAN)域适应效果都达到了 state-of-the-art的精度。特别的,在一些不常见类上(用蓝色表示),传统方法容易造成负迁移,而CLAN明显要优于其他方法。 表 1. 由虚拟数据集GTA5 迁移至真实数据集 Cityscapes 的域适应分割精度对比。  表 2. 由虚拟数据集SYNTHIA 迁移至真实数据集 Cityscapes 的域适应分割精度对比。 第二个实验中,我们了展示隐空间层面,源域和目标域间同语义特征簇的中心距离。该距离越小,说明两个域间的语义对齐越好。结果见图 5。 最后,我们给出分割结果的可视化效果。我们的算法大大提高了分割精度。 7. 总结 《Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation》引入了联合训练结合对抗学习的设计,在无监督域适应语义分割任务中取得了较好的实验结果。该算法能应用前景广泛,比如能够很好地应用到自动驾驶中,让车辆在不同的驾驶环境中也能保持鲁棒的街景识别率。 最后 CVPR 2019 Oral 论文精选汇总,值得一看的 CV 论文都在这里(持续更新中)CVPR 2019 即将于 6 月在美国长滩召开。今年有超过 5165 篇的大会论文投稿,最终录取 1299 篇,其中 Oral 论文近 300 篇。为了方便社区开发者和学术青年查找和阅读高价值论文,AI 研习社从入选的 Oral 论文中,按应用方向挑选了部分精华论文,贴在本文,打开链接即可查看~

“异常”通常是一个主观的判断,什么样的数据被认为是“异常”的,需要结合业务背景和环境来具体分析确定。实际上,数据通常嵌入在大量的噪声中,而我们所说的”异常值“通常指具有特定业务意义的那一类特殊的异常值。噪声可以视作特性较弱的异常值,没有被分析的价值。 在普通的数据处理中,我们通常保留正常的数据,而对噪声和异常值的特性则基本忽略。但在异常检测中,我们弱化了“噪声”和“正常数据”之间的区别,专注于那些具有有价值特性的异常值。在基于相似度的方法中,主要思想是异常点与正常点不同。 基于距离的方法是一种常见的异常检测算法,它基于最邻距离来定义异常值。此类方法不仅适用于多维数值数据,在其他领域,例如分类数据,文本数据,时间序列数据序列数据也有广泛的应用。 基于距离的异常检测有这样一个前提假设,即异常点的 近邻距离要远大于正常点。解决问题的最简单的方法是使用嵌套循环。第一层循环遍历每个数据,第二层循环进行异常判断,需要计算当前点与其他点的距离,一旦已识别出多余 个数据点与当前点的距离在 之内,则将该点自动标记为非异常值。这样计算的时间复杂度为 ,当数据量较大时,这样计算并不划算。因此需要修剪方法以加快距离计算。 在基于单元格的技术中,数据空间被划分为单元格,单元格的宽度是阈值D和数据维度数的函数。具体地说,每个维度被划分成宽度最多为 单元格。在给定的单元以及相邻的单元中存在的数据点满足某些特性,这些特性可以让数据被更有效的处理 以二维情况为例,此时网格间的距离为 ,需要记住的一点是,网格单元的数量基于数据空间的分区,并且与数据的数量点无关。这是决定该方法在低维数据上的效率的重要因素,在这种情况下,网格单元的数量可能不多。另一方面,此方法不适用于更高维的数据。对于给定的单元格,其 邻居被定义为通过最多1个单元间的边界可从该单元到达的单元格的集合。请注意,在一个角上接触的两个单元格也是 邻居。 邻居是通过跨越2个或者3个边界而获得的那些单元格。上图中显示了标记为 的特定单元格及其 和 邻居集。显然,内部单元具有8个 邻居和40个 邻居。然后,可以立即观察到以下的几种性质: 此过程的第一步是将部分数据点直接标记为非异常值(如果由于第一个规则而导致他们的单元格包含 个点以上)。此外,此类单元格的所有相邻单元格仅包含非异常值。为了充分利用第一条规则的修剪能力,确定每个单元格及其 邻居中点的总和。如果总数大于 ,则这些点也都标记为非离群点。 接下来,利用第二条规则的修剪能力。 对于包含至少一个数据点的每个单元格 ,计算其中的点数及其 和 邻居的总和。 如果该数字不超过 ,则将单元格 中的所有点标记为离群值。 此时,许多单元可能被标记为异常值或非异常值。 对于此时仍未标记为异常值或非异常值的单元格中的数据点需要明确计算其 最近邻距离。即使对于这样的数据点,通过使用单元格结构也可以更快地计算出 个最近邻的距离。考虑到目前为止尚未被标记为异常值或非异常值的单元格 。这样的单元可能同时包含异常值和非异常值。单元格 中数据点的不确定性主要存在于该单元格的 邻居中的点集。无法通过规则知道 的 邻居中的点是否在阈值距离 内,为了确定单元 中数据点与其 邻居中的点集在阈值距离 内的点数,需要进行显式距离计算。对于那些在 和 中不超过 个且距离小于 的数据点,则声明为异常值。需要注意,仅需要对单元 中的点到单元 的 邻居中的点执行显式距离计算。这是因为已知 邻居中的所有点到 中任何点的距离都小于 ,并且已知 中 的所有点与 上任何点的距离至少为 。因此,可以在距离计算中实现额外的节省。 对于一个给定数据集,基于索引的方法利用多维索引结构(如 树、 树)来搜索每个数据对象 在半径 范围 内的相邻点。设 是一个异常值在其 -邻域内允许含有对象的最多个数,若发现某个数据对象 的 -邻域内出现 甚至更多个相邻点, 则判定对象 不是异常值。该算法时间复杂度在最坏情况下为 其中 是数据集维数, 是数据集包含对象的个数。该算法在数据集的维数增加时具有较好的扩展性,但是时间复杂度的估算仅考虑了搜索时间,而构造索引的任务本身就需要密集复杂的计算量。 基于密度的算法主要有局部离群因子(LocalOutlierFactor,LOF),以及LOCI、CLOF等基于LOF的改进算法。下面我们以LOF为例来进行详细的介绍和实践。 基于距离的检测适用于各个集群的密度较为均匀的情况。在下图中,离群点B容易被检出,而若要检测出较为接近集群的离群点A,则可能会将一些集群边缘的点当作离群点丢弃。而LOF等基于密度的算法则可以较好地适应密度不同的集群情况。 那么,这个基于密度的度量值是怎么得来的呢?还是要从距离的计算开始。类似k近邻的思路,首先我们也需要来定义一个“k-距离”。 对于数据集D中的某一个对象o,与其距离最近的k个相邻点的最远距离表示为k-distance(p),定义为给定点p和数据集D中对象o之间的距离d(p,o),满足: 由k-距离,我们扩展到一个点的集合——到对象o的距离小于等于k-距离的所有点的集合,我们称之为k-邻域: 。 在二维平面上展示出来的话,对象o的k-邻域实际上就是以对象o为圆心、k-距离为半径围成的圆形区域。就是说,k-邻域已经从“距离”这个概念延伸到“空间”了。 有了邻域的概念,我们可以按照到对象o的距离远近,将数据集D内的点按照到o的距离分为两类: 给定点p关于对象o的可达距离用数学公式可以表示为: 。 这样的分类处理可以简化后续的计算,同时让得到的数值区分度更高。 我们可以将“密度”直观地理解为点的聚集程度,就是说,点与点之间距离越短,则密度越大。在这里,我们使用数据集D中给定点p与对象o的k-邻域内所有点的可达距离平均值的倒数(注意,不是导数)来定义局部可达密度。   给定点p的局部可达密度计算公式为: 由公式可以看出,这里是对给定点p进行度量,计算其邻域内的所有对象o到给定点p的可达距离平均值。给定点p的局部可达密度越高,越可能与其邻域内的点 属于同一簇;密度越低,越可能是离群点。 表示点p的邻域 内其他点的局部可达密度与点p的局部可达密度之比的平均数。如果这个比值越接近1,说明o的邻域点密度差不多,o可能和邻域同属一簇;如果这个比值小于1,说明o的密度高于其邻域点密度,o为密集点;如果这个比值大于1,说明o的密度小于其邻域点密度,o可能是异常点。 最终得出的LOF数值,就是我们所需要的离群点分数。在sklearn中有LocalOutlierFactor库,可以直接调用。下面来直观感受一下LOF的图像呈现效果。 LocalOutlierFactor库可以用于对单个数据集进行无监督的离群检测,也可以基于已有的正常数据集对新数据集进行新颖性检测。在这里我们进行单个数据集的无监督离群检测。 首先构造一个含有集群和离群点的数据集。该数据集包含两个密度不同的正态分布集群和一些离群点。但是,这里我们手工对数据点的标注其实是不准确的,可能有一些随机点会散落在集群内部,而一些集群点由于正态分布的特性,会与其余点的距离相对远一些。在这里我们无法进行区分,所以按照生成方式统一将它们标记为“集群内部的点”或者“离群点”。 然后使用LocalOutlierFactor库对构造数据集进行训练,得到训练的标签和训练分数(局部离群值)。为了便于图形化展示,这里对训练分数进行了一些转换。 可以看出,模型成功区分出了大部分的离群点,一些因为随机原因散落在集群内部的“离群点”也被识别为集群内部的点,但是一些与集群略为分散的“集群点”则被识别为离群点。   同时可以看出,模型对于不同密度的集群有着较好的区分度,对于低密度集群与高密度集群使用了不同的密度阈值来区分是否离群点。   因此,我们从直观上可以得到一个印象,即基于LOF模型的离群点识别在某些情况下,可能比基于某种统计学分布规则的识别更加符合实际情况。

一、基本概念 异常对象被称作离群点。异常检测也称偏差检测和例外挖掘。 常见的异常成因:数据来源于不同的类(异常对象来自于一个与大多数数据对象源(类)不同的源(类)的思想),自然变异,以及数据测量或收集误差。 异常检测的方法: (1)基于模型的技术:首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象。 (2)基于邻近度的技术:通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象。 (3)基于密度的技术:仅当一个点的局部密度显著低于它的大部分近邻时才将其分类为离群点。二、异常点检测的方法 1、统计方法检测离群点 统计学方法是基于模型的方法,即为数据创建一个模型,并且根据对象拟合模型的情况来评估它们。大部分用于离群点检测的统计学方法都是构建一个概率分布模型,并考虑对象有多大可能符合该模型。离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。异常检测的混合模型方法:对于异常检测,数据用两个分布的混合模型建模,一个分布为普通数据,而另一个为离群点。 聚类和异常检测目标都是估计分布的参数,以最大化数据的总似然(概率)。聚类时,使用EM算法估计每个概率分布的参数。然而,这里提供的异常检测技术使用一种更简单的方法。初始时将所有对象放入普通对象集,而异常对象集为空。然后,用一个迭代过程将对象从普通集转移到异常集,只要该转移能提高数据的总似然(其实等价于把在正常对象的分布下具有低概率的对象分类为离群点)。(假设异常对象属于均匀分布)。异常对象由这样一些对象组成,这些对象在均匀分布下比在正常分布下具有显著较高的概率。 优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。 2、基于邻近度的离群点检测。 一个对象是异常的,如果它远离大部分点。这种方法比统计学方法更一般、更容易使用,因为确定数据集的有意义的邻近性度量比确定它的统计分布更容易。一个对象的离群点得分由到它的k-最近邻的距离给定。离群点得分对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。 优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m^2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。 3、基于密度的离群点检测。 从基于密度的观点来说,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。需要小心的选择d,如果d太小,则许多正常点可能具有低密度,从而具有高离群点得分。如果d太大,则许多离群点可能具有与正常点类似的密度(和离群点得分)。使用任何密度定义检测离群点具有与基于邻近度的离群点方案类似的特点和局限性。特殊地,当数据包含不同密度的区域时,它们不能正确的识别离群点。 为了正确的识别这种数据集中的离群点,我们需要与对象邻域相关的密度概念,也就是定义相对密度。常见的有两种方法:(1)使用基于SNN密度的聚类算法使用的方法;(2)用点x的密度与它的最近邻y的平均密度之比作为相对密度。使用相对密度的离群点检测(局部离群点要素LOF技术):首先,对于指定的近邻个数(k),基于对象的最近邻计算对象的密度density(x,k) ,由此计算每个对象的离群点得分;然后,计算点的邻近平均密度,并使用它们计算点的平均相对密度。这个量指示x是否在比它的近邻更稠密或更稀疏的邻域内,并取作x的离群点得分(这个是建立在上面的离群点得分基础上的)。 优缺点: (1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理; (2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm); (3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。 4、基于聚类的技术 一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇。这个方法可以和其他任何聚类技术一起使用,但是需要最小簇大小和小簇与其他簇之间距离的阈值。这种方案对簇个数的选择高度敏感。使用这个方案很难将离群点得分附加到对象上。一种更系统的方法,首先聚类所有对象,然后评估对象属于簇的程度(离群点得分)(基于原型的聚类可用离中心点的距离来评估,对具有目标函数的聚类技术该得分反映删除对象后目标函数的改进(这个可能是计算密集的))。基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。还有一种更复杂的方法:取一组不能很好的拟合任何簇的特殊对象,这组对象代表潜在的离群点。随着聚类过程的进展,簇在变化。不再强属于任何簇的对象被添加到潜在的离群点集合;而当前在该集合中的对象被测试,如果它现在强属于一个簇,就可以将它从潜在的离群点集合中移除。聚类过程结束时还留在该集合中的点被分类为离群点(这种方法也不能保证产生最优解,甚至不比前面的简单算法好,在使用相对距离计算离群点得分时,这个问题特别严重)。 对象是否被认为是离群点可能依赖于簇的个数(如k很大时的噪声簇)。该问题也没有简单的答案。一种策略是对于不同的簇个数重复该分析。另一种方法是找出大量小簇,其想法是(1)较小的簇倾向于更加凝聚,(2)如果存在大量小簇时一个对象是离群点,则它多半是一个真正的离群点。不利的一面是一组离群点可能形成小簇而逃避检测。 优缺点: (1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的; (2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点; (3) 产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性; (4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。新颖性和离群值检测 离群值检测:训练数据包含离群值,即与其他观测值相距甚远的观测值。离群检测估计器会尝试拟合训练数据最集中的区域,忽略异常观察。 新颖性检测:训练数据不受异常值的污染,有兴趣检测新观察值是否是异常值。该情况下离群值也称为新颖性。 离群值检测和新颖性检测均用于异常检测,离群值检测称为无监督异常检测,新颖性检测称为半监督异常检测。离群值检测的情况下,离群值/异常不能形成密集的群集,可假设离群值/异常位于低密度区域;新颖性检测的情况下,只要新颖性/异常位于训练数据的低密度区域,就可以形成密集的簇。 通过对玩具数据集进行异常检测比较异常检测算法 数据集中包含一种或两种模式(高密度区域),以说明算法处理多模式数据的能力。 对于每个数据集,将生成15%的样本作为随机均匀噪声。该比例是OneClassSVM的nu参数和其他异常值检测算法的污染参数提供的值。离群值之间的决策边界以黑色显示,但是LOF除外,因为当采用LOF用于离群值检测时,没有适用于新数据的预测方法。 OneClassSVM对异常值敏感,对异常值检测执行的不好。当训练集不受异常值污染时,此估计器最适合新颖性检测。即不适用在高维中进行离群值检测或者不对基础数据的分布进行任何假设,OneClassSVM在这些情况下可能会根据其超参数给出有用的结果。 covariance EllipticEnvelope(协方差椭圆密度)假定数据是高斯分布并学习一个椭圆。在数据不是单峰时,会退化。此估计器对异常值具有鲁棒性。 IsolationFrorest和LocalOutlierFactor针对多模式数据集效果显著。LOF针对第三种数据集,明显优于其它三种估计器,该数据集中两种模式的密度不同。LOF的局部方面,即它仅将一个样本的异常评分与其邻居评分作比较,从何体现了该方法的优势。 针对最后一个均匀分布在超立方体中的数据集,很难说一个样本比另一个样本异常得多。除了OneClassSVM有些过拟合外,所有估计器都针对该情况提出不错的解决方案。针对这种情况,应该仔细观察样本的异常分数,性能好的估算器应该为所有样本分配相似的分数。 使用局部离群因子(LOF)进行离群值检测 LOF算法是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差。其中密度远低于其邻居的样本为异常值。 LOF算法的优势在于同时考虑了数据集的局部和全局属性:即使在异常样本具有不同底层密度的数据集中,仍能保持良好性能。问题不在于样本有多孤立,而在于样本相对于周围邻域有多孤立。 通常考虑的邻居数量(1)大于群集必须包含的最小样本数量,以便其他样本可以是相对于该群集的局部离散值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。 具有局部异常值的新颖性检验 LOF是一种无监督的异常检测方法,可计算给定数据点相对于其邻居的局部密度偏差,密度远低于其邻居的样本为异常值。LOF用于新颖性检验时,切勿在训练集上使用预测、决定函数、实例得分,会导致结果错误。只能对新的看不见的数据(不在训练集中)使用这些方法。 通常考虑邻居数量(1)大于群集必须包含的最小样本数,以便其他样本可以是相对于该群集的局部离群值;(2)小于可能是局部异常值的最大进距采样数,此类消息通常不可用,采用n_neighbors=20。 隔离林 在高维数据集中执行异常检测的一种有效方法是使用随机森林,分离的观察通过随机选择一个函数,随机选择所选择的特征的最大值和最小值之间的分割值。递归分区可用树结构表示,隔离样本所需的拆分数量等于从根节点到终止结点的路径长度。随机树的森林中的平均路径长度是对正态性和决策函数的度量。随机分区产生的异常路径明显较短,因此如果随机树森林为特定样本生成的较短路径,则该树代表的值很可能是异常的。 OneClassSVM 无监督的离群值检测,支持高维分布,基于libsvm 不假定数据分布的任何参数形式,可以更好的对数据的复杂形状进行建模,能够捕获真实的数据结构,难点在于调整核函数宽度参数,以便在数据散布矩阵的形状和数据过度拟合的风险间取得折中。 协方差椭圆密度 用于检测高斯分布数据集中的异常值的对象 经验协方差估计(作为非稳健估计)受到观测值异质结构的高度影响;鲁棒协方差估计能够集中于数据分布的主要模式,但是它坚持假设数据是高斯分布,产生了对数据结构的某些估计,在一定程度上是准确的。HBOS单维效果极佳,但是标准差方法的mask 掩码效应严重。例如 数据通常在100以内,但是有两个异常点,500,1000000。这个算法就不能检出500这个异常点。 对比而言,孤立森林理论上更适合大数据的异常检测,且无掩码效应。孤立森林确定异常时训练只用样本数据。每颗树样本数量默认只有256个,默认只用100颗树。所以理论上25600个样本就能确定海量数据中的异常点了。 Sklearn的 isolation forest 例子默认是读入全量数据再采样。如果配上warm up 选项就能分批放入采样。 异常检测的深度学习研究综述

方便面的监督检测论文

方便面因为它“方便”,所以,深受中小学生、住校学生、出差人员以及熬夜者的青睐。然而,专家们却明确地指出:最好少吃方便面。让我们再谈谈方面的“结构”。眼下,食品添加剂多达300余种,它们分别起到色、漂白、调节胃口、防止氧化、延长保存期等多种功能,这些添加剂按规定都是可以使用的。我们偶尔吃几餐方面问题不大,但若像林技术员那样吃个十年八载,就很难确保身体健康了。这里简单列举方便面中的几种添加剂。食盐 一包方便面含盐6克,而我们每天食盐的摄取量是8克左右,所以,方便面含盐量明显偏高,吃盐过多易患高血压,且损害肾脏。磷酸盐 它的用途广,可以改善方便面的味道。但是,人体摄磷过多,会使体内的钙无法充分利用,容易引起骨折、牙齿脱落和骨骼变形。油脂 方便面都用油炸过,油炸后可减去面中水分,能延长保存期。但这些油脂经过氧化后变为“氧化脂质”,它积存于血管或其他器官中,加速人的老化速度,并引起动脉硬功夫化,易导致脑溢血、心脏病、肾病等。防氧化剂 方便面从制成到消费者手中,短的一两个月,长时达一两年,其中添加的防氧化剂和别的化学药品已经在慢慢地变质,对人全有害无益。为此,专家们建议:最好少吃或不吃方便面,万一要吃,每周不要超过两包,方可保你平安无事。为了防止和降低方便面对人体的危害,我们在吃方便面的时候,可以把泡方面的汤倒掉,再兑上开水或别的汤,以减少其中的盐分和别的有害物质。再者,吃方便面时,可在面中加些菠菜、青椒等含维生素丰富的有色蔬菜,以便冲淡各种添加剂对人体的危害。常吃方便面会得营养缺乏症方便面是上班族们喜欢的一种食品,它既可以当点心、宵夜,又可以当正餐,而且食用方便,非常适合繁忙的上班族。尤其是不少男性,既没有女人那么多对于身材的顾虑,又对饮食马马虎虎,方便面更是他们的"宠儿",经常会在办公桌里放上几包。但是,经常吃方便面的男人们,你们知道嘛,吃的时候方便了,可它会带给你多少麻烦吗? 方便面是经过油炸后干燥密封包装而成。尽管现在很多方便面都号称不是油炸的,但多少都会含有食用油,因此,放置的时间一长,方便面之中的油脂就会被空气氧化分解,生成有毒的醛类过氧化物。吃了这种油已变质的方便面,会给你带来意想不到的麻烦,比如引起头晕、头痛、发热、呕吐、腹泻等中毒现象。放在办公桌里的方便面经常会超过了保质期而你还没有注意,误食之后麻烦就大了。另外,方便面的包装破裂、封闭不严、存放时间过长,也有被细菌、毒物污染的可能。因此,方便面的卫生不容忽视。一般要根据需要量来决定购买数量,一次不宜存放过多,存放的时间不宜太长,要选购包装完好、商标明确、厂家清楚的。包装破裂就容易被污染,又会加速方便面氧化变质的速度。即便是包装完整的,食用前也要检查一下,除要注意是否过期以外,还要看看面饼的质量,如果发现面饼的表面变色、生有霉菌、有虫蛀痕迹时,说明面已经变质,不能再吃了。如果闻到有"哈喇"味,入口有辣味或其他异味的时候,说明油已经变质了,也不能食用了。 即使是新鲜的方便面,如果长期用来替代主食,而不添加任何其他食品,就很容易导致人体营养缺乏,对健康极为不利。人体的正常生命活动需要六大要素:即蛋白质、脂肪、碳水化合物、矿物质、维生素和水。只要缺乏其中一种营养素、时间长了,人就会患病。而方便面的主要成分是碳水化合物,汤料只含有少量味精、盐分等调味品,即使是各种名目的鸡汁、牛肉汁、虾汁等方便面,其中肉汁成分的含量非常少,远远满足不了我们每天所需要的营养量。因此,在吃方便面的时候要注意以下几点: 一是方便面只适于救急,如临时就餐不便或受到条件限制吃不到东西的时候食用。一天最多吃一次,也不能天天吃。 二是喜欢方便面或确实由于条件限制、需要较长时间吃方便面时,应该酌情增加一些副食,以补充营养的不足。如食用些香肠、牛肉干、肉脯、肉松、熟鸡蛋(约100克左右)、卤肉等。还可以在方便面中加一些香油或猪油(约25克左右)。或者配餐用一些生吃的瓜果、蔬菜,如黄瓜、西红柿、萝卜、地瓜、荸荠、藕、香蕉、梨、桔子等,数量应该保持在250-300克左右。 三是患有肠胃疾病和胃口不佳、吸收不良的人,最好不要吃方便面。 总之,方便面作为一种方便食品,偶尔吃一些对身体没有害处,但经常吃就会有损健康了。总而言之,经常吃方便面对身体就会有害处了...

方便面里的食品添加剂分别起着增色、漂白、调节胃口、防止氧化、延长保存期等多种作用,这些食品添加剂按规定都是可以使用的。因此,偶尔吃方便面是无关紧要的。但是,一些人经常拿来当早餐或懒得下厨房时把它当饭吃,更有甚者长年累月吃方便面,这就有碍身体健康了。油脂:为了延长保存期,大多数品种的方便面都用油炸过,油脂经过氧化后变成氧化脂质。它积存于血管或其他器官中,形成老化现象,加速人的老化速度,引起动脉硬化,易导致脑溢血、心脏病、肾脏病等疾病。食盐:一包方便面含盐约6克,而一个人一天食盐的摄取量以6克为宜,所以方便面含盐量明显偏高。经常吃方便面会因摄入食盐过多而易患高血压,且损害肾脏。磷酸盐:磷酸盐添加剂可以改善方便面的味道。但是,人体摄磷太多会使体内的钙无法充分吸收、利用,容易引起骨折、牙齿脱落和骨骼变形。防氧化剂:方便面从制成到消费者,短时为一两个月,长时竟达一两年,其中添加的防氧化剂和其他化学药品因长期贮存,受环境影响,已经在慢慢变质,食后对人体有一定的害处。为此,有关专家建议最好少吃方便面。为了防止和降低方便面对人体的危害,吃方便面时,将泡方便面的汤倒掉,再兑上开水或别的汤,以减少其中的盐及其他有害物质。另外,吃方便面时可加些含维生素丰富的蔬菜,如菠菜、青椒等,以便冲淡各种添加剂对人体的危害。

方便面是油炸食品,含有致癌物质。建议少吃或者不吃。

目标检测论文理解

论文原文:

YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:

如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。

1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。

2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。

3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

4、损失函数公式见下图:

在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:

解决方法:

只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。

然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。

作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。

作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。

YOLO模型相对于之前的物体检测方法有多个优点:

1、 YOLO检测物体非常快

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2、 YOLO可以很好的避免背景错误,产生false positives

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3、 YOLO可以学到物体的泛化特征

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2、YOLO容易产生物体的定位错误。

3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

有一个月没更博客了,捂脸 o( ̄= ̄)d

端午回家休息了几天,6月要加油~

回到正文,HOG是很经典的一种图像特征提取方法,尤其是在行人识别领域被应用的很多。虽然文章是2005年发表在CVPR上的,但近十年来还没有被淹没的文章真的是很值得阅读的研究成果了。

key idea: 局部物体的形状和外观可以通过局部梯度或者边缘的密度分布所表示。

主要步骤:

上图为论文中提供的图,个人觉得我在参考资料中列出的那篇 博客 中给出的图可能更好理解一些。

具体细节: 关于每一个过程的详细解释还是在 这篇博客 中已经写得很清楚了,这里就不再搬运了。

文章中数据集的图像大小均为:64*128, block大小为16x16, block stride为8x8,cell size为8x8,bins=9(直方图等级数);

获取到每张图的特征维度后,再用线性SVM训练分类器即可。

下图为作者而给出的示例图:

这两篇博客写的都很好,推荐阅读一波。

原文: Scalable Object Detection using Deep Neural Networks——学术范 最近,深度卷积神经网络在许多图像识别基准上取得了最先进的性能,包括ImageNet大规模视觉识别挑战(ILSVRC-2012)。在定位子任务中获胜的模型是一个网络,它预测了图像中每个对象类别的单个边界框和置信度得分。这样的模型捕获了围绕对象的整幅图像上下文,但如果不天真地复制每个实例的输出数量,就无法处理图像中同一对象的多个实例。在这篇论文中提出了一个显著性启发的神经网络检测模型,它预测了一组与类无关的边界框,每个框有一个分数,对应于它包含任何感兴趣的对象的可能性。该模型自然地为每个类处理数量可变的实例,并允许在网络的最高级别上进行跨类泛化。 目标检测是计算机视觉的基本任务之一。一个解决这个问题的通用范例是训练在子图像上操作的对象检测器,并在所有的场所和尺度上以详尽的方式应用这些检测器。这一范例被成功地应用于经过区别训练的可变形零件模型(DPM)中,以实现检测任务的最新结果。对所有可能位置和尺度的穷举搜索带来了计算上的挑战。随着类数量的增加,这个挑战变得更加困难,因为大多数方法都训练每个类单独的检测器。为了解决这个问题,人们提出了多种方法,从检测器级联到使用分割提出少量的对象假设。 关于对象检测的文献非常多,在本节中,我们将重点讨论利用类不可知思想和解决可伸缩性的方法。 许多提出的检测方法都是基于基于部件的模型,最近由于有区别学习和精心设计的特征,已经取得了令人印象深刻的性能。然而,这些方法依赖于在多个尺度上详尽地应用零件模板,这是非常昂贵的。此外,它们在类的数量上是可伸缩的,这对像ImageNet这样的现代数据集来说是一个挑战。 为了解决前一个问题,Lampert等人使用分支绑定策略来避免计算所有可能的对象位置。为了解决后一个问题,Song et al.使用了一个低维部件基,在所有对象类中共享。基于哈希算法的零件检测也取得了良好的结果。 另一种不同的工作,与我们的工作更接近,是基于对象可以本地化的想法,而不必知道它们的类。其中一些方法建立在自底向上无阶级分割[9]的基础上。通过这种方式得到的片段可以使用自上而下的反馈进行评分。基于同样的动机,Alexe等人使用一种廉价的分类器对对象假设是否为对象进行评分,并以这种方式减少了后续检测步骤的位置数量。这些方法可以被认为是多层模型,分割作为第一层,分割分类作为后续层。尽管它们编码了已证明的感知原理,但我们将表明,有更深入的模型,充分学习可以导致更好的结果。 最后,我们利用了DeepLearning的最新进展,最引人注目的是Krizhevsky等人的工作。我们将他们的边界盒回归检测方法扩展到以可扩展的方式处理多个对象的情况。然而,基于dnn的回归已经被Szegedy等人应用到对象掩模中。最后一种方法实现了最先进的检测性能,但由于单个掩模回归的成本,不能扩展到多个类。 我们的目标是通过预测一组表示潜在对象的边界盒来实现一种与类无关的可扩展对象检测。更准确地说,我们使用了深度神经网络(DNN),它输出固定数量的包围盒。此外,它为每个盒子输出一个分数,表示这个盒子包含一个对象的网络信任度。 为了形式化上述思想,我们将i-thobject框及其相关的置信度编码为最后一网层的节点值: Bounding box: 我们将每个框的左上角和右下角坐标编码为四个节点值,可以写成vectorli∈R4。这些坐标是归一化的w. r. t.图像尺寸,以实现图像绝对尺寸的不变性。每个归一化坐标是由最后一层的线性变换产生的。 Confidence: 置信度:包含一个对象的盒子的置信度得分被编码为单个节点valueci∈[0,1]。这个值是通过最后一个隐藏层的线性变换产生的,后面跟着一个sigmoid。 我们可以组合边界盒位置sli,i∈{1,…K}为一个线性层。同样,我们可以将所有置信区间ci,i∈{1,…K}作为一个s型层的输出。这两个输出层都连接到最后一个隐藏层 在推理时,我们的算法生成kbound盒。在我们的实验中,我们使用ek = 100和K= 200。如果需要,我们可以使用置信分数和非最大抑制在推理时获得较少数量的高置信框。这些盒子应该代表对象。因此,它们可以通过后续的分类器进行分类,实现目标检测。由于盒子的数量非常少,我们可以提供强大的分类器。在我们的实验中,我们使用另一个dnn进行分类。 我们训练一个DNN来预测每个训练图像的边界框及其置信度得分,以便得分最高的框与图像的groundtruth对象框很好地匹配。假设对于一个特定的训练例子,对象被标记为boundingboxesgj,j∈{1,…,M}。在实践中,pre- dictionary的数量远远大于groundtruthboxm的数量。因此,我们试图只优化与地面真实最匹配的预测框子集。我们优化他们的位置,以提高他们的匹配度,最大化他们的信心。与此同时,我们将剩余预测的置信度最小化,这被认为不能很好地定位真实对象。为了达到上述目的,我们为每个训练实例制定一个分配问题。Wexij∈{0,1}表示赋值:xij= 1,如果第i个预测被赋值给第j个真对象。这项任务的目标可以表示为 其中,我们使用标准化边界框坐标之间的el2距离来量化边界框之间的不同。此外,我们希望根据分配x优化盒子的可信度。最大化指定预测的置信度可以表示为  最终的损失目标结合了匹配损失和信心损失 受式1的约束。α平衡了不同损失条款的贡献。 对于每个训练例子,我们通过解决一个最佳的赋值x*的预测到真实的盒子 约束执行赋值解决方案。这是二部匹配的一种变体,是一种多项式复杂度匹配。在我们的应用程序中,匹配是非常便宜的——每幅图像中标记的对象的数量少于一打,而且在大多数情况下只有很少的对象被标记。然后,通过反向传播优化网络参数。例如,反向传播算法的一阶导数计算w、r、t、l和c 尽管上述定义的损失在原则上是足够的,但三次修改使其有可能更快地达到更好的准确性。第一个修改是对地面真实位置进行聚类,并找到这样的聚类/质心,我们可以使用这些聚类/质心作为每个预测位置的先验。因此,鼓励学习算法为每个预测位置学习一个残差到一个先验。 第二个修改涉及到在匹配过程中使用这些先验:不是将N个groundtruth位置与K个预测进行匹配,而是在K个先验和groundtruth之间找到最佳匹配。一旦匹配完成,就会像之前一样计算目标的置信度。此外,位置预测损失也不变:对于任何一对匹配的(目标,预测)位置,其损失定义为groundtruth和对应于匹配先验的坐标之间的差值。我们把使用先验匹配称为先验匹配,并假设它促进了预测的多样化。  需要注意的是,尽管我们以一种与类无关的方式定义了我们的方法,但我们可以将它应用于预测特定类的对象盒。要做到这一点,我们只需要在类的边框上训练我们的模型。此外,我们可以预测每个类的kbox。不幸的是,这个模型的参数数量会随着类的数量线性增长。此外,在一个典型的设置中,给定类的对象数量相对较少,这些参数中的大多数会看到很少有相应梯度贡献的训练示例。因此,我们认为我们的两步过程——首先本地化,然后识别——是一个更好的选择,因为它允许使用少量参数利用同一图像中多个对象类型的数据 我们使用的本地化和分类模型的网络架构与[10]使用的网络架构相同。我们使用Adagrad来控制学习速率衰减,128的小批量,以及使用多个相同的网络副本进行并行分布式训练,从而实现更快的收敛。如前所述,我们在定位损失中使用先验——这些是使用训练集上的均值来计算的。我们还使用α = 来平衡局部化和置信度损失。定位器可以输出用于推断的种植区以外的坐标。坐标被映射和截断到最后的图像区域。另外,使用非最大抑制对盒进行修剪,Jaccard相似度阈值为。然后,我们的第二个模型将每个边界框分类为感兴趣的对象或“背景”。为了训练我们的定位器网络,我们从训练集中生成了大约3000万幅图像,并对训练集中的每幅图像应用以下步骤。最后,样品被打乱。为了训练我们的本地化网络,我们通过对训练集中的每一幅图像应用以下步骤,从训练集中生成了大约3000万幅图像。对于每幅图像,我们生成相同数量的平方样本,使样本总数大约为1000万。对于每幅图像,样本被桶状填充,这样,对于0 - 5%、5 - 15%、15 - 50%、50 - 100%范围内的每个比例,都有相同数量的样本,其中被包围框覆盖的比例在给定范围内。训练集和我们大多数超参数的选择是基于过去使用非公开数据集的经验。在下面的实验中,我们没有探索任何非标准数据生成或正则化选项。在所有的实验中,所有的超参数都是通过对训练集。 Pascal Visual Object Classes (VOC)挑战是最常用的对象检测算法基准。它主要由复杂的场景图像组成,其中包含了20种不同的对象类别的边界框。在我们的评估中,我们关注的是2007版VOC,为此发布了一个测试集。我们通过培训VOC 2012展示了结果,其中包含了大约。11000张图片。我们训练了一个100框的定位器和一个基于深度网络的分类器。 我们在一个由1000万作物组成的数据集上训练分类器,该数据集重叠的对象至少为 jaccard重叠相似度。这些作物被标记为20个VOC对象类中的一个。•2000万负作物与任何物体盒最多有个Jaccard相似度。这些作物被贴上特殊的“背景”类标签。体系结构和超参数的选择遵循。 在第一轮中,定位器模型应用于图像中最大-最小中心方形作物。作物的大小调整到网络输入大小is220×220。单次通过这个网络,我们就可以得到上百个候选日期框。在对重叠阈值为的非最大抑制后,保留评分最高的前10个检测项,并通过21路分类器模型分别通过网络进行分类。最终的检测分数是给定盒子的定位分数乘以分类器在作物周围的最大方形区域上评估的分数的乘积。这些分数通过评估,并用于计算精确查全曲线。 首先,我们分析了本地化器在隔离状态下的性能。我们给出了被检测对象的数量,正如Pascal检测标准所定义的那样,与生成的包围框的数量相对比。在图1中,我们展示了使用VOC2012进行训练所获得的结果。此外,我们通过使用图像的最大中心面积(max-center square crop)作为输入以及使用两个尺度(second scale)来给出结果:最大中心面积(max-center crop)的第二个尺度(select3×3windows的大小为图像大小的60%)正如我们所看到的,当使用10个边界框的预算时,我们可以用第一个模型本地化的对象,用第二个模型本地化48%的对象。这显示出比其他报告的结果更好的性能,例如对象度算法达到42%[1]。此外,这个图表显示了在不同分辨率下观察图像的重要性。虽然我们的算法通过使用最大中心作物获得了大量的对象,但当使用更高分辨率的图像作物时,我们获得了额外的提升。进一步,我们用21-way分类器对生成的包围盒进行分类,如上所述。表1列出了VOC 2007的平均精度(APs)。达到的平均AP是,与先进水平相当。注意,我们的运行时间复杂度非常低——我们只使用top10框。示例检测和全精度召回曲线分别如图2和图3所示。值得注意的是,可视化检测是通过仅使用最大中心方形图像裁剪,即使用全图像获得的。然而,我们设法获得了相对较小的对象,例如第二行和第二列的船,以及第三行和第三列的羊。 在本工作中,我们提出了一种新的方法来定位图像中的对象,该方法可以预测多个边界框的时间。该方法使用深度卷积神经网络作为基本特征提取和学习模型。它制定了一个能够利用可变数量的groundtruth位置的多箱定位成本。在“一个类一个箱”方法的情况下,对1000个盒子进行非max-suppression,使用与给定图像中感兴趣的DeepMulti-Box方法相同的准则,并学习在未见图像中预测这些位置。 我们在VOC2007和ILSVRC-2012这两个具有挑战性的基准上给出了结果,在这两个基准上,所提出的方法具有竞争力。此外,该方法能够很好地预测后续分类器将探测到的位置。我们的结果表明,deepmultibox的方法是可扩展的,甚至可以在两个数据集之间泛化,就能够预测感兴趣的定位,甚至对于它没有训练的类别。此外,它能够捕获同一类物体的多种情况,这是旨在更好地理解图像的算法的一个重要特征。 在未来,我们希望能够将定位和识别路径折叠到一个单一的网络中,这样我们就能够在一个通过网络的一次性前馈中提取位置和类标签信息。即使在其当前状态下,双通道过程(本地化网络之后是分类网络)也会产生5-10个网络评估,每个评估的速度大约为1个CPU-sec(现代机器)。重要的是,这个数字并不与要识别的类的数量成线性关系,这使得所提出的方法与类似dpm的方法非常有竞争力。

2019目标检测论文解读

AnchorFree有两种不同的输出方式,一种是它可以作为一个路由器来连接多台设备,另一种是它可以直接插入一台设备,并将网络信号传输给此设备。

论文原文:

YOLO(you only look once)是继RCNN、faster-RCNN之后,又一里程碑式的目标检测算法。yolo在保持不错的准确度的情况下,解决了当时基于深度学习的检测中的痛点---速度问题。下图是各目标检测系统的检测性能对比:

如果说faster-RCNN是真正实现了完全基于深度学习的端到端的检测,那么yolo则是更进一步,将 目标区域预测 与 目标类别判断 整合到单个神经网络模型中。各检测算法结构见下图:

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。即SxS个网格,每个网格除了要预测B个bounding box外,还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。(注意:class信息是针对每个网格的,即一个网格只预测一组类别而不管里面有多少个bounding box,而confidence信息是针对每个bounding box的。)

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。整个网络结构如下图所示:

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS(非极大值抑制non-maximum suppresssion)处理,就得到最终的检测结果。

1、每个grid因为预测两个bounding box有30维(30=2*5+20),这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。其中坐标的x,y用bounding box相对grid的offset归一化到0-1之间,w,h除以图像的width和height也归一化到0-1之间。

2、对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。其实就是让算法对小box预测的偏移更加敏感。

3、一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。

4、损失函数公式见下图:

在实现中,最主要的就是怎么设计损失函数,坐标(x,y,w,h),confidence,classification 让这个三个方面得到很好的平衡。简单的全部采用sum-squared error loss来做这件事会有以下不足:

解决方法:

只有当某个网格中有object的时候才对classification error进行惩罚。只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

作者采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用网络中的前20卷积层,外加average-pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为(ImageNet2012 validation set),与GoogleNet模型准确率相当。

然后,将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224->448×448)。顶层预测类别概率和bounding box协调值。bounding box的宽和高通过输入图像宽和高归一化到0-1区间。顶层采用linear activation,其它层使用 leaky rectified linear。

作者采用sum-squared error为目标函数来优化,增加bounding box loss权重,减少置信度权重,实验中,设定为\lambda _{coord} =5 and\lambda _{noobj}= 。

作者在PASCAL VOC2007和PASCAL VOC2012数据集上进行了训练和测试。训练135轮,batch size为64,动量为,学习速率延迟为。Learning schedule为:第一轮,学习速率从缓慢增加到(因为如果初始为高学习速率,会导致模型发散);保持速率到75轮;然后在后30轮中,下降到;最后30轮,学习速率为。

作者还采用了dropout和 data augmentation来预防过拟合。dropout值为;data augmentation包括:random scaling,translation,adjust exposure和saturation。

YOLO模型相对于之前的物体检测方法有多个优点:

1、 YOLO检测物体非常快

因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

2、 YOLO可以很好的避免背景错误,产生false positives

不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。

3、 YOLO可以学到物体的泛化特征

当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

尽管YOLO有这些优点,它也有一些缺点:

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

2、YOLO容易产生物体的定位错误。

3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

Anchorfree的输出可以有多个。它是一种网络安全解决方案,它可以帮助您保护您的网络流量,并且可以防止您的网络流量被窃取或拦截。它可以让您在网络上自由浏览,而不必担心被攻击者攻击或拦截。Anchorfree的输出可以通过它的安全服务器来实现,它可以帮助您访问被墙的网站,并且可以提供更安全的网络连接。此外,Anchorfree还提供了一些其他的安全功能,例如VPN,可以帮助您更好地保护您的网络安全。

论文名称:Rich feature hierarchies for accurate object detection and semantic segmentation 提出时间:2014年 论文地址: 针对问题: 从Alexnet提出后,作者等人思考如何利用卷积网络来完成检测任务,即输入一张图,实现图上目标的定位(目标在哪)和分类(目标是什么)两个目标,并最终完成了RCNN网络模型。 创新点: RCNN提出时,检测网络的执行思路还是脱胎于分类网络。也就是深度学习部分仅完成输入图像块的分类工作。那么对检测任务来说如何完成目标的定位呢,作者采用的是Selective Search候选区域提取算法,来获得当前输入图上可能包含目标的不同图像块,再将图像块裁剪到固定的尺寸输入CNN网络来进行当前图像块类别的判断。 参考博客: 。 论文题目:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 提出时间:2014年 论文地址: 针对问题: 该论文讨论了,CNN提取到的特征能够同时用于定位和分类两个任务。也就是在CNN提取到特征以后,在网络后端组织两组卷积或全连接层,一组用于实现定位,输出当前图像上目标的最小外接矩形框坐标,一组用于分类,输出当前图像上目标的类别信息。也是以此为起点,检测网络出现基础主干网络(backbone)+分类头或回归头(定位头)的网络设计模式雏形。 创新点: 在这篇论文中还有两个比较有意思的点,一是作者认为全连接层其实质实现的操作和1x1的卷积是类似的,而且用1x1的卷积核还可以避免FC对输入特征尺寸的限制,那用1x1卷积来替换FC层,是否可行呢?作者在测试时通过将全连接层替换为1x1卷积核证明是可行的;二是提出了offset max-pooling,也就是对池化层输入特征不能整除的情况,通过进行滑动池化并将不同的池化层传递给后续网络层来提高效果。另外作者在论文里提到他的用法是先基于主干网络+分类头训练,然后切换分类头为回归头,再训练回归头的参数,最终完成整个网络的训练。图像的输入作者采用的是直接在输入图上利用卷积核划窗。然后在指定的每个网络层上回归目标的尺度和空间位置。 参考博客: 论文题目:Scalable Object Detection using Deep Neural Networks 提出时间:2014年 论文地址: 针对问题: 既然CNN网络提取的特征可以直接用于检测任务(定位+分类),作者就尝试将目标框(可能包含目标的最小外包矩形框)提取任务放到CNN中进行。也就是直接通过网络完成输入图像上目标的定位工作。 创新点: 本文作者通过将物体检测问题定义为输出多个bounding box的回归问题. 同时每个bounding box会输出关于是否包含目标物体的置信度, 使得模型更加紧凑和高效。先通过聚类获得图像中可能有目标的位置聚类中心,(800个anchor box)然后学习预测不考虑目标类别的二分类网络,背景or前景。用到了多尺度下的检测。 参考博客: 论文题目:DeepBox: Learning Objectness with Convolutional Networks 提出时间:2015年ICCV 论文地址: 主要针对的问题: 本文完成的工作与第三篇类似,都是对目标框提取算法的优化方案,区别是本文首先采用自底而上的方案来提取图像上的疑似目标框,然后再利用CNN网络提取特征对目标框进行是否为前景区域的排序;而第三篇为直接利用CNN网络来回归图像上可能的目标位置。创新点: 本文作者想通过CNN学习输入图像的特征,从而实现对输入网络目标框是否为真实目标的情况进行计算,量化每个输入框的包含目标的可能性值。 参考博客: 论文题目:AttentionNet: AggregatingWeak Directions for Accurate Object Detection 提出时间:2015年ICCV 论文地址: 主要针对的问题: 对检测网络的实现方案进行思考,之前的执行策略是,先确定输入图像中可能包含目标位置的矩形框,再对每个矩形框进行分类和回归从而确定目标的准确位置,参考RCNN。那么能否直接利用回归的思路从图像的四个角点,逐渐得到目标的最小外接矩形框和类别呢? 创新点: 通过从图像的四个角点,逐步迭代的方式,每次计算一个缩小的方向,并缩小指定的距离来使得逐渐逼近目标。作者还提出了针对多目标情况的处理方式。 参考博客: 论文题目:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 提出时间:2014年 论文地址: 针对问题: 如RCNN会将输入的目标图像块处理到同一尺寸再输入进CNN网络,在处理过程中就造成了图像块信息的损失。在实际的场景中,输入网络的目标尺寸很难统一,而网络最后的全连接层又要求输入的特征信息为统一维度的向量。作者就尝试进行不同尺寸CNN网络提取到的特征维度进行统一。创新点: 作者提出的SPPnet中,通过使用特征金字塔池化来使得最后的卷积层输出结果可以统一到全连接层需要的尺寸,在训练的时候,池化的操作还是通过滑动窗口完成的,池化的核宽高及步长通过当前层的特征图的宽高计算得到。原论文中的特征金字塔池化操作图示如下。 参考博客 : 论文题目:Object detection via a multi-region & semantic segmentation-aware CNN model 提出时间:2015年 论文地址: 针对问题: 既然第三篇论文multibox算法提出了可以用CNN来实现输入图像中待检测目标的定位,本文作者就尝试增加一些训练时的方法技巧来提高CNN网络最终的定位精度。创新点: 作者通过对输入网络的region进行一定的处理(通过数据增强,使得网络利用目标周围的上下文信息得到更精准的目标框)来增加网络对目标回归框的精度。具体的处理方式包括:扩大输入目标的标签包围框、取输入目标的标签中包围框的一部分等并对不同区域分别回归位置,使得网络对目标的边界更加敏感。这种操作丰富了输入目标的多样性,从而提高了回归框的精度。 参考博客 : 论文题目:Fast-RCNN 提出时间:2015年 论文地址: 针对问题: RCNN中的CNN每输入一个图像块就要执行一次前向计算,这显然是非常耗时的,那么如何优化这部分呢? 创新点: 作者参考了SPPNet(第六篇论文),在网络中实现了ROIpooling来使得输入的图像块不用裁剪到统一尺寸,从而避免了输入的信息丢失。其次是将整张图输入网络得到特征图,再将原图上用Selective Search算法得到的目标框映射到特征图上,避免了特征的重复提取。 参考博客 : 论文题目:DeepProposal: Hunting Objects by Cascading Deep Convolutional Layers 提出时间:2015年 论文地址: 主要针对的问题: 本文的作者观察到CNN可以提取到很棒的对输入图像进行表征的论文,作者尝试通过实验来对CNN网络不同层所产生的特征的作用和情况进行讨论和解析。 创新点: 作者在不同的激活层上以滑动窗口的方式生成了假设,并表明最终的卷积层可以以较高的查全率找到感兴趣的对象,但是由于特征图的粗糙性,定位性很差。相反,网络的第一层可以更好地定位感兴趣的对象,但召回率降低。 论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 提出时间:2015年NIPS 论文地址: 主要针对的问题: 由multibox(第三篇)和DeepBox(第四篇)等论文,我们知道,用CNN可以生成目标待检测框,并判定当前框为目标的概率,那能否将该模型整合到目标检测的模型中,从而实现真正输入端为图像,输出为最终检测结果的,全部依赖CNN完成的检测系统呢? 创新点: 将当前输入图目标框提取整合到了检测网络中,依赖一个小的目标框提取网络RPN来替代Selective Search算法,从而实现真正的端到端检测算法。 参考博客 :

  • 索引序列
  • 弱监督目标检测论文讲解
  • 无监督异常检测论文集
  • 方便面的监督检测论文
  • 目标检测论文理解
  • 2019目标检测论文解读
  • 返回顶部