版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器人操作系统(ROS)机器人操作系统(ROS)基于深度学习的标志物检测9.2机器人操作系统(ROS)9.2基于深度学习的标志物检测深度学习(deeplearning)是深度学习中表征学习方法的一类,其通过监督式或者半监督式的特征学习和分层特征提取高效算法来代替手工特征,可以让机器学习算法更加容易的进行学习。本章我们将学习如何进行数据集的制作和标注,以及模型的训练,并利用训练好的模型进行道路标志物的检测。机器人操作系统(ROS)9.2.1依赖库安装(1)pip3配置通过如下命令安装pip3:$sudoapt-getinstallpython3-pip如果此时显示Unabletofetchsomearchives,则运行如下命令后重新安装:$sudoapt-getupdate安装完成后,运行如下指令查看pip3版本,如果能显示出如下内容则安装成功:pip3版本
接下来运行如下命令更新pip3至最新版本:$sudopython3-mpipinstall--upgradepippip3升级至21.3.1版本机器人操作系统(ROS)9.2.1依赖库安装(2)labelimg配置labelimg是一个图形图像注释工具。图片标注主要是用来创建自己的数据集,方便进行深度学习训练,如目标追踪、图像分类等。运行如下命令进行labelimg的安装:$gitclone/mirrors/ruolingdeng/labelimg.git$cdlabelimg/$sudoapt-getinstallpyqt5-dev-tools$sudopip3--default-timeout=1000install-rrequirements/requirements-linux-python3.txt$makeqt5py3安装完成后,运行如下命令打开labelImg软件:$python3labelImg.py若出现报错:ImportError:Nomodulenamedlxml则运行如下命令安装相应的依赖:$sudoapt-getinstallpython3-lxmllabelImg界面机器人操作系统(ROS)9.2.1依赖库安装(3)OpenCV配置运行如下命令更新相关的依赖:$sudoapt-getinstallbuild-essentialcmakegitlibgtk2.0-devpkg-configlibavcodec-devlibavformat-devlibswscale-dev接着进入OpenCV网站寻找对应的OpenCV版本进行下载:/releases/。(根据11.4.1的方法来安装所需版本的OpenCV)(4)安装v4l2capture模块v4l2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。进入网址:/atareao/python3-v4l2capture,下载源码。解压后进入python3-v4l2capture文件夹,运行如下指令进行安装:$sudo./setup.pyinstall若终端显示如图所示的信息,则安装成功。安装成功机器人操作系统(ROS)9.2.2数据采集首先,将本书配套的源码解压到相应的文件夹。在/your_path/paddle/detect/目录下,可以看到里面包含5个python脚本,其中通过相机获取图像数据的脚本是Data_Coll.py,代码部分内容如下:#!/usr/bin/envpython#-*-coding:utf-8-*-importosimportv4l2captureimportselectfromctypesimport*importstruct,arrayfromfcntlimportioctlimportcv2importnumpyasnpimporttimefromsysimportargvimportmultiprocessingimporttimeimportgetoptpath=os.path.split(os.path.realpath(__file__))[0]save_name="img"……机器人操作系统(ROS)在终端输入如下命令运行图像采集脚本:$python3Date_coll.py运行成功后会出现如图所示的界面。界面中会显示当前采集的图像,以及采集的个数,此时移动车体或移动标志物来获取不同视角下包含有标志物的图像;当采集到合适数量图像后,单击按键‘q’结束采集;保存的图像将会放在/your_path/paddle/detect/data/img/rgb目录下,可以到该目录下查看已经生成的图像数据;将img文件夹名字改成标签名称(no_entry);进而采集下一个标志物。
也可以从本书配套资料中获取图像数据,如图所示。标志物图像文件图像采集9.2.2数据采集机器人操作系统(ROS)9.2.3数据标注获取图像信息后,需要对图像进行标注,并按照一定格式打包数据集。(1)使用labelimg软件实现图像标注首先,在终端输入如下命令运行labelimg软件:
$cdlabelimg/$python3labelImg.py操作步骤如图所示:1.单击“Open”图标,打开文件,选择图像目录~/paddlepaddle/detect/data/{标签名}/rgb;此时会显示目录下的图像;2.单击“OpenDir”图标,选择图像标签保存目录;3.在右侧“Usedefaultlabel”(使用预设标签)前面打勾并在后面输入标签名;4.单击“Create\nRectBox”(创建区块)按钮,拖动窗口,给当前显示图像打标签;5.单击“Save”保存当前标签文件;6.单击“NextImage”切换到下一张图片,循环执行4、5、6三步直至此文件夹标记完。标记完后,目录结构如下---data-------{标签1}-----rgb#放标签1的图片||------xml#放标签1的标签||-------{标签2}|…图像打标签步骤机器人操作系统(ROS)9.2.3数据标注(2)生成列表文件运行如下命令进入到/your_path/paddle/detect/文件夹,$cd~/paddle/detect/创建train_txt_xml.py文件,将如下代码填入其中,该脚本的作用是生成标签信息列表文件。$gedittrain_txt_xml.pytrain_txt_xml.py文件部分内容如下:fromxml.etree.ElementTreeimportElementTree,Elementimportxml.etree.ElementTreeasETimportcv2importnumpyasnpdefsave_train_txt(file_write,label,num):m=0whilem<=num:if(m%10!=0):tree=ET.parse('data/{0}/xml/{1}.xml'.format(str(label),str(m)))root=tree.getroot()#遍历文件所有的tag为目标的值得标签
foreleminroot.iter('xmin'):a=int(elem.text)foreleminroot.iter('ymin'):b=int(elem.text)……机器人操作系统(ROS)9.2.3数据标注运行如下命令将生成train.txt、eval.txt文件;$python3train_txt_xml.py在同目录下,运行如下命令打开label_list.txt和label_list文件;将我们刚标注完成的标签分别添加到文件中,最后保存并关闭两个文件。$geditlaxbel_list.txt$geditlabel_list修改后的label_list.txt和label_list文件如图所示。在此次实验中我们针对一个标志物进行检测,后续若进行多个标志物检测的话,可以按照如图所示的格式增加多个标签名。修改后的label_list.txt和label_list文件label.txt和label格式机器人操作系统(ROS)最终得到的数据集格式如下所示:---data-------{标签1}-----rgb#放标签1的图片||------xml#放标签1的标签|-------{标签2}|…|-------{标签*}|-------train.txt|-------eval.txt|-------label_list|-------label_list.txt9.2.3数据标注机器人操作系统(ROS)数据采集和标注完成后,我们将开始对数据进行模型训练。本节利用AIstudio线上平台(飞桨AIStudio-人工智能学习实训社区())线上资源对模型进行训练。飞桨AIStudio是面向AI学习者的人工智能学习与实训社区,社区集成了很多深度学习样例项目和各领域经典数据集,给广大开发者提供了更加完善自由的编程环境,帮助开发者更快捷简便的完成深度学习项目。在开始使用之前,我们要先注册自己的账号,用于后续的训练。9.2.4模型训练机器人操作系统(ROS)使用该平台训练步骤如下:1.首先需要构建AIstudio开源项目;2.上传数据集;3.然后关联数据集和项目;4.训练模型;5.下载训练好的模型。在本次实验中,我们使用名为“无人车教具,目标检测”的标志物识别开源项目,该项目地址为:/aistudio/projectdetail/298734,进入网址,首先单击右上角的登录按钮,登录个人账户后;单击右侧“fork”键,fork到自己的项目里。开源项目地址9.2.4模型训练机器人操作系统(ROS)回到AIstudio首页,单击标签栏“项目”,然后单击“我的项目”,就可以看到刚才创建的新项目。9.2.4模型训练我的项目在个人中心里,单击左侧标题栏的“数据集”;接着单击“创建数据集”。
我的项目创建数据集机器人操作系统(ROS)此时会弹出对话框,添加数据集名称,数据集简介等如图,接着单击“上传文件”,接着单击“下一步”在弹出对话框下面选择“创建”,该数据集创建完成,如图。创建数据集9.2.4模型训练机器人操作系统(ROS)编辑界面进入到我的项目中;单击“修改”
。使用默认的配置环境点击下一步,进入项目描述界面,删除已有的数据集项目描述9.2.4模型训练配置环境机器人操作系统(ROS)单击“添加数据集”选择已经创建的数据集。添加数据集最后单击“保存”“取消”,项目编辑完成。添加数据集项目编辑完成9.2.4模型训练机器人操作系统(ROS)接着单击“启动环境”。此时跳出选择运行环境,在对话框中选择使用GPU资源还是CPU资源;建议优先使用GPU资源,该项目默认代码是在GPU环境下运行的;最后单击“确定”。启动环境选择运行环境9.2.4模型训练机器人操作系统(ROS)当显示环境启动成功时,点击“进入”。9.2.4模型训练环境启动成功机器人操作系统(ROS)进入项目后,首先在左侧看一下data目录下包含的数据集;然后找到自己上传的数据集,将右侧相应位置进行修改。
修改代码
默认使用的是GPU资源,如果使用CPU资源,需要把参数改成use_gpu”:False。接着按执行键从第一个开始,逐一运行代码
。修改参数及运行代码9.2.4模型训练机器人操作系统(ROS)可以通过在“终端-1”中输入tailflogs/train.log命令查看当前log信息。训练完成后,终端输出“trainingtilllastepcho.endtraining”。训练完成“终端-1”界面9.2.4模型训练机器人操作系统(ROS)运行最后一部分代码,测试训练的模型是否能成功检测出标志物,若出现如图的界面,则说明模型是可用的。最后一部分代码模型测试9.2.4模型训练机器人操作系统(ROS)代码运行后在右侧会生成freeze_model文件夹;单击“下载按钮”将该压缩包下载到本地电脑上;选中“保存文件”并单击确定;此时保存到本地;通过单击“文件夹”图标可显示当前下载的freeze_model.zip文件。9.2.4模型训练下载模型文件保存模型文件完成模型下载机器人操作系统(ROS)右键压缩文件,单击“提取到此处”进行解压操作,如图。然后将~/下载/home/aistudio/目录下的freeze_model文件复制粘贴到/your_path/paddle/pd/目录下。9.2.4模型训练文件解压缩最后,在/your_path/paddle/pd/目录下,创建test.py脚本文件,用训练好的模型进行标志物检测实验,部分代码如下:frompaddle.fluid.initializerimportMSRAfrompaddle.fluid.param_attrimportParamAttrfrompaddle.fluid.regularizerimportL2DecayfromPILimportImage,ImageEnhance,ImageDrawpaddle.enable_static()#logger=Nonetrain_parameters={"data_dir":"data","train_list":"train.txt","eval_list":"eval.txt","class_dim":-1,"label_dict":{},"num_dict":{},"image_count":-1,……机器人操作系统(ROS)在终端输入如下指令运行该脚本:$python3test.py代码运行时,在/your_path/paddlepaddle/pd/下的result.jpg图像会持续更新,运行效果如图,禁止驶入(no_entry)标志物已被识别出来,并用红色方框标出。9.2.4模型训练实验结果机器人操作系统(ROS)9.2.5在ROS中使用训练好的模型为了使该深度学习的标志物检测能够在ROS下使用,以便与其他功能节点进行结合,需要对test.py文件进行修改,使之成为独立的节点。在工作空间的src目录下运行如下命令创建新的功能包DeepLearning,并添加所需的依赖:$catkin_create_pkgDeepLearningstd_msgsrospyroscpp将freeze_model和data两个文件夹复制到工作空间目录下。进入该功能包,运行如下命令建立文件夹scripts,并进入scripts文件夹:$roscdDeepLearning/$mkdirscripts$cdscripts将上一节中/your_path/paddle/pd/目录下的test.py文件拷贝到scripts目录下,
并在此基础上进行修改,修改后的test.py部分代码如下:file_list=os.path.join(train_parameters['data_dir'],train_parameters['train_list'])label_list=os.path.join(train_parameters['data_dir'],"label_list")#print(file_list)#print(label_list)index=0withcodecs.open(label_list,encoding='utf-8')asflist:lines=[line.strip()forlineinflist]forlineinlines:train_parameters['num_dict'][index]=line.strip()train_parameters['label_dict'][line.strip()]=indexindex+=1train_parameters['class_dim']=indexwithcodecs.open(file_list,encoding='utf-8')asflist:lines=[line.strip()forlineinflist]train_parameters['image_count']=len(lines)……代码主要添加了以下内容:在脚本文件顶部添加#!/usr/bin/envpython,将该脚本成为可以被python执行的可执行文件。在头文件中添加importrospy和fromstd_msgs.msgimportString。在主函数里添加rospy.init_node('test',anonymous=True),即在ros中初始化一个名为test的节点,以及pub=rospy.Publisher("test",String,queue_size=10),即发布一个名为test的话题。机器人操作系统(ROS)9.2.5在ROS中使用训练好的模型代码主要添加了以下内容:在脚本文件顶部添加#!/usr/bin/envpython,将该脚本成为可以被python执行的可执行文件。在头文件中添加importrospy和fromstd_msgs.msgimportString。在主函数里添加rospy.init_node('test',anonymous=True),即在ros中初始化一个名为test的节点,以及pub=rospy.Publisher("test",String,queue_size=10),即发布一个名为test的话题。修改CMakeLists.txt文件如下:cmake_minimum_required(VERSION2.8.3)project(DeepLearning)##Findcatkinmacrosandlibraries##ifCOMPONENTSlistlikefind_package(catkinREQUIREDCOMPONENTSxyz)##isused,alsofindothercatkinpackagesset(OpenCV_DIR/usr/share/OpenCV)find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgs)catkin_package()install(PROGRAMSscripts/test.pyDESTINATION${CATKIN_PACKAGE_BIN_DESTINATION})机器人操作系统(ROS)9.2.5在ROS中使用训练好的模型回到工作空间目录下,进行功能包的编译:$catkin_make编译完成后,开启节点管理器:$roscore在终端输入如下命令设置环境变量并开启节点:$sourcecatktin/devel/setup.bash$rosrunrosrunDeepLearningtest.py这里要注意切换python的版本,因为ros默认在python2的环境中运行,因此开启roscore时的python环境是python2,而test.py脚本需要的环境是python3,因此,在运行test节点时,需要将python版本切换为3。执行如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台理工学院《程序设计基础》2021-2022学年第一学期期末试卷
- 许昌学院《虚拟现实技术实验》2022-2023学年第一学期期末试卷
- 财务年度预算方案计划
- 徐州工程学院《植物压花实践艺术》2021-2022学年第一学期期末试卷
- 徐州工程学院《文案设计》2022-2023学年第一学期期末试卷
- 排水管道施工质量保证措施
- 班级文学创作与交流活动计划
- 落实仓库消防安全管理的工作方案计划
- 闽教版三年级上册英语单词
- 绩效管理体系的持续改进计划
- 密闭式静脉输液口述词(四篇)
- 口干问卷调查表
- 农药安全科学使用技术
- 低压电工实用技术-常用电工工具的使用
- 哈尔滨工业大学高等数学期末考试试题和答案
- 钢筋笼吊装作业安全监理细则
- 翁敏-孕期营养与膳食指导
- 人教版鄂教版六年级科学上册知识要点
- 实验报告 配合物的生成、性质和应用
- 雅思阅读必看完整课件
- 钢丝绳在卷筒上旋向的判断
评论
0/150
提交评论