Vision MLP系列–RepMLP

RepMLPNet: Hierarchical Vision MLP with Re-parameterized Locality (https://arxiv.org/abs/2112.11081)

CVPR 2022

RepMLP Block

Github source: https://github.com/DingXiaoH/RepMLP

最近公开了一系列视觉MLP论文,包括RepMLP、MLP-Mixer、ResMLP、gMLP等。在这个时间点出现关于MLP的一系列讨论是很合理的:

1) Transformer大火,很多研究者在拆解Transformer的过程中多多少少地对self-attention的必要性产生了疑问。去掉了self-attention,自然就剩MLP了。

2) 科学总是螺旋式上升的,“复兴”老方法(比如说另一篇“复兴”VGG的工作,RepVGG)总是喜闻乐见的。

这些论文引发了热烈的讨论,比如:

1) 这些模型到底是不是MLP?

2) 卷积和全连接(FC)的区别和联系是什么?FC是不是卷积,卷积是不是FC?

3) 真正的纯MLP为什么不行?

4) 所以MLP is all you need?

《RepMLP: Re-parameterizing Convolutions into Fully-connected Layers for Image Recognition》。这篇文章讲了一个全连接层找到一份陌生的工作(直接进行feature map的变换),为了与那些已经为这份工作所特化的同胞(卷积层)们竞争,开始“内卷”的故事。

关键贡献在于,RepMLP用卷积去增强FC,既利用其全局性又赋予其局部性,并通过结构重参数化,将卷积融合到FC中去,从而在推理时去除卷积。

论文:RepMLP: Re-parameterizing Convolutions into Fully-connected Layers for Image Recognition

代码:DingXiaoH/RepMLP

1. 为什么真正的纯MLP不太行?

我们一般认为多层感知机(MLP)是至少两层全连接层(FC)堆叠得到的模型,而且一般把同时含有卷积和MLP的模型(或模型中的一个模块)称为CNN。尽管目前大家对什么叫MLP的问题尚有争议(下图),我们不妨先定义一个任何人都会称之为MLP的100%纯MLP:

这个MLP在ImageNet上的输入是(3, 112, 112),第一层将其变为(32, 56, 56),第二层将其变为(64, 28, 28),然后global average pool,然后经过FC映射为1000类。这样总共只有三个FC,毫无疑问是MLP。这三层的参数为:

第一层:3x112x112x32x56x56 = 3.77G 参数

第二层:32x56x56x64x28x28 = 5.03G 参数

第三层:64×1000 = 64k 参数,忽略不计

看起来有点吓人,但这确实是一个处于A1位置的纯MLP应有的体量,虽然它只有两层,而且通道数只有32和64。除了减小通道数量,任何试图减小参数量的改动都将使其不再属于A1位置。比如说:

1) 先切块。把112×112的输入切成56×56的四块,每一块经过第一层变成28×28,再拼起来,这样第一层的参数量变成了3x56x56x32x28x28=236M,看起来好多了。但是,这破坏了全局性,因为分属于两块中的两点之间不再有联系了!换句话说,我们引入了一种局部性:一张图切成四块之后,每块中的任一像素只跟同块中的其他像素有联系。ViT,RepMLP和其他几篇MLP都用了这种操作或某种类似的操作。

2) 分组FC。正如卷积有分组卷积一样,FC也可以分组。由于torch里没有现成的算子,分组FC可以用分组1×1卷积实现。组数为g,参数量和计算量就会变成1/g。可惜,这也引入了局部性。RepMLP用了这种操作。

3) 把一个FC拆分成两次操作,第一次操作对channel维度线性重组,spatial共享参数(等价于1×1卷积);第二次操作对spatial维度线性重组,channel共享参数(等价于先转置后1×1卷积)。这思想可以类比于depthwise conv + 1×1 conv。MLP-Mixer使用这种操作,用两个各自都不具有全局性的操作实现了整体的全局性(而RepMLP使用另一种不同的机制,对不同的分块做pooling再连接,实现了这种全局性)。

所以,真正的100%纯MLP不太行,大家都在用各种花式操作做“伪MLP”的原因之一,就是体量太大。

这篇文章介绍的RepMLP属于B2的位置,不追求纯MLP。称其为“MLP”的原因是想强调卷积和FC的区别:RepMLP将卷积看成一种特殊的FC,显式地用卷积去强化FC(把FC变得具有局部性又不失全局性),指出了这样的FC强在哪里(如ResNet-50中,用一半通道数量的RepMLP替换3×3卷积就可以实现同等精度和55%加速),并用这种强化过的FC(及一些其他技巧)构造一种通用的CNN基本组件,提升多重任务性能。论文中说明了这里MLP的意思是推理时结构“不包含大于1×1的卷积”。

2. RepMLP:FC“内卷”,卷出性能

真正的100%纯MLP不太行的原因之二,是不具有局部先验。

在一张图片中,一个像素点跟它周围的像素点的关系往往比远在天边的另一个像素点更密切,这称为局部性。人类在识别图片的时候潜意识地利用这一点,称为局部先验。卷积网络符合局部先验,因为卷积核通过滑动窗口在图片上“一块一块地”寻找某种特征。

那么FC层呢?FC能自动学到这一点吗?在有限的数据量(ImageNet)和有限的计算资源前提(GPU)下,很难。

实验验证:下面我们假设FC层的输入是64x10x10的feature map直接 “展平”成的6400维向量。输出也是6400维向量,然后reshape成64x10x10的feature map。下图展示了FC学得的kernel中的一个切片的权值大小。简单地讲(详见论文),展示的这一部分表示在输出的第0个channel中随便找的一个采样点(6,6)(也就是图中黄框标出来的点)作用于第0个输入channel上的10×10个像素点的权值。颜色越深,表示权值越大。比如说,如果图中的(5,5)点颜色深,就表示这个FC层认为输出中的(0,6,6)点与输入中的(0,5,5)点关系紧密。

结果很明显,(6,6)周围的权值并没有颜色更深,也就是说FC并不认为这个点和周围点的联系更紧密。相反,似乎这个FC层认为(6,6)点与右上和右下部分关系更密切。实验也证明,不具有局部性的FC效果较差。

既然图像的局部性很强,FC把握不住,那怎么办呢?RepMLP提出,用卷积去增强FC(如下图所示,输入既被展平成向量并输入FC,又用不同大小的卷积核进行卷积,各自过BN后相加),并通过结构重参数化,将卷积融合到FC中去,从而在推理时去除卷积。

我们将卷积和FC之间建立联系,是因为卷积可以看成一个稀疏且存在重复参数的FC。如下图代码所示,给定输入X和卷积核conv_K,其卷积的结果等于X(直接展平成向量)和fc_K的矩阵乘,fc_K称为conv_K的等效FC核。尽管我们都相信这样的fc_K一定存在,但根据conv_K的值直接构造出fc_K的方法(下图中的convert_K函数)似乎不太简单。

本文提出了一种简洁优美的做法(见后文)。我们用这种方法构造出fc_K并打印出来,可以看出它是一个稀疏且有很多元素相同的矩阵(Toeplitz矩阵)。如下图的代码和结果所示。

RepMLP把卷积的输出和FC的输出相加,这样做的好处是:

1) 降低FLOPs,提高速度。用我们提出的方法把卷积全都转换为等效FC kernel后,由于矩阵乘法的可加性(AX + BX = (A+B)X),一个稀疏且共享参数的FC(Toeplitz矩阵)加一个不稀疏不共享参数的FC(全自由度的矩阵),可以等价转换为一个FC(其参数是这两个矩阵之和)。这样我们就可以将这些卷积等效地去掉。这一思路也属于结构重参数化(通过参数的等价转换实现结构的等价转换,如RepVGG)。

2) 在同等参数量的情况下,FC的FLOPs远低于卷积。

3) 相比于纯FC,这样做产生了局部性。注意这种局部性是我们“赋予”FC的,而不是让FC学到的。

4) 相比于卷积层,这样做使得相距遥远的两个点直接相连,具备了全局性。

这样做看起来像是让FC的“内部”含有卷积,所以也可以称为“内卷”。事实证明,跟人类相似,FC的“内卷”也可以提高性能。

只剩下一个问题了:我们相信存在一个FC kernel等价于卷积的卷积核,但是给定一个训练好的卷积核,怎么构造出FC kernel(Toeplitz矩阵)呢?

其实也很简单:FC kernel等于在单位矩阵reshape成的feature map上用卷积核做卷积的结果。这一做法是高效、可微、与具体的卷积算法和平台无关的。推导过程也很简洁(详见论文)。

现在,整个流程就很清晰了:

1) 训练时,既有FC又有卷积,输出相加。

2) 训练完成后,先把BN的参数“吸”到卷积核或FC中去(跟RepVGG一样),然后把每一个卷积转换成FC,把所有FC加到一起。从此以后,不再有卷积,只有FC。

3) 保存并部署转换后的模型。

现在我们再看一下用卷积增强后转换得到的FC kernel,可以看出采样点周围的权值变大了,现在(6,6)点更关注它旁边的输入点了。有趣的是,这里用到的最大卷积是7×7,但是7×7的范围(蓝色框)外还有一些值(红色框)比蓝框内的值大,这说明全局性也没有被局部性“淹没”。

一些其他设计

RepMLP中也用了一些其他设计,包括:

1) 用groupwise conv实现groupwise FC,减少参数和计算量。

2) 将输入分块(最近大家都会用的常见操作),进一步减少参数和计算量。如下图所示,H和W是feature map的分辨率,h和w是每一块的分辨率。

