图像分割网络FCN原理详解

一、全卷积网络(FCN)

卷积神经网络从图像分类到到对象检测实例分割、到图像语义分割、是卷积特征提取从粗糙输出到精炼输出的不断升级,基于卷积神经网络的全卷积分割网络FCN是像素级别的图像语义分割网络,相比以前传统的图像分割方法,基于卷积神经网络的分割更加的精准,适应性更强。

为了了解全卷积网络,我们必须他与普通CNN网络的区别:

1.1 CNN网络

通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率),比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。

  • 举例:下图中的猫, 输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高(如下图)。
    在这里插入图片描述
1.2 全卷积网络(FCN)

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类(如上图)。

简而言之:FCN与CNN的区域在把于CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。

二、网络实现

FCN的卷积网络部分可以采用VGG、GoogleNet、AlexNet等作为前置基础网络,在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S,图示如下:

  • 详情:
    对原图像进行卷积 conv1、pool1后原图像缩小为1/2;
    之后对图像进行第二次 conv2、pool2后图像缩小为1/4;
    继续对图像进行第三次卷积操作conv3、pool3缩小为原图像的1/8,此时保留pool3的featureMap;
    继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;
    最后对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32,
    然后把原来CNN操作中的全连接变成卷积操作conv6、conv7,图像的featureMap数量改变但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap。

  • 实例
    现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap,1/32尺寸的heatMap进行upsampling操作之后,因为这样的操作还原的图片仅仅是conv5中的卷积核中的特征,限于精度问题不能够很好地还原图像当中的特征,因此在这里向前迭代。把conv4中的卷积核对上一次upsampling之后的图进行反卷积补充细节(相当于一个差值过程),最后把conv3中的卷积核对刚才upsampling之后的图像进行再次反卷积补充细节,最后就完成了整个图像的还原。(关于上采样不懂的自行百度)
    在这里插入图片描述
    在这里插入图片描述
    github:https://github.com/muyang0320/tf-fcn
    在这里我们要注意的是FCN的缺点:

  • 是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。

  • 是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

### FCN 全卷积网络结构概述 全卷积网络(Fully Convolutional Network, FCN)是一种专为图像语义分割设计的深度学习框架[^3]。其核心思想在于通过将传统的卷积神经网络(CNN)中的全连接层替换为卷积层,从而实现端到端的像素级预测[^1]。 #### FCN 的主要组成部分 FCN 的架构主要包括以下几个部分: 1. **卷积化**:经典的 CNN 中通常会包含全连接层来处理特征提取后的数据,而 FCN 则将其替换为卷积层,使整个网络完全由卷积操作构成[^4]。 2. **上采样机制**:由于卷积和池化操作会导致空间分辨率下降,因此 FCN 使用反卷积(Deconvolution 或 Transposed Convolution)的方式对特征图进行上采样,恢复原始输入图像的空间维度。 3. **Skip Layers (跳跃连接)**:为了融合不同层次的特征信息并提高细节保留能力,FCN 提出了 skip connections 技术,即将浅层网络的高分辨率特征与深层低分辨率特征相结合[^2]。 以下是基于上述描述的一个简化版 FCN 架构可视化: ```plaintext Input Image -> [Conv Layer(s)] -> Pooling -> [Conv Layer(s)] -> Pooling -> ↓ ↓ Skip Connection Feature Map (Low Resolution) ↑ ↑ Upsampling <- Deconvolution <- Upsampling <- Output Pixel-wise Prediction ``` 该流程展示了 FCN 如何逐步从高层抽象特征回归至像素级别输出的过程。 #### 可视化的具体实现 如果希望获得更直观的 FCN 结构图,可以通过以下几种途径获取或绘制: 1. 查阅原论文《Fully Convolutional Networks for Semantic Segmentation》附带的插图; 2. 借助工具如 TensorFlow/Keras Model Visualization API 或 PyTorch’s TorchVision 库生成模型拓扑图; 3. 手动利用绘图软件制作详细的分层展示图表。 下面是一个简单的 Python 代码片段用于定义基本 FCN 模型,并借助 Keras 工具导出其图形表示: ```python from tensorflow.keras import Input, Model from tensorflow.keras.layers import Conv2DTranspose, MaxPooling2D, Conv2D, concatenate def create_fcn(input_shape=(224, 224, 3), num_classes=21): inputs = Input(shape=input_shape) # Encoder Path with pooling and convolutions pool1 = MaxPooling2D(pool_size=(2, 2))(Conv2D(64, kernel_size=3, padding='same', activation='relu')(inputs)) pool2 = MaxPooling2D(pool_size=(2, 2))(Conv2D(128, kernel_size=3, padding='same', activation='relu')(pool1)) # Decoder Path using transpose convolutions & skip connections upsample_1 = Conv2DTranspose(128, kernel_size=3, strides=(2, 2), padding='same', activation='relu')(pool2) concat_1 = concatenate([upsample_1, pool1], axis=-1) output_layer = Conv2D(num_classes, kernel_size=1, activation='softmax')(concat_1) model = Model(inputs=[inputs], outputs=[output_layer]) return model model = create_fcn() # Save the plot of the architecture to a file. from tensorflow.keras.utils import plot_model plot_model(model, show_shapes=True, to_file="fcn_architecture.png") ``` 运行以上脚本后,“fcn_architecture.png” 文件即包含了所创建 FCN 模型的具体结构布局。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值