热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人工智能如何助力市政垃圾清洁?垃圾检测全流程方案详解

环境卫生是城市的名片,智慧环卫更是智慧城市中不可缺少的板块。随着作业严格化、服务综合化、人口老龄化等趋势的发展,环卫行业面临诸多新问题和新挑战ÿ

ff0c3e88a235218bb530d49cbc10a6a3.gif

环境卫生是城市的名片,智慧环卫更是智慧城市中不可缺少的板块。随着作业严格化、服务综合化、人口老龄化等趋势的发展,环卫行业面临诸多新问题和新挑战,而AI技术的发展成为一大助力,帮助环卫智能升级,实现设施智能化、运营管理信息化、分析决策智慧化。如何充分利用现有的环卫车辆和设备,对城市整洁度实现实时的监控?如何在减少人工的前提下,更及时地发现问题,解决问题?如何有效监督环卫作业的完成质量?

北京德厚泉科技有限公司基于飞桨目标检测开发套件PaddleDetection提供了一套完整的智慧城市垃圾检测方案,通过在市政车辆上安装摄像头对路面垃圾检测并分析,实现对路面遗撒的垃圾进行监控,记录并通知环卫人员清理,大大提升了环卫人效。把清洁工人从日复一日的街道巡检中解放出来,用深度学习还城市一片净土。

b5ab6fe6470a9cfe43c991d7c17db790.png

小伙伴们肯定好奇,如何才能快速上手这么有价值的深度学习产业应用呢?飞桨与德厚泉科技联合开源了垃圾检测的产业实践范例,提供了从数据准备、模型训练及优化的全流程可复用方案,降低产业落地门槛。

点击阅读原文GET项目链接

https://github.com/PaddlePaddle/paddledetection#产业实践范例库

 所有源码及教程均已开源

欢迎大家使用,star鼓励~

场景难点

  • 环境复杂但精度要求高:目标尺寸小,外形不规则,还有遮挡、堆叠、抖动、光线、天气等多种情况都容易影响识别精度

  • 大量干扰下容易造成误检:交通标示物、行人等对识别造成很大干扰

  • 车载硬件如何低保障部署效果:车载设备算力低,图片质量差,如何兼顾速度与精度。

方案设计

针对以上难点和挑战,我们的解决方案和选型思路如下:

dfc2e79de4d6c07c993abfeaf8e4d634.png

在真实数据缺失的情况下,主要通过网络搜集尽量贴近真实场景的数据图片(角度、光线、分辨率、清晰度)。并在标注过程中尽量精细的框选目标物,以肉眼可见的最小目标为标注基线,适当框选有重叠和遮挡的部分作为单一候选框的主体。

模型选择

PaddleDetection提供了非常丰富的目标检测模型,我们需要从项目实际场景特点出发,选择最贴合实际部署需求的模型:小体积、高精度、预测速度快。

因此我们将候选模型锁定在 PP-YOLO-tiny 和 PP-PicoDet增强版这两个模型上。

2856eee114d610ab0b6e23eb326624d6.png

接下来,在PaddleDetection 提供的模型基线中,通过简单的对比可以发现,PP-PicoDet-s-416在速度-精度的平衡上达到了目前同等体量模型中的最优性能,因此本范例将选择此模型,进行后续的演示。

eedd55c5c7905a3c9ef6332ba2046444.png

模型评估

虽然通常目标检测模型是使用精度mAP作为评估指标,但是在垃圾识别项目的实际应用中,如果继续使用mAP指标进行评估则会有很大问题。主要原因是计算mAP时,由于实际垃圾的尺寸浮动较大,标注框和预测框之间的区域重合会有较大偏差,从而导致mAP值未必理想。然而,我们的最终目的是检测是否存在垃圾,以及垃圾在图片中的位置,并不在意检测到的是一堆垃圾还是一个垃圾。因此,我们重新将召回率与漏检率作为最终的评估指标,具体含义如下:

召回率

只要在实际有目标的图片上检测出目标(不论框的个数),该图片被认为成功召回。计算实际有目标图片中被召回的图片所占的比例,即为图片级别的召回率。

误检率

只要在实际无目标的图片上检测出目标(不论框的个数),该图片被认为误检。计算无目标图片中被误检图片所占的比例,即为图片级别的误检率。

这样就可以在实际场景中更加有效地衡量我们的方案效果。 

模型优化

本次范例提供了包括原始数据的扩充、加载预训练集多种优化方案。考虑到最终部署的硬件设备是算力和内存都比较受限的ARM设备,还需要进一步减小模型体积、提高预测速度。具体的,我们首先通过 PaddleLite opt提供的 FP16混合精度预测,减小模型体积,提高预测速度。

但是由于在部分如ARM V7等设备上无法支持FP16预测,于是,再次基于PaddleSlim提供的量化训练,将FP32浮点数量化成INT8整数进行存储和计算,减小模型体积的同时提高预测速度,再经过finetune训练减少量化运算带来的误差,降低量化模型的精度损失。

模型部署

本项目最终的部署环境为:车载终端设备,ARM CPU CortexA9 dual,256MB闪存。考虑到实际部署效率,采用 C++ 开发,在端侧设备上实现基于Paddle Lite C++ API的调用,准确检出道路垃圾。同时PaddleDetection中也提供了完整的使用示例和开发说明文档,可以参考以下教程快速学习,并针对实际项目进行开发和集成。

小编为你送上项目链接:

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.4/deploy/lite

尤其需要注意的是,如果模型有多个输入,每一个模型输入都需要准确设置shape和data。具体如下图所示,可以通过飞桨可视化分析工具VisualDL查看模型的输入,并对照修改配置代码:

9c2b9a49f37117a69dbc578bf4b6f5a3.png

在完成上述步骤并导出模型文件后,就可在目标设备上进行模型性能测试验证了。

如果想了解更详细方案细节,欢迎关注我们的视频课程,手把手全流程教学等着你哦。

飞桨产业实践范例

助力企业跨越AI落地鸿沟

飞桨产业实践范例,致力于加速AI在产业落地的前进路径,减少理论技术与产业应用的差距。范例来源于产业真实业务场景,通过完整的代码实现,提供从数据准备到模型部署的方案过程解析,堪称产业落地的“自动导航”。

  • 真实产业场景:与实际具有AI应用的企业合作共建,选取企业高频需求的AI应用场景如智慧城市-安全帽检测、智能制造-表计读数等;

  • 完整代码实现:提供可一键运行的代码,在“AI Studio一站式开发平台”上使用免费算力一键Notebook运行;

  • 详细过程解析:深度解析从数据准备和处理、模型选择、模型优化和部署的AI落地全流程,共享可复用的模型调参和优化经验;

  • 直达项目落地:百度高工手把手教用户进行全流程代码实践,轻松直达项目POC阶段。

精彩课程预告

为了让小伙伴们更便捷地应用道路垃圾检测范例,北京德厚泉科技有限公司副总经理为大家深度解析从数据准备、方案设计到模型优化部署的开发全流程,手把手教大家进行代码实践。

扫码获取视频课程链接

加入技术交流群

36754474f4a8014af6981c1b456e71d0.png

804da9ac24cf79e570359f46ef600f93.gif

关注【飞桨PaddlePaddle】公众号

获取更多技术内容~


推荐阅读
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • Java队列机制深度解析与应用指南
    Java队列机制在并发编程中扮演着重要角色。本文深入解析了Java队列的各种实现类及其应用场景,包括`LinkedList`、`ArrayBlockingQueue`和`PriorityQueue`等,并探讨了它们在高并发环境下的性能表现和适用场景。通过详细分析这些队列的内部机制和使用技巧,帮助开发者更好地理解和应用Java队列,提升系统的设计和架构能力。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
author-avatar
唇边那烟味世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有