3) 用两个FC在不同分块之间建立联系,确保全局性。如下图所示。

实验结果

用RepMLP替换Res50中的部分结构,在ImageNet上有性能提升。将ImageNet pretrained模型迁移到语义分割和人脸上,也都有性能提升。

在ImageNet上的实验是在Res50中做的。考虑到Res50的主干通道较多(256、512、1024、2048),为了将RepMLP用到Res50中取得合理的trade-off,我们做了以下设计:

1)RepMLP Bottleneck Block:在RepMLP之前用1×1和3×3降维,RepMLP之后用3×3和1×1升维。这一结构类似于旷视在工程中探索并申请的专利GLFP(202010422194.X, Visual task processing method and device and electronic system,下图)。

2)RepMLP Light Block:在RepMLP之前用1×1大幅降维,之后用1×1大幅升维。降维/升维的幅度(8x)比Res50(4x)更大。

一些有趣的发现:

1) RepMLP中具有局部先验的成分(融合进FC的卷积),所以对于具有平移不变性的任务(ImageNet,Cityscapes语义分割)有效。

2) RepMLP中也具有不具有平移不变性的成分(大FC kernel),所以对于具有某种位置模式(例如人脸图像中,眼睛总是在鼻子上面)的任务也有效。

3) 由于FC和卷积的差别,RepMLP可以大幅增加参数而不降低速度(参数增加47%,ImageNet精度提升0.31%,速度仅降低2.2%)。

一些常见问题

RepMLP和ResMLP是什么关系?

相当于旺旺碎冰冰和王冰冰的关系。只是名字有点像。RepMLP中用卷积增强FC的思路也可以用在其他MLP架构中,应该也会有提升。另外,ResMLP、RepMLP和ResRep(去年做的一篇用重参数化做剪枝的论文)也没有关系。

把卷积融合进FC里,那FC不就是卷积了吗?

卷了,但不是完全卷,而且比卷积更强。上面可视化的图显示,转换后的kernel可以关注到卷积核的感受野以外的信息,因而表征能力更强。论文中报告的实验表明,这样的操作可以以一半的channel量达到与纯CNN相当的性能,速度更快,FLOPs更低。本文的关键也在于把卷积看成一种特殊的FC,然后考虑如何利用这种特殊性

所以MLP is all you need?

目前看来,还差得远。目前的方法多多少少都用到了切块等操作,都需要用某种方式降低参数量和引入局部性。真正的纯MLP(A1位置)依然还没有希望。真正纯MLP的一个大麻烦是总的参数量和输入分辨率耦合,因而改变输入分辨率会很困难。MLP-Mixer的一个缺点是不方便改变输入分辨率,所以它在ImageNet分类上的性能不容易迁移到其他任务上去。

PyTorch医学图像分割开源库

github: https://github.com/MontaEllis/Pytorch-Medical-Segmentation

基于PyTorch的专注于医学图像分割的开源库,其支持模型丰富,方便易用。其可算为torchio的一个实例,作者将其综合起来,包含众多经典算法,实用性比较强。

该库特点:

  1. 支持2D和3D医学图像分割,可以修改hparam.py文件来确定是2D分割还是3D分割以及是否可以进行多分类。
  2. 支持绝大数主流分割模型,几乎提供了所有的2D和3D分割的算法。
  3. 兼容几乎所有的医学数据格式(例如 nii.gz, nii, mhd, nrrd, …),修改hparam.py的fold\_arch即可。

作者提供了训练和测试推断的代码,简单配置后训练和推断都仅需要一行命令。

已包含的分割模型:

医学分割图像数据集汇总

(更多数据集请看医学影像数据集集锦:https://github.com/linhandev/dataset

数据集数据集大小 说明 链接
Kvasir-SEG1000 张(对)Kvasir-seg是 胃肠道息肉图像和相应分割面罩的开放式数据集,由医生手动注释,然后由经验丰富的胃肠病学家进行验证。Kvasir-SEG 数据集(大小 46.2 MB)包含来自 Kvasir Dataset v2 的 1000 个息肉图像及其对应的地面实况。Kvasir-SEG 中包含的图像的分辨率从 332×487 到 1920×1072 像素不等。https://datasets.s
imula.no/kvasir-seg/
CVC-ClinicDB600张CVC-ClinicDB 是从结肠镜检查视频中提取的帧数据库。CVC-ClinicDB 数据库由两种不同类型的图像组成:原始图像和息肉掩膜  https://polyp.grand-cha
llenge.org/CVCClinicDB/
CVC-ColonDB300张结肠镜检查视频的注释视频序列。它包含 15 个简短的结肠镜检查序列,来自 15 项不同的研究。在每个序列中显示一个息肉。 
Synapse multi-organ CT50从正在进行的结直肠癌化疗试验和回顾性腹疝研究的组合中随机选择了 50 份腹部 CT 扫描。50 次扫描是在门静脉造影阶段捕获的,具有可变的体积大小 (512 x 512 x 85 – 512 x 512 x 198) 和视场(约 280 x 280 x 280 mm 3 – 500 x 500 x 650 mm 3) . 平面内分辨率从 0.54 x 0.54 mm 2到 0.98 x 0.98 mm 2不等,而切片厚度范围从 2.5 mm 到 5.0 mm。标准注册数据由NiftyReg生成。https://www.syn
apse.org/#!Synapse:syn3193805/wiki/217789
MoNuSeg22,000张数据集是通过仔细注释几名患有不同器官肿瘤并在多家医院被诊断出的患者的组织图像获得的。该数据集是通过从TCGA存档下载以 40 倍放大倍率捕获的 H&E 染色组织图像创建的。H&E 染色是增强组织切片对比度的常规方案,通常用于肿瘤评估(分级、分期等)。考虑到多个器官和患者的细胞核外观的多样性,以及多家医院采用的丰富染色方案,训练数据集将能够开发出强大且可推广的细胞核分割技术,开箱即用。https://monuseg.gr
and-challenge.org/Data/
胰腺分割数据集 美国国立卫生研究院临床中心对 53 名男性和 27 名女性受试者进行了 82 次腹部对比增强 3D CT 扫描(门静脉静脉注射对比剂后约 70 秒)。17 名受试者是在肾切除术前扫描的健康肾脏捐赠者。其余 65 名患者由放射科医师从既无重大腹部病变也无胰腺癌病变的患者中选出。受试者的年龄范围为 18 至 76 岁,平均年龄为 46.8 ± 16.7。CT 扫描具有 512×512 像素的分辨率,具有不同的像素大小和 1.5 – 2.5 mm 之间的切片厚度,在 Philips 和 Siemens MDCT 扫描仪(120 kVp 管电压)上获得。 http://academictorre
nts.com/details/80ecfefc
abede760cdbdf63e38986501f7becd49
MICCAI胰腺分割数据集282目标:肝脏和肿瘤 模式:门静脉期 CT 大小: 420 3D 卷(282 培训 +139 测试) 来源:纪念斯隆凯特琳癌症中心 挑战:标签不平衡与大(背景)、中(胰腺)和小(肿瘤)结构https://drive.google.com
/drive/folders/1HqEgzS8BV2
c7xYNrZdEAnrHk7osJJ–2
LiTS肝脏分割数据集131+70LiTS数据集包含131组训练扫描和70组测试扫描,其中70组测试数据标签不公开。LiTS训练集中包含3DIRCADB中的所有数据,所以不要合并这两个数据集。Medical Segmentation Decathlon中肝脏分割的数据集就是LiTS。https://sliver07.gran
d-challenge.org/
covid19-ct-scans20数据来自Ieee8023,对20组扫描进行了左右肺和感染区的标注。https://www.kaggle.co
m/andrewmvd/covid19-ct-scans
Medical Segmentation Decathlon2,633医学分割十项全能是医学图像分割数据集的集合。它总共包含 2,633 张三维图像,这些图像是从多个感兴趣的解剖结构、多种模式和多个来源收集的。具体来说,它包含以下身体器官或部位的数据:大脑、心脏、肝脏、海马体、前列腺、肺、胰腺、肝血管、脾脏和结肠。http://medicald
ecathlon.com/
GlaS165GlaS 

结肠组织学图像挑战中的腺体分割
本次挑战中使用的数据集包含 165 张图像,这些图像来自 T3 或 T42 期结直肠腺癌的 16 个 H&E 染色组织切片。
每个切片属于不同的患者,切片是在实验室的不同场合处理的。
因此,该数据集在染色分布和组织结构方面表现出很高的受试者间变异性。
使用像素分辨率为 0.465µm 的 Zeiss MIRAX MIDI 幻灯片扫描仪将这些组织切片数字化为全幻灯片图像 (WSI)。
https://warwick.ac.uk/fac/cross_fac/tia/data/glascontest/
2018 Data Science Bowl该数据集包含大量分割的核图像。
这些图像是在各种条件下获得的,并且在细胞类型、放大倍率和成像方式(明场与荧光)方面有所不同。
该数据集旨在挑战算法泛化这些变化的能力。
出自UNet++: A Nested U-Net Architecture for Medical Image Segmentation
https://www.kaggle.com/c/data-science-bowl-2018/overview
ACDC150该数据集由 150 个检查(全部来自不同的患者)组成,分为 5 个均匀分布的亚组(4 个病理组和 1 个健康受试者组),如下所述。
此外,每位患者都附带以下附加信息:体重、身高以及舒张期和收缩期瞬间。
https://acdc.creatis.insa-lyon.fr/description/databases.html

参考:Medical Image Segmentation: https://paperswithcode.com/task/medical-image-segmentation

医学图像分割综述 Medical Image Segmentation Using Deep Learning:A Survey

摘自:MFEI

Abstract

  • 深度学习已经广泛的应用于医疗影像分割领域,大量的论文记录了深度学习在该领域的成功
  • 本文中提出了关于深度学习医疗影像分割的综合专题调查
  • 本文主要有两项贡献
    • 与传统文献做对比
    • 本文关注的是监督和弱监督学习方法,不包括无监督方法。对于监督学习方法,我们从三个方面分析了文献:骨干网络的选择、网络块的设计和损失函数的改进。对于弱监督学习方法,我们分别根据数据增强、迁移学习和交互式分割来研究文献。

1 INTRODUCTION

图1 An overview of deep learning methods on medical image segmentation

  • 早期的医学图像分割方法往往依赖于边缘检测、模板匹配技术、统计形状模型、主动轮廓和机器学习等,虽然有大量的方法被报道并在某些情况下取得了成功,但由于特征表示和困难,图像分割仍然是计算机视觉领域中最具挑战性的课题之一,特别是从医学图像中提取鉴别特征比正常RGB图像更困难,因为普通RGB图像往往存在模糊、噪声、低对比度等问题。
  • 由于深度学习的快速发展,医学图像分割不再需要手工制作的特征,卷积神经网络成功的实现了图像的分层和特征表示,从而成为图像处理和计算机视觉中最热门的研究课题。由于用于特征学习的cnn对图像噪声、模糊、对比度等不敏感,它们为医学图像提供了良好的分割结果。
  • 目前图像分割任务有两类,语义分割和实例分割。语义分割是一种像素级分类,它为图像中的每个像素分配一个相应的类别。与语义分割相比,实例分割不仅需要实现像素级的分类,还需要根据特定的类别来区分实例。
  • 很少有应用于医疗影像分割的实力分割,因为每个器官和组织是很不同的。本文综述了深度学习技术在医疗图像分割方面的研究进展。
  • 监督学习的优点是可以基于精心标记的数据来训练模型,但很难获得大量的医学图像标记数据。无监督学习不需要标记数据,但学习的难度增加了。弱监督学习是在监督学习和无监督学习之间,因为它只需要一小部分标记的数据,大多数数据是未标记的。
  • 通过对以上调查的研究,研究者可以学习医学图像分割的最新技术,然后为计算机辅助诊断和智能医疗做出更重要的贡献。然而这些调查存在两个问题。
    • 1)大多按时间顺序总结了医学图像分割的发展,因此忽略了医学图像分割深度学习的技术分支。
    • 2)这些调查只介绍了相关的技术发展,而没有关注医学图像分割的任务特征,如少镜头学习、不平衡学习等,这限制了基于任务驱动的医学图像分割的改进。

