0

0

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署)

P粉084495128

P粉084495128

发布时间:2025-07-23 11:15:14

|

972人浏览过

|

来源于php中文网

原创

本文介绍基于PP-YOLOE+_x模型的烟头检测项目。该模型为单阶段Anchor-free模型,含CSPRepResNet骨干等结构,性能优异。项目从Roboflow获取COCO格式烟头数据集,经处理后,修改PaddleDetection中模型配置与超参数,训练并评估模型,还尝试部署到安卓端,因模型大小问题换用Picodet轻量模型成功部署。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

【ai达人特训营第三期】基于ppyoloe+的烟头检测(安卓端部署) - php中文网

1.模型介绍

1.1.简介

PP-YOLOE是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型。PP-YOLOE有一系列的模型,即s/m/l/x,可以通过width multiplier和depth multiplier配置。PP-YOLOE避免了使用诸如Deformable Convolution或者Matrix NMS之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比,本项目使用的是yoloe+_x

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

1.2.为何使用该模型?

该项目是要检测烟头,在印象中觉得烟头很小,但是在观看训练集的图片时,其实不是很小,并且为了提高网络的鲁棒性,使用了PP_YOLOE+,效果也是很不错的。【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

1.3.模型结构

1.3.1.网络结构

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网 PP-YOLOEE的模型架构,骨干是CSPRepResNet,Neck部分是路径聚合网络(PAN),Head部分是有效的任务对齐头(ET-Head)。

1.3.2.模型特点

Anchor-free:YOLOE借鉴FCOS,在每个像素上放置一个锚点,为三个检测头设置上、下边界,将 ground truths分配给相应的特征图。然后,计算 bounding box的中心位置,选择最近的像素点作为正样本。这种方式使模型更快一些,但损失了0.3 AP。

Backbone and Neck:Residual Connections和Dense Connections在现代卷积神经网络中得到了广泛的应用。Residual connections引入了捷径来缓解梯度消失问题,也可以作为一种模型集成方法。Dense Connections聚集了具有不同接受域的中间特征,在目标检测任务中表现出良好的性能。CSPNet利用跨阶段Dense Connections来降低计算负担,在不损失精度的情况下降低计算负担,这种方式在YOLOv4、YOLOv5上被使用,且证明是有效的。

RepRes-Block:通过结合Residual Connections和Dense Connections,用于YOLOE的主干和颈部。但作者简化了原始的Block(图3(a))。使用 element-wise Add操作来替换连接操作(图3(b)),这两个操作在某种程度上近似于RMNet。因此,在推理阶段,可以重新参数化为RepResBlock(图3(c))。作者使用RepResBlock构建类似于ResNet的网络,称之为CSPRepResNet(图3(d),ESE制SE注意力模块)。

Task Alignment Learning (TAL). 标签分配是一个重要的问题。YOLOX使用SimOTA作为标签分配策略来提高性能。然而,为了进一步克服分类和定位的错位,在TOOD中提出了Task Alignment Learning,该策略由 dynamic label assignment和task aligned loss组成。通过对齐这两个任务,TAL可以同时获得最高的分类分数和最精确的边界框。

1.3.3.性能

YOLOE在COCO 2017 test-dev上与不同检测器的速性能比较。标有“+”的结果是相应官方发布的最新结果。标有“*”是在作者的环境中使用官方代码库和模型进行测试的结果。速度的默认精度是 FP32(不带 trt)和 FP16(带 trt)【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

1.3.4.PPYOLOE+改进

训练收敛加速:使用Objects365预训练模型,减少训练轮数,训练收敛速度提升3.75倍。

在backbone中block分支中增加alpha参数

优化端到端推理速度,提升训练收敛速度

2.准备阶段

2.1.数据集下载

在这里不是用的aistdio的数据集,而是在robofoow中找的数据集。

首先进行roboflow模块的安装,然后在此模块下面通过下面代码下载烟头检测数据集,并且是coco数据集

我也将该数据集公开到了aistdio上了,如果下载慢,可以在aistdio上解压缩。

In [ ]
!pip install roboflowfrom roboflow import Roboflow
rf = Roboflow(api_key="qaYkica7XWv9gMJoaLod") #api密钥project = rf.workspace("cigarette").project("cigarrette_detection") #烟头数据集dataset = project.version(30).download("coco") #coco形式
   

2.2.数据集处理

