助力打造清洁环境,基于YOLOv3开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

发布时间:2023年12月23日

随着城市化的进程演进,越来越多的人开始走进社区进入公共生活场景,相较于原始农村的生活方式,城市社区生活往往有很多公共标准集中处理模式,其中,生活垃圾就是一件我们每个人每天几乎都无法避免的事情,社区中一般都会有集中垃圾投放点,生活垃圾的分类投放也称为了日常的一项工作,由于城市生活人口密度较高,所以单位面积下产生的垃圾也会更多,在小区中经常会遇上一些场景就是,垃圾投放点仅有的几个垃圾桶被堆得满满的,有的放不下还直接扔在了垃圾桶旁边堆放在了路边上,影响很不好,有的垃圾袋里面的东西比如:餐巾纸、碎纸屑等等,一旦遇上大风直接吹得遍地都是很不清洁。

下面的就是垃圾桶溢出:

社区人员不会一直待在垃圾点所以没有办法对堆满的情况及时处理,那么有没有办法自动提醒,当自动哨兵机器人发现出现异常情况后及时发送短信通知到相应的工作人员过来进行处置呢?理论上肯定是可以的。

本文的主要目的就是基于YOLOv3模型来开发构建自动化的垃圾堆放垃圾桶溢出检测识别系统,后续业务上可以对于出现的问题生成规则事件及时推送给处置人员来进行相应的处理就能比较好的解决此类问题了。首先看下效果:

本文是选择的比较经典的也是比较古老的YOLOv3来进行模型的开发,YOLOv3(You Only Look Once v3)是一种目标检测算法模型,它是YOLO系列算法的第三个版本。

YOLOv3(You Only Look Once version 3)是一种实时目标检测算法,它将目标检测任务视为一个回归问题,通过一个单一的卷积神经网络(CNN)直接预测边界框和类别概率。YOLOv3的主要技术原理包括:

  • 单次卷积神经网络架构:?YOLOv3使用一个单一的卷积神经网络来完成目标检测任务,而不是像之前的目标检测算法那样使用多个阶段或步骤。这使得YOLOv3的推理速度非常快,可以达到实时处理视频流的速度。
  • 特征提取:?YOLOv3使用Darknet-53作为其骨干网络来提取图像的特征。Darknet-53是一个深度卷积神经网络,它在ImageNet数据集上预训练,可以提取出图像中丰富的语义信息。
  • 边界框预测:?YOLOv3将输入图像划分为一个网格,并在每个网格单元中预测多个边界框和相应的类别概率。
  • 非极大值抑制:?YOLOv3使用非极大值抑制(NMS)算法来消除冗余的边界框。NMS算法根据每个边界框的置信度对边界框进行排序,然后选择置信度最高的边界框,并抑制与之重叠较大的其他边界框。

YOLOv3的优点和缺点

  • 优点:

    • 实时处理速度快:YOLOv3可以达到实时处理视频流的速度,这使其非常适合用于视频分析和实时目标检测应用。
    • 高精度:YOLOv3在目标检测任务上具有很高的精度,与其他实时目标检测算法相比,它可以检测出更多的小目标和重叠目标。
    • 易于训练:YOLOv3的训练过程非常简单,只需要少量的数据即可训练出一个准确的模型。
  • 缺点:

    • 召回率较低:YOLOv3的召回率不如一些两阶段的目标检测算法,这意味着它可能会漏检一些目标。
    • 对小目标的检测准确率较低:YOLOv3对小目标的检测准确率不如一些专门针对小目标检测的算法。
    • 对遮挡目标的检测准确率较低:YOLOv3对遮挡目标的检测准确率不如一些专门针对遮挡目标检测的算法。

这里是基于实验性的想法做的实践项目,简单看下数据集:

实例标注数据如下:

1 0.087339 0.436719 0.174678 0.223438
2 0.092614 0.164844 0.063306 0.110937
2 0.142438 0.1625 0.052755 0.115625

本文选择的是yolov3-spp模型,如下:

# parameters
nc: 3  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# darknet53 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [32, 3, 1]],  # 0
   [-1, 1, Conv, [64, 3, 2]],  # 1-P1/2
   [-1, 1, Bottleneck, [64]],
   [-1, 1, Conv, [128, 3, 2]],  # 3-P2/4
   [-1, 2, Bottleneck, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 5-P3/8
   [-1, 8, Bottleneck, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 7-P4/16
   [-1, 8, Bottleneck, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 9-P5/32
   [-1, 4, Bottleneck, [1024]],  # 10
  ]

# YOLOv3-SPP head
head:
  [[-1, 1, Bottleneck, [1024, False]],
   [-1, 1, SPP, [512, [5, 9, 13]]],
   [-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, Conv, [1024, 3, 1]],  # 15 (P5/32-large)

   [-2, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Bottleneck, [512, False]],
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, Conv, [512, 3, 1]],  # 22 (P4/16-medium)

   [-2, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P3
   [-1, 1, Bottleneck, [256, False]],
   [-1, 2, Bottleneck, [256, False]],  # 27 (P3/8-small)

   [[27, 22, 15], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)
  ]

等待训练完成后来整体看下结果详情:

【数据分布可视化】

【PR曲线】
精确率-召回率曲线(Precision-Recall Curve)是一种用于评估二分类模型性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)和召回率(Recall)之间的关系图来帮助我们了解模型在不同阈值下的表现。精确率是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。

【训练过程可视化】

【Batch实例】

【混淆矩阵】

后续可以通过接入社区监控摄像头实时视频流数据来进行智能计算分析,对于实时检测到的目标对象进行综合处理后结合业务规则形成事件推送给相关的处理人员就可以实现垃圾堆放垃圾桶溢出的及时处理了,感兴趣的话也都可以自行动手尝试下!

文章来源:https://blog.csdn.net/Together_CZ/article/details/135153720
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。