为了解决这两个问题我们提出了一个新的Survey,在这项工作中我们的主要贡献如下:

  • 深度学习医疗影像分割技术从粗到细的分支,如图1所示
  • 对于监督学习的方法,我们从三个方面分析了文献:
    • 骨干网络的选择
    • 网络块的设计
    • 损失函数的改进

回顾了来自处理少镜头数据或类不平衡数据的三个方面的文献:数据增强、迁移学习和交互分割。

  • 收集了目前常见的公共医学图像分割数据集,最后我们讨论了这一领域的未来研究趋势和发展方向

2 SUPERVISED LEARNING

2 An overview of network architectures based on supervised learning.

A. Backbone Networks

研究人员提出了编码器-解码器架构,这是最流行的端到端体系结构之一,如FCN,U-Net,Deeplab等。这些结构中编码器通常用于提取图像特征,而解码器通常用于将提取的特征恢复到原始图像大小,并输出最终的分割结果。虽然端到端结构对于医学图像分割是实用的,但它降低了模型的可解释性。

  • U-Net


图3 U-Net architecture
U-Net解决了一般的CNN网络用于医学影响分割的问题,因为它采用了完美的对称结构和跳过连接。与普通的图像分割不同,医学图像通常包含噪声,边界模糊。因此仅依靠图像的低级特征,很难检测到医学图像中的物体或识别物体。同时,由于缺乏图像的细节信息,仅依靠图像的语义特征也不可能获得准确的边界。而U-Net通过跳跃连接结合低分辨率和高分辨率的特征图,有效地融合了低层次和高级层次的图像特征,是医学图像分割任务的完美解决方案。

  • 3D Net


图4 V-Net architecture
在实践中,由于CT和MRI图像等大多数医学数据都以三维体积数据的形式存在,因此使用三维卷积核可以更好地挖掘数据的高维空间相关性。基于这一想法,C¸ ic¸ek等人[34]将U-Net架构扩展到3D数据的应用中,并提出了直接处理3D医疗数据的3DU-Net。由于计算资源的限制,三维U-Net只包含3个下采样,不能有效地提取深层图像特征,导致对医学图像的分割精度有限。
此外,米列塔利等人提出了类似的结构,V-Net,如图4所示。众所周知,残差连接可以避免梯度的消失,加速网络的收敛速度,很容易设计出更深层次的网络结构,可以提供更好的特征表示。与3DU-Net相比,V-Net采用残差连接设计跟深层次的网络(4次下采样)从而获得更好的性能。
然而,由于大量的参数,这些3D网络也遇到了高计算成本和GPU内存使用的问题。

  • Recurrent Neural Network (RNN)


图5 Recurrent residual convolution unit
RNN最初被设计用于处理序列问题。长短期记忆(LSTM)网络[39]是最流行的rnn之一。通过引入自循环,它可以长时间保持梯度流动。在医学图像分割中,RNN已经被用来建模图像序列的时间依赖性。Alom等人[40]提出了一种结合ResUNet与RNN的医学图像分割方法。该方法实现了递归残差卷积层的特征积累,改进了图像分割任务的特征表示。图5为递归残差卷积单元。
显然,RNN可以通过考虑上下文信息关系来捕获图像的局部和全局空间特征。然而,在医学图像分割中,获取完整和有效的时间信息需要良好的医学图像质量(例如,较小的切片厚度和像素间距)。因此,RNN的设计对于提高医学图像分割的性能并不常见。

  • Skip Connection
    虽然skip connection可以融合低分辨率和高分辨率的信息,从而提高特征表示能力,但由于低分辨率和高分辨率特征之间的语义差距较大,导致特征映射模糊。为了改进skip connection,Ibtehaz等人[43]提出了包含Residual Path(ResPath)的MultiResUNet,这使得编码器特征在与解码器中的相应特征融合之前执行一些额外的卷积操作。Seo等人[44]提出mUNet,Chen等[45]提出FED-Net。mU-Net和FED-Net都在跳跃连接中添加了卷积操作,以提高医学图像分割的性能。
  • Cascade of 2D and 3D
    对于图像分割任务,级联模型通常训练两个或两个以上的模型来提高分割精度。该方法在医学图像分割中尤为流行。级联模型大致可分为三种框架类型
    • 粗-细分割
      • 它使用两个二维网络的级联进行分割,其中第一个网络进行粗分割,然后使用另一个网络模型基于之前的粗分割结果实现精细分割。
  • 检测分割
    • 首先使用R-CNN或者YOLO等网络模型进行目标位置识别,然后使用另一个网络基于之前的粗糙分割结果进行进一步的分割
  • 混合分割
    • 由于大多数医学图像是三维数据,二维卷积神经网络不能学习三维时间信息,而三维卷积神经网络往往需要较高的计算成本。所以一些伪三维的分割方法被提出。Oda等[58]提出了一种三平面的方法,从医学CT体积中有效地分割腹动脉区域。Vu等人[59]将相邻切片的叠加作为中心切片预测的输入,然后将得到的二维特征图输入标准的二维网络进行模型训练。虽然这些伪三维方法可以从三维体数据中分割对象,但由于利用了局部时间信息,它们只能获得有限的精度提高。
    • 与伪三维网络相比,混合级联二维三维网络更受欢迎。Li等人[60]提出了一种混合密集连接的U-Net(H-DenseUNet)用于肝脏和肝肿瘤的分割。该方法首先采用一个简单的Resnet获得一个粗糙的肝脏分割结果,利用二维DenseUNet有效地提取二维图像特征,然后利用三维数据集提取三维图像特征,最后设计一个混合特征融合层,共同优化二维和三维特征。
  • Others
    • GAN已经广泛应用于计算机视觉的多个领域。生成对抗的思想也被用于图像分割。但由于医学图像通常显示低对比度,不同组织之间或组织之间的边界和病变模糊,医学图像数据标签稀疏。Luc等[65]首先将生成对抗网络应用于图像分割,将生成网络用于分割模型,将对抗网络训练为分类器。
    • 结合有关器官形状和位置的先验知识可能对提高医学图像分割效果至关重要,在医学图像分割效果中,由于成像技术的限制,图像被损坏,因此包含了伪影。然而,关于如何将先验知识整合到CNN模型中的工作很少。Oktay等人[68]提出了一种新的通用方法,将形状和标签结构的先验知识结合到解剖约束神经网络(ACNN)中,用于医学图像分析任务。通过这种方式,神经网络的训练过程可以被约束和引导,以做出更解剖学和有意义的预测,特别是在输入图像数据信息不足或足够一致的情况下(例如,缺少对象边界)。上述研究表明由于在神经网络的训练过程中采用了先验知识约束,改进后的模型具有更高的分割精度,且具有更强的鲁棒性。

B. Network Function Block

  • Dense Connection


