网络架构学习之FCNVMB(基于U-Net架构)

目录

一、U-Net介绍

1.1 网络简单介绍

 1.2 网络特点

二、FCNVMB介绍

2.1 文章简介

2.2 网络简单介绍

2.3 代码介绍

2.4 跳跃连接

2.5 训练过程

2.6 FCNVMB与InversionNet的比较


一、U-Net介绍

1.1 网络简单介绍

        U-Net是基于全卷积网络下一个语义分割应用于生物医学的深度学习网络,主要应用与医学领域的图像分割,因其网络整体结构呈现U字型,因此被称为U-Net网络。该方法在2015年MICCAI会议上提出。

        UNet是基于编码器-解码器的网络,从左边到中间,图像尺寸一步步减小,通道数一步步增加,右边是一个逆过程。

       语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。

        U-Net采用全卷积神经网络——左侧为下采样,右侧为上采样。

        encoder:左边为特征提取网络(使用conv和pooling)。

        decoder:右边为特征融合网络(使用上采样产生的特征图与左侧特征图进行concatenate操作) 。

        pooling层会丢失图像信息和降低图像分辨率且是永久性的,对于图像分割任务有一些影响,对图像分类任务的影响不大。为什么要做上采样呢?上采样可以让包含高级抽象特征低分辨率图片在保留高级抽象特征的同时变为高分辨率,然后再与左边低级表层特征高分辨率图片进行concatenate操作。

 1.2 网络特点

        (1)跳跃连接(Skip Connection):中间四条灰色的平行线,在上采样的过程中,融合下采样过过程中的feature map,遇到大小不相同时使用的是裁剪操作而非padding操作。在解码器阶段会采用原编码器的一些网络的特征map来融合进行学习,产生关联。

        (2)图像分割:可以对每个像素点进行分割,获得更高的分割准确率。

        (3)拼接而非相加(Concat):利用之前编码器的结构的时候,实际是将两个通道直接连在一起进行扩充(128+128=256)。

        (4)架构上,更充分地融合浅层特征(编码器结构)和深层特征(解码器结构):浅层特征图更倾向于表达例如点、线、边缘轮廓等基本特征单元,蕴含的空间信息更多,图像涵盖面积更广;深层特征图更倾向于表达图像的语义信息,蕴含的空间信息更少,感受不到与原来图片的关联,语义特征更多,涵盖的计算机所理解的信息更多。

        (5)支持少量的训练模型:在医学方向所能够训练的数据相对较小、且同时需要进行检测的数据/目标较大,所以在U-Net网络中使用到了数据增强的处理,分割的准确度也不会差。

二、FCNVMB介绍

2.1 文章简介

        论文名称:Deep-Learning inversion: a next gneration seismic velocity-model building method(Fangshu Yang and Jianwei Ma)——2019年

        面向数据集:SEG盐数据及其模拟(严格的端到端网络结构,比inversionNet复杂一些,是U-Net的网络结构)

        该算法属于FCN引导的VMB(Velocity Model Build)-速度模型构建的缩写,在代码层这个算法更类似于UNet架构,UNet隶属于FCN的一种改进后的变体

        FCN-全连接的卷积神经网络,针对图像分割的一些任务,通过特征图对应像素值的相加来融合特征的。

        U-Net-处理图像分割的任务,但是比传统FCN更高级一些,处理的任务更好一点,主要应用于医学领域。通过通道数的拼接,形成更厚的特征,会更加消耗显存。

2.2 网络简单介绍

图例介绍: 

        (1)FCNVMB由基本的编码器(左侧)解码器(右侧)共同构成,分别采用蓝色橙色表示。

        (2)红色箭头:一个红色箭头代表三个操作——conv(卷积)、BN(归量化)、ReLU(激活函数),图片的数量和通道数都没有发生变化,相当于特征的重整合,为接下来的尺寸变化做准备。

        (3)紫色箭头(下采样-最大池化):会导致尺寸缩小一半, 相当于特征进一步提取细化。

        (4)黄色箭头(反卷积):导致尺寸扩大一倍,主要用于解码器。

        (5)蓝色箭头:表示1*1的卷积,保证图片尺寸不变,进行特征映射。

        (6)蓝色数字(立方体的宽度),代表通道数(通道数的变化与卷积个数有关, 这个可以通过程序灵活定义, 但是可以发现通道的减少是服从一定规律的),立方体侧面截面的面积代表一张图片的尺寸大小(当前网络层的Feature map),立方体中的黑色字体就代表这个Feature map截面的尺寸。

        (7)每个通道数存在的时间基本上只有三次,每次通道数的变化总是在两次红色卷积+一次紫色卷积之后。

        (8)跳跃连接(skip connection):编码器的结构会通过skip connection与解码器的部分通道进行补充,该过程通过虚线表示,skip connection直接进行通道的合并而非相加。

