基于MindSpore框架的道路场景语义分割方法研究

news2024/11/19 1:54:06

概述

本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标,对上述难处进行探究并提出相应方案,成功地在Cityscapes数据集上完成了语义分割任务。
整体的技术方案见图:

本帖仅对代码上的更改以及项目进行介绍。

项目地址

https://gitee.com/xujinminghahaha/mindspore_model

相关配置

硬件配置

操作系统Ubuntu 18.04硬件架构X86_64
CPUIntel® Xeon® Gold 6154 CPU @ 3.00GHzGPUNVIDIA-A100(40G)
深度学习框架Mindspore 1.6.0Batch_sizes7

Cityscapes数据集:

Cityscapes数据集提供了3475张细粒度分割标签图,以及20 000张粗略分割的图像,本文使用了细粒度标注的train/val集进行训练和验证,此数据集与之前的CamVid,Leuven,Daimler 城市数据集不同,Cityscapes更多的捕捉到了真实世界的城市道路场景的多样性与复杂性,尤其是为城市环境中的自动驾驶量身定制,涉及范围更广的高度复杂的市中心街道场景,并且这些场景分别在50个不同城市采集。

数据集下载地址:https://www.cityscapes-dataset.com/

实现流程记录

1、 参考华为官方gitee仓库的modelzoo克隆至本地,找到research/cv/PSPNet目录,在此代码基础上进行修改。

本项目基于GPU平台,对modelzoo中原有的昇腾文件已清除。代码中shell_command提供了训练脚本和验证脚本的启动命令,同时附带linux服务器一键下载Cityscapes下载方式。

2、由于选题是道路场景,所以需要更改数据集为Cityscapes,由于modelzoo上的数据集仅支持VOC2012和ADE20K,所以需要增加对数据集的适配和标签信息转换。
在代码中已经添加了对于cityscapes的像素点和label的转换代码,可以直接使用,其中颜色和类别的映射关系请见:config/cityscapes_colors.txt以及config/cityscapes_names.txt

3、网络架构选用可插拔的残差网络,以及金字塔池化模块解码。相关代码实现在src/model目录下。
ResNet论文地址:https://arxiv.org/abs/1512.03385
PSPNet论文地址:https://arxiv.org/abs/1612.01105
网络结构图:

金字塔池化模块:

loss函数的设计:


实际训练时的loss值变化趋势:

特色功能

4、测试时增强(TTA, Test Time Augmentation),通过多尺度推理最后取平均的方法获得更好的效果:
以下给出方法伪码,供大家参考,具体实现请结合代码仓库查阅。

# Algorithm 1: TTA(Test Time Augmentation)
# Input:Image,Scales,Crop_size,Net
# OutPut:Image with Label

batch, _,ori_height, ori_width = image.shape #获取图像shape
stride_h ,stride_w = crop_size #步长,cropsize为训练时设置的crop参数
final_pred = Tensor(np.zeros([1, dataset.num_classes, ori_height, ori_width])) #初始化结果
for scales: 
  image = dataset.multi_scale_aug(image,scale)
  height, width = image.shape[:-1]
  new_h, new_w = image.shape[:-1]
  rows, cols = GetParam(new_h, new_w) #一张图片分为row行和col列分块推理
  preds = np.zeros([1, dataset.num_classes, new_h, new_w]).astype(np.float32)#初始化
  count = np.zeros([1, 1, new_h, new_w]).astype(np.float32)#记录像素点推理次数
  for rows,cols:
    h0 , w0, h1, w1 = GetIndex(rows,cols,stride_h,strid_w) #获得格点坐标
    crop_img = new_img[h0:h1, w0:w1, :]
    crop_img = crop_img.transpose((2, 0, 1))
    crop_img = np.expand_dims(crop_img, axis=0)
    pred = dataset.inference(model, crop_img, flip)
    preds[:, :, h0:h1, w0:w1] += pred.asnumpy()[:, :, 0:h1 - h0, 0:w1 - w0]
    count[:, :, h0:h1, w0:w1] += 1   #将推理矩阵相加,再把标记矩阵相加
  preds = preds / count	#求得平均推理像素值
  preds = preds[:, :, :height, :width] 	
  preds = P.ResizeBilinear((ori_height, ori_width))(preds)	#恢复原始大小
  final_pred = P.Add()(final_pred, preds)	
