• 回答数

    3

  • 浏览数

    143

Cupnightsky
首页 > 期刊论文 > fcn论文模板

3个回答 默认排序
  • 默认排序
  • 按时间排序

晴天花生

已采纳

对于目标检测方向并不是特别熟悉,本文记录一下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的重叠率大于,就认为是正类。 对于分类器的训练,作者发现选择多大的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的设计等等细节,无一不体现了大师们的思考和创造力。 可能在我们这些“拿来”者的眼中,这些方法都显得“理所应当”和巧妙,好用,但是,它们背后隐藏的选择和这些选择的思考却更值得我们学习。 以及,对待每一个问题,如何设计出合理的解决方案,以及方案的效率,通用性,更是应该我们努力的方向。

163 评论

fengzhong031

自己很早就看到过这篇论文了,论文中的工作和我的一个项目也是有很多共通之处,但是自己实力不够也没有想法去把它们全部总结下来,只能在此膜拜一下大佬。 自从2012年AlexNet在图像分类任务上大放异彩后,深度卷积神经网络已经成为图像分类任务上最有效的方法,在ImageNet上的准确率也从提升至。然而这些提升不仅仅是网络结构上的改进,还有很多训练策略上的改进,如损失函数、数据预处理、优化方法等,但是这些改进的关注度却非常低,有些重要的tricks甚至只能在源码中找到。本论文总结了一个技巧大礼包,通过和baseline对比,评估这些技巧的有效性。同样的,关于这些技巧的结论也适用于其他计算机视觉任务,比如目标检测、语义分割、实例分割等等。 baseline的训练方法主要是参考Resnet的训练过程。 近些年来,硬件(GPU)上发展迅速,所以在权衡性能上的选择也发生了改变。现在在训练时会去选择使用低数值精度和更大的batch size。 对于同样个数的epoch,大的batch_size效果不如小的batch_size。可以用以下启发式方法来解决这个问题 通常神经网络都是用32位浮点型(FP32)精度训练,也就是说所有参数的存储和运算都是用FP32。然而当前的新硬件支持更低精度的数据类型。比如V100用FP32能提供14TFLOPS,但是用FP16能提供100TFLOPS。在V100上从FP32切换到FP16后,整体训练速度加快了2到3倍。(本人不太了解混合精度训练,论文里也只是简单提了几句,大概看了一下百度的那篇混合精度论文,有误的话请指正) 尽管使用FP16可以大大加快训练速度,但是有些梯度在FP16范围之外,如果用FP16进行更新,梯度都会是0,无法正常训练。所以这里主要有两个方法: 模型调整是对网络体系结构的微小调整,例如改变特定卷积层的步幅。这种调整通常几乎不会改变计算复杂性,但可能对模型精度产生不可忽略的影响。在本节中,我们将使用ResNet作为示例来研究模型调整的影响。 ResNet由一个输入主干,后续的四个阶段和一个输出层组成。 ResNet有两个流行的调整,在这里我们分别成为ResNet-B和ResNet-C,我们也提出了一个新的模型调整,ResNet-D。 使用第三节提到的BS=1024,精度为FP16的ResNet50进行实验。ResNet50和ResNet50-D的浮点数计算成本差异在15%内,在训练过程中,ResNet50-D仅仅只慢了3%,精度提升了1%。我自己也大概计算了一下将用3个3x3替代一个7x7增加的FLOPs。(不包含bias,BN,ReLu等计算)本节进一步介绍提高模型精度的四种训练策略的改进。 在训练过程中,学习率是一个至关重要的参数,在使用warm up后,我们通常会随着训练进程,逐步降低学习率。广泛使用的策略是学习率指数衰减。在ResNet中是每30轮降低,称之为step decay;在Inception中是每两轮降低。另一种策略是2016年提出的学习率余弦衰减。简化版本是通过余弦函数将学习速率从初始值降低到0。从上图可以看出,起初余弦衰减的学习率缓慢下降,在中间部分几乎是线性下降,在最后又缓慢下降。(但是似乎准确率没有提升,而且也没有加速收敛,只是验证准确率曲线更加平滑) 图像分类网络的最后一层通常是全连接层。由 表示 类的预测得分,可以通过 算子对这些得分进行归一化得到预测概率。总共有 类, 类的概率 可以通过以下公式计算:另外,如果图像的真实标签是 ,我们可以得到分布 : 负交叉熵计算(论文中此处公式有误): 通过训练,使得 两个分布越来越接近。损失计算也可以转换为下式: 所以最优解是 ,同时保持其他值很小。换句话说,这样做也鼓励输出的分数有显著区别,从而可能导致过拟合(通过softmax学到的模型太自信了)。 标签平滑的想法首先被提出用于训练Inception-v2,它改变了真实概率 的分布: 其中 是一个常数,所以最后的解为: 其中 可以是任意实数。这样可以调整全连接层的输出,得到更好的泛化能力。 在知识蒸馏中,我们使用教师模型来帮助训练当前模型,这被称为学生模型。教师模型通常是具有更高准确度的预训练模型,因此通过模仿,学生模型能够在保持模型复杂性相同的同时提高其自身的准确性。一个例子是使用ResNet-152作为教师模型来帮助培训ResNet-50。 在训练期间,我们添加蒸馏损失来惩罚教师模型的Softmax出书和学生模型之间的差异。给定输入,假设 是真实概率分布,并且 分别是学生模型和教师模型最后全连接层的输出。我们之前是使用负交叉熵损失 来衡量 之间的差异。加上只是蒸馏后,其损失函数变为:2017年提出的mixup。每次随机选两个样本作为一个样本对 ,然后通过这一个样本对,生成一个新的样本:这里作者没有提及采用mix up后损失函数计算方法的改变,我补充一下: 知乎的讨论---如何评价mixup: BEYOND EMPIRICAL RISK MINIMIZATION? 我们设置 用于标签平滑,使用 用于知识蒸馏,对于ResNet152-D模型,同时使用余弦学习率衰减和标签平滑作为教师网络。在mix up 中,我们在Beta分布中选择 ,并且将训练轮数由120增加到200,因为mix up要求使用更多的轮数才能够更好的收敛。当我们同时使用mix up 和知识蒸馏时,教师网络也会使用mix up进行训练。 知识蒸馏在ResNet上运行良好,但是它在Inception-V3和MobileNet上运行不佳。我们的解释是,教师模型不是来自学生的同一个家庭,因此在预测中有不同的分布,并对模型带来负面影响。 迁移学习是图像分类模型的一个主要用途,我们在选择了两个重要的计算机视觉任务:物体检测和语义分割,通过改变基本模型来评估他们的性能。 我们分别使用VOC 2007 trainval和VOC 2012 trainval的联合集进行培训,并使用VOC 2007测试进行评估。我们在这个数据集上训练了Faster-RCNN,其中包括来自Detectron的改进,例如线性warm up 和 long training schedul。将Faster-RCNN的基础网络替换,保持其他设置相同,因此收益仅来自于模型。ImageNet上精度为%的最佳基础模型在VOC上的最佳mAP为%,优于标准模型4% 我们使用完全卷积网络FCN在ADE20K 数据集上训练模型,在Stage3和Stage4中使用扩张卷积。与我们在物体检测上的结果相矛盾,余弦学习速率表有效地提高了FCN性能,而其他改进则没有效果。对该现象的潜在解释是语义分割在像素级别中预测。虽然使用标签平滑,蒸馏和mix up 的模型有利于软化标签,但模糊的像素级信息可能会降低精度。 在本文中,我们调查了十几个技巧,以训练深度卷积神经网络,以提高模型的准确性。这些技巧为模型架构,数据预处理,损失函数和学习速率进行了微小的修改。我们在ResNet-50,Inception-V3和MobileNet上的实证结果表明,这些技巧可以始终如一地提高模型精度。更令人兴奋的是,将所有这些堆叠在一起可以显着提高准确性。此外,这些改进的预训练模型在转移学习中显示出强大的优势,这改善了对象检测和语义分割。我们相信,这种优势可以扩展到更广泛的领域。 作者总结了一大堆技巧,并且对于这些技巧都做了足够的实验,可以将其作为一本指导手册,帮助自己在以后训练网络的过程中少踩坑。其中每一个tricks在本文中也只是简单交代,想要了解更多的细节还需要去找相关论文继续深入。