数据中的训练集json文件和验证集json文件都在图片当中,如果不删除会进行报错,我们需要将它们移动到上一级路径中。测试集的图片也将它移至上一级。

In [2]
! mv /home/aistudio/Cigarrette_Detection-30/train/_annotations.coco.json /home/aistudio/Cigarrette_Detection-30/_annotations_train.json#移动训练集json文件移动代码! mv /home/aistudio/Cigarrette_Detection-30/valid/_annotations.coco.json /home/aistudio/Cigarrette_Detection-30/_annotations_valid.json#移动验证集json文件移动代码! mv /home/aistudio/Cigarrette_Detection-30/test/_annotations.coco.json /home/aistudio/Cigarrette_Detection-30/_annotations_test.json#移动测试集中json文件
   

由下面图片尺寸都是以下三种尺寸,并且都是较大的图片所以下面模型选择输入尺寸为640的好一些。有的输入尺寸为320的,如果使用320的输入尺寸那烟头更小,更不好检测。

In [3]
import osfrom PIL import Imageimport matplotlib.pyplot as pltimport seaborn as sns
basepath=r'/home/aistudio/Cigarrette_Detection-30/train'picture=os.listdir(basepath)if '.ipynb_checkpoints' in picture:
    picture.remove('.ipynb_checkpoints')
dict1={}for i in picture:
    img=Image.open(os.path.join(basepath,i))
    list1=[img.width,img.height]
    dict1[str(list1)]=dict1.get(str(list1),0)+1plt.figure(figsize=(10,4),dpi=80)
plt.bar(dict1.keys(),dict1.values())
plt.show()
       
               

由下面代码可知该训练集小目标较多,不过为了模型的鲁棒性,以及后面的训练map值比较还是选择了PP_YOLOE+。

In [4]
import osimport jsonimport matplotlib.pyplot as pltwith open(r'/home/aistudio/Cigarrette_Detection-30/_annotations_train.json','r',encoding='utf-8') as f :
    jsons=json.load(f)
pictures=jsons['images']
features=jsons['annotations']
picture_area=[];feature_area=[];x=[]for i in pictures:
    picture_area.append(i['height']*i['width'])for i in features:
    feature_area.append(i['area'])
list1=[];list2=[]for i in range(len(picture_area)):    if round(feature_area[i]/picture_area[i],2) not in list1:
        list1.append(round(feature_area[i]/picture_area[i],3))
        list2.append(1)    else:
        list2[list1.index(round(feature_area[i]/picture_area[i],2))]+=1print(sorted(dict(zip(list1,list2)).items(),key=lambda x:x[1],reverse=True)[:5])
       
[(0.01, 466), (0.02, 277), (0.03, 82), (0.04, 23), (0.016, 1)]
       

2.3.PadddleDetection2.6

2.3.1.PaddleDtection2.6 下载解压缩

在刚开始我用的是aistdio自带的paddledetection2.6但是里面模型很少,所以在git上复制更好一些。

In [ ]
!git clone https://gitee.com/PaddlePaddle/PaddleDetection.git #从gitee上下载速度会快一些
   

2.3.2.依赖包安装

requirements.txt进行安装

安装requeirement.txt的包时需要进行完整路径,这个需要注意。

In [ ]
! pip install -r /home/aistudio/PaddleDetection/requirements.txt
   

安装pycocotools,安装这个包才可以使用coco数据集

In [ ]
! pip install pycocotools
   

2.4.调节pp-yoloe_x超参数

项目中选用的是pp-yoloe_X模型,所以要对PaddleDetection/configs/ppyoloe/ppyoloe_plus_crn_x_80e_coco.yml进行修改参数

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

在../datasets/coco_detection.yml换取自己的各类数据集

Songdio
Songdio

AI音乐创作,让音乐制作变得简单有趣,每个人都能成为音乐大师

下载

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

在./base/optimizer_80e.yml中改一下学习率

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

3.训练阶段

通过本步骤可以将选择好修改后的超参数的模型进行训练了,-c是使用哪一个模型的配置文件,--use_vdl就是是否用可视化。--vdl_log_dir是将可视化保存到哪个文件中 只有保存文件了才可以进行可视化。【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

其他参数不懂的可以通过百度飞桨的官方文档进行查阅,里面有详尽的参数讲解。

各种参数查询

In [ ]
import pycocotoolsimport paddle


