人工基础智能训练 2_第1页
人工基础智能训练 2_第2页
人工基础智能训练 2_第3页
人工基础智能训练 2_第4页
人工基础智能训练 2_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章

人工智能训练实践案例学习目标素养目标1.培养良好的学习态度和学习习惯2.培养良好的人际沟通和团队协作能力3.培养正确的科学精神和创新意识知识目标—掌握人工智能模型训练方法是人工智能运用的一个重要问题,目前该训练方法在计算机视觉、机器视觉、自然语言处理等领域广泛运用,其本质就是让模型学习提取数据中潜在的规律,以便后续对新的数据进行预测。技能目标1.理解人工智能模型训练过程2.理解模型训练过程评估与测试方法3.掌握基础训练环境搭建4.掌握模型训练数据集制作5.掌握选择合适的模型进行训练与部署第七章

人工智能训练实践案例05人工智能训练成果应用人工智能训练模型选择与构建人工智能训练项目规划与准备人工智能训练过程评估与优化实训案例

020304017.1人工智能训练项目规划与准备7.1.1查看系统环境

7.1.2下载Darknet软件包

7.1.3Darknet架构介绍7.1人工智能训练项目规划与准备任务描述在人工智能的应用过程中,模型训练贯穿始终。首先,通过摄像头,网络爬虫等技术收集数据集。然后,结合用户需求对数据集进行数据标注。最后,将处理好的数据集送入模型进行模型训练与分析,为后续对新采集的任务进行测试与分析提供参考依据。任务分析假设你现在拥有一台人工智能训练平台,该平台是一款集成英伟达高性能GPU计算处理单元、支持PyTorch、TensorFlow等人工智能框架模型的部署及应用,以及支持二次创新开发,那么我们将如何使用呢?任务准备7.1.1查看系统环境7.1.2下载Darknet软件包7.1.3Darknet架构介绍7.1.1查看系统环境为了满足任务的需求,需要检测Ubuntu下是否安装了cuda显卡,通过以下指令查看显卡情况。

nvcc--version:这个命令会显示CUDA编译器(nvcc)的版本信息,其中会包含CUDA的版本号。nvidia-smi:这个命令会显示NVIDIA驱动和CUDA的版本信息。在输出的顶部,你可以看到CUDA版

本。cat/usr/local/cuda/version.txt:查看CUDA安装目录下的版本文件。ABC7.1.2下载Darknet软件包本文采用darknet框架进行模型训练,所以需要提前下载好任务所需的安装包,以下是在Ubuntu下载darknet软件包的方法。gitclone/pjreddie/darknet.git,通过git进行安装。通过/pjreddie/darknet,打开Code选项,选择DownloadZIP进行下载,如下图7-1所示。图7-1darknet安装包7.1.3Darknet架构介绍1.Darknet介绍Darknet是一个开源的深度学习框架,由JosephRedmon(YOLO-YOLOv3作者或参与者)开发,主要用于实现神经网络模型。这个框架最初是为了实现计算机视觉任务而创建的,尤其是目标检测。其中最著名的应用之一就是YOLO(YouOnlyLookOnce)系列目标检测算法。7.1.3Darknet架构介绍①以下是Darknet的一些特点和重要信息:轻量级:Darknet是一个相对轻量级的框架,由C语言编写,运行速度快,并且不需要依赖其他的深度学习库。灵活性:Darknet具有良好的灵活性,可以用于构建各种类型的神经网络模型,包括卷积神经网络(CNN)、循环神经网络(RNN)等。YOLO算法:

最初的YOLO目标检测算法是在Darknet框架上实现的。YOLO系列算法以其快速、准确的特点而闻名,适用于实时目标检测任务。支持多种数据类型:Darknet支持处理图像、视频、

声音等不同类型的数据,使其可以应用于多种领域。开源:Darknet是一个开源项目,其代码可以在

GitHub上找到,并且可以自由使用和修改。7.1.3Darknet架构介绍②

Darknet项目主要目录及主要文件介绍。在github中下载好后,主要文件及主要文件夹介绍如下:cfg文件夹:里面有很多模型的架构文件,包括下面要用到的yolov3-timy.cfg文件;data文件夹:存放了一些示例图片;include文件夹:存放了头文件,darknet.h是Darknet框架的主要头文件,这个头文件中定义了Darknet框架的主要函数和类,如创建神经网络、加载模型、进行目标检测等。开发者通常需要包含这个头文件来使用Darknet框架提供的功能;7.1.3Darknet架构介绍②

Darknet项目主要目录及主要文件介绍。cmake文件夹:存放构建系统相关的文件;build文件夹:通常用于存放编译过程中生成的中间文件、编译结果以及其他与构建过程相关的文件;scripts文件夹:通常用于存放一些脚本文件,这些脚本文件可能包含了一些辅助性的任务或者工具,用于项目的构建、测试、部署或者其他相关操作。如将VOC格式数据转换为yolo训练的格式脚本;src文件夹:src