图6 Dense connection architecture
密集连接通常用于构造一种特殊的卷积神经网络。对于密集连接网络,每一层的输入来自前向传播过程中所有层的输出。受密集连接的启发,Guan等[70]提出了一种改进的U-Net,将它的每个子块替换为密集连接形式,如图6所示。虽然密集的连接有助于获得更丰富的图像特征,但它往往在一定程度上降低了特征表示的鲁棒性,增加了参数的数量。


图7 UNet++
Zhou等人[71]将所有U-Net层(从1层到4层)连接在一起,如图7所示。这种结构的优点是,它允许网络自动学习不同层的特征的重要性。并且对跳跃连接进行了重新设计,可以将具有不同语义尺度的特征聚合在解码器中,从而形成了一个高度灵活的特征融合方案。缺点是由于密集连接的使用,参数的数量增加了。因此,将一种剪枝方法集成到模型优化中,以减少参数的数量。

  • Inception


图8 Inception architecture
对于CNNs来说,深层网络往往比浅层网络具有更好的性能,但也会有梯度消失、难收敛、内存使用要求大等问题。Inception结构克服了这些问题,它在不增加网络深度的情况下并行合并卷积核,具有更好的性能。该结构能够利用多尺度卷积核提取更丰富的图像特征,并进行特征融合以获得更好的特征表示。
图8显示了inception的架构,它包含四个级联分支,随着无卷积次数的逐渐增加,从1到1、3和5,每个分支的接受域分别为3、7、9和19。因此,该网络可以从不同的尺度中提取特征。由于该架构比较复杂,导致模型修改困难

  • Depth Separability
    为了提高网络模型的泛化能力,减少对内存使用的需求,许多研究者将重点研究了复杂医学三维体数据的轻量级网络。
    Howard et.al[76]提出了移动网络将普通卷积分解为深度可分卷积和点态卷积。普通卷积运算的数量通常为DK×DK×M×N,其中M为输入特征映射的维数,N为输出特征映射的维数,DK为卷积核的大小。然而,信道卷积操作的次数为DK×DK×1×M,点卷积为1×1×M×N。与普通卷积相比,深度可分离卷积的计算代价是普通卷积的计算代价(1/N+1/D2K)倍。
    深度可分卷积是减少模型参数数量的一种有效方法,但它可能会导致医学图像分割精度的损失,因此需要采用其他方法(如深度监督)[78]来提高分割精度。
  • Attention Mechanism
    对于神经网络,attention block可以根据不同的重要性选择性地改变输入或给输入变量分配不同的权值。近年来,大多数结合深度学习和视觉注意机制的研究都集中在利用mask形成注意机制上。mask的原理是设计一个新的层,通过训练和学习从图像中识别出关键特征,然后让网络只关注图像中的有趣区域。
    • Local Spatial Attention


图9 The attention block in the attention U-Net
普通的pooling相当于信息合并,这很容易导致关键信息丢失。针对这个问题,设计了一个称为spatial transformer的块,通过执行空间变换来提取图像的关键信息。受此启发,Oktay等人[83]提出了attention U-Net。改进后的U-Net在融合来自编码器和相应的解码器的特征之前,使用一个注意块来改变编码器的输出。注意块输出门控信号来控制不同空间位置的像素的特征重要性。图9显示了该体系结构。这个块通过1×1卷积结合Relu和sigmoid函数,生成一个权重映射,通过与编码器的特征相乘来进行修正。

  • Channel Attention


图10 The channel attention in the SE-Net
通道注意力模块可以实现特征重新校准,利用学习到的全局信息,选择性地强调有用特征,抑制无用特征。
Hu等人[84]提出了SE-Net,将通道关注引入了图像分析领域,该方法通过三个步骤实现了对信道的注意力加权;图10显示了该体系结构。首先是压缩操作,对输入特征进行全局平均池化,得到1×1×通道特征图。第二种是激励操作,将信道特征相互作用以减少信道数,然后将减少后的信道特征重构回信道数。最后利用sigmoid函数生成[0,1]的特征权值映射,将尺度放回原始输入特征。

  • Mixture Attention
    空间注意机制和通道注意机制是改进特征表示的两种常用策略。然而,空间注意忽略了不同通道信息的差异,并平等地对待每个通道。相反,通道注意力直接汇集全局信息,而忽略每个通道中的局部信息,这是一个相对粗糙的操作。因此,结合两种注意机制的优势,研究者设计了许多基于mixed domain attention block的模型。
    Wang等人[86]在U-Net的收缩路径和扩展路径之间的中心瓶颈中嵌入了一个注意块,并提出了网格网。此外,他们还比较了通道注意、空间注意和两种注意的不同组合在医学图像分割中的表现。他们的结论是,以通道为中心的注意力是提高图像分割性能的最有效的方法。
    虽然上述的注意机制提高了最终的分割性能,但它们只执行局部卷积的操作。该操作侧重于相邻卷积核的区域,但忽略了全局信息。此外,降采样的操作会导致空间信息的丢失,这尤其不利于医学图像的分割。
  • Non-local Attention


图11 The global aggregation block in the Non-Local U-Net
最近,Wang等人[87]提出了一种Non-local U-Net来克服局部卷积的缺点。Non-local U-Net在上采样和下采样部分均采用自注意机制和全局聚合块提取全图像信息,提高最终分割精度,图11显示了global aggregation block 。Non-local block是一种通用块,可以很容易地嵌入到不同的卷积神经网络中,以提高其性能。
该注意机制对提高图像分割精度是有效的。事实上,空间注意寻找有趣的目标区域,而通道注意寻找有趣的特征。混合注意机制可以同时利用空间和渠道。然而,与非局部注意相比,传统的注意机制缺乏利用不同目标与特征之间关联的能力,因此基于非局部注意的cnn在图像分割任务中通常比正常的cnn具有更好的性能。

  • Multi-scale Information Fusion
    物体之间的大尺度范围是医学图像分割的挑战之一。例如,中晚期的肿瘤可能比早期的肿瘤要大得多。感知场的大小大致决定了我们可以使用多少上下文信息。一般的卷积或池化只使用单个内核,例如,一个3×3内核用于卷积,一个2×2内核用于池化。
    • Pyramid Pooling:多尺度池化的并行操作可以有效地改善网络的上下文信息,从而提取出更丰富的语义信息。He et al.[88]首先提出了spatial pyramid pooling(SPP)来实现多尺度特征提取。SPP将图像从细空间划分为粗空间,然后收集局部特征,提取多尺度特征。受SPP的启发,设计了一个多尺度信息提取块,并将其命名为multi-kernel pooling(RMP)[75],它使用四个不同大小的池内核对全局上下文信息进行编码。然而,RMP中的上采样操作不能由于池化而恢复细节信息的丢失,这通常会扩大接受域,但降低了图像的分辨率。
    • Atrous Spatial Pyramid Pooling:为了减少池化操作造成的详细信息损失,研究人员提出了atrous convolution而不是池化操作。与普通卷积相比,atrous convolution可以在不增加参数数量的情况下有效地扩大接受域。


图12 The gridding effect (the way of treating images as a chessboard causes the loss of information continuity).
然而,ASPP在图像分割方面存在两个严重的问题。第一个问题是局部信息的丢失,如图12所示,其中我们假设卷积核为3×3,三次迭代的膨胀率为2。第二个问题是,这些信息在很大的距离上可能是无关的。

  • Non-local and ASPP:


图13 The combination of ASPP and Non-local architecture
atrous convolution可以有效地扩大接受域,收集更丰富的语义信息,但由于网格效应,导致了细节信息的丢失。因此,有必要添加约束或建立像素关联来提高无效卷积性能。最近,Yang等人提出了[92]的ASPP和非局部组合块用于人体部位的分割,如图13所示。ASPP使用多个不同规模的并行无性卷积来捕获更丰富的信息,而非本地操作捕获了广泛的依赖关系。该组合具有ASPP和非局部化的优点,在医学图像分割方面具有良好的应用前景。


C. Loss Function

除了通过设计网络主干和函数块来提高分割速度和精度外,设计新的损失函数也可以改进分割精度

  • Cross Entropy Loss
    对于图像分割任务,交叉熵是最流行的损失函数之一。该函数将预测的类别向量和实际的分割结果向量进行像素级的比较。
  • Weighted Cross Entropy Loss
    交叉熵损失对图像平均处理每个像素,输出一个平均值,忽略类不平衡,导致损失函数依赖于包含最大像素数的类的问题。因此,交叉熵损失在小目标分割中的性能往往较低。为了解决类的不平衡的问题,Long等人[32]提出了加权交叉熵损失(WCE)来抵消类的不平衡。对于二值分割的情况,将加权交叉熵损失定义为


其中,β用于调整正样本和负样本的比例,它是一个经验值。如果是β>1,则假阴性的数量将会减少;事实上,交叉熵是加权交叉熵的一个特例,当β=1时,假阳性的数量就会减少。当β=1时。为了同时调整阳性和阴性样本的权重 的权重,我们可以使用平衡交叉熵 (BCE)损失函数,其定义为

  • Dice Loss
    Dice是一个流行的医学影像分割性能评价指标。这个指标本质上是分割结果与相应的真实值之间重叠的度量。Dice的值为0-1之间,计算公式为


其中A为预测分割结果,B为真实分割结果。

  • Tversky Loss
    Dice loss的正则化版本,以控制假阳性和假阴性对损失函数的贡献,TL被定义为


其中,p∈0, 1和0≤pˆ≤1。p和pˆ分别为地面真实值和预测分割。如果β=为0.5,则TL相当于Dice

  • Generalized Dice Loss
    Dice loss虽然一定程度上解决了分类失衡的问题,但却不利于严重的分类不平衡。例如小目标存在一些像素的预测误差,这很容易导致Dice的值发生很大的变化。Sudre等人提出了Generalized Dice Loss (GDL)