! python /home/aistudio/PaddleDetection/tools/train.py \
                        -c /home/aistudio/PaddleDetection/configs/ppyoloe/ppyoloe_plus_crn_x_80e_coco.yml \
                        --use_vdl=true \
                        --vdl_log_dir=vdl_dir/scalar4 \
                        --eval \
   

由于一些原因yoloe中间断了训练 所以只保留了一部分,绿色线是yoloe_sod,蓝色线是yoloe_x,根据map值,yoloe_x表现好一些【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

4.评估阶段

这里就是-c就指定的模型文件,-o就是配置文件的权重(训练好的模型权重)

In [ ]
! python /home/aistudio/PaddleDetection/tools/eval.py \
         -c /home/aistudio/PaddleDetection/configs/ppyoloe/ppyoloe_plus_crn_x_80e_coco.yml \
         -o weights=/home/aistudio/output/ppyoloe_plus_crn_x_80e_coco/best_model.pdparams   #-o设置或更改配置文件里的参数内容
   

5.预测阶段

在评测时,可以预测一个图片,也可以预测一个文件夹(多图片的文件夹,想了解参数是什么意思可以通过上面的参数查询找到详解的信息!

In [ ]
! python /home/aistudio/PaddleDetection/tools/infer.py \
                     -c /home/aistudio/PaddleDetection/configs/ppyoloe/ppyoloe_plus_crn_x_80e_coco.yml \
                    --infer_dir=/home/aistudio/Cigarrette_Detection-30/test \
                    --output_dir=infer_output/ \
                    --draw_threshold=0.5 \
                    -o weights=/home/aistudio/output/ppyoloe_plus_crn_x_80e_coco/best_model.pdparams  \
   

5.预测效果

通过几张图看看效果~【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

6.部署安卓端

6.1.首先安装PaddleLite

安装paddlelite可以将训练好的模型转换为inference模型。

In [ ]
!pip install paddlelite==2.9.0
   

6.2.使用paddle_lite_opt完成预训练模型到inference模型

只要有了inference模型才可以转化为移动端需要的nb文件。所以这一步必不可少。

In [ ]
! python /home/aistudio/PaddleDetection/tools/export_model.py \
            -c /home/aistudio/PaddleDetection/configs/ppyoloe/ppyoloe_plus_crn_x_80e_coco.yml \
            -o weights=/home/aistudio/output/ppyoloe_plus_crn_x_80e_coco/best_model.pdparams
   
In [25]
'''
      --model_dir: 指定模型文件夹位置
      --valid_targets: 指定模型可执行的 backend,默认为arm
      --optimize_out: 优化模型的输出路径
'''! paddle_lite_opt \
      --model_dir=/home/aistudio/output_inference/ppyoloe_plus_crn_x_80e_coco \
      --valid_targets=arm \
      --optimize_out=model
       
Loading topology data from /home/aistudio/output_inference/ppyoloe_plus_crn_x_80e_coco/model.pdmodel
Loading params data from /home/aistudio/output_inference/ppyoloe_plus_crn_x_80e_coco/model.pdiparams
1. Model is successfully loaded!
2. Model is optimized and saved into model.nb successfully
       

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

当出现以上输出,就是转换成功了!

6.3.下载官方demo

https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-android-demo/image_classification_demo

1.只需用到object-detection-demo

2.解压后用Android studio打开即可。

打开后需要更新gradle,如下图

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

6.4.连接手机

连接手机需要下载adb工具

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

连接成功了就是如上图

6.5.改变demo里面的modoel,image,labels

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

这三个参数都是在下图中

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

model就是先新建一个文件夹然后放入对应上面转变的nb文件(这里必须是model.nb不能是其他名字),image就是预测图片,labels是标签,是以txt的形式

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

当以上操作全部完成时,点运行,然后会弹一个软件给你的手机,接收就行了。

6.6.失误!

当在做的时候没有考虑到yoloe的大小,它不是一个轻量型模型,因此手机并不可以带动这个

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

如果想要部署到安卓端,以上步骤即可部署,只需换一个轻量级模型即可!希望大家在部署安卓端时要考虑是否是一个轻量级模型。

6.7.成功部署到安卓端

花费了一些时间又训练了picodet轻量级模型,然后还是通过以上步骤进行了部署成功部署到了安卓端。如果大家想要部署到安卓端,我也将模型的nb文件放到了该项目里,可以自行下载!虽然picidet的精度低了一些,但是不影响检测的效果!

【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署) - php中文网        

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

416

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

37

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 11.7万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号