chun2495 发表于 2020-10-13 13:30:02

【人工智能 图像分割 原创首发】第四章 开始训练数据

到这里,前面的铺垫算是大体完成了,准备开始我们的数据训练吧!

三、训练自己的数据

3.1修改segmentation_dataset.py
/models-r1.13.0/research/deeplab/datasets中找到segmentation_dataset.py文件大概在111行的位置增加一个自己的数据集描述“_MYDATA”
然后在下面一个代码块注册数据集,下图光标处为上一步修改的数据集描述名称。


3.2修改Train_utils.py
在/models-r1.13.0/research/deeplab/utils中找到train_utils.py文件,修改109行,修改如下,作用是在使用预训练权重时候,不加载该logit层。

(这里需要考虑数据平衡问题,对于数据集本身,如果数据不平衡,即各类别a,b,background在数据集中占比不相同,比如background占比远大于a,b类别,则需要对权重进行分配,假设权重比为1:10:11,则在train_utils.py的大概70行修改权重。)这里我没有做。

3.3修改train.py
文件路径:/models-r1.13.0/research/deeplab/train.py 在125行左右,修改如下


3.4 下载预训练模型
https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md 中下载任意一个模型,在接下来的训练需要用。我下载的是这个

解压后放置在“models-r1.13.0/research/deeplab/g3doc/”下。

3.5训练指令
python deeplab/train.py \
    --logtostderr \
    --num_clones=1 \
    --training_number_of_steps=100 \
    --train_split="train" \
    --model_variant="xception_65" \
    --atrous_rates=6 \
    --atrous_rates=12 \
    --atrous_rates=18 \
    --output_stride=16 \
    --decoder_output_stride=4 \
    --train_crop_size=321 \
    --train_crop_size=321 \
    --train_batch_size=12 \
    --dataset="mydata" \
    --fine_tune_batch_norm=True \
    --tf_initial_checkpoint='/Users/zhengyuchun/Desktop/Anaconda/models-r1.13.0/research/deeplab/g3doc/deeplabv3_mnv2_pascal_trainval/model.ckpt-30000.index' \
    --train_logdir='/Users/zhengyuchun/Desktop/Anaconda/models-r1.13.0/research/deeplab/exp/mydata_train/train/' \
    --dataset_dir='/Users/zhengyuchun/Desktop/Anaconda/semantic_segmentation/data_tfrecord/tfrecord/'
#这里只需要把路径改为自己的路径就可以。
其中:
num_clones:用2个gpu进行训练所以设置成2,默认为1。
train_crop_size:裁剪完成的图片大小。对于参数的说明:
① 不得小于
② (crop_size - 1)/4 = 整数
③ 将crop_size设置为,结果不会好,因为其有ASPP(atrous spatial pyramid pooling)模块,如果图片过小,到feature map时没有扩张卷积的范围大了,所以要求一个最小值
rain_batch_size:batch尺寸,如要训练BN层,batch_size值最好大于12,如果显存不够,可调整crop_size大小,但不得小于。
fine_tune_batch_norm:当batch_size大于12时,设置为True。
tf_initial_checkpoint:修改成自己的预训练权重路径,我使用的是xception_65
train_logdir:训练产生的文件存放路径。

3.6可视化输出
在终端输入指令
python deeplab/vis.py \
    --logtostderr \
    --vis_split="val" \
    --model_variant="xception_65" \
    --atrous_rates=6 \
    --atrous_rates=12 \
    --atrous_rates=18 \
    --output_stride=16 \
    --decoder_output_stride=4 \
    --vis_crop_size=512 \
    --vis_crop_size=512 \
    --dataset="mydata" \
    --checkpoint_dir='/Users/zhengyuchun/Desktop/Anaconda/models-r1.13.0/research/deeplab/exp/mydata_train/train/' \
    --vis_logdir='/Users/zhengyuchun/Desktop/Anaconda/models-r1.13.0/research/deeplab/exp/mydata_train/vis/' \
    --dataset_dir='/Users/zhengyuchun/Desktop/Anaconda/semantic_segmentation/data_tfrecord/tfrecord/'
其中:vis_split:设置为测试集val。
vis_crop_size:设置成数据集里面val数据的大小,比如我的是512*512。
dataset:设置为我们在segmentation_dataset.py文件设置的数据集名称。
dataset_dir:设置为创建的tfrecord路径。

3.7 tensorboard查看训练结果
由于训练结果存储在“/models-r1.13.0/research/deeplab/exp/mydata_train/train/”下
所以cd到research目录,执行命令,然后在浏览器输入cmd里的地址就可以查看训练结果了。

chenchaoting 发表于 2020-10-13 13:37:45

能不能来个安卓版本的

zyqcome 发表于 2020-10-13 13:37:57

哇,大佬,膜拜
谢谢分享

chun2495 发表于 2020-10-13 13:39:28

chenchaoting 发表于 2020-10-13 13:37
能不能来个安卓版本的

安卓应该更简单,自己网上搜索下就可以转换过去了。
页: [1]
查看完整版本: 【人工智能 图像分割 原创首发】第四章 开始训练数据