GDL优于Dice损失,因为不同的区域对损失有相似的贡献,并且GDL在训练过程中更稳定和鲁棒。

  • Boundary Loss
    为了解决类别不平衡的问题,Kervadec等人[95]提出了一种新的用于脑损伤分割的边界损失。该损失函数旨在最小化分割边界和标记边界之间的距离。作者在两个没有标签的不平衡数据集上进行了实验。结果表明,Dice los和Boundary los的组合优于单一组合。复合损失的定义为


其中第一部分是一个标准的Dice los,它被定义为


第二部分是Boundary los,它被定义为

  • Exponential Logarithmic Loss
    在(9)中,加权Dice los实际上是得到的Dice值除以每个标签的和,对不同尺度的对象达到平衡。因此,Wong等人结合focal loss [96] 和dice loss,提出了用于脑分割的指数对数损失(EXP损失),以解决严重的类不平衡问题。通过引入指数形式,可以进一步控制损失函数的非线性,以提高分割精度。EXP损失函数的定义为


其中,两个新的参数权重分别用ωdice和ωcross表示。Ldice是指数对数骰子损失,而交叉损失是交叉熵损失


其中x是像素位置,i是标签,l是位置x处的地面真值。pi(x)是从softmax输出的概率值。
在(17)中,fk是标签k出现的频率,该参数可以减少更频繁出现的标签的影响。γDice和γcross都用于增强损失函数的非线性。


3 WEAKLY SUPERVISED LEARNING

图14 The weakly supervised learning methods for medical image segmentation.

A. Data Augmentation

在缺乏大量标记数据集的情况下,数据增强是解决这一问题的有效解决方案,然而一般的数据扩展方法产生的图像与原始图像高度相关。与常用的数据增强方法相比,GAN是目前最流行的数据增强策略,因为GAN克服了对原始数据的依赖问题。

  • Traditional Methods
    一般的数据增强方法包括提高图像质量,如噪声抑制,亮度、饱和度、对比度等图像强度的变化,以及旋转、失真、缩放等图像布局的变化。传统数据增强中最常用的方法是参数变换(旋转、平移、剪切、位移、翻转等)。由于这种转换是虚拟的,没有计算成本,并且对医学图像的标注很困难,所以总是在每次训练之前进行。
  • Conditional Generative Adversarial Nets(cGAN)


图15 The cGAN architecture
原始GAN生成器可以学习数据的分布,但生成的图片是随机的,这意味着生成器的生成过程是一种非引导的状态。相比之下,cGAN在原始GAN中添加了一个条件,以指导G的生成过程。图15显示了cGAN的体系结构。
Guibas等人[107]提出了一个由GAN和cGAN组成的网络架构。将随机变量输入GAN,生成眼底血管标签的合成图像,然后将生成的标签图输入条件GAN,生成真实的视网膜眼底图像。最后,作者通过检查分类器是否能够区分合成图像和真实图像来验证合成图像的真实性
虽然cGAN生成的图像存在许多缺陷,如边界模糊和低分辨率,但cGAN为后来用于图像样式转换的CycleGAN和StarGAN提供了一个基本的思路。


B. Transfer Learning

通过利用模型的训练参数来初始化一个新的模型,迁移学习可以实现对有限标签数据的快速模型训练。一种方法是在ImageNet上微调预先训练好的模型,而另一种方法是对跨领域的数据进行迁移训练。

  • Pre-trained Model
    转移学习通常用于解决数据有限的问题在医学图像分析,一些研究人员发现,使用预先训练的网络自然图像如ImageNet编码器在U-Net-like网络,然后对医疗数据进行微调可以进一步提高医学图像的分割效果。
    在ImageNet上进行预训练的模型可以学习到医学图像和自然图像都需要的一些共同的基础特征,因此再训练过程是不必要的,而执行微调对训练模型是有用的。然而,当将预训练好的自然场景图像模型应用于医学图像分析任务时,领域自适应可能是一个问题。此外,由于预先训练好的模型往往依赖于二维图像数据集,因此流行的迁移学习方法很难适用于三维医学图像分析。如果带有注释的医疗数据集的数量足够大,那么就有可能这样做
  • Domain Adaptation


图16 The Cycle GAN architecture
如果训练目标域的标签不可用,而我们只能访问其他域的标签,那么流行的方法是将源域上训练好的分类器转移到没有标记数据的目标域。CycleGAN是一种循环结构,主要由两个生成器和两个鉴别器组成。图16为CycleGAN的体系结构。


C. Interactive Segmentation

手工绘制医学图像分割标签通常是繁琐而耗时的,特别是对于绘制三维体数据。交互式分割允许临床医生交互式地纠正由模型生成的初始分割图像,以获得更准确的分割。有效的交互式分割的关键是,临床医生可以使用交互式方法,如鼠标点击和轮廓框,来改进来自模型的初始分割结果。然后,该模型可以更新参数,生成新的分割图像,从临床医生那里获得新的反馈。

例:Wang等人[121]提出了利用两个神经网络级联的DeepIGeoS,对二维和三维医学图像进行交互分割。第一个CNN被称为P-Net,它输出一个粗糙的分割结果。在此基础上,用户提供交互点或短线来标记错误的分割区域,然后使用它们作为第二个CNNR-Net的输入,获得校正的结果。对二维胎儿MRI图像和三维脑肿瘤图像进行了实验,实验结果表明,与传统的图形切割、随机游走、ITK-Snap等交互式分割方法相比,DeepIGeoS大大减少了用户交互的需求,减少了用户时间。


D. Others Works

半监督学习可以使用一小部分已标记数据和任意数量的未标记数据来训练模型,它的损失函数通常由两个损失函数的和组成。第一个是仅与标记数据相关的监督损失函数。第二个是无监督损失函数或正则化项,与标记和未标记数据相关。

弱监督分割方法从边框或图像级标签或少量标注的图像数据中学习图像分割,而不是使用大量的像素级标注,以获得高质量的分割结果。事实上,少量的注释数据和大量的未注释数据更符合真实的临床情况。然而,在实践中,弱监督学习的性能很少能为医学图像分割任务提供可接受的结果,特别是对三维医学图像。因此,这是一个值得在未来探索的方向。


4 CURRENTLY POPULAR DIRECTION

A. Network Architecture Search

到目前为止,NAS[130]在提高图像分类精度方面取得了重大进展。NAS可以被认为是自动机器学习的一个子域,与超参数优化和元学习有很强的重叠。

大多数深度学习医疗影像分割依赖于U-Net网络,并根据不同的任务对网络结构进行一些改变,但在实际应用中,非网络结构因素可能对提高分割效果也有重要意义。

Isensee等人[136]认为,对网络结构进行过多的人工调整会导致对给定数据集的过拟合,因此提出了一种医学图像分割框架no-new-unet(nnU-Net),以适应任何新的数据集。nnUnet会根据给定数据集的属性自动调整所有超参数,而不需要手动干预。因此,nnU-Net只依赖于普通的2DUNet、3DUNet、UNet级联和一个鲁棒的训练方案。它侧重于预处理(重采样和归一化)、训练(损失、优化器设置、数据增强)、推理(基于补丁的策略、测试时间增强集成、模型集成等)的阶段,以及后处理(例如,增强的单通域)。在实际应用中,网络结构设计的改进通常依赖于没有足够的可解释性理论支持的经验,此外,更复杂的网络模型表明过拟合的风险更高。

为了对高分辨率的二维图像(如CT、MRI和组织病理学图像)进行实时图像分割,压缩神经网络模型的研究已成为医学图像分割的一个流行方向。NAS的应用可以有效地减少模型参数的数量,实现了较高的分割性能。尽管NAS的性能令人惊叹,但我们无法解释为什么特定架构的性能良好。因此,更好地理解对性能有重要影响的机制,以及探索这些特性是否可以推广到不同的任务,对于未来的研究也很重要。

B. Graph Convolutional Neural Network

GCN是研究非欧几里得域的强大工具之一。图是一种由节点和边组成的数据结构。早期的图神经网络(GNNs)主要处理严格的图形问题,如分子结构的分类。在实践中,欧几里得空间(如图像)或序列(如文本),以及许多常见的场景可以转换为图,可以使用GCN技术建模。

Gao等人设计了一种新的基于GCN的图池(gUnPool)和图解池(gUnpool)操作,并提出了一种编码-解码器模型,即graph U-Net。graph U-Net通过添加少量的参数,比流行的unet获得了更好的性能。与传统的深度卷积神经网络相比,当深度值超过4时,增加网络的深度并不能提高graph U-Net的性能。然而,当深度值小于或等于4时,图U-Net比流行的U-Net表现出更强的特征编码能力。

基于GCN的方法比传统的和最近的基于深度学习的方法提供了更好的性能和更强的鲁棒性。由于图结构具有较高的数据表示效率和较强的特征编码能力,因此其在医学图像分割中的结果很有前景。

C. Interpretable Shape Attentive Neural Network

目前,许多深度学习算法倾向于通过使用近似适合输入数据的“记忆”模型来做出判断。因此,这些算法不能被充分地解释,并为每个具体的预测提供令人信服的证据。因此,研究深度神经网络的可解释性是目前的一个热点。