文件夹通常是用于存放源代码文件的目录。这些源代码文件包含了Darknet框架的实现代码,其中定义了各种函数、类、结构体等,用于实现Darknet框架提供的功能和特性;Makefile文件:Makefile

主要负责编译Darknet框架的源代码,生成可执行文件。它定义了Darknet框架的编译规则和依赖关系,以及编译参数和选项;7.1.3Darknet架构介绍②

Darknet项目主要目录及主要文件介绍。darknet.py文件:Darknet框架的主要Python接口脚本,其中包含了与DarknetC代码进行交互的函数和类。这些函数和类允许在Python中加载Darknet模型、进行目标检测、处理图像和视频等操作;darknet_images.py文件:用于在Python中进行图像目标检测的示例脚本。它使用了darknet.py中定义的函数和类,加载Darknet模型,并对输入的图像进行目标检测。这个脚本可以用于批量处理图像文件。darknet_video.py文件:用于在Python中进行视频目标检测的示例脚本。它使用了darknet.py中定义的函数和类,加载Darknet模型,并对输入的视频进行逐帧目标检测。这个脚本可以用于实时目标检测或者批量处理视频文件。7.1.3Darknet架构介绍本任务通过分步骤讲解人工智能算法模型环境搭建,帮助大家理解算法模型环境的操作过程。实验最终结果如下图7-2所示。图7-2darknet测试结果7.1.3Darknet架构介绍(1)进入darknet-master文件夹下,如下图7-3所示。图7-3darknet-master文件内容7.1.3Darknet架构介绍(2)darknet-master文件夹存储了darknet框架的源码,可以直接通过对源码进行编译进行目标检测等操作。在终端(Terminal)中新建窗口,使用cd进入到darknet-master目录下,输入make进行编译即可。(3)在编译之前需要配置makefile文件,根据实际环境对makefile文件进行配置。makefile文件的部分参数如下图7-4所示。当要使用GPU来进行训练时,需要将CPU和CUDA设置为1,当需要实时显示图片和视频流时,则将OPENCV设置为1(在平台中已经将源码编译成功,因此步骤2、3可无需操作)。图7-4makefile配置文件7.1.3Darknet架构介绍(4)编译完成后可以进行测试来判断源码编译是否成功。在darknet-master文件夹中即终端(Terminal)中新建窗口,输入下面指令进行编码测试,运行结果如上图7-2所示。./darknetdetectcfg/yolov3-tiny.cfgyolov3-tiny.weightsdata/dog.jpg图7-2darknet测试结果7.2人工智能训练模型选择与构建7.2.1数据采集

7.2.2YOLO数据标签格式

7.2.3数据预处理7.2人工智能训练模型选择与构建任务描述在一个繁忙的城市街区,自动驾驶汽车“小智”开始了它的训练之旅。这个街区有各种复杂的交通标志,是训练自动驾驶模型的绝佳场景。训练的第一天,小智遇到了一个红绿灯路口。绿灯亮起时,它平稳地加速通过;黄灯闪烁时,它提前减速,停在了停止线前;红灯时,它稳稳地停下,耐心等待。旁边的车辆纷纷为它的“守规矩”点赞。接下来,小智来到了一个需要右转的路口。它提前打开右转向灯,减速观察右侧交通情况,确认安全后,平稳地完成了右转。不久后,它又遇到了一个限速标志,显示限速40公里/小时。小智立刻调整车速,保持在规定范围内,确保行驶安全。经过一天的训练,小智的表现越来越出色。它学会了识别各种交通标志,遵守交通规则,安全驾驶。随着训练的深入,它将变得更加智能,为未来的自动驾驶出行做好准备。任务分析自动驾驶汽车“小智”在繁忙城市街区进行训练,目标是识别交通标志并遵守规则。为了实现该目标,研发人员则需要收集相关的交通标志数据集,并选择合适的模型进行训练,最终达到自动驾驶的要求。任务准备7.2.1数据采集7.2.2YOLO数据标签格式7.2.3数据预处理7.2.1数据采集数据采集是指通过各种手段和工具从不同来源获取数据的过程。这些数据可以来自多个渠道,例如传感

器、数据库、网页、社交媒体、问卷调查、实验设备等。数据采集的目的是为了获取相关信息,以便后续的分析、处理和应用。在数据科学和人工智能领域,数据采集是一个非常关键的步骤,因为模型的训练和预测效果往往依赖于

所收集数据的质量和数量。7.2.1数据采集数据采集通常包括以下几个步骤:(1)

确定数据需求:明确要解决的问题以及需要收集什么样的数据。(2)

选择数据来源:根据需求,选择合适的数据来源或数据提供者。(3)

获取数据:通过适当的方法获取数据,这可以包括自动化的收集过程(如通过API获取)或手动输入数据。(4)

预处理数据:对收集到的数据进行初步处理,例如清洗、格式化和去噪等,以确保数据的质量和一致性。(5)

