目的:看了一篇论文,作者对X射线单通道图像(灰度图像)进行训练,通常mobilenet网络模型用来对RGB(三通道)彩色图像分类。因此想尝试对单通道图像读入并用单通道网络训练。
步骤:
第一步:修改网络模型
在搭建的模型文件中,修改mobilenet v2的第一层卷积层输入通道改为1
features.append(ConvBNReLU(1, input_channel, stride=2))
第二步:修改读取数据方式
在训练和预测脚本中,不管是tensorflow还是pytorch读取单通道数据时,imread或ImageFolder函数会自动将单通道图像转换为三通道图像(BGR三通道格式),如果不对其处理,就会报错。因此在定义图像预处理操作时要加上一句对通道处理的操作,添加transforms.Grayscale(1)。还需要对之前三通道图的标准化处理做修改,去掉后两个通道的值。
data_transform = {
"train": transforms.Compose([transforms.Grayscale(1),
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485,], [0.229, ])]),
"val": transforms.Compose([transforms.Grayscale(1),
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, ], [0.229, ])])}
第三步:不采用迁移学习训练方法(注释掉加载权重代码)
第四步:训练和预测
代码运行结果:



