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


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

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

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

       

1.2.为何使用该模型?

该项目是要检测烟头,在印象中觉得烟头很小,但是在观看训练集的图片时,其实不是很小,并且为了提高网络的鲁棒性,使用了PP_YOLOE+,效果也是很不错的。        

1.3.模型结构

1.3.1.网络结构

 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)        

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进行修改参数

       

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

       

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

       

3.训练阶段

通过本步骤可以将选择好修改后的超参数的模型进行训练了,-c是使用哪一个模型的配置文件,--use_vdl就是是否用可视化。--vdl_log_dir是将可视化保存到哪个文件中 只有保存文件了才可以进行可视化。        

       

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

各种参数查询

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表现好一些        

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.预测效果

通过几张图看看效果~        

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
       

       

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

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,如下图

       

6.4.连接手机

连接手机需要下载adb工具。

       

连接成功了就是如上图

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

       

这三个参数都是在下图中

       

       

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

       

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

6.6.失误!

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

       

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

6.7.成功部署到安卓端

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

       


# gradle  # 解压缩  # 这两个  # 只需  # 配置文件  # 是在  # 才可以  # 可以通过  # 是一个  # 都是  # 的是  # YOLO  # paddlepaddle  # adb  # python  # android studio  # android  # github  # map  # Object  # json  # 架构  # igs  # cos  # 百度  # ai  # 工具  # git 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 教你用AI进行市场调研,快速生成消费者洞察报告  豆包Ai官方网页版入口地址_豆包Ai官网在线使用入口  如何利用 DeepSeek 进行多轮复杂对话的状态管理  唐库AI拆书工具如何批量导出笔记_唐库AI拆书工具批量导出与格式转换【方法】  法国历史古迹修复:探秘 Château de Purnon 城堡的艺术与挑战  AI客服工具:24/7全天候支持业务增长的秘密武器  Midjourney怎么用一键生成logo_Midjourneylogo生成步骤【教程】  AI海报设计终极指南:用ChatGPT和ImageFX轻松创建专业级海报  OpenAI Codex最强攻略:提升AI编码效率的秘诀  斑马AI如何设置奖励机制_斑马AI积分奖励与勋章获取【步骤】  Universe:用 iPhone 在 5 分钟内打造网站的终极指南  如何让ChatGPT模仿特定文风 创意写作与品牌话术生成教程  旅游营销AI:ChatGPT邮件营销策略,提升旅游业务转化率  恐怖游戏惊魂:虚拟主播带你逃离病娇女孩的魔爪  AI破译古文字:重现失落文明之声,揭秘历史真相  百度网页版ai助手怎么关 百度网页ai对话框屏蔽  ChatGPT写论文大纲教程 辅助学术构思与资料检索操作方法  Notion AI整理笔记怎么用_Notion AI整理笔记使用方法详细指南【教程】  CanvaAI抠图怎样调整色彩_CanvaAI色彩校正与滤镜叠加方法【攻略】  面试必胜:五大面试技巧助你斩获Offer  零成本AI营销机构:2025年自动化运营,颠覆传统营销模式  AI赋能软件测试:自动化、智能化与未来趋势  教你用AI把照片变成动漫风格,3个简单步骤刷爆朋友圈  Saregama Carvaan: 5000首经典歌曲唤醒你的回忆  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  AI驱动KDP封面设计:NURIE CREATOR教程  利用 Gemini 1.5 Pro 进行超长视频摘要提取  Notta AI: 提升效率的智能会议纪要工具  CodeRabbit CLI: AI 代码审查工具,提升编码效率与代码质量  AI网站构建指南:Duda平台免费创建教程  5分钟搞定求职信:利用AI工具大幅提升求职效率的实操技巧  DesignGen: 5个AI模型革新服装设计,快速实现创意  Talvix AI:AI驱动的招聘平台,提升招聘效率和质量  3步教你用AI将文字转换成语音,实现配音自由  百度输入法怎么去除ai模块 百度输入法纯净版安装教程  AI伴侣:连接还是孤独?真实对话揭秘AI伦理困境  批改网ai检测工具怎样生成改进建议_批改网ai检测工具改进建议查看与应用【攻略】  AI代码助手的崛起:软件工程的未来展望与实用指南  Quizlet AI:学生提分神器,告别传统学习方式,效率倍增  解密AI时尚摄影:打造完美形象的终极指南  生成式AI革新客户服务:提升效率与个性化体验  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  System of a Down:深度剖析《Hypnotize》歌词  N8N 自动化教程:HR 简历智能分析系统搭建指南  CanvaAI抠图怎么批量处理_CanvaAI批量抠图与团队协作功能【指南】  DeepSeek写小说怎么用_DeepSeek写小说使用方法详细指南【教程】  智行ai抢票如何绑定微信通知_智行ai抢票微信提醒绑定与推送设置【指南】  Decart Lucy 14B:颠覆AI视频生成领域的革命性模型  实测效率提升超35%!科大讯飞星火AIPC开启AI办公新纪元  自动化AI汽车生成挑战赛1966 Gasmea回顾与评分 

 2025-07-23

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.