存储数据:将处理后的数据保存到适当的存储系统中,以便后续分析使用。7.2.1数据采集本文将采用智能小车进行图像采集,具体操作步骤如下:(1)准备好拍摄角度,拍摄物品,角度应至少包括前、后、左、右,四个以上的角度去采集物品。(2)进入智能小车在/xiaojing_robot文件夹中,然后使用右键进入选择打开终端界面。(3)终端中输入命令pythondata_collection.py,确认回车,此时该程序将自动采集摄像头前方的物品图片,如图7-5所示。图7-5采集智能小车前置摄像头图片7.2.1数据采集(4)移动物品,对每个物品四个以上角度采集照片,合计至少应拍摄50张以上照片。(5)完成拍摄后,使用ctrl+c退出程序,结束拍摄。(6)在主文件夹中新建文件夹images和labels,如图7-6所示。图7-6摄像头采集后生成的图片文件夹7.2.1数据采集通过摄像头采集图像和视频,并将它们存储在本地。代码处理了摄像头的打开、图像和视频的采集与保存,并处理了异常情况,确保了代码的鲁棒性,小车图像采集代码如下

。7.2.1数据采集7.2.1数据采集7.2.2YOLO数据标签格式YOLO的TXT格式是最简单的数据集格式之一。它要求图片和标签分别存放在两个文件夹中,并按照一定的比例分为训练集和验证集。每个TXT文件包含目标的类别和边界框的坐标,格式如下:从左到右依次为,类别id、x_center、y_center、width、height,如图7-7所示。其中:类别id代表标注目标的类别;x_center和y_center代表标注框的相对中心坐标;width和height代表标注框的相对宽和高。请注意,这里的中心点坐标、宽和高都是相对数据!图7-7YOLO模式标签样式7.2.2YOLO数据标签格式存放标签类别的文件的文件名为classes.txt(固定不变),用于存放创建的标签类别,如图7-8所示。图7-8标签序号7.2.2YOLO数据标签格式但是不同的标注软件保存的结果可能不太一样,如下两种存储标签信息,分别是.json文件与.xml文件,具体如下:①

JSON文件存储方法在生成JSON文件中,每个目标都表示为一个对象,其中包含以下属性,如下图7-9所示:image:图像文件的名称。annotation:一个包含所有目标的数组,每个目标都表示为一个对象。包括label:目标的类别名称,例如"汽车"、"人"、"自行车"等。x和y:目标的左上角坐标,表示其在图像中的位置。width和height:目标的宽度和高度,表示其在图像中的大小。图7-9JSON模式标签样式7.2.2YOLO数据标签格式②

XML文件存储方法每个XML文件对应一个图像文件,文件中包含了对图像的解释。具体来说,XML文件里标记了物体框的坐标和类别等信息。对于用户自定义数据,可根据实际情况对这些字段进行标注。如下图7-10所示,在XML文件中,关键信息包括:folder:图像所在文件夹名filename:图像文件的名称path:图像所在路径size:图像的尺寸,包括宽度、高度和通道数object:标注框的信息,包括:name:物体框对应的类别名称bndbox:物体框的信息,包括左上角和右下角的坐标。xmin:图像左上角x坐标ymin:图像左上角y坐标xmax:图像右下角x坐标ymax:图像右下角y坐标此外,XML文件中还可能包含其他相关信息,例如物体框的遮挡情况(pose)、是否被截断(truncated)、是否是难检测(difficult)物体等。这些信息用于辅助标注和评估目标检测任务的性能。图7-10XML标签样式7.2.3数据预处理1.数据处理步骤(1)本文按照PASCALVOC数据集格式进行存储数据即XML数据格式,现需要将次格式制作VOC格式数据集,首先需要cd到darknet-master/scripts文件夹下,如下图7-11所示为VOC文件格式。图7-11PASCALVOC数据集7.2.3数据预处理JPEGImages文件夹下存储了所有的原始文件如下图7-12所示。Annotations文件夹存储原始文件对应的标签文件如下图7-13所示。图7-12JPEGImages文件夹图7-13Annotations文件夹7.2.3数据预处理(2)接着对原始数据集进行划分并生成对应的trainval.txt、train.txt、val.txt、test.txt文件,在VOCdevkit中存放了split_dataset.py文件,用于将数据切分为训练集和测试集。代码如下:importosimportrandomtrainval_percent=0.9val_percent=0.1xmlfilepath='Annotations'txtsavepath='ImageSets/Main'total_xml=os.listdir(xmlfilepath)num=len(total_xml)list=range(num)tv=int(num*trainval_percent)tr=int(tv*val_percent)trainval=random.sample(list,tv)val=random.sample(trainval,tr)fval=open('ImageSets/Main/val.txt','w')ftest=open('ImageSets/Main/test.txt','w')ftrain=open('ImageSets/Main/train.txt','w')ftrainval=open('ImageSets/Main/trainval.txt','w')foriinlist:name=total_xml[i][:-4]+'\n'ifiintrainval:ftrainval.write(name)ifiinval:fval.write(name)

else:ftrain.write(name)