105 评论

zcp1211小窝

原文链接: 一、写在前面: 网络架构的设计主要是基于 CNN 结构延伸出来的。主要的改进方式有两点:新神经架构的设计(不同深度,宽度,连接性或者拓扑结构)或设计新的组件(或者层)。下面我们逐个去分析了解。 本文涉及到的论文范围如下图: 二、网络架构的改进 FCN 传统的 CNN 分割,为了对一个像素分类,使用该像素周围的一个图像块作为 CNN 的输入用于训练和预测。缺点很多:比如存储开销大,计算效率低,像素块大小也限制了感知域的大小。基于存在的这些问题,由 Long 等人在 2015 年提出的 FCN 结构,第一个全卷积神经网络的语义分割模型。我们要了解到的是,FCN 是基于 VGG 和 AlexNet 网络上进行预训练,然后将最后两层全连接层改为的卷积层。 FCN 具体处理过程是怎么样的?从 pool1 开始,每个 pool 后图像都会变为上个池化后图像的 1/2。Pool1 为原图的 1/2,以此类推,pool5 后为原图的 1/2^5,conv6,和 conv7 之后的图像保持不变,进行 stride=32 的反卷积,得到 FCN-32s。也就是直接对 pool5 进行 32 倍上采样获得 32 upsampled feature,再对 32 upsampled feature 每个点做 softmax prediction,就可以获得 32*upsampled prediction(分割图)。 FCN 这三个创新点有哪些? 全卷积 :用于解决逐像素的预测问题。通过将基础网络最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。 反卷积 :端到端的像素级语义分割需要输出大小和输入图像大小一致。但是传统的 conv+pooling 结构会缩小图片尺寸。基于此作者引入反卷积(deconvolution)操作,对缩小后的特征进行上采样,恢复原始图像大小。 跳跃结构 :语义分割包括语义识别和目标定位。卷积网络的高层特征图可以有效的反应语义信息,而低层特征图可以有效反应目标的位置信息。语义分割任务同时进行语义识别和目标定位。作者提出的跨层连接结构(skip architecture),将低层的目标位置信息和高层语义信息进行融合,以此来提升语义分割性能。在此基础上进行 2 倍采样,2 倍 upsample 之后与 pool4 的像素点相加,进行 stride=16 的 upsample,为此 FCN-16s,重复上面类似的步骤,得到 FCN-8s。 了解到以上信息,应该对 FCN 有个整体的认识了。还有一些细节部分,比如 FCN 采用的简单的 softmax 分类损失函数,采用双线性差值 + 反卷积进行上采样,在微调的时候没有采用类别平衡策略。分割结果来看,FCN-8s>FCN-16s>FCN-32s。也就是说使用多层特征融合有利于提高分割准确性。 SegNet SegNet 主要动机是在场景理解 。它在设计的时候考虑的是预测期间保证内存和计算时间上的效率。其中,SegNet 和 FCN 有很多相似之处,编码网络使用 VGG16 的前 13 层卷积;移除全连接;解码器使用从相应的编码器的 max-pooling indices 进行 upsampling。 对比 SegNet 和 FCN 实现 Decoder 的过程。FCN 是利用双线性插值初始化的反卷积进行上采样。而 SegNet 则是在每次 pooling 时,都存下最大值的位置,在 upsample 时将 input 值直接赋给相应的位置,其他位置的值置零。 U-Net 接下来,我们需要了解的是 U-Net。U-net 网络架构,由收缩路径(contracting path)和扩展路径(expanding path)组成。每一层使用两个 3 乘 3 的 conv kernel,每次卷积都进行 Relu 和 stride=2 的 maxpooling 进行下采样。四次操作后输出结果称之为 feature map。 2 乘 2 的反卷积,上采样,通道数减半,并将左边对称位置的 feature map copy 到右边进行 concate 操作,来融合下采样的浅层位置信息和高层语义信息。合并后在进行 3*3 的卷积操作。最后 output 之前,通道数表示分类的类别产生 N 类分割结果,最后选择出概率值最大的分割结果,作为最后的分割图。 U-Net 中常常会问为什么适用于医学图像这个问题.。首先分析医学影像数据特点:图像语义较为简单,结构较为固定:都是一个固定的器官的成像。而且器官本身结构固定,语义信息没有特别丰富,所以高级语义信息和低级特征都非常重要。(U-net 的 skip connection 可以解决这个问题);数据量少:医学影像的数据较难获取,为了防止过拟合,设计的模型不宜过大;多模态:医学影像是具有多种模态的;可解释性:医生需要进一步指导病灶在哪一层,哪一层的哪个位置,分割结果能求体积么?而且 U-Net 在自然图像分割也取得了不错的效果。 需要注意的一点:Unet 融合浅层信息是 maxpooling 之前还是之后的结果?是 maxpooling 之前的结果。因为 Maxpooling 之后会丢失准确的位置信息。 V-Net V-Net 也就是 3D 的 U-net 的一种版本,3D 卷积,引入残差模块和 U-Net 的框架。整个网络分为压缩路径和非压缩路径,也就是缩小和扩大 feature maps,每个 stage 将特征缩小一半,也就是 128-128-64-32-16-8,通道上为 1-16-32-64-128-256。每个 stage 加入残差学习以加速收敛。 图中的圆圈加交叉代表卷积核为 5 乘 5 乘 5,stride 为 1 的卷积,可知 padding 为 2 乘 2 乘 2 就可以保持特征大小不变。每个 stage 的末尾使用卷积核为 2 乘 2 乘 2,stride 为 2 的卷积,特征大小减小一半(把 2x2 max-pooling 替换成了 2x2 conv.)。整个网络都是使用 keiming 等人提出的 PReLU 非线性单元。网络末尾加一个 1 乘 1 乘 1 的卷积,处理成与输入一样大小的数据,然后接一个 softmax。 而且 V-Net 采用 Dice coefficient 损失函数,如下: Pi 为预测的前景,Gi 为标记的前景,使用这个函数能有效避免类别不平衡的问题。 Dense-UNet Dense U-net(原名:one-hundred layers Tiramisu Network)该架构是由密集连接块(dense block)构建的。该架构由向下过度的两个下采样路径和向上过度的两个上采样路径组成。且同样包含两个水平跳跃连接,下采样 Dense 模块的输出与同水平的上采样 Dense 模块输入的相应特征图拼接在一起。上采样路径和下采样路径的连接模式并不完全相同:下采样路径中,每个密集块外有一条跳跃性连接,从而导致 feature map 数量线性增长,上采样中没有此操作。 主要创新点是融合了 Dense-Net 和 U-Net 网络。 DeepLab 系列网络 DeepLabV1:首次把空洞卷积(dilated convolution) 引入图形分割领域, 融合卷积神经网络和概率图模型:CNN + CRF,提高了分割定位精度。 DeepLabV2:ASPP (扩张空间金字塔池化):CNN+CRF。 DeepLabV3:改进 ASPP,多了 1 乘 1 卷积和全局平均池化(global avg pool);对比了级联和并联空洞卷积的效果。 DeepLabV3+:加入编解码架构思想,添加一个解码器模块来扩展 DeepLabv3;将深度可分离卷积应用于 ASPP 和解码器模块;将改进的 Xception 作为 Backbone。 PSPNet PSPNet 全名是 Pyramid Scene Parsing Network(金字塔场景解析网络)。提出了金字塔池化模块(pyramid pooling module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。 输入图像后,使用预训练的带空洞卷积 ResNet 提取特征图。最终的特征映射大小是输入图像的 1/8;在特征图上,我们使用 C 中的金字塔池化模块收集上下文信息。使用 4 层金字塔结构,池化内核覆盖了图像的全部、一半和小部分。他们被融合为全局先验信息;在 c 的最后部分将之前的金字塔特征映射与原始特征映射 concate 起来;在进行卷积,生成 d 中的最终预测图。 总结 基于深度学习的图像语义分割模型大多遵循编码器-解码器体系结构,如 U-Net。近几年的研究成果表明,膨胀卷积和特征金字塔池可以改善 U-Net 风格的网络性能。 参考文献: Deep Semantic Segmentation of Natural and Medical Images: A Review

124 评论

相关问答

  • 手绘论文答辩模板ppt模板

    蓝色手绘灯泡,以你的要求帮助

    幸福的小萝卜 6人参与回答 2023-12-11
  • 毕业论文答辩模板ppt模板

    关于内容: 1、一般概括性内容:课题标题、答辩人、课题执行时间、课题指导教师、课题的归属、致谢等; 2、课题研究内容:研究目

    长平公主 4人参与回答 2023-12-10
  • 论文格式模板专题模板

    现如今,大家总免不了要接触或使用论文吧,论文的类型很多,包括学年论文、毕业论文、学位论文、科技论文、成果论文等。写起论文来就毫无头绪?下面是我收集整理的论文格式

    janelin1002 2人参与回答 2023-12-09
  • fcn论文模板

    对于目标检测方向并不是特别熟悉,本文记录一下RCNN, fast-RCNN, faster-RCNN, mask-RCNN这4篇有关目标检测的论文笔记和学习心得

    Cupnightsky 3人参与回答 2023-12-10
  • 毕业论文提纲模板模板

    毕业论文提纲格式范本(通用6篇) 充实的大学生活即将结束,大家都知道毕业生要通过毕业论文,毕业论文是一种有准备的检验学生学习成果的形式,那么毕业论文应该怎么写才

    睡不死也睡 2人参与回答 2023-12-05