博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用PaddlePaddle实现图像语义分割模型ICNet
阅读量:5843 次
发布时间:2019-06-18

本文共 2319 字,大约阅读时间需要 7 分钟。

什么是图像语义分割?

图像语意分割顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割,图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进行标注,标注属于哪一类别。近年来用在无人车驾驶技术中分割街景来避让行人和车辆、医疗影像分析中辅助诊断等。

今天,我们介绍在图像语义分割任务中,如何基于图像级联网络(Image Cascade Network,ICNet)进行语义分割,相比其他分割算法,ICNet兼顾了准确率和速度。

PaddlePaddle已经将ICNet应用于工业领域,将零件质检工人从高强度、低效率的密集劳动中解放出来,有效提升企业经营效率。

图像语义分割模型ICNet的实现方法

下面向大家介绍ICNet的实现(转自PaddlePaddle Github):

运行程序示例需要使用PaddlePaddle develop最新版本。如果您的PaddlePaddle安装版本低于此要求,请按照PaddlePaddle官方文档更新安装版本。

PaddlePaddle官方文档:

代码结构

├── network.py # 网络结构定义脚本

├── train.py # 训练任务脚本
├── eval.py # 评估脚本
├── infer.py # 预测脚本
├── cityscape.py # 数据预处理脚本
└── utils.py # 定义通用的函数
简介
Image Cascade Network(ICNet)主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。

整个网络结构如下:

clipboard.png

数据准备

本文采用Cityscape数据集,请前往Cityscape官网注册下载:

下载数据之后,按照这里的说明和工具处理数据:

处理之后的数据

data/cityscape/

|-- gtFine
| |-- test
| |-- train
| `-- val
|-- leftImg8bit
| |-- test
| |-- train
| `-- val
|-- train.list
`-- val.list
其中,train.list和val.list分别是用于训练和测试的列表文件,第一列为输入图像数据,第二列为标注数据,两列用空格分开。示例如下:

leftImg8bit/train/stuttgart/stuttgart_000021_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000021_000019_gtFine_labelTrainIds.png

leftImg8bit/train/stuttgart/stuttgart_000072_000019_leftImg8bit.png gtFine/train/stuttgart/stuttgart_000072_000019_gtFine_labelTrainIds.png
完成数据下载和准备后,需要修改cityscape.py脚本中对应的数据地址。

模型训练与预测

训练
执行以下命令进行训练,同时指定checkpoint保存路径:

python train.py --batch_size=16 --use_gpu=True --checkpoint_path="./chkpnt/"

使用以下命令获得更多使用说明:

python train.py --help

训练过程中会根据用户的设置,输出训练集上每个网络分支的loss, 示例如下:

Iter[0]; train loss: 2.338; sub4_loss: 3.367; sub24_loss: 4.120; sub124_loss: 0.151

测试
执行以下命令在Cityscape测试数据集上进行测试:

python eval.py --model_path="./model/" --use_gpu=True

需要通过选项--model_path指定模型文件。 测试脚本的输出的评估指标为mean IoU。

预测

执行以下命令对指定的数据进行预测:

python infer.py \

--model_path="./model" \
--images_path="./data/cityscape/" \
--images_list="./data/cityscape/infer.list"
通过选项--images_list指定列表文件,列表文件中每一行为一个要预测的图片的路径。 预测结果默认保存到当前路径下的output文件夹下。

实验结果

图2为在CityScape训练集上的训练的Loss曲线:

clipboard.png

在训练集上训练,在validation数据集上验证的结果为:mean_IoU=67.0%(论文67.7%)

图3是使用infer.py脚本预测产生的结果示例,其中,第一行为输入的原始图片,第二行为人工的标注,第三行为我们模型计算的结果。

clipboard.png

参考

ICNet for Real-Time Semantic Segmentation on High-Resolution Images:

访问Github了解更多:

clipboard.png

转载地址:http://wpqcx.baihongyu.com/

你可能感兴趣的文章
EXT.NET 更改lable和Text的颜色
查看>>
我的友情链接
查看>>
把文件放在SD卡
查看>>
postfix搭建及配置
查看>>
DNS区域委派与转发
查看>>
[deviceone开发]-一个很炫的手势动画示例
查看>>
Windows Server 2008 RemoteApp---发布应用程序
查看>>
IPC-----消息队列
查看>>
Spring Cloud Feign注意点
查看>>
Js中的for in
查看>>
白帽子技术分析会话劫持实战讲解
查看>>
互联网项目总结
查看>>
我的友情链接
查看>>
yum的三种方式
查看>>
大型项目开发: 隔离 (《大规模C++程序设计》书摘)
查看>>
spring StopWatch用法
查看>>
Redis源代码分析(三十)--- pubsub公布订阅模式
查看>>
技术管理者工作成效评估表
查看>>
CSS3实现的立体button
查看>>
如何将Java Web项目部署到服务器上
查看>>