else:ftest.write(name)7.2.3数据预处理执行python3split_dataset.py命令运行后,将在ImageSets/Main文件夹下生成所需的训练集、测试集txt文件,如下图7-14所示。图7-14生成目标数据集7.2.3数据预处理(3)最后需要进行格式转换。VOC格式数据集标签还不能直接用于YOLO训练,需要转换成YOLO标签格式。在darknet/scripts文件夹下有voc_label.py文件,用于将VOC格式标签转换为YOLO格式,代码如下所示。

7.2.3数据预处理7.2.3数据预处理7.2.3数据预处理如上诉代码需要修改的地方为classes=["stop","lim50","lim20","turnleft","lim10"],即替换为自己数据标注的数据类别标签,最后在执行以下代码。python3voc_label.py运行好以后,会在VOC2007文件下生成存放YOLO格式标签的labels文件夹,并且在scripts文件夹下生成2007_train.txt和2007_val.txt,后续训练时需要引用这两个文件调出数据集,如图7-15所示。图7-15voc_label.py运行结果7.2.3数据预处理2.数据处理任务演练(1)训练自己的数据集前,需要修改一些配置文件,以交通标志训练为例。新data/s文件。可以复制原有的data/s内容再根据自己数据标注的标签进行修改,可以重新命名,如data/s。内容是所有的类别名称,其中名称顺序需要和上一节格式转换时保持一致,如下图7-16所示。图7-16定义标签类名stoplim50lim20turnleftlim10修改为7.2.3数据预处理(2)新建cfg/voc.data文件。可以复制原有的cfg/voc.data内容再根据自己情况修改,可以重新命名,如cfg/voc-dp.data。如下图7-17所示,各参数解释如下:classes:类别总数,根据自己实际情况标签进行修改。train:训练集路径,是上一节格式转换内容中生成的2007_train.txt文件路径,视情况修改。可以在文件同路径下,新建一个jupyter文件,运行!pwd命令,查看当前绝对路径。valid:测试集路径,是上一节格式转换内容中生成的2007_val.txt文件路径,视情况修改。可以在文件同路径下,新建一个jupyter文件,运行!pwd命令,查看当前绝对路径。names:第1点新建的.names文件路径,可以写相对路径,data/s。backup:训练时的权重文件保存路径,一般直接填backup即可。图7-17训练配置文件说明7.2.3数据预处理(3)接下来以yolov3_tiny.cfg为模板修改相关参数,如图7-18所示。一般需要视情况修改的参数说明如下:训练时,把“Testing”下面的batch和subdivisions注释,把“Training”下面的batch和subdivisions取消注释;而后续测试时则相反。训练时建议batch=64,subdivisions=16;如果GPU显存大subdivisions可以填8,显存小时可以填32。width和height可以填416,或者608等,需要是32的倍数。max_batches是最大训练次数,可以设置为classes*2000,例如一共5类别就设置10000,初次训练后可以再视情况调整。steps改为max_batches的80%and90%。图7-18yolo网络配置文件7.2.3数据预处理(4)另外.cfg文件里还有[yolo]层和前一层[convolutional]卷积层需要修改如下图7-19所示,如果是yolov3.cfg模板则有三层yolo层,而yolov3-tiny.cfg模板则有两层。[yolo]层中classes视情况修改类别数,每一个[yolo]层前的[convolutional]层中的filters=(类别数+5)*3,如classes=5,filters=(5+5)*3=30。(5)最后,下载预训练权重文件,模型会根据网络配置下载对应的模型参数,并将预训练权重模型参数存放在darknet-master目录下。完成以上步骤后,即可在darknet-master目录下打开终端,运行命令进行训练:./darknetdetectortraincfg/voc-dp.datacfg/yolov3-tiny.cfgdarknet53.conv.74>log.txt-map图7-19yolo卷积层配置文件7.3人工智能训练过程评估与优化7.3.1常见的YOLO评估指标

7.3.2网络结构相关超参数

7.3.3模型训练结果分析7.3人工智能训练过程评估与优化任务描述训练开始后,小智遇到了红绿灯。它准确识别出绿灯,平稳加速;遇到红灯,它提前减速,稳稳停下。接下来是限速标志,小智迅速调整车速,保持在规定范围内。当遇到左转标志时,它提前打开转向灯,观察路况后顺利转弯。最终,小智成功抵达终点,完成了今天的训练任务。任务分析小智完成模型训练后,就开始道路测试模拟,最终完成训练任务。那我们又是如何判断模型训练效果好坏,通过哪些指标进行分析呢?但指标不满足又该如何通过调整模型参数提高模型性能。任务准备7.3.1常见的YOLO评估指标7.3.2网络结构相关超参数7.3.3模型训练结果分析7.3.1常见的YOLO评估指标DarknetYOLO的评估指标主要包括以下几个方面:①平均精度(mAP)mAP

