随着城市化的进程演进,越来越多的人开始走进社区进入公共生活场景,相较于原始农村的生活方式,城市社区生活往往有很多公共标准集中处理模式,其中,生活垃圾就是一件我们每个人每天几乎都无法避免的事情,社区中一般都会有集中垃圾投放点,生活垃圾的分类投放也称为了日常的一项工作,由于城市生活人口密度较高,所以单位面积下产生的垃圾也会更多,在小区中经常会遇上一些场景就是,垃圾投放点仅有的几个垃圾桶被堆得满满的,有的放不下还直接扔在了垃圾桶旁边堆放在了路边上,影响很不好,有的垃圾袋里面的东西比如:餐巾纸、碎纸屑等等,一旦遇上大风直接吹得遍地都是很不清洁。
下面的就是垃圾桶溢出:
社区人员不会一直待在垃圾点所以没有办法对堆满的情况及时处理,那么有没有办法自动提醒,当自动哨兵机器人发现出现异常情况后及时发送短信通知到相应的工作人员过来进行处置呢?理论上肯定是可以的。
本文的主要目的就是基于YOLOv3模型来开发构建自动化的垃圾堆放垃圾桶溢出检测识别系统,后续业务上可以对于出现的问题生成规则事件及时推送给处置人员来进行相应的处理就能比较好的解决此类问题了。首先看下效果:
本文是选择的比较经典的也是比较古老的YOLOv3来进行模型的开发,YOLOv3(You Only Look Once v3)是一种目标检测算法模型,它是YOLO系列算法的第三个版本。
YOLOv3(You Only Look Once version 3)是一种实时目标检测算法,它将目标检测任务视为一个回归问题,通过一个单一的卷积神经网络(CNN)直接预测边界框和类别概率。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实例】
【混淆矩阵】
后续可以通过接入社区监控摄像头实时视频流数据来进行智能计算分析,对于实时检测到的目标对象进行综合处理后结合业务规则形成事件推送给相关的处理人员就可以实现垃圾堆放垃圾桶溢出的及时处理了,感兴趣的话也都可以自行动手尝试下!