用PaddlePaddle实现图像语义分割模型ICNet
什么是图像语义分割?
图像语意分割顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割,图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进行标注,标注属于哪一类别。近年来用在无人车驾驶技术中分割街景来避让行人和车辆、医疗影像分析中辅助诊断等。
今天,我们介绍在图像语义分割任务中,如何基于图像级联网络(Image Cascade Network,ICNet)进行语义分割,相比其他分割算法,ICNet兼顾了准确率和速度。
PaddlePaddle已经将ICNet应用于工业领域,将零件质检工人从高强度、低效率的密集劳动中解放出来,有效提升企业经营效率。
图像语义分割模型ICNet的实现方法
下面向大家介绍ICNet的实现(转自PaddlePaddle Github):
运行程序示例需要使用PaddlePaddle develop最新版本。如果您的PaddlePaddle安装版本低于此要求,请按照PaddlePaddle官方文档更新安装版本。
PaddlePaddle官方文档:
http://paddlepaddle.org/documentation/docs/zh/1.2/beginners_guide/index.html
代码结构
├── network.py # 网络结构定义脚本
├── train.py # 训练任务脚本
├── eval.py # 评估脚本
├── infer.py # 预测脚本
├── cityscape.py # 数据预处理脚本
└── utils.py # 定义通用的函数
简介
Image Cascade Network(ICNet)主要用于图像实时语义分割。相较于其它压缩计算的方法,ICNet即考虑了速度,也考虑了准确性。 ICNet的主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并。ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡。
整个网络结构如下:
数据准备
本文采用Cityscape数据集,请前往Cityscape官网注册下载:
https://www.cityscapes-dataset.com/
下载数据之后,按照这里的说明和工具处理数据:
https://github.com/mcordts/cityscapesScripts/blob/master/cityscapesscripts/preparation/createTrainIdLabelImgs.py#L3
处理之后的数据
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曲线:
在训练集上训练,在validation数据集上验证的结果为:mean_IoU=67.0%(论文67.7%)
图3是使用infer.py
脚本预测产生的结果示例,其中,第一行为输入的原始图片,第二行为人工的标注,第三行为我们模型计算的结果。
参考
ICNet for Real-Time Semantic Segmentation on High-Resolution Images:
https://arxiv.org/abs/1704.08545
访问Github了解更多:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/icnet
或点击阅读原文
用PaddlePaddle实现图像语义分割模型ICNet相关推荐
- 深度学习-Tensorflow2.2-图像处理{10}-UNET图像语义分割模型-24
UNET图像语义分割模型简介 代码 import tensorflow as tf import matplotlib.pyplot as plt %matplotlib inline import ...
- 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
计算机视觉作为人工智能的主流技术领域之一,历经图像分类-->目标定位-->目标检测,最终发展到图像语义分割技术. 如下图所示,从最初的识别图片信息进行单一分类,到单图片中多目标识别分析,而 ...
- 当前主流的深度学习图像语义分割模型解析
转载自[量子位]公众号 QbitAI 原文地址:http://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容. 量子位 ...
- 一文总结图像语义分割模型
作者:咫尺小厘米 链接:https://zhuanlan.zhihu.com/p/133268053 本文转载自知乎,作者已授权,未经许可请勿二次转载 语义分割是图像分割中的基本任务,是指对于图像将每 ...
- 图像语义分割模型综述
文章目录 一.语义分割介绍 二.语义分割的思路 空洞卷积 条件随机场 三.经典语义分割算法介绍 1.FCN 2.UNet Family (1)UNet (2)Attention U-Net (3)UN ...
- 图像语义分割模型 FCN
全卷积网络(Fully Convolutional Networks,FCN) 是用深度神经网络来做语义分割的开山之作,它是首个端对端的针对像素级预测的全卷积网络,自从该网络提出后,就成为语义分割的基 ...
- 图像语义分割模型DeepLab训练Cityscapes数据集过程记录
参考:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/cityscapes.md https://git ...
- Android基于图像语义分割实现人物背景更换
原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:Android基于 ...
- PaddleServing图像语义分割部署实践
目录 一.任务概述 二.官方示例部署 2.1 安装PaddleServing 2.2 导出静态图模型 2.3 转换为serving模型 2.4 启动服务 2.5 客户端请求 三.基于PipeLine的 ...
最新文章
- 深度学习学习指南-工具篇
- 支持向量机(SVM)简介
- hdu3037 Lucas定理
- 上篇 | 说说无锁(Lock-Free)编程那些事
- Event 事件 - 基础
- 管理者的困境:放权或者崩溃
- TRACE32-ICD的在线帮助ICD教程摘要
- java计算机毕业设计高校学生综合素质测评系统MyBatis+系统+LW文档+源码+调试部署
- ES拼音中文智能提示suggest
- n++和++n的区别
- linux远程主机拒绝连接,linux – Telnet [无法连接到远程主机:拒绝连接]
- 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)
- matlab多个最大公约数,求任意多数的最大公约数及最小公倍数的matlab实现
- SDL_Image,d3d9与OpenGL Shader混用方法(一)
- C#内存释放(垃圾回收)
- linux镜像文件32,centos7光盘镜像下载32/64位
- xshell文件传输乱码_在Xshell中使用rz命令上传文件出现乱码且文件无法删除的解决办法...
- 计算机老是重启进不了桌面,电脑开机反复重启怎么回事 电脑开机后进不去桌面界面全黑...
- iOS 15升级卡在准备更新上?如何解决?
- android studio 官方虚拟机,Android Studio安装虚拟机步骤
热门文章
- [电影推荐]Contact(接触未来,又译超时空接触)
- java 线程等待10_面试被问10个Java等待、通知、同步问题,直接躺下
- tsconfig编译属性module详解
- java和matlab的交互实践--在java项目中调用matlab程序
- mysql ecos_ecos的dbschema
- java读写德卡数据_Spark Streaming 读取Kafka数据写入ES
- 研报精选230219
- 超囧超脑残的GALGAME问题(论坛防恶意注册问题)
- 用python模拟通讯录功能
- Linux TimeZone设置