是衡量目标检测模型性能的核心指标之一,表示模型在多个类别上的平均精度。它通过计算每个类别的平均精度(AP)再取平均值来综合评估模型的检测准确性和召回率。mAP@0.5:当交并比(IoU)阈值为0.5时的平均精度。mAP@0.5:0.95:在IoU阈值从0.5到0.95的范围内计算平均精度,更能全面评估模型性能。②精确率(Precision)和召回率(Recall)在机器学习中,通常使用混淆矩阵来计算TP和FP。混淆矩阵是一个表格,用于展示实际类别与预测类别之间的关系。混淆矩阵中的行代表实际类别,列代表预测类别。对于二分类问题,混淆矩阵如下表7-1:预测正类预测负类实际正类TPFN实际负类FPTN表7-1混淆矩阵其中:TP‌:真正例,实际为正类且预测为正类的样本数。FP‌:假正例,实际为负类但预测为正类的样本数。TN‌:真负例,实际为负类且预测为负类的样本数。‌FN‌:假负例,实际为正类但预测为负类的样本数7.3.1常见的YOLO评估指标根据上述混淆矩阵,分别可以求出模型的精确率以及召回率,具体如下:‌(1)

精确率(Precision):表示模型预测为正样本的正确比例,即真正例(TP)与预测为正的样本总数(TP+FP)之比。(2)

召回率(Recall):表示模型能够检测到的正样本比例,即真正例(TP)与实际正样本总数(TP+FN)之比。①

F1分数F1分数是精确率和召回率的调和平均值,用于综合评估模型性能,尤其在处理不平衡数据集时非常重要。②交并比(IoU)IoU是预测边界框与真实边界框重叠程度的量化指标,用于评估目标定位的准确性。高IoU值表示预测框与真实框的重合度高。7.3.1常见的YOLO评估指标③每秒帧数(FPS)FPS表示模型在单位时间内处理的图像数量,是衡量模型实时性的重要指标。对于需要实时处理的应用(如自动驾驶或监控),FPS越高,模型的实用性越强。④混淆矩阵(ConfusionMatrix)混淆矩阵用于直观展示分类结果,记录每个类别的真正例(TP)、假正例(FP)、真负例(TN)和假负例(FN)的数量。⑤

PR曲线(Precision-RecallCurve)PR曲线展示了精确率随召回率变化的趋势,用于评估模型在不同置信度阈值下的性能。⑥损失函数在训练过程中,DarknetYOLO的损失函数通常由边界框中心点坐标损失(`loss_xy`)、边界框宽高损失(`loss_wh`)、置信度损失(`loss_conf`)和类别预测损失(`loss_class`)组成。这些指标综合反映了DarknetYOLO模型在目标检测任务中的准确性、召回率、实时性和边界框质量等性能表现。7.3.2网络结构相关超参数①锚框(Anchors)

作用:预设的边界框尺寸,用于辅助检测不同尺度的目标。

调整方法:

使用k-means聚类分析数据集中的目标尺寸,生成适配的锚框。

修改`.cfg`文件中各`yolo`层的`anchors`参数。

小目标多的场景需减小锚框尺寸,并增加浅层特征图的预测分支。为了能够更好的训练好模型,需要对以下参数进行理解,然后根据模型训练结果进行更改,从而得到更好的训练模型结果。7.3.2网络结构相关超参数②网络输入尺寸(Width&Height)

作用:输入图像的尺寸(如416x416)。

调整方法:

增大尺寸(如608x608)可提升小目标检测能力,但会增加计算量。

减小尺寸可加速训练和推理,适合资源受限的场景。③学习率(LearningRate)

作用:控制参数更新步长。

调整策略:

初始值通常设为`0.001`,大batchsize可适当增大。

使用学习率预热(`burn_in`参数)和余弦退火(`cosine_lr`)策略。

在`.cfg`中通过`learning_rate`设置,分阶段调整(如训练后期降至`1e-4`)。7.3.2网络结构相关超参数④动量(Momentum)

作用:加速SGD优化过程,减少震荡。

默认值:`0.9`。

调整:通常无需修改,极端情况下可尝试`0.8-0.95`。⑤权重衰减(WeightDecay)

作用:L2正则化防止过拟合。

默认值:`0.0005`。

调整:过拟合时增大(如`0.001`),欠拟合时减小。⑥批量大小(BatchSize)

作用:单次训练的样本数量。

调整:

根据GPU内存选择最大值(如64)。

增大batchsize时适当提高学习率(如线性缩放)。7.3.2网络结构相关超参数⑦迭代次数(MaxBatches)

作用:总训练步数。

建议值:通常为`2000*类别数`(如VOC数据集设`20000`)。⑧多尺度训练(Random)

作用:每隔若干迭代随机改变输入尺寸(如`32`的倍数)。

启用:在`.cfg`中设置`random=1`。

调整:建议开启以提升尺度鲁棒性。⑨色调、饱和度、曝光(Hue,Saturation,Exposure)

作用:增强颜色多样性。

建议值:`hue=0.1`,`saturation=1.5`,`exposure=1.5`。过度增强可能导致训练不稳定,需根据数据集调整。7.3.2网络结构相关超参数⑩随机裁剪(Jitter)

