深度学习图像分割方法U-Net改进之Attention U-Net-程序员宅基地

技术标签: python  深度学习  人工智能  图像分割  

目录

1、Introduce

2、 Attention U-Net

2.1  structure

2.2  Attention module

3、Reference


1、Introduce

注意力机制是一种基于权重的模型,其作用是让深度学习模型能够更加集中地关注当前输入数据中最具有代表性和区分性的部分,从而提高模型的分类精度和泛化性能。

注意力机制在深度学习中广泛应用于自然语言处理、计算机视觉等领域。例如,在自然语言处理任务中,如机器翻译或文本摘要任务中,注意力机制可以帮助模型专注于输入序列中与预测结果最相关的内容,从而提高模型的翻译或摘要质量。再比如,在图像问答(QA)任务中,注意力机制可以对原始图像像素进行加权,以聚焦于图像中最相关的区域,从而对图片问题作出正确回答。

总的来说,注意力机制能够显著提高深度学习模型的表现,并在许多自然语言处理和计算机视觉领域的任务中取得了不错的效果。


Attention U-Net

2.1  structure

Attention U-Net是基于U-Net模型结构的变体,其增加了注意力机制来提高模型在图像分割任务中的性能。与传统的U-Net模型相比,注意力U-Net包括了编码器、解码器和跳跃连接等常见的模块,但在解码器部分引入了注意力机制。

 U-Net结构

 Attention U-Net结构


2.2  Attention module

具体来说,注意力U-Net在每个解码器层中都添加了一个注意力子模块,以帮助模型更准确地学习如何区分前景和背景。该子模块利用了一个注意力门控网络,它可以自动地对前景和背景进行建模,并计算不同位置处的像素应该被赋予的权重,从而使模型可以更加聚焦与所关注的区域,提高分割质量。具体地,注意力U-Net中的注意力子模块由三个组成部分组成:查询嵌入(即解码器的特征向量),键嵌入(即编码器的特征向量)和值嵌入(即加权后编码器特征向量)。其中,查询嵌入和键嵌入都采用卷积神经网络从当前解码器层和编码器各自的最大池化层输出计算得到;然后对键嵌入和查询嵌入进行相关运算,得到对应的权重矩阵;再将设置得之权重矩阵与值嵌入相乘得到加权编码器特征向量。

 Attention 结构

Attention 结构图中尤其要注意的是X为解码器的倒数第二层,g为完成上采样的解码器倒数第一层。只有完成上采样后的层才能与X完成后续的加权操作。为了便于理解直接上代码:

在注意力子模块输出后,其与解码器层的输出进行加和。最后通过卷积操作得到最终分割结果。实验证明,引入该注意力子模块可以显著提高模型在图像分割任务中的性能。

