FCN主要用用于图像分割领域,是一种端到端的分割方法。FCN丢弃了全连接层,使得其能够处理任意大小的图像,且减少了模型的参数量,提高了模型的分割速度。FCN在编码部分使用了VGG的结构,在解码部分中使用反卷积/上采样操作恢复图像的分辨率。FCN-8s最后使用8倍的反卷积/上采样操作将输出分割图恢复到与输入图像相同大小。
[论文]: Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully convolutional networks for semantic segmentation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015.
FCN8s使用丢弃全连接操作的VGG16作为编码部分,并分别融合VGG16中第3,4,5个池化层特征,最后使用stride=8的反卷积获得分割图像。
使用的数据集:
在通过官方网站安装MindSpore之后,你可以通过如下步骤开始训练以及评估:
用默认参数在Ascend上运行
# 训练
python train.py --device_id device_id
# 评估
python eval.py --device_id device_id
├── cv
├── FCN8s
├── README.md // FCN8s相关说明
├── scripts
├── run_train.sh
├── run_standalone_train.sh
├── run_eval.sh
├── build_data.sh
├── src
│ ├──data
│ ├──build_seg_data.py // 创建数据
│ ├──dataset.py // 载入数据
│ ├──nets
│ ├──FCN8s.py // FCN8s网络结构
│ ├──loss
│ ├──loss.py // 损失函数
│ ├──utils
│ ├──lr_scheduler.py // 学习率设置
├── train.py // 训练脚本
├── eval.py // 评估脚本
训练以及评估的参数可以在config.py中设置
FCN8s配置
# 数据
'data_file': '/data/workspace/mindspore_dataset/FCN/FCN/dataset/MINDRECORED_NAME.mindrecord', # path and name of one mindrecord file
'batch_size': 32,
'crop_size': 512,
'image_mean': [103.53, 116.28, 123.675],
'image_std': [57.375, 57.120, 58.395],
'min_scale': 0.5,
'max_scale': 2.0,
'ignore_label': 255,
'num_classes': 21,
# 优化
'train_epochs': 500,
'base_lr': 0.015,
'loss_scale': 1024.0,
# 模型
'model': 'FCN8s',
'ckpt_vgg16': '',
'ckpt_pre_trained': '',
# 训练
'save_steps': 330,
'keep_checkpoint_max': 5,
'ckpt_dir': './ckpt',
如需获取更多信息,请查看config.py.
创建mindrecord训练数据
sh build_data.sh
or
python src/data/build_seg_data.py --data_root=/home/sun/data/Mindspore/benchmark_RELEASE/dataset \
--data_lst=/home/sun/data/Mindspore/benchmark_RELEASE/dataset/trainaug.txt \
--dst_path=dataset/MINDRECORED_NAME.mindrecord \
--num_shards=1 \
--shuffle=True
用默认参数在Ascend上训练
python train.py --device_id device_id
此模型的checkpoint会在默认路径下存储
在Ascend上使用PASCAL VOC 2012 验证集进行评估
在使用命令运行前,请检查用于评估的checkpoint的路径。请设置路径为到checkpoint的绝对路径。
python eval.py
以上的python命令会在终端上运行,你可以在终端上查看此次评估的结果。测试集的精确度会以如下方式呈现:
mean IoU 0.6425
| 参数 | Ascend |
|---|---|
| 模型版本 | FCN-8s |
| 资源 | Ascend 910; CPU 2.60GHz, 192核; 内存 755G; 系统 Euler2.8 |
| 上传日期 | 12/30/2020 |
| MindSpore版本 | 1.1.0-alpha |
| 数据集 | PASCAL VOC 2012 |
| 训练参数 | epoch=500, steps=330, batch_size = 32, lr=0.015 |
| 优化器 | Momentum |
| 损失函数 | Softmax交叉熵 |
| 输出 | 概率 |
| 损失 | 0.038 |
| 速度 | 1pc: 564.652 毫秒/步; |
| 脚本 | FCN 脚本 |
| 参数 | Ascend |
|---|---|
| 模型版本 | FCN-8s |
| 资源 | Ascend 910; 系统 Euler2.8 |
| 上传日期 | 12/30/2020 |
| MindSpore版本 | 1.1.0-alpha |
| 数据集 | PASCAL VOC 2012 |
| 批大小 | 16 |
| 输出 | 概率 |
| 平均 IoU | 64.25 |
我们在train.py中设置了随机种子
请查看官方网站 homepage.