作用:模拟不同目标位置和比例。

默认值:`0.2`(裁剪比例20%)。

调整:小目标检测可适当增大。⑪批归一化(BatchNormalization)

作用:加速收敛并减少过拟合。

建议:YOLOv3默认启用,无需调整。7.3.3模型训练结果分析1.模型训练结果分析当模型训练结束后,会在darknet-master目录下生成log.txt,该文件详细记录模型训练过程如下图7-20图a所示。同时会在darknet-master/backup目录下生成yolo模型参数如下图7-20图b所示。(a)(b)图7-20模型训练结果7.3.3模型训练结果分析为了能够更加直观的观测训练结果,以及模型在训练过程中是否收敛等情况,本文根据图7-18(a)中模型训练生成的log.txt文件进行解析,并提取训练模型损失值loss,以及每个类的ap值,以此来判断模型训练情况,在darknet-master目录下执行python3extract_log.py即可得到train_log_loss.txt、train_log_ap.txt文件。具体代码如下:

7.3.3模型训练结果分析根据上述代码本文将提取到的损失值写到train_log_loss.txt,将各个类别的ap值写到train_log_ap.txt,最后将txt结果存放到darknet-master/result_show下。如下图7-21所示。图7-21提取训练结果7.3.3模型训练结果分析2.模型训练结果分析任务演练①绘制loss曲线为了能够更加直观的展现训练结果,本文根据train_log_loss.txt的内容绘制训练损失函数曲线,在darknet-master/result_show下执行python3loss_show.py代码即可,具体代码如下。

7.3.3模型训练结果分析根据上述代码可得出如下结果,如下图7-22所示,随着训练轮次的增加,模型的平均损失值一次降低,最终稳定到某个值附近不在增加、减少,说明此时模型训练收敛。图7-22损失函数图7.3.3模型训练结果分析②绘制ap曲线为了能够更加直观的了解模型中各个类别的ap值(ap通常指的是AveragePrecision,即表示),本文根据train_log_ap.txt的内容绘制每个类别的ap曲线,在darknet-master/result_show下执行python3ap_show.py代码即可,具体代码如下。7.3.3模型训练结果分析7.3.3模型训练结果分析根据上述代码可得出如下结果,如下图7-23所示,随着训练轮次的增加,每个类别的ap都在增加,如图可知Class0类别模型非常容易识别,反而Class1类别波动比较大,说明模型对该类别识别难度较大,后续训练需要更加关注此类数据集情况。图7-23各个类别的ap曲线图7.4人工智能训练成果应用7.4.1模型训练结果评估

7.4.2Darknet_ROS框架介绍7.2人工智能训练模型选择与构建任务描述在一个模拟的城市道路上,自动驾驶模型“小智”迎来了它的测试挑战。这是一条充满各种交通标志的复杂路段:红绿灯、限速标志、左右转指示……小智的任务是安全、高效地完成全程。测试开始,小智首先遇到了一个红绿灯路口。绿灯亮起时,它平稳加速,黄灯闪烁时,它提前减速,稳稳停在停止线前。随后,它遇到了一个限速30公里/小时的标志,小智迅速调整车速,严格遵守规定。当遇到左转标志时,它提前打开转向灯,观察路况后顺利转弯。最终,小智顺利通过所有测试点,安全抵达终点。测试结果显示,小智在识别交通标志的准确率上达到了98%,反应时间极短,整个过程没有出现违规行为。这次测试证明了小智的成熟和可靠性,为未来的自动驾驶应用迈出了重要一步。任务分析自动驾驶模型“小智”在模拟城市道路进行测试,目标是安全高效完成全程。测试路段包含红绿灯、限速标志、左右转指示等复杂场景。小智在绿灯时平稳加速,黄灯时提前减速停稳;遇限速30公里/小时标志时迅速调整车速;左转时提前打灯并观察路况后转弯。最终,小智顺利通过所有测试点。任务准备7.4.1模型训练结果评估7.4.2Darknet_ROS框架介绍7.4.1模型训练结果评估当模型经过多轮迭代训练结束后将会在darknet-master/backup下生成.weights模型训练权重文件如下图7-24所示。图7-24模型训练权重文件7.4.1模型训练结果评估图7-25模型测试AP值接下里需要用以下代码指令计算权重文件在测试集上的AP值,以此来评估我们模型的训练效果,AP值结果如图7-25所示。.darknetdetectormapcfg/voc-dp.datacfg/yolov3-tiny-dp.cfgbackup/yolov3-tiny-dp_last.weights7.4.1模型训练结果评估图7-25模型测试AP值如图7-25所示,我们测试集中测试样本类别为5类,总数为39,根据结果显示可知类别1的参与测试图片目标为9个,最终都检测出来(TP=9),以此类推可以知道类别2、类别3、类别4、类别5目标的检测情况,最终显示每个类别的ap=100%,暂时符合模型部署的需求。7.4.2Darknet_ROS框架介绍1.Darknet_ROS框架Darknet_ros‌是一个将Darknet深度学习框架与ROS(RobotOperatingSystem)结合的开源项目,主要用于实现实时目标检测功能。Darknet_ros的基本目录结构包括:‌CMakeLists.txt‌:项目的构建文件。‌config‌:包含项目配置文件,如darknetRos.yaml。‌include‌:存放头文件,定义ROS消息和常量。‌launch‌:启动脚本,如darknet.launch和detect.launch。‌nodes‌:包含实际ROS节点源代码。‌scripts‌:辅助脚本,例如模型训练脚本。‌src‌:第三方库Darknet的源代码‌。Darknet_ros主要用于实时目标检测,特别适用于机器人和自动化系统中的视觉任务。它支持使用Darknet框架训练的模型进行目标检测,并且可以与ROS系统无缝集成,实现复杂的机器人视觉应用。

