deeplab v3+代码链接
使用Pascal_voc数据集训练的官方教程
1.环境配置
这里笔者主要是按照官方教程安装了需要的包,再有就是把slim依赖库添加到pythonpath,但是笔者没有这样做,直接运行程序,在报错的位置前面加上slim.就行了。
2.数据集准备
笔者是仿照voc数据集来准备的,voc数据集中格式如下图所示。
创建如上图所示的文件夹,将数据原图放入JPEGImages中,做好的mask图放入SegmentationClass中,tfrecord为稍后将数据转为tensorflow所需要的tfrecord格式的文件夹,exp中train为保存模型位置,eval为保存评估时event事件文件夹,vis为可视化文件夹,均需手动创建。
# From the tensorflow/models/research/deeplab/datasets directory.
sh download_and_convert_voc2012.sh
运行上述命令,将数据转为tfrecord格式。
/home/niechuan/DeepLearningModels/models-master/research/deeplab/datasets/pascal_voc_seg/VOCdevkit/VOC2012/ImageSets/Segmentation
在上述文件夹中有,创建train.txt及val.tet文件,内容为图片名称,只包含前缀,一行一个。在segmentation_dataset.py中修改如下内容为自己数据的train数据量、val数据量及分类书(num_classes),笔者这里仅有一种分类,所以为1+1(背景)。
再修改train.py中的dataset、train_spilt、dataset_dir的地址,根据自己数据修改。
至此就可以训练自己的模型了。
这里再提一下该代码中的一些问题。
1.模型选择
在common.py中,可修改mobilenet_v2为xception_65等。
2.损失函数
在train_util.py中,为交叉熵损失函数,读者可自行查看。
3.改代码中笔者感觉没有实现论文中所说的叠加一个low_level的信息,而是直接使用的双线性插值到原图大小。(model.py中有疑问,直接resize)
4.关于eval.py
笔者执行改程序执行到一定程度直接显示waiting for new checkpoint,原来该程序是train文件夹中生成一个模型,则eval.py就验证一次,如果一直不生成,则一直卡在waiting那儿就不动了。