chun2495 发表于 2020-10-13 15:32:08

【人工智能 图像分割 原创首发】第八章 常见问题解答

补充1:
训练参数说明
python train.py \
    --logtostderr \
    --num_clones=1 \ #CPU个数
    --training_number_of_steps=100 \ #训练迭代次数
    --train_split="train" \
    --model_variant="mobilenet_v2" \
    --decoder_output_stride=4 \ #如果 output_stride=8,则带孔卷积的采样率对应设置为
    --train_crop_size=513 \ #裁剪的图片大小,当主机内存不够大时会出现内存不够的错误,可根据实际情况适当减小数值。但是不得小于 ,而且要符合 (crop_size - 1)/4 = 整数
    --train_crop_size=513 \
    --train_batch_size=12 \ #如果要训练BN层,batch最好大于 12,如果显存不够用可以调整crop大小
    --dataset="mydata" \ #设置为在segmentation_dataset.py的数据集名称
    --fine_tune_batch_norm=True \ #当训练batch大于12时,设置为True。官方建议,如果训练的 batch_size 小于12的话,须将fine_tune_batch_norm 设置为False,这个设置很重要,否则的话训练时会在2000步左右报错
    --tf_initial_checkpoint='./g3doc/deeplabv3_mnv2_pascal_trainval/model.ckpt-30000.index' \ #用于有预训练模型或者断点训练时使用,自己的数据第一次训练的话就不需要了,加载时路径用单引号
    --train_logdir='./exp/mydata_train/train/' \ #保存训练的中间结果的路径
    --dataset_dir='/Users/zhengyuchun/Desktop/Anaconda/semantic_segmentation/data_tfrecord/tfrecord/' #tfrecord的路径

补充2:
评价结果miou是计算真实值和预测值两个集合的交集和并集之比,所以miou当然越大越好。最高为1。
损失函数loss是用来估量模型的输出与真实值之间的差距,所以miou当然越小越好。最小为0。

补充3:
训练和可视化
参考aquariusjay在github上的解疑.
如果想在DeepLab的基础上fine-tune其他数据集, 可在train.py中修改输入参数。有一些选项:
使用预训练的所有权重,设置initialize_last_layer=True
只使用网络的backbone,设置initialize_last_layer=False和last_layers_contain_logits_only=False
使用所有的预训练权重,除了logits,因为如果是自己的数据集,对应的classes不同(这个我们前面已经设置不加载logits),可设置initialize_last_layer=False和last_layers_contain_logits_only=True
最终,我的设置是:
initialize_last_layer=False
last_layers_contain_logits_only=True

补充4:
训练过程很长时间都是一片红或一片绿(红是背景、绿是识别物体)
主要还是由于训练步长不够,当到达2000+后,开始有明显的成效。
页: [1]
查看完整版本: 【人工智能 图像分割 原创首发】第八章 常见问题解答