7.4.2Darknet_ROS框架介绍2.基于Darknet_ROS框架的小车任务演练由于小车是采用ros系统,所以需要将训练好的算法模型中如图图7-18中的.cfg配置文件和图7-24中训练权重.weight权重文件拷贝到darknet_ros功能包yolo_network_config文件夹下对应的位置,如下图7-26所示。图7-26小车yolo_network_config

文件夹位置7.4.2Darknet_ROS框架介绍接着,在darknet_ros/config目录下增加.yaml文件,可以复制原有的yolov3-tiny.yaml内容再根据自己情况修改并重命名,内容如下:7.4.2Darknet_ROS框架介绍config_file和weight_file参数修改为自己训练时所对应的名字;threshold是置度,保持0.3即

可;detection_classes下按合适修改为自己的类别名称,注意顺序需要和训练时data/s类别名称顺序一致。紧接着,打开darknet_ros/launch目录下darknet_ros.launch文件,将network_param_file其他参数注释掉,新增一行network_param_file参数,路径填写上一步.yaml文件的路径。最后,运行指令启动ROS中的yolo节点功能,即可实现与小车进行联动。roslaunchdarknet_rosdarknet_ros.launch7.5实训案例

7.5.1利用小车进行数据采集与模型训练7.5.2智能自动驾驶场景综合应用

项目考核

7.5.1利用小车进行数据采集与模型训练

任务描述本项目旨在利用自动驾驶小车进行数据采集与模型训练,以提升自动驾驶系统的性能和可靠性。任务分为两个阶段:数据采集与模型训练。在数据采集阶段,自动驾驶小车将在模拟城市道路环境中行驶,配备摄像头实时收集交通场景数据,包括道路标志、车辆行为、行人动态等。数据采集需覆盖多种复杂路况,如红绿灯路口、限速区域、转弯路段等,以确保数据的多样性和丰富性。在模型训练阶段,采集的数据将用于训练深度学习模型,使其能够准确识别交通标志、预测道路状况并做出安全决策。训练过程将采用监督学习方法,通过标注数据优化模型参数,提升识别准确率和反应速度。同时,模型将在虚拟仿真环境中进行验证和优化,以确保其在真实场景中的可靠性和鲁棒性。最终,通过数据采集与模型训练的结合,自动驾驶小车将具备更强的环境感知能力和决策能力,为自动驾驶技术的商业化应用奠定坚实基础。7.5.1利用小车进行数据采集与模型训练

任务分析利用自动驾驶小车进行数据采集与模型训练,旨在提升自动驾驶系统的性能。小车配备摄像头,在模拟城市道路中行驶,采集包括交通标志、车辆行为、行人动态等多样化数据。然后将数据进行标注并处理成yolo格式,接着选择darknet中yolo模型进行模型训练,最后将训练好的模型进行评估与优化。7.5.1利用小车进行数据采集与模型训练

实施步骤本任务需要利用小车进行数据采集,将小车采集到的数据进行标注并转为darknet框架下yolo可训练的格式,最后在进行模型训练,具体操作步骤如下:1.采集照片

(1)准备好拍摄角度,拍摄物品。(2)在~/xiaojing_robot文件夹中,右键进入终端。(3)修改摄像头参数,修改data_collection.py文件,如下图7-27所示位置。图7-27data_collection文件7.5.1利用小车进行数据采集与模型训练

实施步骤修改成以下内容,如下图7-28所示:图7-28data_collection参数配置备注:video2是上面的摄像头,video0是下面摄像头。7.5.1利用小车进行数据采集与模型训练

实施步骤(4)启动摄像头命令:在/xiaojing_robot下面右击打开终端如下所示代码。(5)拍摄:四个角度(远近左右),对每个物品合计拍摄50张以上照片,完成拍摄后,按ctrl+c退出拍摄。(6)清洗图片:第一步:在darknet/data文件夹创建自己的文件夹,在自己的文件夹下面创建两个文件夹分别为images和labels,如下图7-29所示:图7-29创建的images及lables文件夹路径:/darknet/data/AI007$。7.5.1利用小车进行数据采集与模型训练

