持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
首先,说一下SynthMorph,该论文发表于IEEE TRANSACTIONS ON MEDICAL IMAGING, VOL. 41, NO. 3, MARCH 2022,该论文中讲述的网络总体结构相对于voxelmorph我个人感觉不是特别大。
下面这个就是SynthMorph的网络结构
下面这个就是之前博客里面提到过的voxelmorph网络结构
这两者的特征提取,也就是产生配准域的网络结构都一样,均使用了Unet的网络结构,其结构如下,在此结构中,论文提出n=256,也就是说使用了256个滤波器,最后一层的滤波器个数为3.
没看过原论文的肯定在想,既然一样,怎么还能发表。是的,没有创新的话论文肯定不会被接收,这篇论文与nnUNet的思想有点类似,既然网络结构没有什么值得大的突破了,那么我对数据操作一下不也可以吗!
当然可以,从论文的实验证明,作者的想法非常不错,做过医学图像的可能都知道,有时候我们设计的网络结构对于一个数据集表现的非常不错(在网络未过拟合的情况下),然而当我们换了一个数据集之后,网络的验证结果就没有那么好了,这主要是因为每个人、不同的设备、不同的情况所拍摄的3D图像有所不同。
作者的方法是通过在真实数据中进行操作,比如合成任意对比度、伪影和噪声的图像,将这些图像与一些结构结构的真实图像混合在一起进行训练,这样网络就暴漏在了广泛的变化之后,所以也就学到了更多的不变性特征,使得图像在新的数据集中能够表现的更好。
就如下面的,作者合成的一些标签图
作者展示了一些不同的数据集,当然,数据肯定是3D的,但是展示时只能直观的观测到2D的图像,在下面的图像中作者一共给出了三类,分别是利用噪声合成的图像、利用任意的对比度合成的以及使用3D平滑后的图像。
具体的论文的细节的话下载作者的论文进行细细的阅读,本博客主要是在宏观方面阐述作者的思想。代码和论文可以在下面的网址获取。
https://w3id.org/synthmorph
进入网站之后大概界面就是下面这个样子的
最上面一行分别有code、video等等几个连接,论文可以在paper链接获取,对于代码可以在code获取。
代码链接跳转后,界面如下
我在代码训练过程使用的是LPBA40数据集
训练时需要传入参数,在下载链接的下面部分作者也贴出了详细的命令参数,如下
如果没有办法下载代码和数据集的,可以在我的链接中下载。
链接:https://pan.baidu.com/s/1Thx6RtKXf9QE2wRh9k0gpQ 提取码:xgbi
代码的目录结构如下,数据集我放在了下面的位置
数据集中我已经处理好了,生成了list.txt,如果想用自己的数据集训练的需要使用下面的脚本生成list.txt
import os
# 注意,不要只生成图像的名字保存在list.txt中,一定是包含图像名字的路径
file_path = "./LPBA40/train"
fileName_list = os.listdir(file_path)
listTXT = open("./list.txt", "w")
sub_path = "./LPBA40/train/"
[listTXT.writelines(sub_path + item + "\n") for item in fileName_list]
listTXT.close()
在训练时,开始一直报我文件夹写入权限的错误,给文件夹赋予了读写执行的权限还是不行,于是我把下面这两句代码注释了,其主要作用就是在每个对20取余为0 的批次中将模型保存一下,作用不大。
最后就是等待非常久的训练时间了
当然,可以在代码中将训练的批次修改的小一点,这样有助于更快的看到结果。
注意,这个代码中同时包含了tf和pytorch两种代码,我主要使用的是pytorch的,习惯使用tf的可以对照相应的方法训练tf的代码。