return final_pred

在config/pspnet_resnet_cityscapes_gpu.yaml下scales那一行,可以输入一个数组,该数组中每一个Value对应一个Scale,inference将会在此scale下输出一次。
5、 结果展示:

roadtraffic lightriderbicyclesidewalktraffic signcarpole
97.81%63.08%56.61%74.33%83.69%69.24%92.79%45.66%
buildingvegetationtruckpersonfenceskytrainmIoU
90.71%90.43%71.73%75.35%55.50%92.89%43.63%74.874%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+ts做echarts做一个简单的折线渐变图

vue3做echarts做一个简单的折线渐变图 效果 代码&#xff1a; </template> <div><div class"date-change"><el-date-picker size"small" v-model"dateValue" value-format"YYYY-MM-DD" type"daterange&qu…

Leetcode 72. 编辑距离

最近在写dp问题的时候&#xff0c;写到这个经典题&#xff0c;对于里面三个转换方程没太懂&#xff0c;偶然在评论区找到一个非常非常清楚的解释&#xff0c;顺便就把这道题记录一下&#xff0c;加上自己的理解&#xff0c;方便日后查看! 对于这一类的dp习惯性的都初始化dp的大…

好用的数据恢复软件EasyRecovery2023最新版

实用的数据恢复软件有什么&#xff1f;电脑中的数据文件对很多的小伙伴来说都是非常重要的&#xff0c;在下载安装新的软件设备时都需要非常谨慎&#xff0c;一旦碰到一些病毒就可能会导致文件丢失&#xff0c;想要恢复这些文件并不是很容易&#xff0c;需要使用专业的数据恢复…

proxy