2.3 代码介绍

        在代码中,会将一些简单卷积相关操作整合,自底向上来看,分为三步:

        ①Pytorch库中独立的卷积操作(低级操作);

        ②卷积组合 (两次红色箭头) 封装为: unetConv2(…)(中级操作);

        ③表示编码和解码:被封装为unetDown(…)和unetUp(…)(高级操作),这些操作的组合顺序在图中用不同的色区分割。这两个高级操作是由两次中级操作和一次最大池化或反卷积构成。

        例如:紫色、黄色和蓝色的线可以称为低级操作,红色称为中级操作。

搭建网络的主要代码:

# 四次下采样的过程—对应灰色、紫色、绿色、黄色子块
self.down1 = unetDown(self.in_channels, filters[0], self.is_batchnorm)
self.down2 = unetDown(filters[0], filters[1], self.is_batchnorm)
self.down3 = unetDown(filters[1], filters[2], self.is_batchnorm)
self.down4 = unetDown(filters[2], filters[3], self.is_batchnorm)

# unetConv2是指两次红色箭头的封装-中级操作
self.center = unetConv2(filters[3], filters[4], self.is_batchnorm)

# 四次上采样的过程-对应黄色、绿色、紫色、灰色子块
self.up4 = unetUp(filters[4], filters[3], self.is_deconv)
self.up3 = unetUp(filters[3], filters[2], self.is_deconv)
self.up2 = unetUp(filters[2], filters[1], self.is_deconv)
self.up1 = unetUp(filters[1], filters[0], self.is_deconv)

# 进行一次卷积操作完成输出
self.final = nn.Conv2d(filters[0], self.n_classes, 1)

2.4 跳跃连接

    过程:①获得上一次向上采样得到的特征图inputs2,通过一次上采样得到outputs2;②接收编码结构与之相对应的特征的输出图inputs1;③inputs1与outputs2尺寸大小不一致,通过F.pad补齐尺寸;④通过torch.cat进行合并,并通过一次卷积操作输出。

def forward(self, inputs1, inputs2):
    '''
    :param inputs1:      Layer of the selected coding area via skip connection
    :param inputs2:      Current network layer based on network flows
    :return:
    '''
    # 反卷积操作
    outputs2 = self.up(inputs2)

    # 计算边缘差异大小,对inputs1进行扩充
    offset1 = (outputs2.size()[2] - inputs1.size()[2])
    offset2 = (outputs2.size()[3] - inputs1.size()[3])
    padding = [offset2 // 2, (offset2 + 1) // 2, offset1 // 2, (offset1 + 1) // 2]

    # Skip and concatenate
    outputs1 = F.pad(inputs1, padding)
    return self.conv(torch.cat([outputs1, outputs2], 1))

        ①inputs1:来自于与当前向上采样相对称的一次下采样操作的输出结果

        ②inputs2:表示上一次unetUp(…)操作结束后的输出Feature map,同时也作为本次unetUp(…)的最近端输入。inputs2在进入程序后立马进行了一次反卷积扩大了一倍尺寸顺势变成了outputs2。

        ③从inputs2outputs2:尺寸扩大了一倍, 通道数缩小了一半outputs2尺寸为256*100*76。

        注意:需留意skip connection在代码中的实现过程, 明确当前Feature map与编码阶段的哪个层进行通道整合。

        inputs1与outputs2通道一致但尺寸并不匹配通过F.pad操作将inputs1进行了扩充得到了同尺寸的outputs1

        而后将outputs1outputs2进行通道合并合并为一个512*100*76Feature map。

        最后将这个Feature map作为一个整体再度进行两次红色箭头的操作。

2.5 训练过程

        网络参数介绍:

        FCNVMB采用了一种迁移学习的思想:先训练模拟数据,让网络大概认识到SEG盐数据的分布,通过模拟盐数据的背景完成针对真实数据的学习。

        ①基于速度模型,通过正演生成地震数据;

        ②调用代码完成初始模型训练得到初始的预训练模型(训练100轮),可针对模拟盐数据进行预测,达到一些效果;

        ③真实数据正演得到地震数据,再进行训练,可以只训练50轮,得到再训练模型(可针对真实数据进行预测,也可针对模拟数据进行预测,但是效果不太好);

2.6 FCNVMB与InversionNet的比较

          相同点:

        ①均单一的端到端深度网络,并没有利用更多的物理含义。

        ②均采用了编码器-解码器的架构。

        ③均利用叠前多炮数据的不同炮集直接投入训练,并未处理。

        不同点:

        ①InversionNet在编码的过程中最终将图像压缩为完全的一维向量抛弃了空间关联性FCNVMB在压缩后仍保留了25 * 19的空间尺寸关联。 但是对应的代价是FCNVMB的模型内存占有量很大难以进行大batch体量的训练而InversionNet可以非常灵活进行训练

        ②FCNVMB面向SEG盐数据, InversionNet面向部分OpenFWI的数据因为OpenFWI数据的特点InversionNet有非常明显的高度降维部分。

        ③FCNVMB使用了迁移学习的训练手段,后者InversionNet是单一的训练思想  

        ④FCNVMB采用了包含skip connectionUNet的架构InversionNet是单一的CNN架构

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值