Sun等人[142]提出了SAU-Net,重点关注模型的可解释性和鲁棒性。该架构试图通过使用二次形状流来解决医学图像中边缘分割精度较差的问题。特别是,形状流和规则的纹理流可以并行地捕获丰富的与形状相关的信息。此外,解码器还使用了空间注意机制和通道注意机制来解释模型在U-Net各分辨率下的学习能力。最后,通过提取学习到的形状和空间注意图,我们可以用15个方法来解释每个解码器块的高度激活区域。学习到的形状图可以用来推断由模型学习到的有趣类别的正确形状。SAU-Net能够通过门控形状流学习对象的鲁棒形状特征,并且通过使用注意力的内置显着性映射比以前的工作更容易解释。

Wickstrøm等人[143]探索了卷积神经网络中结直肠息肉语义分割的不确定性和可解释性,作者开发了用于解释网络梯度的引导反向传播[144]的中心思想。通过反向传播,得到输入中每个像素对应的梯度,使网络所考虑的特征能够可视化。在反向传播过程中,由于图像中梯度值大且正的像素需要得到高度的重视,而应抑制梯度值大且梯度值负的像素。如果这些负梯度包含在重要像素的可视化中,它们可能会导致描述性特征的噪声可视化。为了避免产生有噪声的可视化,引导反向传播过程改变了神经网络的反向传播,使每一层的负梯度设置为零,从而只允许正梯度向后流过网络并突出这些像素。

目前,医学图像分析的解释主要是采用注意力和类激活图(CAM)等可视化方法。因此,对医学图像分割深度学习可解释性的研究将是未来的热门方向。

D. Multi-modality Data Fusion

多模态数据融合可以提供更丰富的目标特征,有助于提高目标检测和分割结果,因此在医学图像分析中得到了广泛的应用。

虽然众所周知,多模态融合网络通常显示更好的性能比单模式网络分割任务,多模型融合导致一些新的问题,如如何设计多模式网络有效地结合不同的模式,如何利用不同模式之间的潜在关系,如何将多个信息集成到分割网络提高分割性能等。此外,将多模态数据融合集成到一个有效的单参数网络中,有助于简化部署,提高临床实践中模型的可用性。


5 DISCUSSION AND OUTLOOK

A. Medical Image Segmentation Datasets

B. Popular evaluation metrics

为了有效地衡量医学图像分割模型的性能,人们提出了大量的指标来评价分割的有效性。对图像分割性能的评价依赖于像素质量、区域质量和表面距离质量。

目前比较流行的指标有像素质量指标包括像素精度(PA)。区域质量指标包括Dice score、体积重叠误差(VOE)和相对体积差(RVD)。表面距离质量度量包括平均对称表面距离(ASD)和最大对称表面距离(MSD)。

  • PA
    像素精度只是找到正确分类的像素的比率,除以像素总数。对于K个+1类(K个前景类和背景),像素精度定义为:


其中,pij是第i类预测为属于第j类的像素数。

  • Dice score
    它是一种常用的图像分割度量方法(在医学图像分析中更常用),它可以定义为预测地图和地面真实地图重叠面积的两倍,除以两幅图像的像素总数。对Dice score的定义为:
  • VOE
    它是Jaccard index的补充,其定义为:
  • RVD
    它是一种非对称度量,定义为:
  • ASD
    表面距离度量是参考和预测病变的表面距离的相关度量。
    设S(A)表示a的表面体素集合。任意体素v到S(A)的最短距离定义为:


ASD is defined as:

  • MSD
    它也被称为对称豪斯多夫距离,与ASD相似,但取的最大距离而不是平均值:

本文所有图片公式均来自论文原文

TernausNet

论文地址:https://arxiv.org/abs/1801.05746

github地址:https://github.com/ternaus/TernausNet

数据集:Kaggle Carvana

像素级分割在计算机视觉中是一项艰巨的任务,经典的UNet网络结构在医学影像和卫星图像中非常流行。一般来说神经网权重由一些大型数据集如ImageNet进行初始化后会有更好的效果。在一些实际应用中,尤其是在医学和交通安全方面,模型的精确是至关重要的,本文演示如何使用预训练编码器来改善UNet网络结构。

  1. 经典的UNet网络权重采用随机初始化方式来完成,众所周知训练一个未过拟合的网络需要大量的数据来完成。因此采用经过Imagenet训练后的权重来进行初始化这一方法被广泛应用。通过这种方式来加速学习过程。
  2. 此网络编码器部分采用VGG11(VGG11包含7个3×3卷积层,每个层后加一个ReLU,同时进行5次最大池化操作,具体如下图)

为构造编码器,这里移除了全连接层替换其为一个512通道的单卷积层来分离编码器和解码器。为构造解码器这里采用转置卷积层放大特征图尺寸并且减少一半原通道数。同时将转置卷积的输出与解码器的相应部分的输出串联。特征图的结果通过卷积操作使得其通道数与对应编码器部分相同。这一上采样过程重复5次对应5次池化操作。传统全连接层可接受任意大小图片输入,但因为此处有5个池化层,每次图像缩小到原来一半,即缩小$2^5=32$倍,因此当前网络要求输入图像大小需要能被32整除。下图为本文网络结构图。

3D U-Net

论文:3D U-Net: Learning Dense Volumetric Segmentation from Sparse Annotation

github: https://github.com/wolny/pytorch-3dunet

论文最早版本arXiv上的发表时间是2016.06,本文是论文v1版本笔记 MICCAI 2016收录

本文提出了一种从稀疏注释的立体数据中学习三维分割的网络。3D U-Net这篇论文的诞生主要是为了处理一些块状图(volumetric images),基本的原理跟U-Net其实并无大差,因为3D U-Net就是用3D卷积操作替换了2D的

3D数据对于生物医学数据分析来说显得非常冗余

  • 在三维层面上标注分割label比较困难,因为电脑屏幕上只能展示2D的切片
  • 同时,逐层标注大量的切片又很繁琐,且相邻层的信息几乎是相同的
  • 因此,完整注释3D数据并不是创建大而丰富的训练数据集的有效方法,尤其是对于需要大量标签数据的学习类算法

生物医学影像(biomedical images)很多时候都是块状的,也就是说是由很多个切片构成一整张图的存在。如果是用2D的图像处理模型去处理3D本身不是不可以,但是会存在一个问题,就是不得不将生物医学影像的图片一个slice一个slice成组的(包含训练数据和标注好的数据)的送进去设计的模型进行训练,在这种情况下会存在一个效率问题,因而很多时候处理块状图的时候会让任感到不适,并且数据预处理的方式也相对比较繁琐(tedious)。

所以,论文的作者就提出来了3D -Net模型,模型不仅解决了效率的问题,并且对于块状图的切割只要求数据中部分切片被标注即可(可参考下图说明)。

模型结构(Network Architecture)

整个3D U-Net的模型是基于之前U-Net(2D)创建而来,同样包含了一个encoder部分和一个decoder部分,encoder部分是用来分析整张图片并且进行特征提取与分析,而与之相对应的decoder部分是生成一张分割好的块状图。论文中使用的输入图像的大小是132 * 132 * 116,整个网络的结构前半部分(analysis path)包含及使用如下卷积操作:

a. 每一层神经网络都包含了两个 3 * 3 * 3的卷积(convolution)

b. Batch Normalization(为了让网络能更好的收敛convergence)

c. ReLU

d. Downsampling:2 * 2 * 2的max_polling,步长stride = 2

而与之相对应的合成路径(synthesis path)则执行下面的操作:

a. upconvolution: 2 * 2 * 2,步长=2

b. 两个正常的卷积操作:3 * 3 * 3

c. Batch Normalization

d. ReLU

于此同时,需要把在analysis path上相对应的网络层的结果作为decoder的部分输入,这样子做的原因跟U-Net博文提到的一样,是为了能采集到特征分析中保留下来的高像素特征信息,以便图像可以更好的合成。

整体的一个网络结构如下图所示,其实可以看出来跟2D结构的U-Net是基本一样,唯一不同的就是全部2D操作换成了3D,这样子做了之后,对于volumetric image就不需要单独输入每个切片进行训练,而是可以采取图片整张作为输入到模型中(PS:但是当图像太大的时候,此时需要运用random crop的技巧将图片随机裁切成固定大小模块的图片放入搭建的模型进行训练,当然这是后话,之后将会在其他文章中进行介绍)。除此之外,论文中提到的一个亮点就是,3D U-Net使用了weighted softmax loss function将未标记的像素点设置为0以至于可以让网络可以更多地仅仅学习标注到的像素点,从而达到普适性地特点。

训练细节(Training)

3D U-Net同样采用了数据增强(data augmentation)地手段,主要由rotation、scaling和将图像设置为gray,于此同时在训练数据上和真实标注的数据上运用平滑的密集变形场(smooth dense deformation field),主要是通过从一个正态分布的随机向量样本中选取标准偏差为4的网格,在每个方向上具有32个体素的间距,然后应用B样条插值(B-Spline Interpolation,不知道什么是B样条插值法的可以点连接进行查看,在深度学习模型的创建中有时候也不需要那么复杂,所以这里仅限了解,除非本身数学底子很好已经有所了解),B样条插值法比较笼统地说法就是在原本地形状上找到一个类似地形状来近似(approximation)。之后就对数据开始进行训练,训练采用的是加权交叉熵损失(weighted cross-entropy loss function)以至于减少背景的权重并增加标注到的图像数据部分的权重以达到平衡的影响小管和背景体素上的损失。

实验的结果是用IoU(intersection over union)进行衡量的,即比较生成图像与真实被标注部分的重叠部分。

