5个课时实现车辆检测+安全算法,玩转智慧交通AI应用!
欢迎大家来到AidLux零基础边缘端智慧交通训练营~
前面两节课,主要介绍了AI项目安全风险和AI安全技术的一些背景,及使用AidLux实现AI功能的方式。
在第三节课,我们主要完成车辆检测模型的训练和部署测试,以及应用“以数据为中心”策略完成一个小作业,内容框架如下:
1 车辆检测数据集的梳理
2 云服务器训练Yolov5车辆检测模型
3 PC端车辆检测模型推理测试
4 AidLux端模型推理测试
5 课堂小作业
1. 车辆检测数据集的梳理
因为后续的章节将从车辆检测入手,所以本节课先带着大家手把手训练一个检测模型,并转化成AidLux可以部署的方式,进行推理测试。
这里主要选用了Kaggle开源的车辆数据集,其网址是:
https://www.kaggle.com/datase...
数据集中总共包含了三个方面的内容:1001张的训练数据集,175张的测试数据集,以及一个标签csv文件。
这个数据集是一个典型的小量级数据,这在实际项目中非常常见,后续我们将用“以数据为中心”的思想对数据集进行优化。
这里已经把数据集以及下面的训练代码、数据清洗脚本都整理好了。
考虑到文件比较大,我们已经将其放在百度网盘中,大家可以点击进入AidLux AI开发者交流群。
在群公告处获取下载链接,以便后期自己训练时挑选使用。
可以看到Lesson3_code资料文件夹里,除了包含car_train_data.zip(车辆数据集)以外,还包含data_prepare_code(数据预处理文件夹)和yolov5_code(模型训练测试文件夹)。
接下来,我们对数据集进行标注转换以及训练验证集划分,因为本次主要使用YOLOv5算法,我们需要将数据标签转换成YOLOv5可以训练的格式,而数据集划分按照9:1的方式进行,即90%是训练集,10%是验证集。
在lesson3_code/data_prepare_code文件中,编写了相关代码data_code_car.py。
使用VScode编程软件打开data_code_car.py,首先修改其中的image_dir,train_val_dir,csv_reader,schuil.copy中的三个路径。
运行代码,完成后可以看到,在car_train_data文件夹中多了image_txt和train_val_txt两个文件夹,image_txt包含了数据和标签,train_val_txt包含了训练集和验证集的调用列表。
不过这个代码在本地不需要运行,等我们将代码与数据上传到云服务器后,再进行训练数据的生成,这样就不用再改标签里的路径了。
2. 云服务器训练Yolov5车辆检测模型
2.1 云服务器介绍
有了车辆数据集,我们就可以训练检测模型了。在本次训练营中,我们选用工业界最常用的YOLOv5算法。
考虑到有些同学有GPU服务器,有些同学没有,针对没有GPU服务器的同学,为了能够测试一整套的流程,大家可以采用云服务器来进行替代。本次课程采用的算力平台是AutoDL AI算力云,官网地址:https://www.autodl.com/home
首先点击右上角的“注册”选项进行注册。
在进入后台的主页面,点击左上角的“算力市场”。
可以看到不同的区域,有一些空闲的GPU服务器,每台服务器的显卡型号以及算力都不尽相同,大家可以根据自己的需求进行选择。当我们刚注册会员时,会赠送10元的代金劵,这个我们训练模型已经足够,训练完基础模型还有9块多的余额。
2.2 查看符合条件的云网盘
我们需要将数据集和代码都先上传到云服务器的网盘里面,后面就可以直接在上面操作。
在实例中大家可以看到,不同地方的设备,云服务器的网盘也要选择对应位置。比如说使用北京A区的GPU,那就要将代码和数据也存在北京A区的网盘中。
我们在这里使用的都是北京A区的GPU与网盘。后面实例购买的时候,还是购买北京的实例,就可以在系统盘中直接找到相应的文件。
如果后面再购买其他地区的实例,则在系统盘中,就找不到相应的数据文件。
2.3 训练&验证集图片上传
我们再将前面的一些文件,传输到“我的网盘”里面。主要上传三个文件:
(1)数据集
为了方便上传,将数据集压缩成car_train_data.zip,大家下载的Lesson3_code文件夹中,已经将其压缩了。car_train_data.zip中主要包含了训练所需的数据。
(2)数据预处理代码
将data_prepare_code文件夹,进行压缩,变成data_prepare_code.zip文件夹。data_prepare_code文件夹中包含了数据预处理代码,能够将数据集制作成YOLOv5能够过读取训练的格式。
(3)YOLOv5训练代码
将Yolov5_code训练代码,进行压缩,变成yolov5_code.zip。Yolov5_code文件夹将是我们训练和测试车辆检测模型的核心部分。
图片
(4)后台上传文件——点击AutoDL后台的我的网盘,将刚刚的三个zip文件进行上传,当然可能网络原因,有的文件可以上传的会稍微慢一些。
2.4 新建实例设备
到了这里,我们的代码、数据集都准备好了,就准备新建一个实例设备操作了。这里还是选择和网盘所对应的,北京A区的实例。
图片
可以自己选择一个GPU服务器,可以看到显示多少钱,这里展示的都是单卡的价格,有的设备必须要N卡一租的,可以看到对应的价格。
点击进入后,可以修改两个地方,一个是GPU数量,一个是新建实例的基础镜像。
我们这里GPU数量选择1,表示单卡。新建实例镜像,选择了Pytorch的yolov5镜像,其中YOLOv5训练所需的依赖库都配置好了,十分方便。
我们也可以看到最下方,有一个可用代金券,即表示我们可以先免费使用10元钱。
点击“立即创建”后,就可以看到创建的实例了。
点击右面的“JupyterLab”,可以进入控制台页面。
可以点击下面的“终端”,打开一个终端页面,就可以进行操作了。
当然如果一个终端页面不够操作的话,可以点击左上方的“+”号,新增加几个终端页面。比如我们这里新建了4个终端页面。
并且在上面,我们看到autodl-nas即我们刚刚使用的网盘。
进入autodl-nas文件夹后,我们也可以看到,里面有刚刚新上传的三个zip文件,我们使用unzip命令进行解压。
最后可以看到,三个文件夹都被解压成功:
解压完成后,我们开始制作训练数据集。
先查看一下训练数据集car_train_data的路径,因为会涉及到转换后的txt路径,在云服务器上运行加训练。
先cd car_train_data文件夹,再输入pwd,可以看到这时的数据集路径是:/root/autodl-nas/car_train_data
然后再去修改代码中的路径,首先cd data_prepare_code文件夹里,再vim data_code_car.py,将第一小节中讲到的三个路径进行修改。
按键盘上的“i”,进入代码的编辑状态,移动到路径处,修改成云服务器上对应的路径,我们这里是/root/autodl-nas/car_train_data,大家可以对应修改。
修改完成后,按键盘上的Esc键,跳出编辑状态。
再输入“:”,会跳出输入框,再输入"wq!",表示对于该修改内容,保存编辑强制退出,回到原始页面。
在运行data_code_car.py,数据集就生成好了。
2.5 训练车辆检测模型
训练车辆检测模型,主要用到/autodl-nas/yolov5_code文件夹了,我们主要对里面的文件进行参数配置。
(1)新建car.yaml
因为训练的是车辆检测模型,所以在yolov5_code/data文件夹下新建一个car.yaml文件。
不过需要注意的是,训练集和验证集的路径都要修改一下,此外还有类别数,以及类别标签。
(2)修改train.py参数
而yolov5_code/train.py文件中,主要修改models初始化模型的路径,这里使用的yolov5n的模型权重。
cfg即模型对应的网络结构路径,data是新增的car.yaml路径。
此外还有epochs训练迭代的次数,batch-size大小,当然imgsz也可以修改,这里默认640。
(3)修改models/yolov5n.yaml
修改其中的类别数量,因为车辆就一个类别,所以修改成1。
(4)训练车辆检测模型
上面的配置文件都修改好以后,由于我们选用了YOLOv5镜像,可以直接输入python train.py,就可以开始训练了。
训练过程中,一般会得到两个模型,一个best.pt,即epoch迭代的过程中,map精度对比比较好保存的模型。
一个是last.pt,即迭代过程中,最后一次epoch保存的模型。
比如我们训练过程中,保存的这两个,在后面测试的时候,主要使用best.pt文件。
2.6 下载检测模型
在AutoDL的我的网盘,找到runs下面最新训练车辆检测模型,路径可以参考:
将best.pt模型下载下来,修改成yolov5n_car_best.pt。并放到yolov5_code/models文件夹中。
3. PC端车辆检测模型推理测试
在上一节中,我们在云服务平台训练了车辆检测模型,并将其下载到了本地。接下来我们在自己本地PC电脑上进行模型测试和模型转换。
当我们训练出一个车辆检测模型,比如我们本节课选用的最最轻量型的yolov5n.pt文件。我们首先要在pc端使用测试集进行效果测试。
3.1 Python相关功能库的安装
为了让每个人,不管是小白还是有经验的朋友都能运行。我们特意找了一台空白的电脑,没有安装任何功能库的电脑进行整体的测试,发现还有一些库还需要安装。
这时我们就需要配置相应的测试环境,以下是一些需要配置的依赖库,大家可以对照着进行下载安装:
(1)Pytorch核心库安装
首先就是Pytorch库安装:这里选择1.8.1版本的Pytorch进行安装,如果没有安装Pytorch,运行代码时就会报错:
我们使用如下的安装命令对Pytorch进行快速安装:
pip install torch==1.8.1 -i https://pypi.tuna.tsinghua.ed...
其中-i https://pypi.tuna.tsinghua.ed...字段是使用了清华源进行下载时的加速。
在安装完成Pytorch之后,还有一个非常重要的依赖库需要配套安装,那就是torchvision依赖库。
torchvision下载时的版本选择要与Pytorch版本相适配,这里我们选择0.9.1版本的torchvision进行安装。
torchvision的安装命令如下:
pip install torchvision==0.9.1 -i https://pypi.tuna.tsinghua.ed...
(2)其他依赖库安装
除了Pytorch,代码中还有一系列的依赖库,这里也列出相关的下载链接,可以一个个下载安装。
Pandas下载:pip install pandas -i https://pypi.tuna.tsinghua.ed...
yaml下载:pip install pyyaml -i https://pypi.tuna.tsinghua.ed...
tqdm下载:pip install tqdm -i https://pypi.tuna.tsinghua.ed...
matplotlib下载:pip install matplotlib -i https://pypi.tuna.tsinghua.ed...
seaborn下载:pip install seaborn -i https://pypi.tuna.tsinghua.ed...
scipy下载:pip install scipy -i https://pypi.tuna.tsinghua.ed...
ipython下载:pip install ipython -i https://pypi.tuna.tsinghua.ed...
3.2 模型推理测试
我们使用yolov5的模型,对于images里面的图片进行推理,测试一下效果。
打开detect_image.py文件,这里主要修改代码中的模型、图片路径、yaml文件。
其中data/images/tests文件夹中已经包含了测试集的所有数据。
使用Run->"Run Without Debuging",运行后可以得到一张张推理的图片效果(使用空格键快速切换不同图片的检测结果)。
4. AidLux端模型推理测试
在PC端完成测试之后,在实际项目中,我们主要是在边缘端AidLux上进行使用。在第二节课中,我们也讲过,AidLux主要针对推理部分,在底层进行了加速优化,非常适合AI模型的部署使用。
不过想要将pt模型移植到AidLux上并使用,还要进行转换模型和修改推理代码的操作。
4.1 pt模型转换成tflite模型
模型转换的文件是yolov5_code/export.py文件,因为我们准备在AidLux中运行tflite格式的模型,因此主要修改其中的三个地方。
因为需要tensorflow,所以运行时会报错:
所以再输入:pip install tensorflow==2.4.1 -i https://pypi.tuna.tsinghua.ed...,下载安装tensorflow库。
安装好再运行export.py文件,在models文件夹下面,可以看到生成的yolov5_car_best-fp16.tflite文件。
4.2 AidLux端推理代码理解
针对AidLux中推理测试的代码,这里放到yolov5_code/aidlux文件夹的yolov5.py中了,大家也可以将训练好的tflite放到AidLux文件夹中。
其中包含了很多AidLux专属的函数接口,大家可以点击这里查看下相关的函数说明。
当然其中的代码和原本PC端的代码有一些不同,这里梳理讲解一下,主要分为三个部分:
(1)加载相关的函数库
(2)模型初始化以及加载
其中主要用到两个函数接口,一个是aidlite_gpu.aidlite()和aidlite.ANNMode()
AidLite初始化的说明:
AidLite加载模型的说明:
此外还有两行in_shape,out_shape,这里可以通过netron查看一下相关的模型参数。
我们可以使用https://netron.app/,打开刚刚的yolov5_car_best-fp16.tflite文件。点击最下方的输出单元,可以看到输出的信息。
(3)模型推理测试代码
接下来就是在Aidlxu进行模型推理,使用测试集测试模型效果了。相关的代码如下所示:
4.3 代码复制到AidLux中
和第二节课中讲的AidLux的使用说明和详细操作实例一样,我们将yolov5的代码,全部上传到AidLux的home下面。
还是通过Cloud_ip在电脑端访问AidLux,打开文件浏览器,进入home下方,点击上传按钮,将Lesson3_code/yolov5_code文件夹进行上传。
4.4 远程连接AidLux
在第二节课中,我们讲解了使用SSH,连接到AidLux的方式。大家也可以远程连接到Lesson3_code,当看到VScode左下角部分的SSH:AIDLUX呈现绿色,即说明远程连接成功。
4.5 推理测试Aidlux端代码
打开yolov5_code/aidlux文件夹中的yolov5.py进行模型推理测试,在平板/手机版本的AidLux和PC端网页的AidLux中,都可以看到推理的显示结果。
PS:需要注意的是,在运行的时候,需要把手机版本里面的AidLux页面叉掉,免得会有冲突,运行的线程会直接被killed掉。
5. 课堂小作业
以上就是第三节课的内容,我们主要学习了如何使用云服务器,训练yolov5的车辆检测模型。
并将训练好的检测模型,转换成AidLux可以使用的tflite模型,且对测试数据进行推理测试,看到实际的效果。
本节课最后留一个小作业,在第二节课中,我们讲到了“以数据为中心”的鲁棒机器学习策略,大家可以在车辆检测训练中进行尝试。
完成整个车辆检测模型的训练过程后,大家可以发现,我们使用的数据只有1000+的量级,在实际项目中,这是远远不够的,我们需要制作更多的数据来提升模型的检测效果与鲁棒性。
5.1 数据增强技术扩展性讲解
这里给出一些数据增强库,大家可以尝试对车辆数据集进行一定的增强,并尝试进行优化训练。
(1)imgaug:https://github.com/aleju/imgaug
(2)albumentations:https://github.com/albumentat...
(3)autoaugment:https://github.com/4uiiurz1/p...
(4)imagecorruptions:https://github.com/bethgelab/...
这里以imgaug为例,其包含了color、blur、blend、weather、contrast等数据增强的方式。
首先需要安装imgaug库:pip install imgaug -i https://pypi.tuna.tsinghua.ed...
接着设置数据增强模式:
需要注意的是,一些裁剪、旋转等会产生label变化的增强,需要同时修改label文件。在这里,大家可以先尝试不会改变label的数据增强方式,后续我们的特殊测试集也是不包含改变label变化的。
接下来我们就可以输入数据进行增强了:
5.2 小作业内容
数据增强,在模型训练过程中,可以快速增加训练数据集的数量,在一定程度上,对于模型的泛化性还是有一些帮助的。
所以在上面的数据增强演示的基础上,大家可以尝试一下各种数据增强的方式。
在最后的大作业中,我们也将使用一些特殊的测试集来检验模型优化的成果,大家可以将生成的数据用于训练优化模型,作为大作业的部分成果。
以上就是第三节课的内容。
大家可以加入AidLux AI开发者交流群,群内有AidLux工程师和江大白、Rocky等众多AI行业专家,可以给予技术指导以及进行交流互动。
完成作业的同学可以将增强的各式图片选取几张交流分享,遇到问题的同学也可以咨询~
本节课所需的数据集、资料包,大家可以在AidLux AI交流群内获取呦~