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

news2025/4/17 12:13:02

目录

一、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架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PC端视频编辑处理的全方位解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而,制作高质量的视频并非易事,需要专业的技术和设备。这就是美摄科技发挥作用的地方。我们为企业提供一站式的PC端视频编辑处理解决方案,帮助企业轻松制作出专业级别的视频。 美摄科技…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 包含效率,功率因数,堵转电流等其他厂商很少给出的参数,可以做手册用…

【Redis】安装(Linuxwindow)及Redis的常用命令

Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复…

2024年天津中德应用技术大学专升本招生专业限制目录

2024年天津中德应用技术大学专升本招生专业限制 专科可允许报考的专业目录范围 机械电子工程: 机电一体化技术、数控技术、数控设备应用与维护、模具设计与制造、精密机械技术、材料工程技术、机械设计与制造、计算机辅助设计与制造、焊接技术与自动化、电气自动化…

Yolov8目标识别与实例分割——版本比对与原理解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…

Java学习_day07_类的构造器代码块继承封装多态

文章目录 构造器格式注意点使用 代码块格式注意 继承格式注意点 封装包声明包导包注意点 访问修饰符 多态格式注意点代码演示 构造器 Java中每个类都至少有一个构造器,当程序员没有明确编写构造器时,Java编译器会自动为类添加一个无参的构造器。构造器通…

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮,展示子组件密码输入的输入框通过点击子组件输入框获取焦点,然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机,通过对智能停车算法研究系统所需的信息管理,增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

canvas实现环形进度条

与setTimeout和setInterval不同&#xff0c;requestAnimationFrame不需要设置时间间隔。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas progress</title> </head&g…

GCC 编译器 详细总结

前言&#xff1a; 源文件需要经过编译才能生成可执行文件。 在 Windows 下进行开发时&#xff0c;只需要点几个按钮即可编译&#xff0c;集成开发环境(比如 Visual studio)已经将各种编译 工具的使用封装好了。 Linux 下也有很优秀的集成开发工具&#xff0c;但是更多的时候…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

基于Python+Django+Vue在线图书借阅网站、图书管理系统 - 毕业设计 - 课程设计

文章目录 源码下载地址项目介绍项目功能界面预览项目备注毕设定制&#xff0c;咨询 源码下载地址 点击这里下载代码 项目介绍 这是一个基于pythonvue开发的图书借阅网站。平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行…

牛客网刷题-(10)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Mongoose 开源库--SNTP 网络校时使用笔记

一、SNTP介绍 SNTP是一种简单的网络时间协议&#xff0c;它可以通过网络协议同步计算机的时间&#xff0c;时间的精度不如NTP。 关于SNTP介绍&#xff0c;可以参考 https://www.ionos.com/digitalguide/server/know-how/sntp-simple-network-time-protocol/ 或者 https://time…

docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

GitLab介绍 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务&#xff0c;可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。…

开发项目管理必备神器!10款好用的在线看板工具推荐!

在当今高速发展、竞争激烈的商业环境中&#xff0c;项目管理已经成为了许多组织的生存之道。项目管理可以有效地协调资源&#xff0c;监控进度&#xff0c;把握风险&#xff0c;并实现组织的策略目标。然而&#xff0c;传统的项目管理方法已经无法满足日益复杂和变化的工作需求…

框架安全-CVE 复现Apache ShiroApache Solr漏洞复现

文章目录 服务攻防-框架安全&CVE 复现&Apache Shiro&Apache Solr漏洞复现中间件列表常见开发框架Apache Shiro-组件框架安全暴露的安全问题漏洞复现Apache Shiro认证绕过漏洞&#xff08;CVE-2020-1957&#xff09;CVE-2020-11989验证绕过漏洞CVE_2016_4437 Shiro-…