语义分割算法之Unet论文理解

Unet论文总结 文章目录Unet总结一、网络结构二、主要策略2.1 编码-解码结构2.2 overlap-tile strategy2.3 weighted loss2.4 数据增强-随机弹性形变三、训练四、效果图 Unet总结 论文地址:U-Net: Convolutional Networks for Biomedical Image Segmentation Unet主要用于医学图像分割。 医学图像特点是: 数据集小(Unet只用了30张标注图片训练) touching objects(对象接近,比如说两个细 阅读详情

题外话

Unet是受到FCN启发针对医学图像做语义分割,且可以利用少量的数据学习到一个对边缘提取十分鲁棒的模型,在生物医学图像分割领域有很大作用。

网络架构

在这里插入图片描述
这就是整个网络的结构,大体分为收缩和扩张路径来组成。因为形似一个字母U,得名Unet。收缩路径仍然是利用传统卷积神经网络的卷积池化组件,其中经过一次下采样之后,channels变为原来的2倍。扩张路径由2 * 2的反卷积,反卷机的输出通道为原来通道数的一半,再与原来的feature map(裁剪之后)串联,得到和原来一样多的通道数的feature map,再经过2个尺寸为3 * 3的卷积和ReLU的作用。裁剪特征图是必要的,因为在卷积的过程中会有边界像素的丢失。在最后一层通过卷积核大小为1 * 1的卷积作用得到想要的目标种类。在Unet中一共有23个卷积层。但是这个网络需要谨慎的选择输入图片的尺寸,以保证所有的Max Pooling操作作用于长宽为偶数的feature map。

Trick1: 对于尺寸较大的图像:Overlap-tile strategy

在这里插入图片描述
\quad由于网络没有全连接层,并且只使用每个卷积的有效部分,所以只有分割图像完全包含在输入图像中可以获得完整的上下文像素。而这个策略允许通过重叠区块无缝分割任意大的图像,为了预测图像边界区域中的像素,通过镜像的输入图像来外推丢失的上下文。这种平铺策略对于将网络应用于大图像很重要,否则分辨率将受到GPU内存的限制。

数据集可以用数据量较少

可用的训练数据非常少,通过对可用的训练图像应用弹性变形来进行数据增强。这允许网络学习到这种变形的不变性,而不需要在注释的图像语料库中看到这些变换。这在生物医学分割中尤其重要,因为变形是组织中最常见的变化,并且可以有效的模仿真实的变形。Dosovitskiy等人已经证明在无监督表征学习的范围内学习不变性的数据增加的价值,通过在一个3*3的粗糙网格中使用一个随机位移向量产生一个平滑的变形,位移量从高斯分布中取样,高斯分布有10个像素的标准差,每个像素的偏移值通过bicubic interpolation来获得。

相同物体间的间隔不容易分割出来

很多细胞分割任务中的一大挑战是分离同一类接触体,本文采用加权损失,其中接触单元之间的分离背景标签在损失函数中获得大的权重。以此方法提升对于相互接触的相同物体之间缝隙的分割效果。

主要贡献

在医学影像领域,由于数据量本身就很少,这篇论文有效的提升了使用少量数据集进行训练检测的效果,还提出了处理大尺寸图像的有效方法。

总结

似乎很多人使用Unet来做边缘检测,这个体现为,我们有什么样的Mask就会获得什么样的边缘。本人已经用Unet训练了自己的数据集,并且得到了预期的结果,之后会提供一个基础,详细的教程来说说如何训练Unet之类的语义分割网络。

代码实现

#coding=utf-8
from keras.models import *
from keras.layers import *

def Unet (nClasses, optimizer=None, input_width=512, input_height=512):
    input_size = (input_height, input_width, 3)
    inputs = Input(input_size)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)
    pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
    conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1)
    conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv2)
    pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
    conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool2)
    conv3 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv3)
    pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
    conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool3)
    conv4 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv4)
    drop4 = Dropout(0.5)(conv4)
    pool4 = MaxPooling2D(pool_size=(2, 2))(drop4)

    conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool4)
    conv5 = Conv2D(1024, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv5)
    drop5 = Dropout(0.5)(conv5)

    up6 = Conv2D(512, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(drop5))
    merge6 = concatenate([drop4,up6], axis = 3)
    conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge6)
    conv6 = Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv6)

    up7 = Conv2D(256, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv6))
    merge7 = concatenate([conv3,up7], axis = 3)
    conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge7)
    conv7 = Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv7)

    up8 = Conv2D(128, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv7))
    merge8 = concatenate([conv2,up8], axis = 3)
    conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge8)
    conv8 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv8)

    up9 = Conv2D(64, 2, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(UpSampling2D(size = (2,2))(conv8))
    merge9 = concatenate([conv1,up9], axis = 3)
    conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(merge9)
    conv9 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)
    conv9 = Conv2D(nClasses, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv9)

    o_shape = Model(inputs, conv9).output_shape
    outputHeight = o_shape[1]
    outputWidth = o_shape[2]
    conv9 = Reshape((nClasses, input_height * input_width))(conv9)
    conv9 = Permute((2, 1))(conv9)

    conv10 = (Activation('softmax'))(conv9)

    model = Model(inputs, conv10)
    model.outputWidth = outputWidth
    model.outputHeight = outputHeight
    return model

