数据处理
1. 数据来源
种类 | 数量 |
---|---|
cercospora | 118(87) |
health | 271 (251) |
miner | 102(93) |
phoma | 328(286) |
rust | 103 (98) |
total | 922(815) |
2. 数据标记
在命令行输入labelme,激活标注软件,进行自己数据集的标注。
标记的数据以.json文件存储:
3. 批量处理.json文件
打开cmd,cd到.json文件的目录下,运行下面一行代码:
labelme_json_to_dataset.exe E:\coffee
注意:
- 这个也就是你的json文件目录。
- 路径只需要输入到文件夹即可,不需要具体指定json文件。
将生成的json文件夹中的label.png提取出来放在一个文件夹中,即为masks。
环境配置
python 3.6.8
pytorch 1.3.0
# 创建虚拟环境
conda create -n pytorch-unet python=3.6
# 安装依赖
pip install -r requirements.txt
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
conda install tqdm
conda install pillow
说明:
- -r:通过requirements文件可控地安装很多依赖。
- -t:安装到指定位置。
- -e:安装可编辑的包。
训练过程
1.数据准备
二分类:原图为jpg格式,标签是png格式,标签为unit8图像,背景类像素值为0,前景类像素值为1.(背景和前景看成二分类问题)
将训练图像和对应标签图像分别放在工程目录的 data/train/imgs 和 data/train/masks 下。
注意:训练要求一个 batch 内的数据大小一致。
2.代码修改
train.py中第19行,改成自己的路径:
dir_img = 'data/train/imgs/'
dir_mask = 'data/train/masks/'
dir_checkpoint = 'checkpoints/'
注意代码第157行,彩色输入通道数为3,黑白图片通道数为1。前景与背景的二分类问题所以classes为1:
net = UNet(n_channels=3, n_classes=1, bilinear=True)
3.训练
python train.py
训练参数(原代码中定义了get_args()函数),如下代码所示:
def get_args():
parser = argparse.ArgumentParser(description='Train the UNet on images and target masks',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-e', '--epochs', metavar='E', type=int, default=5,
help='Number of epochs', dest='epochs')
parser.add_argument('-b', '--batch-size', metavar='B', type=int, nargs='?', default=1,
help='Batch size', dest='batchsize')
parser.add_argument('-l', '--learning-rate', metavar='LR', type=float, nargs='?', default=0.0001,
help='Learning rate', dest='lr')
parser.add_argument('-f', '--load', dest='load', type=str, default=False,
help='Load model from a .pth file')
parser.add_argument('-s', '--scale', dest='scale', type=float, default=0.5,
help='Downscaling factor of the images')
parser.add_argument('-v', '--validation', dest='val', type=float, default=10.0,
help='Percent of the data that is used as validation (0-100)')
return parser.parse_args()
代码解读:
- required:表示这个参数是否一定需要设置
- choices:参数值只能从几个选项里面选择
- help:指定参数的说明信息
- dest:设置参数在代码中的变量名
下面是指定训练参数的训练过程,指定epoch=50。其他为默认值。
python train.py -e 50
注意:在开始训练之前,所有的输入图片必须大小一致,这里将原始图片的大小设定为2048*1024.
预测结果
(未完)
参考博客: