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

P粉084495128
发布: 2025-07-23 11:15:14
原创
967人浏览过
本文介绍基于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()
登录后复制
       
<Figure size 800x320 with 1 Axes>
登录后复制
               

由下面代码可知该训练集小目标较多,不过为了模型的鲁棒性,以及后面的训练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换取自己的各类数据集

Qoder
Qoder

阿里巴巴推出的AI编程工具

Qoder 270
查看详情 Qoder

【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中文网        

以上就是【AI达人特训营第三期】基于PPYOLOE+的烟头检测(安卓端部署)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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