训练请看:
https://github.com/BBuf/Keras-Semantic-Segmentation

unet模型及代码解析 什么是unet 一个U型网络结构,2015年在图像分割领域大放异彩,unet被大量应用在分割领域。它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端(下文细说) Unet网络结构 主干结构解析 左边为特征提取网络,右边为特征融合网络 特征提取网络 由两个3x3的卷积层(RELU)再加上一个2x2的maxpooling层组成一个下采样的模块,一共经过4次这样的操作 特征融合网络 由一层反卷积+特征拼接concat+两个3x3的卷积层(ReLU)反复构成,一共经过4次这样的操 阅读详情

相关推荐

语义分割——Unet模型

语义分割的UNET网络结构 Unet是2015年诞生的模型,它几乎是当前segmentation项目中应用最广的模型。 Unet能从更少的训练图像中进行学习,当它在少于40张图的生物医学数据集上训练时,IOU值仍能达到92%。 Unet网络非常简单,前半部分作用是特征提取,后半部分是上采样。在一些文献中也把这样的结构叫做编码器-解码器结构。由于此网络整体结构类似于大写的英文字母U,故得名U-net。 这里的融合使用的是tf.concat(),FCN中使用的是tf.add()。 Unet实例,城

hallobike的博客 1万+

手把手带你撸深度学习经典模型(一)----- UNet

一、前言 经过慎重考虑,决定新开一个系列,该系列文章主要的目的就是利用PyTorch、Python实现深度学习中的一些经典模型,接下来一段时间的安排如下: UNet ResNet VggNet AlexNet 本文首先实现UNet,关于UNet的详细介绍请移步深度学习模型解析系列文章–白话详解UNet 二、网络结构详解 UNet总体上分为编码器和解码器,其中编码器负责提取特征信息,解码器负责还原特征信息;编码器主要由4个块组成,每个块分别由2个卷积层、1个最大池化层组成。解码器也是由4个块组成,每个块

奋斗の博客 1万+

深度学习高遥感影像语义分割

深度学习遥感影像语义分割 深度学习大家都知道,在计算机视觉领域取得了很大的成功,在遥感影像自动解译方面,同样带来了快速的发展,我在遥感影像自动解译领域,也做了一些微薄的工作,发表几篇论文,我一直关注遥感影像自动解译领域, 在北京出差的这段时间,终于可以沉下心来,好好研究下深度学习,目前在语义分割领域,也有部分心得,在此同大家分享,权当是互相学习。本篇博文就是论述现有的state-...

weixin_30470643的博客 1万+

Unet网络详解

Unet网络详解

qq_58529413的博客 5万+

【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展

回顾近10年来经典的语义分割模型,无论是基于CNN的架构还是基于Transformer的架构,最核心的理念是“编码-解码”。直观上来讲,就是通过下采样获取特征的潜在表示,再通过上采样从抽象的底层特征表示中恢复目标的细节信息。从交通、医学、遥感、自动驾驶、智能施工管控等领域近些年发表的关于语义分割的论文来看,采用的架构大多是以上所提到的模型的变体,包括但不限于添加各种注意力机制模块、更换主流的特征提取网络backbone、CNN与transformer混合设计、多尺度特征融合。