论文针对肾脏的生物医学影像的分割结果达到了IoU=86.3%的结果。3D U-Net的诞生在医学影像分割,特别是那些volumetric images都是由很大帮助的,因为它很大程度上解决了3D图像一个个slice送入模型进行训练的尴尬局面,也大幅度的提升训练效率,并且保留了FCN和U-Net本来具备的优秀特征。

U2-Net

论文: U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection

CVPR2020

github: https://github.com/xuebinqin/U-2-Net

U²-Net给我们带来了什么?

得益于在SOTA SOD方法取得了不错的竞争力,U²-Net可以应用在很多场景。首先,U²-Net现在已经是Python的抠图工具Rembg的基础算法。抠图就是将照片的主体人或物品从图片中抠出来,以便贴到别处使用除了被用来作为抠图外,素描肖像生成(Portrait Drawing)也是其非常有趣且流行的新应用。

显着物体检测(SOD)

显着物体检测(SOD)是基于视觉注意机制的任务,其中算法旨在探索比场景或图像周围区域更专注的物体或区域,因此很适合于做抠图应用。

从自然场景中检测和分割最具视觉吸引力的对象的过程,在计算机视觉领域称为显着对象检测(SOD)。现有的大多数SOD网络都具有类似的设计,并且专注于利用由AlexNet,VGG,ResNet,ResNeXt,DenseNet等骨干网络提取的深度特征。这些骨干网络最初是为图像分类任务而构建的,因此它们提取特征代表语义含义,而不是对显着物体检测至关重要的局部细节或全局参考信息。这样的网络还倾向于在ImageNet上进行数据效率低下的预训练。

U²-Net是一种简单而强大的深度网络体系结构,具有新颖的两层嵌套U形结构,旨在解决这些问题。提出的ReSidual U (RSU)具有各种不同大小的感受野,从而使其能够更好地捕获不同规模的上下文信息。 RSU还使用池化操作来增加总体体系结构深度,而不会显着增加计算成本。

Architecture

RSU

RSU具有三个主要组成部分:输入卷积层,类似U-Net的对称编码器-解码器结构,以及通过求和融合局部和多尺度特征的残差连接。

RSU和原始残差块之间的主要区别在于,RSU用类似U-Net的结构,替换了普通的单流卷积,并用通过加权层转换的局部特征替换了原始特征。

U-2-Net

在RSU的基础上开发了U²-Net,这是用于显着物体检测的新型堆叠U形结构。 U²-Net包括一个6级编码器,一个5级解码器和一个显着度图融合模块,该模块连接到解码器级和最后一个编码器级。

总体而言,U²-Net网络结构具有丰富的多尺度特征,以及较低的计算和内存成本。 另外,由于U²-Net体系结构仅建立在RSU块上,并且不使用任何经过预训练的骨干网络进行图像分类处理,因此可以灵活,轻松地适应不同的工作环境,而性能损失最小。

FCN全卷积网络–图像分割的开山之作

论文地址: https://arxiv.org/abs/1411.4038

随着CNN在图像识别中取得巨大成功,一些经典的图像分类网络(AlexNet、VGG、GoogLeNet、ResNet)也逐渐被应用于更加细分的视觉任务中。很多研究者也在探索如何将分类网络进行改造后用于语义分割的密集预测问题(dense predictions)。在更高效的语义分割网络提出之前,学术界用于密集预测任务的模型主要有以下几个特点:

(1)小模型。早期的网络结构受限于数据量和高性能的计算资源,在设计上一般不会使用过大的模型。

(2)分块训练。分块训练(patchwise training)在当时是图像训练的普遍做法,但该方法对于全卷积网络的训练会显得相对低效,但分块训练的优点在于能够规避类别不均衡问题,并且能够缓解密集分块的空间相关性问题。

(3)输入移位与输出交错。该方法可以视为一种输入与输出的变换方法,在OverFeat等结构中被广泛使用。

(4)后处理。对于神经网络输出质量不高的问题,对输出加后处理也是常见做法,常用的后处理方法包括超像素投影(superpixel projection)、随机场正则化(random field regularization)和图像滤波处理等。

可以看到,早期用于目标检测、关键点预测和语义分割等密集预测问题整体来看有两个缺陷,一是无法实现端到端(end-to-end)的流程,模型整体效率不佳;第二个则是不能做到真正的密集预测的特征:像素到像素(pixels-to-pixels)的预测。

全卷积网络(Fully Convolutional Networks, FCN)的提出,正好可以解决早期网络结构普遍存在的上述两个缺陷。FCN在2015年的一篇论文Fully Convolutional Networks for Semantic Segmentation中提出,其主要思路在于用卷积层代替此前分类网络中的全连接层,将全连接层的语义标签输出改为卷积层的语义热图(heatmap)输出,再结合上采样技术实现像素到像素的密集预测。如下图所示,上图为常见分类网络的流程,在五层卷积网络之后有三层全连接网络,最后输出一个包含类别语义信息的输出概率;下图为FCN网络流程,在上图分类网络的基础上,将最后三层全连接层改为卷积层,输出也相应的变为分类预测的热图,这样就为了最后的像素级的密集预测提供了基础。

所以,FCN实现密集预测的关键在于修改全连接层为卷积层,那么具体是如何修改的呢?先来详细分析一下的卷积层和全连接层的特征。卷积层与全连接层最大的区别在于卷积层每次计算时只与输入图像中一个具体的局部做运算,但二者都是做点积计算,其函数形式是类似的。假设给定在指定网络层任意坐标点(i,j)的数据向量Xij,而下一层对应坐标点的数据向量为Yij,有:

其中为卷积核大小或者权重向量长度,s为步长(stride),而f_ks则表示当前层到下一层的映射函数,f_ks既可以表示为卷积层又可以表示为全连接层,所以二者之间的转换是有理论基础的。

FCN分别在AlexNet、VGG和GoogLeNet上进行了全连接层转卷积层的修改,通过实验发现以VGG16作为主干网络效果最好,完整的FCN结构如下图所示,第一行最左边为原始输入图像,图像尺寸为32×32,conv为卷积层,pool为池化层,可以注意到conv6-7是最后的卷积层,此时得到的密集预测热图尺寸为输入图像的1/32,为了实现像素到像素的预测,还需要对热图进行上采样,FCN采用双线性插值(bilinear interpolation)进行上采样,所以这里需要将热图上采样32倍来恢复到原始图像的尺寸,因而第一行的网络结构也叫FCN-32s。直接进行32倍上采样得到的输出无疑是较为粗糙的,为了提高像素预测质量,FCN又分别有FCN-16s和FCN-8s的改进版本。图中第二行即为FCN-16s,主要区别在于先将conv7(1×1)的输出热图进行2倍上采样,然后将其与pool4(2×2)进行融合,最后对融合后的结果进行16倍上采样得到最终预测结果,同理FCN-8s将pool3(4×4)、2倍上采样后的pool4(4×4)以及4倍上采样的conv7(4×4)进行融合,最后再进行8倍的上采样得到语义分割图像。

所以,从FCN-32s到FCN-8s,其实一种粗分割到精细分割的演变过程,FCN通过融合浅层图像特征和深层卷积热图的方式来得到当时的SOTA(State of the art)水平的语义分割模型。下图是FCN-32s、FCN-16s和FCN-8s在同一张图像上的分割效果,与分割的标准图像(Ground truth)相比,可以看到三个模型的分割精度是在不断优化的。

下方代码给出FCN-8s的一个PyTorch简略实现方式,便于读者加深对FCN的理解。代码中对于卷积下采样使用了VGG16的预训练权重,分别构建了四个特征提取模块、一个卷积块和三个独立的卷积层。在前向传播流程中,将conv7、pool3和pool4进行融合,最后再做8倍的双线性插值上采样。

# 导入PyTorch相关模块
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision import models

### 定义FCN-8s模型类
class FCN8(nn.Module):
    def __init__(self, num_classes):
        super().__init__()
        # 提取VGG16预训练权重作为特征
        feats =list(models.vgg16(pretrained=True).features.children())
        # 取前9层为第一特征模块
        self.feat1 = nn.Sequential(*feats[0:9])
        # 取第10-15层为第二特征模块
        self.feat2 = nn.Sequential(*feats[10:16])
        # 取第16-22层为第三特征模块
        self.feat3 = nn.Sequential(*feats[17:23])
        # 取后6层为第四特征模块
        self.feat4 = nn.Sequential(*feats[24:30])
        # 卷积层权重不参与训练更新
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                m.requires_grad = False
        # 定义卷积块
        self.conv_blocks = nn.Sequential(
            nn.Conv2d(512, 4096, 7),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Conv2d(4096, 4096, 1),
            nn.ReLU(inplace=True),
            nn.Dropout(),
        )
        # 改最后三层的全连接层为卷积层
        self.conv1 = nn.Conv2d(256, num_classes, 1)
        self.conv2 = nn.Conv2d(512, num_classes, 1)
        self.conv3 = nn.Conv2d(4096, num_classes, 1)

    ### 定义前向计算流程
    def forward(self, x):
        feat1 = self.feat1(x)
        feat2 = self.feat2(feat1)
        feat3 = self.feat3(feat2)
        feat4 = self.feat4(feat3)
        conv_blocks = self.conv_blocks(feat4)

        conv1 = self.conv1(feat2)
        conv2 = self.conv2(feat3)
        conv3 = self.conv3(conv_blocks)      
        outputs = F.upsample_bilinear(conv_blocks, conv2.size()[2:])
        # 第一次融合
        outputs += conv2
        outputs = F.upsample_bilinear(outputs, conv1.size()[2:])
        # 第二次融合
        outputs += conv1
        return F.upsample_bilinear(outputs, x.size()[2:]) 