let obj new Proxy({},{get: function(target,propKey,receiver) {console.log(获取的时候会被拦截)console.log(target,propKey,receiver)return Reflect.get(target,propKey,receiver)},set: function(target,propKey,value,receiver) {console.log(设置时被拦截);console.l…

Java开发:JVM篇-类加载内存分析

一、类加载器 A、类加载器的作用 将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据结构转换成方法区的运行时数据结构&#xff0c;然后在堆中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区中类数据的访问入口。 B、类缓存 标准的JavaSE类…

收到公安部门的致谢信,顶象业务安全“反诈”再接再厉

12月1日&#xff0c;《反电信网络诈骗法》正式施行&#xff0c;为反电信网络诈骗工作提供有力法律支撑。自2021年以来&#xff0c;顶象业务安全情报通过多渠道的风险数据以及多维度深度挖掘与分析&#xff0c;助力对电信诈骗分子的精准防控&#xff0c;已为多个监管机构的反电信…

小程序开发--- 03组件

小程序中组件的分类主要有以下9类&#xff1a; 常用的视图容器类是组件有&#xff1a; 1.view : 这是普通的视图区域&#xff0c;类似于HTML中的div&#xff0c;是一个块级元素&#xff0c;常用来实现页面的布局效果 2. scroll-view: 是一个可以上下或者左右滚动的区域&#x…

数据结构—set集合

文章目录一、HashSet集合1.HashSet集合的特点2.HashSet常用方法二、LinkedHashSet集合LinkedHashSet集合的特点三、TreeSet集合1.TreeSet集合的特点2.TreeSet的基本使用四、HashSet、LinkedHashSet、TreeSet的使用场景HashSet:LinkedHashSet&#xff1a;TreeSet:五、list和set集…

flutter 自定义加载中间页 loading 菊花组件的封装

flutter 自定义加载中间页前言LoadingStateWidget 封装思路总结前言 在日常移动开发中&#xff0c;很多时候需要我们添加一个加载中间页&#xff0c;即加载中&#xff0c;加载失败&#xff0c;加载重试&#xff0c;加载完成等功能&#xff0c;这样可以避免在无网或者弱网情况下…

《痞子衡嵌入式半月刊》 第 64 期

痞子衡嵌入式半月刊&#xff1a; 第 64 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

【GD32F427开发板试用】IAR 环境移植freertos

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;andeyqi freertos移植适配 社区之前已经有同学移植适配freertos&#xff0c;在GD32F427上跑了起来&#xff0c;之前的帖子是在MDK环境下适配的…

FITC-PEG-FA,Folic acid-PEG-Fluorescein,叶酸PEG荧光素

●外观以及性质&#xff1a; FITC-PEG-FA是一种绿色荧光叶酸-PEG衍生物&#xff0c;其激发/发射波长为~490 nm/~520 nm。荧光素标记的PEG叶酸是一种线性分子&#xff0c;叶酸连接到PEG链的一端&#xff0c;荧光素染料连接到另一个PEG端。叶酸也被称为维生素M、维生素B9或叶酸。…

什么?Coolbpf 不仅可以远程编译,还可以发现网络抖动!

近日&#xff0c;在 2022 云栖大会龙蜥峰会 eBPF & Linux 稳定性专场上&#xff0c;来自 eBPF 技术探索 SIG Maintainer 的毛文安分享了《Coolbpf 的应用实践》技术演讲&#xff0c;以下为本次演讲内容&#xff1a; 一、为什么要支持可移植&#xff1f; 随着 BPF 技术的发…

EL表达式 过滤器 监听器

这里写目录标题1 EL 表达式1.1 EL 表达式介绍1.2 EL 表达式快速入门1.3 EL 表达式获取数据1.4 EL 表达式注意事项1.5 EL表达式运算符1.6 EL 表达式使用细节1.7 EL 表达式隐式对象2 JSTL2.1 JSTL 介绍2.2 JSTL 核心标签库2.3 JSTL基本使用3 Filter3.1 过滤器介绍3.2 Filter 介绍…

很全很详细的GUI编程

为什么要学习&#xff1f; 写出自己想要的小工具。工作可能需要维护到swing界面。了解MVC架构&#xff0c;了解监听。 组件&#xff1a;窗口、弹窗、面板、文本框、列表框、按钮、图片、监听事件、鼠标、键盘事件、破解工具。 一、简介 GUI的核心技术&#xff1a;Swing AWT 因…

[附源码]计算机毕业设计基于springboot和vue的茶文化交流平台的设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

路由规则——MVC控制器

MVC的路由规则配置方式比较多,咱们用得最多的是两种: A、全局规则。就是我们熟悉的”{controller}/{action}“。 app.MapControllerRoute(name: "bug",pattern: "{controller}/{action}"); app.MapControllerRoute(name: "八阿哥",pattern: &…

定积分的概念及可积条件

微积分是高等数学的核心&#xff0c;包含微分和积分。前面几篇我们介绍了微分及其逆运算——不定积分&#xff08;严格来说&#xff0c;不定积分属于微分模块&#xff09;。传送门&#xff1a;微分与导数 不定积分今天开始&#xff0c;我们进入积分模块。还是老样子&#xff0…

怎么关闭Windows安全启动?

什么是安全启动&#xff1f; 安全启动&#xff08;英文名为Secure Boot&#xff09;&#xff0c;是装有UEFI固件的较新PC上的一项重要安全功能&#xff0c;它可以保护计算机的启动过程&#xff0c;防止在启动过程中加载未签名的UEFI驱动程序和引导加载程序&#xff0c;以及阻止…

软件测试经典面试题:如何进行支付功能的测试?

非现金支付时代&#xff0c;非现金支付已经成为了生活不可或缺的一部分&#xff0c;我们只需要一台手机便可走遍全国各地&#xff08;前提是支付宝&#xff0c;微信有钱<00>&#xff09;,那么作为测试人员&#xff0c;支付测试也是非常重要的一环&#xff0c;那么下面我就…