waski的博客 1万+

语义分割:FCN和UNet

目录语义分割:FCN和UNetFCN网络网络结构全卷积部分上采样部分跳层连接FCN总结Unet网络总结 语义分割:FCN和UNet 学习目标 了解FCN的结构 了解FCN的上采样方法及跳层连接 掌握Unet网络结构 FCN网络 FCN(Fully Convolutional Networks) 用于图像语义分割,自从该网络提出后,就成为语义分割的基本框架,后续算法基本都是在该网络框架中改进而来。 对于一般的分类CNN网络,如VGG和Resnet,都会在网络的最后加入一些全连接层,经过softmax后就

最白の白菜的博客 2494

PyTorch12—Unet图像语义分割

Pytorch—语义分割

qq_39172845的博客 1万+

《生化危机9:安魂曲》D加密免BIOS破解方案详解

数字版权管理(DRM)技术通过加密手段保护软件版权,Denuvo(D加密)作为主流方案常应用于3A游戏。其原理是通过实时验证机制阻止未授权访问,但可能影响性能表现。本文以《生化危机9》为例,解析一种免BIOS修改的D加密绕过方案,该方案通过授权启动器模拟正版验证流程,保持系统零侵入性。实测表明,该方法在GTX 1060至RTX 3070等多硬件平台均能稳定运行,支持MOD扩展且兼容Reshade画质增强,为玩家提供开箱即用的绿色版体验。

weixin_33898233的博客 926

Pytorch 深度学习实战教程(二):UNet语义分割网络

UNet语义分割算法原理,看本文就够了!

Jack-Cui 1万+

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 264

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

深度学习图像分割之UNET

目录一级目录二级目录三级目录图像分割概述一.什么是图像分割?二.图像分割的应用场景三.图像分割分类四.小结图像分割的结构图像分割的模型图像分割的评估 一级目录 二级目录 三级目录 图像分割概述 一.什么是图像分割? 图像分割(Semantic Segmentation)是计算机视觉中非常重要的任务,是图像理解的基石性技术。 它的目标是为图像中的每个像素点分类,即像素级别的分类任务。 如下图所示,将...

coco_12345的博客 3万+

十一、Cadence ic 617以及assura使用总结

1.617的端口和514不同,没有网络属性,使用时不能直接放在原理图上,如果要直接放在图上要接线并且放上标签。2.617的端口也不能直接放在线上,514中将端口直接放在线上是可以使端口和线连接,但617看似连接,但拉出来线没有交点,实际上没有连接。这里set switches里的选项表示不同的模块,也就是选择一个就只对这一部分进行DRC验证,要验证整个版图的DRC就要把所有的选项选中,然后一个个改正。LVS中也是一样,要全部选中改正。

0 2295

UNet-肝脏肿瘤图像语义分割

基于UNet神经网络的肝脏肿瘤图像语义分割

qq_37504771的博客 1万+

ANPC三电平拓扑双脉冲试验的原理与实施

ANPC三电平拓扑因损耗低、谐波小、应力均衡而广泛应用,但其存在短、长两类换流通道,寄生电感和开关应力差异显著。短通道尖峰小、可靠性高;长通道应力严苛。因此需分别制定两套独立双脉冲测试方案,针对不同时段和器件(如T1、T5、T6、T4及对应二极管)全面考核开关特性。

嵌入式老牛的博客 350

Calibre 3Dstack Flow Example(5-2)

本文详细介绍了Calibre3DSTACK工具在3D-IC设计验证中的应用。主要内容包括:1)连通性检查(LVS)规则编写,重点说明connected命令的使用方法和多文本标签处理;2)设计规则检查(DRC)实现,涵盖层间距检查和焊盘重叠检查;3)系统网表生成器操作流程,从芯片导入到网连通性定义;4)两种规则文件语法(扩展语法和传统语法)的编写示例;5)验证报告文件格式解析。通过具体案例演示了如何建立完整的3D-IC验证流程,包括芯片定义、装配操作、电气连接验证和物理规则检查等关键步骤,为3D-IC设计验证

u013620135的博客 2336

FCN、Unet、Unet++:医学图像分割网络一览

作者丨Error@知乎来源丨https://zhuanlan.zhihu.com/p/159173338转自 | 极市平台导读本文先厘清了语义分割、实例分割和全景分割等定义的区别。在此...

