Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别

马肤

温馨提示:这篇文章已超过428天没有更新,请注意相关的内容是否还可用!

摘要:将训练的yolov5模型嵌入到Android系统中,利用tfLite框架进行优化,实现交通标志的识别。通过此技术,Android设备能够实时检测道路上的交通标志,提高驾驶安全性和辅助驾驶功能。此举结合了深度学习技术与移动计算,推动了智能交通系统的发展。

目录

第一步:下载模型与修改参数

第二步:标注数据

第三步:开始训练

第四步:yolov5转为tfLite模型

第五步:我们可以检测一下tfLite是否可用

第六步:下载官方的示例代码

第七步:修改代码

第八步:运行软件

第九步:优化速率


效果

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第1张

参考:【精选】手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程_yolov5训练模型_肆十二的博客-CSDN博客

模型下载地址:

YOLOV5-mask-42: 基于YOLOV5的口罩检测系统-提供教学视频 (gitee.com)

我采用的是将yolov5的模型,先转为tfLite的模型,再进行嵌入Android的方法

对于conda环境的创建,可以看最上面的参考,大佬已经很详细的讲解如何创建环境了

第一步:下载模型与修改参数

        下载好模型后,根据我们的需求,更改以下文件Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第2张

        Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第3张

train和val都为数据集图片的路径,数据集可以不用在项目里面,但是路径的格式最好为

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第4张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第5张Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第6张

改为我们自己的路径之后,将此处(nc)改为自己目标对象的格式,(names)且目标的命名

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第7张

此处注意目标的排序很重要,必须记好

第二步:标注数据

        在命令行中输入

pip install labelImg   

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第8张

安装好后,再输入

labelImg   

启动labelImg   

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第9张

数据图片的位置就是

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第10张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第11张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第12张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第13张

这里注意,在标注文件里面,会随着我们第一个标注的目标,自动生成class文件

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第14张

随着我们的标注,也会出现对应的txt文件

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第15张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第16张

而每一个txt都包含着这个图片的类别,和目标位置

而这个顺序正是我们在修改mask_data的时候,手动书写的目标顺序,这两个地方必须对应起来

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第17张

在标注图片的时候,我们会发现,每次重新打开标注应用的时候,它不会识别我们自己的class文件,而是会重新帮我们创建,而顺序就是我们重新打开应用之后,标注的顺序,这样子会导致class文件内容被顶替,导致标注数据出现混乱,有时候会因为这个原因闪退,所以我们可以在labels文件夹中,提前创建好class文件,并且按照我们自定义的顺序去排列

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第14张

然后在启动labelImg  的时候

输入

 Labelimg class_file E:\StudyData\python\TrafficData\labels\text\classes.txt  

这样子标注应用就会识别到你的class文件了

当我们标注好所有数据后,每张图片都会在labels对应着一个标注文件

等我们标注好我们自己的数据集后,就可以开始训练了

第三步:开始训练

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第19张

找到train这个文件,找到这个位置的信息,这里示范的是yolov5m的预训练模型

这里的--data 注意别跟我一样写成mask_data2.yaml ,默认是mask_data.yaml

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第20张

如果在GPU中跑,这里改为0

修改完这些东西后,就可以在命令行中输入

python train.py  --epoch 100 --batch-size 8

然后等待模型跑完Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第21张由于如何跑模型,其他博主都已经出过相关的教程,这里简单的实现一下,具体详细细节可以参考别人的,这里主要分享一下我是如何转为tfLite成功实现yolov5模型的转换的

第四步:yolov5转为tfLite模型

当我们模型跑完后

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第22张

可以看到在runs/train/exp*/weights/best.pt.这个文件,就是我们跑出来的结果;

可以在大佬写的window.py里面测试一下

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第23张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第24张

然后直接运行

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第25张

传入我们自己的数据

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第26张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第27张

可以看到,模型已经成功跑出来了

接下来就是开始转换了

打开export.py

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第28张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第29张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第30张

修改完成后,直接运行export

等待一会他的自动转换

转换成功了

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第31张

可以看到已经生成了一个tfLite文件在我们的项目里面

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第32张

第五步:我们可以检测一下tfLite是否可用

获取tflite模型的output数据细节

在命令行中输入python

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第33张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第34张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第35张

这里可以看到,模型成功输入信息

 python
>>> import tensorflow as tf
>>> yolov5s = "runs/train/exp17/weights/best-fp16.tflite" 
>>> interpreter = tf.lite.Interpreter(model_path = yolov5s) 
>>> yolov5s = "runs/train/exp17/weights/best-fp16.tflite"
>>> interpreter = tf.lite.Interpreter(model_path = yolov5s)
>>> print(interpreter.get_output_details())

对应的还有以下命令

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第36张

参考:4. tflite导出,模型细节_哔哩哔哩_bilibili

第六步:下载官方的示例代码

模型转换成功后,我们就可以对tfLite的嵌入了,这里我们可以下载这个案例

https://github.com/yyccR/yolov5-tflite-android

 

正确下载并导入android studio后

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第37张

我们可以看到示例应用里已经有很多个模型,我们可以把自己的模型放在这里面

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第38张

第七步:修改代码

点开这个coco_label.txt文件,我们可以看到在这里面是存放目标的地方

所以我们需要做的就是

1.添加模型

2.创建coco_label.txt文件

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第39张

这里我直接创建一个coco_label2.txt,并将我们之前的class文件直接放入

下一步就是打开

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第40张

修改模型

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第41张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第42张

这里只是将默认的模型给修改了一下,具体的可以自己研究代码然后修改

这里我们回去查看一下我们的tfLite模型的输入信息

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第43张

可以看到

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第44张

我们需要的是640,640的图片大小;所以在项目中,我们还需要修改这里INPNUT_SIZE

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第45张修改前Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第46张修改后

然后看一下Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第47张

这里代表的是,OUTPUT_SIZE,所以我们还需要修改一下

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第48张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第49张

然后修改一下label_file

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第50张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第51张

第八步:运行软件

我们可以看到,已经成功运行了

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第52张Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第53张

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第54张Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第55张

第九步:优化速率

到这里已经成功的将yolov5的模型给嵌入app中了,但是速率还是有点慢

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第56张

这里可以加上这段代码

Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第57张Android嵌入自己训练的yolov5模型(tfLite)交通标志,Android上嵌入训练的Yolov5模型(tfLite)实现交通标志识别 第58张

可以看到,这样子就成功实现了


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码