def attention_gate(X, g, channel,  
                   activation='ReLU', 
                   attention='add', name='att'):
    '''
    Self-attention gate modified from Oktay et al. 2018.
    
    attention_gate(X, g, channel,  activation='ReLU', attention='add', name='att')
    
    Input
    ----------
        X: input tensor, i.e., key and value.
        g: gated tensor, i.e., query.
        channel: number of intermediate channel.
                 Oktay et al. (2018) did not specify (denoted as F_int).
                 intermediate channel is expected to be smaller than the input channel.
        activation: a nonlinear attnetion activation.
                    The `sigma_1` in Oktay et al. 2018. Default is 'ReLU'.
        attention: 'add' for additive attention; 'multiply' for multiplicative attention.
                   Oktay et al. 2018 applied additive attention.
        name: prefix of the created keras layers.
        
    Output
    ----------
        X_att: output tensor.
    


    1. 将输入张量 X 通过一个卷积层映射到中间层 theta_att。
    2. 将门控张量 g 通过一个卷积层映射到中间层 phi_g。
    3. 使用指定的注意力机制(additive 或 multiplicative)根据 theta_att 和 phi_g 计算 Q,即 query。
    4. 对 Q 进行指定的非线性激活函数处理(如 ReLU),得到 f。
    5. 将 f 经过卷积层转换到输出通道数为 1 的 tensor psi_f。
    6. 对 psi_f 输出进行 sigmoid 激活操作,得到注意力系数 coef_att。
    7. 对输入张量 X 乘以 coef_att 得到加权后的张量 X_att。返回 X_att。
    '''

    activation_func = eval(activation)
    attention_func = eval(attention)
    
    # mapping the input tensor to the intermediate channel
    # x输入完成卷积操作
    theta_att = Conv2D(channel, 1, use_bias=True, name='{}_theta_x'.format(name))(X)
    
    # mapping the gate tensor
    # g输入完成卷积操作
    phi_g = Conv2D(channel, 1, use_bias=True, name='{}_phi_g'.format(name))(g)
    
    # ----- attention learning ----- #
    # 将[conv—x,conx-g] -> add
    query = attention_func([theta_att, phi_g], name='{}_add'.format(name))
    
    # nonlinear activation
    # 对 Q 进行指定的非线性激活函数处理(如 ReLU),得到 f。
    f = activation_func(name='{}_activation'.format(name))(query)
    
    # linear transformation
    # 将 f 经过卷积层转换到输出通道数为 1 的 tensor psi_f。
    psi_f = Conv2D(1, 1, use_bias=True, name='{}_psi_f'.format(name))(f)
    # ------------------------------ #
    
    # sigmoid activation as attention coefficients
    # 对psi_f输出进行sigmoid激活操作,得到注意力系数coef_att。
    coef_att = Activation('sigmoid', name='{}_sigmoid'.format(name))(psi_f)
    
    # multiplicative attention masking
    # 对输入张量 X 乘以 coef_att 得到加权后的张量 X_att。返回 X_att。
    X_att = multiply([X, coef_att], name='{}_masking'.format(name))
    
    return X_att

3、Reference

【语义分割系列:七】Attention Unet 论文阅读翻译笔记 医学图像 python实现_attention unet论文_鹿鹿最可爱的博客-程序员宅基地

深度学习图像分割之UNET_图像分割unet_coco_12345的博客-程序员宅基地

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_63694345/article/details/131143279

智能推荐

Linux查看登录用户日志_怎么记录linux设备 发声的登录和登出-程序员宅基地

文章浏览阅读8.6k次。一、Linux记录用户登录信息文件1  /var/run/utmp----记录当前正在登录系统的用户信息;2  /var/log/wtmp----记录当前正在登录和历史登录系统的用户信息;3  /var/log/btmp:记录失败的登录尝试信息。二、命令用法1.命令last,lastb---show a listing of la_怎么记录linux设备 发声的登录和登出

第四章笔记:遍历--算法学中的万能钥匙-程序员宅基地

