Low-Dose CT With a Residual Encoder-Decoder Convolutional Neural Network(RedCNN) 论文链接
预备知识
- 基本的 CNN
- 自编码器(autoencoder)
- ResNets
- 与卷积相对应的反卷积(deconvolutional)
以上4点我只了解1和3点(通过吴恩达深度学习的视频课),所以需要先了解一下自编码器和反卷积
自编码器(autoencoder,AE)
- 参考 :第十五章——自编码器(Autoencoders)
- 可以简单理解为 PCA 的非线性补丁加强版。在 RedCNN中,其实整个网络就是一个自编码器,在尽可能保证输入的图像和输出的图像一致的情况下更加凸显出输入图像的特征。
反卷积(deconvolutional)
- 参考1:CNN概念之上采样,反卷积,Unpooling概念解释
- 参考2:卷积神经网络CNN(1)——图像卷积与反卷积(后卷积,转置卷积)
- 大白话理解:每一层卷积操作(same/valid)虽然能提取特征,但是图片的尺寸是越来越小,而反卷积的目的就是提取到特征之后再扩大图片。
- 感觉和上采样的概念差不多。
Method 部分
- 输入为 LDCT
- 先是5层 卷积+Relu
- 再然后5层 反卷积+Relu
- 5层反卷积中有三个还加入了残差网络(论文图1中的黄线)
- 损失函数式用的 mean squared error (MSE)
- 损失函数的优化器是Adam
- 标签的是输入相对应的NDCT
- 另:与传统的CNN不同的是,RedCNN没有池化和全连接层,同时在最后一次反卷积+Relu之后也没有用 tanh/sigmoid/softmax 进行操作(猜测因为标签是NDCT而不是分类)。
Experimental Design And Results 部分
A. Data Sources
- 数据源只看第二个
Clinical Data
,AAPM 的 Mayo Clinics的,数据集包含10例患者共2378张3mm厚全剂量和四分之一剂量的512 × 512张CT图像,这是现在主流是公共数据集。
B. Parameter Selection
- 每张图片要切 patch 的,patch大小为55 x 55。
- 用了三种方式进行数据扩充:旋转45度;垂直和水平方向反转;缩放(缩放因子为2和0.5)
- 使用 caffe 框架实现的(复现的时候使用pytorch)
- 基本学习率一开始为10$ ^{-4} $,之后缓慢下降到10$ ^{-5} $。
- 卷积和反卷积的 kernel 的初值从均值为零、标准差为0.01的随机高斯分布随机选取
- The filter number of last layer was set to 1 and the others were set to 96. 这个没搞懂什么意思
- 三种评价指标:the root mean square error (RMSE),peak signal to noise ratio (PSNR) and structural similarity index measure (SSIM)
- 用了5种方法与RED-CNN 进行比较,重点关注 CNN10,这是一个没有捷径(Resnets中的跳跃连接)和反卷积层的RED-CNN简化版。与RED-CNN进行比较后可以体现出反卷积层和捷径的优势。
C. Experimental Results
这没什么注意的。新提出来的东西肯定效果好
D. Model and Performance Trade-Offs
我觉得这是本文最大的特点,作者的实验部分真的拉满了
- 1) Deconvolutional Decoder:通过比较CNN10和RED-CNN来验证反卷积层的效果更好
- 2) Shortcut Connection:通过比较有无 Shortcut Connection 来验证性能
- 3) Number of Layers:10层,20层,30层的效果对比
- 4) Patch Size:通过选取5种不同大小的Patch Size(从45x55 到 100x100)来验证效果
- 5) Performance Robustness:通过在三种不同的噪音水平下训练来验证鲁棒性
- 6) Computational Cost:训练时间给出了具体的数值,但我觉得参考价值不大,因为现在的硬件条件更好了。执行时间要比传统方法要高出不少(但这很显而易见,因为迭代重建没有训练时间,所以执行时间肯定比深度学习的执行时间要长)。
复现
毕竟是自己第一次复现代码,先不托大,老老实实去学习GitHub上其他人怎么复现的。读懂之后再自己复现一遍。 练多了之后的论文自然而然就能自己直接复现了。
先学习已经复现过的代码
- 参考: SSinyu / RED-CNN
- 根据
README.md
,跑起来的三条命令:
Check the arguments.
- run
python prep.py
to convert ‘dicom file’ to ‘numpy array’- run
python main.py --load_mode=0
to training. If the available memory(RAM) is more than 10GB, it is faster to run--load_mode=1
.- run
python main.py --mode='test' --test_iters=100000
to test.
prep.py:
它引入了四个包:
import os
import argparse
import numpy as np
import pydicom
argparse
和 pydicom
包之前没了解过,先了解一下。
argparse:
argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。
- 花十分钟看一遍这个简单入门就够了:argparse模块用法实例详解
pydicom:
`prep.py` 中就用了一行关于 pydicom 的代码关于用来读取.IMA文件的。: ```python slices = [pydicom.read_file(os.path.join(path,s)) for s in os.listdir(path)] ```
prep 简述:
将源数据(.IMA)读入进来,然后将像素(pixels)转成亨式单位(hu),然后保存到 .npy 文件中。
main.py:
以后再补
文档信息
- 本文作者:MikasaLee
- 本文链接:/2021/05/12/RedCNN/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)