FCN是深度学习语义分割网络的开山之作,在结构设计上率先将全卷积网络用于深度学习语义分割任务,在经典分类网络的基础上实现了像素到像素和端到端的分割。FCN整体上已具备编解码架构的U形网络雏形,为后续的网络设计开创了坚实的基础。

SUNet: Swin Transformer with UNet for Image Denoising

ISCAS 2022的一篇文章,作为首个Swin Transformer在图像去噪领域的应用,效果来说感觉还有很大提高空间。但不的不说,自从Swin Transformer(2021)提出后,在整个cv领域独领风骚。作为一个通用的架构,可以将其应用在各个cv领域,从paperwithcode里就可以见其影响力:(截止到22.8.28)

1、目标检测:

2、图像超分辨率

3、实例分割:

4、3D医学图像分割:

今天,就来看看Swin Transformer 对于图像去噪任务的处理效果:

个人觉得 Swin Transformer 对于去噪来说还有很大的扩展空间,这篇论文的模型效果不是很好,可以值得去尝试尝试,看看有没有更好的方法提高模型效果。

论文的主要贡献:

1、结合Unet网络+ Swin Transformer

2、提出了一个双上采样模块 dual up-sample block

3、首个将Swin +unet用于图像去噪领域

4、在 两个通用数据集中测试的结果还不错

网络结构:

网络分为三个部分:1)Shallow feature extraction; 2) UNet feature extraction; and
3) Reconstruction module

1、Shallow feature extraction

使用3*3卷积,提取特征,输出通道96

2、 UNet feature extraction

带有 Swin Transformer Block 的UNET体系结构,其中包含8个 Swin Transformer 层,以取代卷积。
Swin Transformer Block(STB)和Swin Transformer层(STL):

STB:包含8个STL

这块建议去看 Swin Transformer 论文,讲的比较清楚。注意此时的输入输出大小完全一致,因此需要下采样。

下采样: Patch merging

Patch merging:通过查看Patch merging的源码,可以看到,其实就是一个下采样的过程,它可以看成一种加权池化的过程。实现维度下采样、特征加倍的效果。

class PatchMerging(nn.Module):
    def __init__(self, input_resolution, dim, norm_layer=nn.LayerNorm):
        super().__init__()
        self.input_resolution = input_resolution
        self.dim = dim
        self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False)
        self.norm = norm_layer(4 * dim)

    def forward(self, x):
        """
        x: B, H*W, C
        """
        H, W = self.input_resolution
        B, L, C = x.shape
        assert L == H * W, "input feature has wrong size"
        assert H % 2 == 0 and W % 2 == 0, f"x size ({H}*{W}) are not even."

        x = x.view(B, H, W, C)

        x0 = x[:, 0::2, 0::2, :]  # B H/2 W/2 C
        x1 = x[:, 1::2, 0::2, :]  # B H/2 W/2 C
        x2 = x[:, 0::2, 1::2, :]  # B H/2 W/2 C
        x3 = x[:, 1::2, 1::2, :]  # B H/2 W/2 C
        x = torch.cat([x0, x1, x2, x3], -1)  # B H/2 W/2 4*C
        x = x.view(B, -1, 4 * C)  # B H/2*W/2 4*C

        x = self.norm(x)
        x = self.reduction(x)

        return x

上采样:Dual up-sample

作者提出了 上采样,

该模块包括两种现有的上样本方法(即双线性和PixelShuffle),以防止棋盘伪影(Deconvolution and Checkerboard Artifacts中提出的)https://distill.pub/2016/deconv-checkerboard/ 产生原因:主要是出现在反卷积中。

上采样模块

通过两种上采样后,cat维度拼接后,通过一个卷积层将维度减半C/2

实验:

如上图所示。

Real-ESRGAN 超分辨网络

论文:Real-ESRGAN: TrainingReal-World Blind Super-Resolution with Pure Synthetic Data

代码:https://github.com/xinntao/Real-ESRGAN

Real-ESRGAN 的目标是开发出实用的图像/视频修复算法。
在 ESRGAN 的基础上使用纯合成的数据来进行训练,以使其能被应用于实际的图片修复的场景(顾名思义:Real-ESRGAN)。

  1. 目标:解决真实场景下的图像模糊问题。
  2. 数据集的构建:模糊核、噪声、尺寸缩小、压缩四种操作的随机顺序。
  3. 超分网络backbone:ESRGAN的生成网络+U-Net discriminator判别器。
  4. 损失函数:L1 loss,perceptual loss,生成对抗损失。
  5. 主要对比方法是:RealSR、ESRGAN、BSRGAN、DAN、CDC。

创新点

  1. 提出了新的构建数据集的方法,用高阶处理,增强降阶图像的复杂度。
  2. 构造数据集时引入sinc filter,解决了图像中的振铃和过冲现象。
  3. 替换原始ESRGAN中的VGG-discriminator,使用U-Net discriminator,以增强图像的对细节上的对抗学习。
  4. 引入spectral normalization以稳定由于复杂数据集和U-Net discriminator带来的训练不稳定情况。

数据集构建

在讨论数据集的构建前,作者详细讨论了造成图像模糊的原因,例如:年代久远的手机、传感器噪声、相机模糊、图像编辑、图像在网络中的传输、JPEG压缩以及其它噪声。原文如下:

For example, when we take a photo with our cellphones, the photos may have several degradations, such as camera blur, sensor noise, sharpening artifacts, and JPEG compression. We then do some editing and upload to a social media APP, which introduces further compression and unpredictable noises.

所以作者针对以上问题,提出了High-order降级模型。先面我们先介绍first-order降级模型,然后就很好理解High-order降级模型了。

First-order

First-order降级模型其实就是常规的降级模型,如上式所示,按顺序执行上述操作。

x代表降级后的图像,D代表降级函数,y代表原始图像;
k代表模糊核,r代表缩小比例,n代表加入的噪声,JPEG代表进行压缩。

每一种降级方法又有多种降级方案可以选择,如下图所示:

对于模糊核k,本方法使用各项同性(isotropic)和各向异性(anisotropic)的高斯模糊核。关于sinc filter会在下文中提到。

对于缩小操作r,常用的方法又双三次插值、双线性插值、区域插值—由于最近邻插值需要考虑对齐问题,所以不予以考虑。在执行缩小操作时,本方法从提到的3种插值方式中随机选择一种。

对于加入噪声操作n,本方法同时加入高斯噪声和服从泊松分布的噪声。同时,根据待超分图像的通道数,加入噪声的操作可以分为对彩色图像添加噪声和对灰度图像添加噪声。

JPEG压缩,本方法通过从[0, 100]范围中选择压缩质量,对图像进行JPEG压缩,其中0表示压缩后的质量最差,100表示压缩后的质量最好。JPEG压缩方法点此处

  • High-order

First-order由于使用相对单调的降级方法,其实很难模仿真实世界中的图像低分辨模糊情况。因此,作者提出的High-order其实是为了使用更复杂的降级方法,更好的模拟真实世界中的低分辨模糊情况,从而达到更好的学习效果。一阶降级模型构建的数据集训练结果如下:

高阶降级模型公式如下:

上式,其实就是对First-order进行多次重复操作,也就是每一个D都是执行一次完整的First-order降级。作者通过实验得出,当执行2次First-order时生成的数据集训练效果最好。所以,High-order的pipeline如下:

  • sinc filter

为了解决超分图像的振铃和过冲现象(振铃过冲在图像处理中很常见,此处不过多介绍),作者提出了在构建降级模型中增加sinc filter的操作。先来看一下振铃和过冲伪影的效果:

上图表示实际中的振铃和过冲伪影现象,下图表示通过对sinc filter设置不同的因子人工模仿的振铃和过冲伪影现象。过于如何构造sinc filter,详细细节建议看原文。

sinc filter在两个位置进行设置,一是在每一阶的模糊核k的处理中,也就是在各项同性和各项异性的高斯模糊之后,设置sinc filter;二是在最后一阶的JPEG压缩时,设置sinc filter,其中最后一阶的JPEG和sinc filter执行先后顺序是随机的。

网络结构

  • 生成网络

生成网络是ESRGAN的生成网络,基本没变,只是在功能上增加了对x2和x1倍的图像清晰度提升。对于x4倍的超分辨,网络完全按照ESRGAN的生成器执行;而对于X2和X1倍的超分辨,网络先进行pixel-unshuffle(pixel-shuffl的反操作,pixel-shuffle可理解为通过压缩图像通道而对图像尺寸进行放大),以降低图像分辨率为前提,对图像通道数进行扩充,然后将处理后的图像输入网络进行超分辨重建。举个例子:对于一幅图像,若只想进行x2倍放大变清晰,需先通过pixel-unshuffle进行2倍缩小,然后通过网络进行4倍放大。

对抗网络

由于使用的复杂的构建数据集的方式,所以需要使用更先进的判别器对生成图像进行判别。之前的ESRGAN的判别器更多的集中在图像的整体角度判别真伪,而使用U-Net 判别器可以在像素角度,对单个生成的像素进行真假判断,这能够在保证生成图像整体真实的情况下,注重生成图像细节。

  • 光谱标准正则化

通过加入这一操作,可以缓和由于复杂数据集合复杂网络带来的训练不稳定问题。

训练

分为两步:

  1. 先通过L1 loss,训练以PSRN为导向的网络,获得的模型称为Real-ESRNet。
  2. 以Real-ESRNet的网络参数进行网络初始化,损失函数设置为 L1 loss、perceptual loss、 GAN loss,训练最终的网络Real-ESRGAN。