文章浏览阅读167次。摘要:1. 简介 2. 公园迷宫漫步 3. 无线迷宫与最短(不加权)路径问题 4. 强连通分量1. 简介在计算机科学裡,树的遍历(也称为树的搜索)是圖的遍歷的一种,指的是按照某种规则,不重复地访问某种樹的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。两种著名的基本遍历策略:深度优先搜索(DFS) 和 广度优先搜索(B...

【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表_activereports.net 实现查询报表功能-程序员宅基地

文章浏览阅读591次。提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表。今天我们来一起了解一下什么是报表,报表的结构、构成元素,以及为什么需要报表。什么是报表简单的说:报表就是通过表格、图表等形式来动态显示数据,并为使用者提供浏览、打印、导出和分析的功能,可以用公式表示为:报表 = 多样的布局 + 动态的数据 + 丰富的输出报表通常包含以下组成部分:报表首页:在报表的开..._activereports.net 实现查询报表功能

Ubuntu18.04 + GNOME xrdp + Docker + GUI_docker xrdp ubuntu-程序员宅基地

文章浏览阅读6.6k次。最近实验室需要用Cadence,这个软件的安装非常麻烦,每一次配置都要几个小时,因此打算把Cadence装进Docker。但是Cadence运行时需要GUI,要对Docker进行一些配置。我们实验室的服务器运行的是Ubuntu18.04,默认桌面GNOME,Cadence装进Centos的Docker。安装Ubuntu18.04服务器上安装Ubuntu18.04的教程非常多,在此不赘述了安装..._docker xrdp ubuntu

iOS AVFoundation实现相机功能_ios avcapturestillimageoutput 兼容性 ios17 崩溃-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。首先导入头文件#import 导入头文件后创建几个相机必须实现的对象 /** * AVCaptureSession对象来执行输入设备和输出设备之间的数据传递 */ @property (nonatomic, strong) AVCaptureSession* session; /** * 输入设备 */_ios avcapturestillimageoutput 兼容性 ios17 崩溃

Oracle动态性能视图--v$sysstat_oracle v$sysstat视图-程序员宅基地

文章浏览阅读982次。按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图存储下列的统计信息:1>.事件发生次数的统计(如:user commits)2>._oracle v$sysstat视图

随便推点

Vue router报错:NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated"}的解决方法_navigationduplicated {_name: 'navigationduplicated-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。我最近做SPA项目开发动态树的时候一直遇到以下错误:当我点击文章管理需要跳转路径时一直报NavigationDuplicated {_name: “NavigationDuplicated”, name: “NavigationDuplicated”}这个错误但是当我点击文章管理后,路径跳转却是成功的<template> <div> 文章管理页面 <..._navigationduplicated {_name: 'navigationduplicated', name: 'navigationduplic

Webrtc回声消除模式(Aecm)屏蔽舒适噪音(CNG)_webrtc aecm 杂音-程序员宅基地

文章浏览阅读3.9k次。版本VoiceEngine 4.1.0舒适噪音生成(comfort noise generator,CNG)是一个在通话过程中出现短暂静音时用来为电话通信产生背景噪声的程序。#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)static const EcModes kDefaultEcMode = kEcAecm;#elsestati..._webrtc aecm 杂音

医学成像原理与图像处理一:概论_医学成像与图像处理技术知识点总结-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏19次。医学成像原理与图像处理一:概论引言:本系列博客为医学成像原理与图像处理重要笔记,由于是手写,在此通过扫描录入以图片的形式和电子版增补内容将其进行组织和共享。前半部分内容为图像处理基础内容,包括图像的灰度级处理、空间域滤波、频率域滤波、图像增强和分割等;后半部分内容为医学影象技术,包括常规胶片X光机、CR、DR、CT、DSA等X射线摄影技术、超声成像技术、磁共振成像(MRI)技术等。本篇主要内容是概论。_医学成像与图像处理技术知识点总结

notepad++ v8.5.3 安装插件,安装失败怎么处理?下载进度为0怎么处理?_nodepa++-程序员宅基地

文章浏览阅读591次,点赞13次,收藏10次。notepad++ v8.5.3 安装插件,下载进度为0_nodepa++

hive某个字段中包括\n(和换行符冲突)_hive sql \n-程序员宅基地

文章浏览阅读2.1w次。用spark执行SQL保存到Hive中: hiveContext.sql(&quot;insert overwrite table test select * from aaa&quot;)执行完成,没报错,但是核对结果的时候,发现有几笔数据超出指定范围(实际只包含100/200)最终排查到是ret_pay_remark 字段包含换行符,解决方案:执行SQL中把特殊字符替换掉regexp_replace(..._hive sql \n

印象笔记05:如何打造更美的印象笔记超级笔记_好的印象笔记怎么做的-程序员宅基地

文章浏览阅读520次,点赞10次,收藏8次。印象笔记05:如何打造更美的印象笔记超级笔记本文介绍印象笔记的具体使用,如何打造更美更实用的笔记。首先想要笔记更加好看和实用,我认为要使用超级笔记。所谓超级笔记就是具有很多便捷功能的笔记。_好的印象笔记怎么做的

推荐文章

热门文章

相关标签