㈠ 全卷积的概念(FCN)
参考资料
目录
1 问题的引出
2 CNN用作语义分割的特点(优缺点)
3 FCN用作语义分割的特点(优缺点)
全卷积网络 (Fully Convolutional Networks)大都用在语义分割任务中,最近看Siamese-RPN遇到了这个概念,就随手记一下。这里仅提一下前因后果和简单概念,需要推导的同学查看上述论文。
CNN能够对图片进行分类,可是怎么样才能更好识别图片中 特定部分 的物体?
传统的基于CNN的分割方法的做法通常是:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入用于训练和预测。
优点 :
CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。
缺点 :
FCN将传统CNN中的全连接层转化成一个个的卷积层。如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。 简单来说,就是将 CNN中的fc(全连接)层换成了卷积层 ,网络结构中不在具有fc层。
可以发现,经过多次卷积(还有pooling)以后,得到的图像越来越小,分辨率越来越低(粗略的图像),那么FCN是如何得到图像中每一个像素的类别的呢?为了从这个分辨率低的粗略图像恢复到原图的分辨率,FCN使用了 上采样 。例如经过5次卷积(和pooling)以后,图像的分辨率依次缩小了2,4,8,16,32倍。对于最后一层的输出图像,需要进行32倍的上采样,以得到原图一样的大小。这个上采样是通过 反卷积(deconvolution) 实现的。对第5层的输出(32倍放大)反卷积到原图大小,得到的结果还是不够精确,一些细节无法恢复。于是Jonathan将第4层的输出和第3层的输出也依次反卷积,分别需要16倍和8倍上采样,结果就精细一些了。
优点 :
缺点 :
更多关于上采样(upsample)的方法和细节可以 查阅参考资料(3)
㈡ FCN,FPN,UNet对比总结 2021-02-27
这篇文章对三个非常相似的图像分割模型进行一个总结对比,它们都是先下采样再上采样,并且把下采样过程中的浅层特征和上采样过程中,相应尺寸的高级特征融合起来的一个结构。这三个模型都使用的全卷积,第一个模型FCN,Fully Convolutional Neuralnetwork就以此为名,用1*1卷积核替代全连接,这样就不用考虑尺寸对应的问题了
FCN尝试了三种预测结构,第一种将最高级的特征直接进行32倍的上采样,16s和8s取用了更多层的浅层特征和上采样到同尺寸的高级特征图简单相加进行结合。这里的上采样方法用双线性插值作为初始值,但是参数是可学习的。
U-Net是针对细胞照片的图像分割设计的,其实和FCN十分相似,不过它在上采样的阶段的特征图拥有更多的通道数,因此网络结构更为对称成为一个U形。另外,FCN的上采样阶段对浅层和深层特征的融合使用的是简单相加,U-Net中是将两者拼接起来。
另外可以注意到U-Net中两边的矩阵尺寸是不一样的,这里预测的是一个388 388的输出,但是输入有572 572,下面的特征图也是下采样阶段的更大一些,拼接时,浅层特征图会被直接截取而不是resize,这是为了补偿下采样过程中丢失的一些细胞边界细节。如果预测区域在原图的边界,则使用镜像补全,提供一个更大的蓝色区域作为输入。
FPN对多尺度的特征图都进行了独立的预测,结果取置信度最高的像素(图像分割任务)。这是他最大的特点,接下来我们就可以就几个方面一起看了。
结构上,三者都是对称的下采样再上采样的全卷积网络,
在上采样方式上,FCN和U-Net都是使用以双线性插值为初始值的反卷积,FPN最近邻上采样
在特征融合上,FCN将不同尺度的特征简单相加,U-Net将浅层特征截取后和高层特征拼接,而FPN是用1*1卷积处理浅层特征图再和高级特征相加。
参考博客: https://chadrick-kwag.net/fcn-unet-fpn-comparison/
㈢ 外企 fcn 是什么职位
fcn是fully convolutional networks的英文缩写。翻译为“完全卷积网络”,外企 fcn是网络编程职位。
FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。
最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本。下图是Longjon用于语义分割所采用的全卷积网络(FCN)的结构示意图:
缺点
在这里我们要注意的是FCN的缺点:
是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
㈣ 自然和医学图像的深度语义分割:网络结构
原文链接: https://www.yanxishe.com/blogDetail/18223?from=jianshu0312
一、写在前面:
网络架构的设计主要是基于 CNN 结构延伸出来的。主要的改进方式有两点:新神经架构的设计(不同深度,宽度,连接性或者拓扑结构)或设计新的组件(或者层)。下面我们逐个去分析了解。
本文涉及到的论文范围如下图:
二、网络架构的改进
2.1.1 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。也就是说使用多层特征融合有利于提高分割准确性。
2.1.2 SegNet
SegNet 主要动机是在场景理解 。它在设计的时候考虑的是预测期间保证内存和计算时间上的效率。其中,SegNet 和 FCN 有很多相似之处,编码网络使用 VGG16 的前 13 层卷积;移除全连接;解码器使用从相应的编码器的 max-pooling indices 进行 upsampling。
对比 SegNet 和 FCN 实现 Decoder 的过程。FCN 是利用双线性插值初始化的反卷积进行上采样。而 SegNet 则是在每次 pooling 时,都存下最大值的位置,在 upsample 时将 input 值直接赋给相应的位置,其他位置的值置零。
2.1.3 U-Net
接下来,我们需要了解的是 U-Net。U-net 网络架构,由收缩路径(contracting path)和扩展路径(expanding path)组成。每一层使用两个 3 乘 3 的 conv kernel,每次卷积都进行 Relu 和 stride=2 的 maxpooling 进行下采样。四次操作后输出结果称之为 feature map。
2 乘 2 的反卷积,上采样,通道数减半,并将左边对称位置的 feature map 到右边进行 concate 操作,来融合下采样的浅层位置信息和高层语义信息。合并后在进行 3*3 的卷积操作。最后 output 之前,通道数表示分类的类别产生 N 类分割结果,最后选择出概率值最大的分割结果,作为最后的分割图。
U-Net 中常常会问为什么适用于医学图像这个问题.。首先分析医学影像数据特点:图像语义较为简单,结构较为固定:都是一个固定的器官的成像。而且器官本身结构固定,语义信息没有特别丰富,所以高级语义信息和低级特征都非常重要。(U-net 的 skip connection 可以解决这个问题);数据量少:医学影像的数据较难获取,为了防止过拟合,设计的模型不宜过大;多模态:医学影像是具有多种模态的;可解释性:医生需要进一步指导病灶在哪一层,哪一层的哪个位置,分割结果能求体积么?而且 U-Net 在自然图像分割也取得了不错的效果。
需要注意的一点:Unet 融合浅层信息是 maxpooling 之前还是之后的结果?是 maxpooling 之前的结果。因为 Maxpooling 之后会丢失准确的位置信息。
2.1.4 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 为标记的前景,使用这个函数能有效避免类别不平衡的问题。
2.1.5 Dense-UNet
Dense U-net(原名:one-hundred layers Tiramisu Network)该架构是由密集连接块(dense block)构建的。该架构由向下过度的两个下采样路径和向上过度的两个上采样路径组成。且同样包含两个水平跳跃连接,下采样 Dense 模块的输出与同水平的上采样 Dense 模块输入的相应特征图拼接在一起。上采样路径和下采样路径的连接模式并不完全相同:下采样路径中,每个密集块外有一条跳跃性连接,从而导致 feature map 数量线性增长,上采样中没有此操作。
主要创新点是融合了 Dense-Net 和 U-Net 网络。
2.1.6 DeepLab 系列网络
DeepLabV1:首次把空洞卷积(dilated convolution) 引入图形分割领域, 融合卷积神经网络和概率图模型:CNN + CRF,提高了分割定位精度。
DeepLabV2:ASPP (扩张空间金字塔池化):CNN+CRF。
DeepLabV3:改进 ASPP,多了 1 乘 1 卷积和全局平均池化(global avg pool);对比了级联和并联空洞卷积的效果。
DeepLabV3+:加入编解码架构思想,添加一个解码器模块来扩展 DeepLabv3;将深度可分离卷积应用于 ASPP 和解码器模块;将改进的 Xception 作为 Backbone。
2.1.7 PSPNet
PSPNet 全名是 Pyramid Scene Parsing Network(金字塔场景解析网络)。提出了金字塔池化模块(pyramid pooling mole)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。
输入图像后,使用预训练的带空洞卷积 ResNet 提取特征图。最终的特征映射大小是输入图像的 1/8;在特征图上,我们使用 C 中的金字塔池化模块收集上下文信息。使用 4 层金字塔结构,池化内核覆盖了图像的全部、一半和小部分。他们被融合为全局先验信息;在 c 的最后部分将之前的金字塔特征映射与原始特征映射 concate 起来;在进行卷积,生成 d 中的最终预测图。
总结
基于深度学习的图像语义分割模型大多遵循编码器-解码器体系结构,如 U-Net。近几年的研究成果表明,膨胀卷积和特征金字塔池可以改善 U-Net 风格的网络性能。
参考文献:
Deep Semantic Segmentation of Natural and Medical Images: A Review
㈤ 名字f加上n是什么意思网络用语
这是网络用语,fn是推销的意思,在网络语言中,名字加上f加上n,可能是名片推广。
㈥ 图像分割:全卷积神经网络(FCN)详解
作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,图像分割已经在近些年里有了长足的发展。这项技术也被广泛地应用于无人驾驶领域中,比如用来识别可通行区域、车道线等。
全卷积网络(Fully Convolutional Networks,FCN)是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用于图像语义分割的一种框架。虽然已经有很多文章介绍这个框架,我还是希望在此整理一下自己的理解。
整体的网络结构分为两个部分:全卷积部分和反卷积部分。其中全卷积部分借用了一些经典的CNN网络(如AlexNet,VGG,GoogLeNet等),并把最后的全连接层换成 卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
网络的输入可以为任意尺寸的彩色图像;输出与输入尺寸相同,通道数为:n(目标类别数)+1(背景)。
网络在CNN卷积部分不用全连接而是替换成 卷积的目的是允许输入的图片为超过某一尺寸的任意大小。
由于在卷积过程中,我们的heat map变得很小(比如长宽变为原图像的 ),为了得到原图像大小的稠密像素预测,我们需要进行上采样。
一个直观的想法是进行双线性插值,而双线性插值很容易用反向卷积(backwards convolution)通过固定的卷积核来实现。反向卷积又可以被称为反卷积(deconvolution),在近期的文章中通常被称为转置卷积(transposed convolution)。
在实际应用中,作者并没有固定卷积核,而是让卷积核变成可学习的参数。
如果利用之前提到的上采样技巧对最后一层的特征图进行上采样的到原图大小的分割,由于最后一层的特征图太小,我们会损失很多细节。因而作者提出增加Skips结构将最后一层的预测(有更富的全局信息)和更浅层(有更多的局部细节)的预测结合起来,这样可以在遵守全局预测的同时进行局部预测。
FCN仍有一些缺点,比如:
得到的结果还不够精细,对细节不够敏感;
没有考虑像素与像素之间的关系,缺乏空间一致性等。
参考: zomi,全卷积网络FCN详解:知乎专栏文章
作者的其他相关文章:
PointNet:基于深度学习的3D点云分类和分割模型 详解
基于视觉的机器人室内定位