实施步骤第二步:挑选图片,从/xiaojing_robot/image挑选6个标签一个50张一共300张左右,复制到/darknet/data/AI007/images里面,如下图7-30所示。图7-30复制采集图片文件7.5.1利用小车进行数据采集与模型训练

实施步骤2.数据标注在~/labelImg-master文件夹中如下图7-31所示,右键进入终端输入命令pythonlabelImg.py,回车图7-31labelImg.py文件7.5.1利用小车进行数据采集与模型训练

实施步骤进入标注软件,如下图7-32所示:图7-32labelImg软件界面7.5.1利用小车进行数据采集与模型训练

实施步骤(1)“设置初始化标签”。修改成如下图7-33所示:(2)重新加载标签

(3)view菜单下选择“自动存储模式”。图7-33labelImg设置初始化标签7.5.1利用小车进行数据采集与模型训练

实施步骤(4)点击向下双箭头,选择YOLO模式。

(5)“改变存放目录”,修改如图7-34所示:选择open图7-34选择的图片文件夹7.5.1利用小车进行数据采集与模型训练

实施步骤选择“打开目录”,如图7-35所示:选择open效果图:使用快捷键W,框选标签目标,使用快捷键A和快捷键D,进行图片切换完成一个标签之后,修改“使用预设标签”的内容,进行新的打标。图7-35软件具体效果图7.5.1利用小车进行数据采集与模型训练

实施步骤3.数据集的划分(1)打开darknet/data/split.py,修改如图7-36所示图7-36split参数修改备注:12行,修改为自己创建的文件夹为AI007,25行改为1,26行改为0.8。7.5.1利用小车进行数据采集与模型训练

实施步骤(2)备注代码:~/darknet/data$pythonsplit.py,具体使用效果如下图7-37所示:图7-37split运行后效果7.5.1利用小车进行数据采集与模型训练

实施步骤(1)“设置初始化4.训练模型参数配置(1)打开~/darknet/cfg(2)将xxxxx.cfg、xxxxx.data、s重命名为AI0007.cfg、AI0007.data、AI0007.names,如下图7-38,7-39所示。标签”。图7-38cfg原3个文件图7-39cfg复制后的3个文件7.5.1利用小车进行数据采集与模型训练

实施步骤(3)打开AI007.cfg文件,如下图7-40所示,将cfg中修改max_batches为3000(迭代次数)修改steps为2100,2400(迭代次数的70%至80%)修改filters为33【(标签数+5)*3】修改classes为6【标签数】

图7-40cfg文件的参数配置7.5.1利用小车进行数据采集与模型训练

实施步骤(4)打开AI007.data文件进行修改,具体如下图7-41所示图7-41data文件的参数配置7.5.1利用小车进行数据采集与模型训练

实施步骤(5)打开AI0001.names的内容修改为,具体如下图7-42所示(6)这里面的内容从/darknet/data/AI007/labels/classes.txt拷贝到AI007.names文件里面图7-42names文件的参数配置7.5.1利用小车进行数据采集与模型训练

实施步骤打开终端,在darknet文件夹中右击选择终端,如图7-43所示图7-43模型训练命令./darknetdetectortraincfg/A1007.datacfg/AI007.cfgyolov3-tiny.conv.15训练过程中的效果图具体如下图7-44所示,根据训练的图片数量及训练次数不等,预计需要30分钟至60分钟,且最终该loss值应当小于0.5,否则效果不佳。图7-44训练过程图片7.5.1利用小车进行数据采集与模型训练

实施步骤6.模型图片测试(1)打开~/darknet/backup文件夹,可见AI0007_final.weight模型文件(2)输入命令:./darknetdetectortestcfg/A0007.datacfg/A0007.cfgbackup/A0007_final.weights方法1,将模型文件、验证图片拖动到框内,回车,可见识别结果方法2,右击图片的属性,复制到对话框内。效果图如下7-45所示:图7-45图片测试效果图7.5.1利用小车进行数据采集与模型训练

实施步骤7.mAp值的测试在darknet文件下面打开终端,输入以下命令:./darknetdetectormapcfg/A001.datacfg/A001.cfgbackup/A001_final.weights具体出现的mAp效果图如下7-46所示:

图7-46图片测试效果图7.5.1利用小车进行数据采集与模型训练

实施步骤8.小车模型部署与测试(1)把/darknet/cfg/AI0001.cfg复制到/xiaojing_robot/src/darknet_ros/darknet_ros/yolo_network_config/cfg/AI0007.cfg(2)打开复制后的cfg文件,如下图7-47所示,删去第三行batch前面的。删去第四行subdivisions前面的。添加第六行前面的。添加第七行前面的。图7-47cfg修改图7.5.1利用小车进行数据采集与模型训练

实施步骤(3)把/darknet/backup/AI0007_final.weights复制到/xiaojing_robot/src/darknet_ros/darknet_ros/yolo_network_config/weights/AI0007_final.weights(4)打开目录~/xiao

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论