机器学习算法那些事 1万+

电阻基础知识及应用电路仿真(Multisim)

本文围绕硬件工程师必备的电阻知识,从基础知识、实操、应用仿真三方面做系统讲解:基础上明确电阻的核心参数、分类、串并联计算及核心特性;实操中详解贴片/色环电阻的阻值读取、贴片封装换算,重点区分0Ω电阻(贴装跳线,实现功能选通/调试等)与磁珠(高频吸噪)的差异及选型;应用上介绍限流、分压、上拉/下拉、阻抗匹配、过压/过流保护五大典型电路的设计公式、选型原则和实操要点,同时给出电阻通用的选型、测量和布线设计规范,形成完整的电阻应用知识体系。

XU157303764的博客 2775

基于UNet算法的农业遥感图像语义分割(上)

语义分割是计算机视觉领域中的一项重要任务,旨在将图像中的每个像素分类到不同的语义类别中,从而实现对图像内容的精细理解和分析。例如,在一幅自然场景图像中,语义分割模型能够将每个像素准确地划分到如天空、草地、树木、人物、车辆等不同的类别中,使得计算机能够像人类一样理解图像中各个部分的含义。本篇博客主要介绍了基于UNET神经网络实现农业遥感图像语义分割训练,检测“烤烟”、“玉米”、“薏仁米”、“人造建筑”等目标,并将检测目标分割出来。

mailangduoduo的博客 2502

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8899

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Pytorch深度学习实战教程:UNet语义分割网络

1前言本文属于Pytorch深度学习语义分割系列教程。该系列文章的内容有:Pytorch的基本使用语义分割算法讲解本文的开发环境如下:开发环境:Windows开发语言:Python3.7...

AI蜗牛车 7996

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

语义分割之Unet

随着计算机视觉技术的不断发展,图像分割已经成为了计算机视觉领域的一个重要研究方向。在众多的图像分割算法中,语义分割作为一种能够对图像中的每个像素进行分类的方法,具有很高的实用价值。近年来,基于深度学习的语义分割方法取得了显著的成果,其中Unet网络作为一种特殊的卷积神经网络结构,在语义分割任务中表现出了优越的性能。

weixin_44598554的博客 1359

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于UNet算法的农业遥感图像语义分割(下)

书接上回,本案例希望建立一个UNET网络模型,来实现对农业遥感图像语义分割的任务。在上篇博文中已经对数据集进行了详细介绍,同时实现了数据筛选数据集划分等预处理操作,同时对UNET网络模型举了一个详细的例子进行介绍。本篇博客将在处理后的数据集基础上,通过pytorch搭建该网络模型,并实现模型的训练与验证。

mailangduoduo的博客 1685

图像语义分割模型综述

文章目录一级目录二级目录三级目录 一级目录 二级目录 三级目录

weixin_45325331的博客 1万+

Pytorch Unet深入浅出

1.Unet 作为图像语义分割里比较基本的分割网络,自然不能缺席 毕竟文题也叫Unet的深入浅出啊 1.1语义分割做什么 一开始我认为是这样的 这么理解是没错的,深度学习确实也是这样端到端的小黑盒, 目前大火的原因也是想让这个小黑盒变白 在一维信号或者特征上非常好理解 输入1*n的数据,n是特征的数量,输出一个预测值,这个值代表某种意思 但是一直不太理解在图像中应该怎么理解 直到某一天看的论文累...

u014687517的博客 5242

探索多类语义分割:UNET与FPN在Cityscapes和KITTI数据集上的应用

探索多类语义分割:UNET与FPN在Cityscapes和KITTI数据集上的应用 项目介绍 在计算机视觉领域,语义分割是一项至关重要的任务,它涉及对图像中的每个像素进行分类,从而实现像素级别的图像理解。本项目专注于在Cityscapes和KITTI数据集上进行多类语义分割。通过使用两种流行的深度学习架构——UNET和FPN(基于resnext50编码器),本项目展示了如何训练这些模型,并探讨了它...

gitblog_00986的博客 1277
上一篇: 《Fully Convolutional Networks for Semantic Segmentation》论文阅读
下一篇: Tensorflow实战6:Tensorflow实现AlexNet
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值