【论文笔记】——Feature Fusion Encoder Decoder Network For Automatic Liver Lesion Segmentation

本文介绍一种基于注意力机制的肝脏病变分割模型,创新地在U-Net基础上引入FeatureFusion,结合SE结构和PixelShuffle,提升分割精度。

原文:FEATURE FUSION ENCODER DECODER NETWORK FOR AUTOMATIC LIVER LESION SEGMENTATION

1.总体介绍

这篇论文主要提出了一个关于医学图像分割的新模型,用来实现肝脏病变区域的分割。目前用于医学分割的模型大多都是U-Net变体(U-Net的介绍很多这里不再赘述),利用跳接将encoder部分的高维特征用于decoder部分,能保留更多的信息,对于小数据集的任务十分有效。这里的跳接有可能是直接相加,也有可能是通道数的融合。

作者认为U-Net模型只是直接将高维特征融合到对应的decoder,没有有效使用每个级别的不一样的特征,所以他提出了一种Feature Fusion,在decoder的融合阶段不仅利用了对应encoder部分的高维特征,还利用了更深层的高维特征(看图比较好理解),而且还对这些特征做了一定的处理(注意力机制)。

2.网络模型

在这里插入图片描述
上图就是整个模型的一个简化结构,可以看出也是U形的,对比U-Net不同的就在于跳接时不是单纯复制裁剪融合,还要经过相应的处理。

Encoder部分比较简单,用在ImageNet上预训练后的ResNet50作为Encoder部分,把ResNet50分为了四层(0,1,2,3),提取四种级别的特征分别传入RCB部分,RCB部分见下图。
在这里插入图片描述
RCB

由于给定的参考引用中未包含关于“Unsupervised Encoder - Decoder Network for Hyperspectral and Multispectral Image Fusion under Spatial and Spectral Guidance”的相关信息,从专业知识角度来看,这种无监督编码器 - 解码器网络在高光谱和多光谱图像融合领域具有重要意义。 高光谱图像具有丰富的光谱信息,但空间分辨率较低;多光谱图像则具有相对较高的空间分辨率。在空间和光谱引导下的无监督编码器 - 解码器网络旨在结合两者的优势,通过无监督学习的方式实现图像融合。编码器部分负责将输入的高光谱和多光谱图像进行特征提取和转换,将其映射到一个潜在的特征空间中。解码器则根据空间和光谱的引导信息,将潜在特征空间中的特征重构为融合后的图像,使得融合图像既保留了高光谱图像的光谱特性,又具有多光谱图像的高空间分辨率。 这种网络的无监督特性意味着它不需要大量的标注数据进行训练,这在实际应用中具有很大的优势,因为获取标注的高光谱和多光谱图像数据往往是困难且昂贵的。空间和光谱引导机制可以帮助网络更好地理解图像的空间结构和光谱信息,从而提高融合的效果。 ### 代码示例 以下是一个简单的无监督编码器 - 解码器网络的 PyTorch 示例代码: ```python import torch import torch.nn as nn # 定义编码器 class Encoder(nn.Module): def __init__(self, input_channels, latent_dim): super(Encoder, self).__init__() self.conv1 = nn.Conv2d(input_channels, 64, kernel_size=3, stride=2, padding=1) self.relu1 = nn.ReLU() self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1) self.relu2 = nn.ReLU() self.fc = nn.Linear(128 * (input_channels // 4) * (input_channels // 4), latent_dim) def forward(self, x): x = self.relu1(self.conv1(x)) x = self.relu2(self.conv2(x)) x = x.view(x.size(0), -1) x = self.fc(x) return x # 定义解码器 class Decoder(nn.Module): def __init__(self, latent_dim, output_channels): super(Decoder, self).__init__() self.fc = nn.Linear(latent_dim, 128 * (output_channels // 4) * (output_channels // 4)) self.conv_trans1 = nn.ConvTranspose2d(128, 64, kernel_size=3, stride=2, padding=1, output_padding=1) self.relu1 = nn.ReLU() self.conv_trans2 = nn.ConvTranspose2d(64, output_channels, kernel_size=3, stride=2, padding=1, output_padding=1) self.sigmoid = nn.Sigmoid() def forward(self, x): x = self.fc(x) x = x.view(x.size(0), 128, output_channels // 4, output_channels // 4) x = self.relu1(self.conv_trans1(x)) x = self.sigmoid(self.conv_trans2(x)) return x # 定义无监督编码器 - 解码器网络 class UnsupervisedEncoderDecoder(nn.Module): def __init__(self, input_channels, latent_dim, output_channels): super(UnsupervisedEncoderDecoder, self).__init__() self.encoder = Encoder(input_channels, latent_dim) self.decoder = Decoder(latent_dim, output_channels) def forward(self, x): latent = self.encoder(x) output = self.decoder(latent) return output # 示例使用 input_channels = 10 # 假设输入通道数 latent_dim = 128 output_channels = 10 # 假设输出通道数 model = UnsupervisedEncoderDecoder(input_channels, latent_dim, output_channels) input_image = torch.randn(1, input_channels, 256, 256) output_image = model(input_image) print(output_image.shape) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值