zoukankan      html  css  js  c++  java
  • 论文笔记(1):From Image-level to Pixel-level Labeling with Convolutional Networks

    文章采用了多实例学习(MIL)机制构建图像标签同像素语义的关联 。 该方法的训练样本包含了70 万张来自ImageNet的图片,但其语义分割的性能很大程度上依赖于复杂的后处理过程,主要包括图像级语义的预测信息、超像素平滑策略、物体候选框平滑策略和 MCG分割区域平滑策略。

    下图是论文所用方法的一般性说明:

    (1)使用来自Imagenet的弱注释数据(仅图像级别的类别信息)对模型进行训练。
    (2)CNN生成特征平面。
    (3)这些平面通过一个聚合层来约束模型,把更多的权重放在正确的像素上。
    (4)通过分类正确的图像级标签来训练系统。

    底部:在测试期间,聚合层被去除,并且CNN密集地将图像的每个像素进行分类(仅考虑少数分割先验)。

    这个框架分为训练和测试两个部分,是不一样的结构。
    训练:通过CNN提取的feature map,然后进行聚合,把Pixel level 整合到image level,整合的过程:使得属于相应类的像素的分数高。这也是本文的创新点
    测试:测试集采用POSCAL,测试过程的结构没有整合层,但是增加了先验层,提高TP,降低FP。

    训练的过程中,首先利用已有的overfeat结构作为feature extractor,计算出feature planes之后,再经过四层的segmentation net,这四个seg net均采用了ReLU激活函数,并且采用了dropout策略防止过拟合。输出是C+1个h*w的score image;经过聚合层,映射到image level,输出是C+1维的向量,每个元素是该类别的条件概率。
    上面的过程可以看出来,aggreg层是本论文的创新点,这个层到底是如何把像素和image转换的呢?
    请看下图(聚合层的详细流程):
    从K个类里面算出来K个图片,图片中每一个像素都是在当前点的位置的像素属于第K类的分数,用什么函数把图像转化为一个值呢,这个函数要满足:当这个图象属于第I个类的时候,能够使得这个值最大。
    首先想到的是,把图像的值都加起来,存在的问题是,平均化,没有差异。
    然后想到了聚合层实际上是相当于一般cnn的mini-batch的max pooling层,max pooling层的像素点都与input image的sub patch相关,于是想到了把最大的score加起来。这个函数存在的问题是,需要很长时间才能收敛。
    作者不知道为何想到了convex 优化中的平滑函数,这个函数有很好的性质,能够让分数高的像素权重也高。
    关于这一层的参数确定,用的是softmax回归。
    训练好相应的模型之后,就要用测试数据测试了
    测试过程如下图:
    首先输入要测试的数据,经过overfeat6层卷积,形成上图中的pi.j(K)的图像,然后与IPL相乘,得到后面的y',最后,与
    smooth prior卷积,形成最终结果,输出,smooth prior能够输出平滑的分割结果。
    测试过程增加了两种先验经验的约束层,来达到高的准确率。
    global:image level prior:从训练的图像中,初步分割结果的每个点,属于哪类概率乘以该类在训练过程中出现的概率。
    smooth:用了三种方式增加TP,降低FP,分别是,超像素初步分割,bing计算box,累加出现在bounding Box中的次数。
    这两种方式的好处是,强制使低概率的被标记为背景,保证局部一致性。
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    (部分译文)

    3 Architecture

    正如我们在第1节中指出的,CNN是一个非常灵活的模型,可以应用于各种图像处理任务,因为它们减轻了任务特定功能的需求。 CNN学习过滤器的层次结构,当层次结构“更深入”时,过滤器提取更高层次的表示。 他们学习的功能类型也是非常普遍的,CNN使转移学习(到另一个任务)非常容易。 但是,这些模型的主要缺点是在训练过程中需要大量的数据。

    由于图像级对象标签的数量比像素级分割标签大得多,因此利用图像分类数据集来执行分割是理所当然的。 接下来,我们考虑一个类C的分割问题。我们假设分类数据集至少包含相同的类。
    在分类时可用的额外类,不在分割数据集中的,映射到“背景”类。 这个背景类对于在分割过程中限制假阳性的数量是必不可少的。

    我们的架构是CNN,它是通过Imagenet的一个子集进行训练的,从图像级标签生成像素级标签。 如图2所示,我们的CNN是相当标准的,有10级卷积和(可选)池化。输入一个400×400的RGB补丁I,并输出对应于12倍下采样图像像素标签分数的| C | +1个平面(每个类一个,加上背景类)。在训练过程中,第3.1节中介绍的一个额外图层将像素级标签聚合为图像级标签。 出于计算能力的原因,我们“冻结”了CNN的第一层,以及一些已经训练有素(通过Imagenet分类数据)的CNN模型。

    我们选择训练以用于对ILSVRC13进行对象分类的Overfeat。Overfeat模型生成尺寸为1024×hi×wi的特征图,其中hi和wi是RGB输入图像大小,卷积核大小,卷积步长和最大池大小的函数。只保留前6个卷积层和2个Overfeat层,我们的RGB 400×400图像块I被转换成1024×29×29的特征表示。

    我们增加了四个额外的卷积层(我们用H6来表示来自OverFeat的特征面)。 每一个(除了最后的Y)之后是逐点校正非线性(ReLU)单元。

    (W p,b p)表示第p层的参数。 在这一步,我们不使用任何最大池化。 一个dropout正规化策略被用于所有层(以防止过拟合)。 网络输出| C | + 1个维度为h o×w o的特征平面,训练中考虑为每个类别加上背景。

    3.1 Multiple Instance Learning

    网络从二次采样图像I为每个像素位置(i,j)产生一个分数和对于每个k∈C的类。假定在训练期间,我们只能访问图像类别标签,我们需要一种方法来聚合这些像素级分数,将其合并为一个单一的图像级别的分数,然后将最大化正确的类标签k*。 假设聚合过程aggreg()已经被选择,我们通过应用下面的softmax函数将图像级别的分数解释为类别条件概率:

    其中θ= {W p,b p∀p}表示我们框架下的所有可训练参数。 然后,我们在所有训练数据对(I,k*)上最大化对数似然(关于θ):

    训练是通过随机梯度来实现的,通过softmax,聚合过程进行反向传播,并且直到我们网络的第一个非冻结层。(原文勘误:应为up to the而不是“up the to”)

    Figure 2:完整的RGB图像通过网络(由Overfeat和四个额外的卷积特征组成)向前传送,生成维度(| C | + 1)×h o×w o的输出平面。 这些输出平面可以看作是输入图像的子采样版本的像素级标签。 然后,输出通过Log-Sum-Exp图层将像素级标签聚合成图像级标签。 误差通过层C10-C7反向传播。

    Aggregation

    聚合应该促使网络走向正确的像素级分配,这样它可以在分割任务上正常执行。 一个明显的聚合将是所有像素位置的总和:

    然而,这将在训练过程中对图像的所有像素赋予相同的权重,甚至对该图像上不属于类别标签的像素分配权重(even to the ones which do not belong to the class label assigned to the image)。注意,该聚合方法与通过mini-batch应用传统的全连接分类CNN等同。 实际上,输出平面中的每个值对应于以输入平面中的对应像素为中心的 sub-patch的CNN的输出。 另一方面,可以应用一个最大池化来汇总:

    这将促使该模型增加被认为是图像级分类最重要的像素的分数。 根据我们的经验,这种方法训练得不好。 请注意,在训练开始时,所有像素可能具有相同(错误)的分数,但是只有一个(由max选择)将在训练过程的每一步都增加其分数。 因此,模型需要大量的时间才能收敛也不奇怪。

    我们选择了最大函数的平滑版本和凸近似,称为Log-Sum-Exp(LSE):

     

    超参数r控制近似值的平滑程度:高r值意味着具有类似于最大值的效果,非常低的值将具有类似于得分平均的效果。 这种聚合的优点是在训练过程中具有相似分数的像素将具有相似的权重,参数r控制这种“相似性”。

     

  • 相关阅读:
    理解Python的With语句
    python按行读取文件,如何去掉换行符" "
    如何使用科大 mirrors 加速 pip?
    python os.path模块常用方法详解
    Python ConfigParser的使用
    mono-project
    Ubuntu 15.04下MySQL 5.6.25不支持中文解决办法
    ubuntu 15.04开放mysql远程连接
    在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)转载+补充
    Asp.net MVC @Html.DisplayNameFor中文乱码解决办法
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/8268811.html
Copyright © 2011-2022 走看看