美文网首页
SegAN: Adversarial Network with

SegAN: Adversarial Network with

作者: zelda2333 | 来源:发表于2020-10-11 21:24 被阅读0次

论文:SegAN: Adversarial Network with Multi-scaleL1Loss for MedicalImage Segmentation
代码:https://github.com/YuanXue1993/SegAN

数据集: BRATS 2013 、BRATS 2015; 2.5D的网络

作者提出用对抗网络进行分割,损失函数使用多尺度L1损失函数。该论文的判别器和生成器分别为critic network (C)和segmentor network (S)。
首先介绍一下SegAN与原始的GAN的区别。

  1. 损失函数的区别。经典的GAN的generator和discriminator的损失是分开的。本论文为segmentor和critic networks提出一个多尺度损失函数。Critic考虑分割结果和真实label多尺度的特征差异来最大化多尺度L1函数。
  2. 我们的segmentor S是全卷积网络,仅对通过critic的梯度进行训练,其目的是最小化与critic一样的损失函数。
  3. SegAN是端对端的,不需要多分辨率的网络输入。

网络结构


整个网络分为segmentor和critic两部分:
1、segmentor部分为类似unet的u型网络,,encoder部分为4层stride=2的卷积,decoder部分为4层upsample,输出为网络预测的肿瘤二值图像;
2、critic有两个输入,一个是原图和分割网络预测结果mask之后的图,另一个是原图和label进行mask之后的原图。(mask表示相乘)。
部分的网络共用segmentor部分encoder的前三层,分别向critic部分输入经预测的肿瘤二值图掩膜的原始输入图像,以及经真值肿瘤二值图掩膜的原始输入图像,最后的loss计算两个不同输出之间的MAE值(L1 loss)。其中Multi-scale体现在对critic部分每一个卷积层输出的特征图像都计算MAE值,最后的总loss取平均。
3、训练方式类似于GAN的min-max对抗学习过程。首先,固定S(segmentor),对C(critic)进行一轮训练;再固定C(critic),对S(segmentor)进行一轮训练,如此反复。对 critic 的训练想使loss变大(min),对 segmentor 训练想使loss变小(max)。
其多尺度目标函数 L 如下式所示:

N 表示训练图像个数,x_n 表示训练集的图片,y_n 表示相应的 Ground Truth,l_{mae} 是平均绝对误差 (MAE) 或者L1距离,x_n ◦ S(x_n) 是分割预测标签映射对输入的图像进行掩膜(mask——即,预测的标签图和原始图像的逐像素乘法),x_n ◦ y_n 是真实标签对输入的图像进行掩膜(mask)。f_C (x),表示 C j批判网络对输入的分层特征的提取。具体的l_{mae} 如下

L表示C网络总共的层的个数。f^i_C(x) 表示从 x 提取的第 i 层的特征。

代码调试

代码简洁,默认的数据集为 ISIC,不是BRATS,只有train,val 没有 test。

  1. 把 num_workers 改为 0
  2. train.py
parser.add_argument('--cuda', action='store_true',help='using GPU or not')

加上 default=True 属性,或者运行时输入 python train.py --cuda
action='store_true',默认为Flase,只要运行时该变量有传参就可将该变量设为True

  1. TypeError: conv2d(): argument 'padding' must be tuple of ints, but found element of type float at pos 1
    python 版本不同,导致出现RuntimeError: argument must tuple
    net.py line 14,15, / 改成 //
  2. output_masked[:,d,:,:] = input_mask[:,d,:,:].unsqueeze(1)* output
    train.py line 123 等行改为 output_masked[:,d,:,:] = input_mask[:,d,:,:]* (output.squeeze(1))

参考链接:SegAN:Adversarial Network with Multi-scale L1 Loss for Medical Image Segmentation-笔记
[论文笔记] SegAN: Adversarial Network with Multi-scale L1 Loss for Medical Image Segmentation
SegAN——蠢的一匹的个人翻译
GAN Loss可以应用在语义分割上来提升性能吗?
【python】argparse.add_argument中的action为‘store_true’使用说明

相关文章

网友评论

      本文标题:SegAN: Adversarial Network with

      本文链接:https://www.haomeiwen.com/subject/desuuktx.html