# semantic-Segmentation **Repository Path**: danniguo/semantic-Segmentation ## Basic Information - **Project Name**: semantic-Segmentation - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # semantic-Segmentation [关于图像分割的心得以及与FCN的理解](http://note.youdao.com/noteshare?id=0b659cbbe6d843c75a98c42a6be117b6) [本次数据集](https://www.tinymind.com/wfwh86/datasets/fcn-dataset) # 简介 ## 内容 以FCN为基础,构建一个FCN训练模型。实际工业中通常是采用小规模的数据集让我们网络过拟合,来证明我们的额特征抽提过程是否正确。再施加到一个大的训练集上训练。 ### 数据集 使用Pascal2 VOC2012的数据中,语义分割部分的数据作为数据集。 VOC网址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ VOC数据集目录结构如下: ``` ├── local │   ├── VOC2006 │   └── VOC2007 ├── results │   ├── VOC2006 │   │   └── Main │   └── VOC2007 │   ├── Layout │   ├── Main │   └── Segmentation ├── VOC2007 │   ├── Annotations │   ├── ImageSets │   │   ├── Layout │   │   ├── Main │   │   └── Segmentation │   ├── JPEGImages │   ├── SegmentationClass │   └── SegmentationObject ├── VOC2012 │   ├── Annotations │   ├── ImageSets │   │   ├── Action │   │   ├── Layout │   │   ├── Main │   │   └── Segmentation │   ├── JPEGImages │   ├── SegmentationClass │   └── SegmentationObject └── VOCcode ``` 使用VOC2012目录下的内容。数据集划分位于**VOC2012/ImageSets/Segmentation**中,分为train.txt 1464张图片和val.txt1449张图片。 语义分割标签位于**VOC2012/SegmentationClass**,注意不是数据集中所有的图片都有语义分类的标签。 语义分割标签用颜色来标志不同的物体,该数据集中共有20种不同的物体分类,以1~20的数字编号,加上编号为0的背景分类,该数据集中共有21种分类。编号与颜色的对应关系如下: ```py # class classes = ['background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'potted plant', 'sheep', 'sofa', 'train', 'tv/monitor'] # RGB color for each class colormap = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128], [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0], [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]] ``` 对应关系可由**VOCcode/VOClabelcolormap.m**计算得出,代码中也有计算对应关系的代码。 >需要注意,分类中其实还有一个编号为255的分类,其颜色对应[224, 224, 192],这个分类用作边界着色,这里不处理这个分类。 ### 训练数据准备 训练数据需要预先打包成tfrecord格式。 打包使用代码中的**convert_fcn_dataset.py**脚本进行。 ``` python3 convert_fcn_dataset.py --data_dir=/path/to/VOCdevkit/VOC2012/ --output_dir=./ ``` 本步骤最终生成的两个文件**fcn_train.record**,**fcn_val.record**分别在400MB左右,共800MB左右。 ### 预训练模型 预训练模型使用tensorflow,modelzoo中的VGG16模型,到modelzoo中找。 ### 模型 模型代码以FCN部分的代码进行了修改,主要是代码整理,添加了数据输入和结果输出的部分。 代码中使用了额外的库: ``` pydensecrf opencv-python ``` >cv2即是opencv-python,本地运行的话,使用pip安装即可。这个不是一个官方版本,缺一些比较少用的功能,但是用这个版本就足够了。官方版本需要编译,而且过程比较复杂,没有特殊必要,不要编译安装。 模型参数的解释: - checkpoint_path VGG16的预训练模型的目录。 - output_dir 输出目录。 - dataset_train train数据集的目录。 - dataset_val val数据集的目录。 - batch_size BATCH_SIZE,这里使用的是16,建立8X的FCN的时候,可能会OutOfMem,将batch_size调低即可解决。 - max_steps MAX_STEPS, 这里运行1500步,如果batch_size调整了的话,可以考虑调整一下这里。 - learning_rate 学习率,这里固定为1e-4, 不推荐做调整。 运行过程中,模型每100个step会在/output/train下生成一个checkpoint,每200步会在/output/eval下生成四张验证图片。 >FC论文参考 https://arxiv.org/abs/1411.4038