【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)

  • 0. 任务描述:
  • 1. 标注数据:
    • 1.1 Labelme 的安装:
    • 1.2 Labelme 的使用:
    • 1.3 转换标注格式:
  • 2. 数据的目录结构:
  • 3. 下载源码:
  • 4. 下载预训练模型:
  • 5. 安装 pytorch:
  • 6. 运行训练:
  • 7. 测试图片:

0. 任务描述:

正好这几天有时间,就写一下一个小白教程,用来教大家如何用一个轻量级的 FCN-DenseNet 训练自己的数据集,我们以分割魔方为例:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第1张图片

1. 标注数据:

1.1 Labelme 的安装:

语义分割标注我们使用 labelme,它是一个图形界面的图像标注软件,是用 PyQt5 编写的图形界面。

安装方式:

pip3 install labelme --user

报错:
在这里插入图片描述
我们换清华源试一下:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -U labelme --user --default-time=1000 --user

解决:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第2张图片

1.2 Labelme 的使用:

在终端输入 labelme:
在这里插入图片描述
打开界面如图:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第3张图片
点击OpenDir选择需要标注的图片的路径:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第4张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第5张图片
点击标注按键开始标注:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第6张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第7张图片
闭合标注区域后,填入标签:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第8张图片
点击Save保存:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第9张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第10张图片
另一张也如法炮制:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第11张图片
最后得到两个标注的json文件:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第12张图片

1.3 转换标注格式:

这一步我们需要把 json 文件转换成 VOC 格式的颜色掩码图,像这样:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第13张图片

我们只需要在终端输入:

labelme_json_to_dataset <文件名>.json

即:
在这里插入图片描述

就可以看到在该目录下,生成了相应的文件:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第14张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第15张图片
对于 1.json 也同样操作;

最终我们只需要保留两种标注的掩码图(注意需要改成跟原图相同的图片名):
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第16张图片

2. 数据的目录结构:

我们需要安排一下图片和标注的文件目录;

首先新建一个 Data 文件夹:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第17张图片
里面创建 2 个文件夹:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第18张图片

train/images 文件夹放训练原图:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第19张图片
train/masks 放训练标注图:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第20张图片
同样那个 val 下面的 images 和 masks 分别放测试原图和测试标注图;

3. 下载源码:

源码地址(记得给一个Star哦~):
https://github.com/Sharpiless/FCN-DenseNet

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第21张图片
下载完成后解压:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第22张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第23张图片

4. 下载预训练模型:

预训练模型地址:
http://download.pytorch.org/models/densenet121-a639ec97.pth

下载完成后放到源码目录下:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第24张图片

5. 安装 pytorch:

Linux 安装比较容易,这里就着重讲一下怎么在 Windows 下安装吧;

(我的是 python3.7,其他的版本同理)

到这个网站:
https://www.lfd.uci.edu/~gohlke/pythonlibs/

找到对应的 torch 版本下载:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第25张图片

下载完成后,在相应目录下 shift+右键 选择打开 Windows Powershell:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第26张图片
输入:

pip3 install torch‑1.0.1‑cp37‑cp37m‑win_amd64.whl --user

然后再:

pip3 install torchvision --user

如果还有报错 ‘No modul named ***’,也是直接用:

pip3 install *** --user

6. 运行训练:

在编辑器(我用的 VSCode)打开 FCN-DenseNet:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第27张图片
运行 train.py 即可开始训练:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第28张图片

下面是训练的参数,都有注释说明,需要改的话在 default 里面改就 ok:

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第29张图片训练时的模型参数保存在这里:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第30张图片
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第31张图片

7. 测试图片:

运行 test.py 即可:
【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第32张图片
会在目录下生成一个 output 文件夹,里面是测试集的分割结果(这里是因为我只有两张图片做例子,所以测试集跟训练集是一样的):

【语义分割小白教程】手把手教你训练自己的数据集(基于轻量级的FCN-DenseNet)_第33张图片
大功告成!

你可能感兴趣的:(深度学习-语义分割,python,深度学习,计算机视觉,语义分割,pytorch)