Deeplab分割模型训练
===================
作为 `HAT` 分割任务的示例,这篇教程主要向大家展示如何使用 `HAT` 在 `Cityscapes` \
数据集上训练一个 state-of-the-art 的浮点和定点模型。
`Cityscapes` 是一个城市驾驶场景的图像数据集,包含了5000张具有像素级标注的图像,图像\
中的物体被分为19个类别。分割任务相对复杂,对模型能力的要求较高,使用小模型在分割任务\
上取得较好的指标并不是很轻易的事。本教程将从零开始,详细描述如何使用 `HAT` 在\
`Cityscapes` 数据集上训练一个 state-of-the-art 的分割模型,并在浮点模型基础上进行\
量化训练,最终得到一个定点模型。
1. 训练流程
-----------
数据集下载
>>>>>>>>>>
要下载 `Cityscapes` 数据集,首先需要在 \
`官方网站 `_ 注册一个账号。
之后便可在 `下载页面 `_ 下载需要\
的数据集文件,这里我们只需要 `gtFine_trainvaltest.zip` 和 \
`leftImg8bit_trainvaltest.zip` 两个文件。
同时, `Cityscapes` 数据集官方还提供了一个脚本用于数据的下载和处理,见 \
`Github链接 `_ 。\
首先使用如下命令安装官方工具:
.. code-block:: bash
python3 -m pip install cityscapesscripts
然后使用官方工具下载所需数据集文件(注意,使用此工具下载仍需要登录上面注册的账号)。
.. code-block:: bash
csDownload -d ${data-dir} gtFine_trainvaltest.zip
csDownload -d ${data-dir} leftImg8bit_trainvaltest.zip
最后对下载好的文件进行解包即可(可选):
.. code-block:: bash
cd ${data-dir}
unzip gtFine_trainvaltest.zip
unzip leftImg8bit_trainvaltest.zip
数据集打包
>>>>>>>>>>
为了高效地读取数据,我们推荐预先将数据集打包为 `LMDB` 格式。 `HAT` 提供了\
``cityscapes2lmdb.py`` 脚本来方便地将数据集从原始公开的格式转换为 ``numpy.ndarray``\
或 ``torch.Tensor`` ,使用 ``msgpack`` 对数据进行封装,并最终打包为 `LMDB` 文件。
数据集打包的命令如下:
.. code-block:: bash
python3 tools/datasets/cityscapes_packer.py --src-data-dir ${data-dir} --split-name train --pack-type lmdb
python3 tools/datasets/cityscapes_packer.py --src-data-dir ${data-dir} --split-name val --pack-type lmdb
生成的 lmdb 文件保存在 ${data-dir}/train_lmdb 和 ${data-dir}/val_lmdb 路径下。
模型训练
>>>>>>>>
将数据集打包为 `LMDB` 文件后,就可以开始模型的训练了。 `HAT` 提供了 ``train.py``\
训练脚本来方便地配合 `config` 文件实现模型训练。
模型训练的命令如下,开始训练之前请确保将 ``deeplabv3plus.py`` 配置文件中的数据集路径\
(``data_rootdir``)设置为数据集 `LMDB` 文件所在位置。
在网络训练开始之前,你可以使用以下命令先测试一下网络的计算量\
和参数数量:
.. code-block:: bash
python3 tools/calops.py --config configs/segmentation/deeplabv3plus.py --input-shape "1,3,1024,2048"
如果你只是单纯的想启动这样的训练任务,运行下面的命令就可以:
.. code-block:: bash
python3 tools/train.py --step float --config configs/segmentation/deeplabv3plus.py
如果想要验证已经训练好的模型精度,运行下面的命令即可:
.. code-block:: bash
python3 tools/train.py --step float --config configs/segmentation/deeplabv3plus.py --val-ckpt float-checkpoint-best.pth.tar --val-only
如果想要导出onnx模型, 运行下面的命令即可:
.. code-block:: bash
python3 tools/export_onnx.py --config configs/segmentation/deeplabv3plus.py --ckpt float-checkpoint-best.pth.tar --onnx-name deeplab.onnx