语义分割 FCN-DenseNet 应用入门

语义分割 FCN-DenseNet 应用入门

  • 1. 简介
  • 2. 源码
  • 3. 数据集
    • 3.1 开源数据集
    • 3.2 自定义数据集
      • 3.2.1 建立数据集文件夹
      • 3.2.2 标注
      • 3.2.3 转化
  • 4. 训练
  • 5. 验证


1. 简介

在计算机视觉领域,语义分割指的是将数字图像细分为多个图像子区域的过程
语义分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析
语义分割通常用于定位图像中的物体和边界(线,曲线等)
更精确的,语义分割是对图像中的每个像素加标签的一个过程,
这一过程使得具有相同标签的像素具有某种共同视觉特性
语义分割 FCN-DenseNet 应用入门_第1张图片
语义分割的领域非常多,无人车、地块检测、表计识别等等


2. 源码

根据GitHub上开源的代码 Sharpiless FCN-DenseNet 进行一些更改:

  1. 调整数据集分布
  2. 新增训练和检验过程可视化
  3. 新增数据集处理工具
  4. 新增预训练模型
  5. 新增少许自定义参数等

可以通过以下渠道下载:

  • GitHub:FCN-DenseNet
  • CSDN:FCN-DenseNet
  • Gitee:FCN-DenseNet

3. 数据集


3.1 开源数据集

本案例使用飞桨里的一个例子的 Oxford-IIIT Pet数据集
里面包含了宠物照片和对应的标签数据
宠物图片在 /images
标签数据在 /annotations/trimaps
具体详情参考 飞桨官方文档说明
语义分割 FCN-DenseNet 应用入门_第2张图片
这边标签是灰度图,还需要在处理一下,利用 tool_img2mask.py 根据实际情况将所有标签图片转换为所需的格式

语义分割 FCN-DenseNet 应用入门_第3张图片
左边为原图标签,宠物为1,背景为2,边缘为3,这里处理后只保留宠物特征

然后通过 tool_img2data.py 将原图和标签打乱并按比例分配到新的地址成为训练集和测试集
原图训练集:/resources/images/data/train/img
标签训练集:/resources/images/data/train/mask
原图测试集:/resources/images/data/test/img
标签测试集:/resources/images/data/test/mask

语义分割 FCN-DenseNet 应用入门_第4张图片
语义分割 FCN-DenseNet 应用入门_第5张图片


3.2 自定义数据集


3.2.1 建立数据集文件夹

在工程中新建文件夹 /resources/images/data_json,将所有数据原图均放置于此

语义分割 FCN-DenseNet 应用入门_第6张图片
这里以Oxford-IIIT Pet数据集的第一张图片为例


3.2.2 标注

使用 开源的数据标注工具Labelme
安装也比较简单,版本不要太高了,后面用的时候会有问题:

$ pip3 install labelme==3.16.2

/resources/images/data_json启动 Labelme

$ labelme

语义分割 FCN-DenseNet 应用入门_第7张图片
保存为 json 格式,并在同一地址,后续方便转换处理

语义分割 FCN-DenseNet 应用入门_第8张图片


3.2.3 转化

此时再通过 tool_json2dataset.py 转化所有文件并生成原图和标签图片
语义分割 FCN-DenseNet 应用入门_第9张图片
此时所有可以利用的数据均在 /resources/images/dataset 文件夹中

然后同样通过 tool_dataset2data.pydataset 中的原图和标签打乱并按比例分配到新的地址成为训练集和测试集
原图训练集:/resources/images/data/train/img
标签训练集:/resources/images/data/train/mask
原图测试集:/resources/images/data/test/img
标签测试集:/resources/images/data/test/mask


4. 训练

为了有足够强大的数据,这里使用处理过的Oxford-IIIT Pet数据集
根据自己电脑硬件合理调整参数进行训练,执行train.py文件

在这里插入图片描述
默认每5次迭代验证并保存最优的模型于 parameters_densenet121 文件夹

parser.add_argument('--svae_interval', type=int, default=5)  # svae interval

5. 验证

执行test.py文件
语义分割 FCN-DenseNet 应用入门_第10张图片
可以在 resources/images/data/test 看到分割的效果图:
语义分割 FCN-DenseNet 应用入门_第11张图片
抽取mask里的图片出来对比效果:
语义分割 FCN-DenseNet 应用入门_第12张图片
还是可以的


谢谢

你可能感兴趣的:(计算机视觉,计算机视觉,人工智能,算法)