Py学习  »  机器学习算法

【深度学习】人群距离监测 DeepSOCIAL 最全汉化论文+源码导读

机器学习初学者 • 2 年前 • 220 次点击  

内容一览:在疫情期间,公共场所中尽量避免人群聚集,可以有效控制疫情扩散。英国利兹大学的研究团队开源了 DeepSOCIAL 人群距离监测项目,通过 YOLOv4+SORT 的方式快速实现了这一应用。


关键词:DeepSOCIAL 疫情应用 目标检测


由英国利兹大学交通研究院的研究员 Mahdi Rezaei 开源的 DeepSOCIAL 人群距离监测项目,成了最近的网红应用。


DeepSOCIAL 是通过 YOLOv4 实现行人检测,再用 SORT 实现目标跟踪,并通过单目视觉IPM 逆透视映射实现距离估计,最终评估人群距离监测和风险评估。


DeepSOCIAL 实现效果展示


之所以 DeepSOCIAL 能成为网红教程,不仅仅因为该项目在当前疫情中的实用性强,也因为该项目效果极佳,平均精度达到 99.8 %,实时速度为 24.1 fps,可用于自主车辆、人体行为识别、异常检测、体育运动、人群分析等领域。


目标检测阶段的整体模型结构


线上源码教程访问 https://openbayes.com/console/open-tutorials/containers/Qgf0mAml82l


 行人检测:YOLO v4


在 DeepSOCIAL 项目中选用了 YOLOv4 来实现行人目标检测,在论文中作者对比了几种目标检测方法:RCNN、fast RCNN、faster RCNN、SSD、YOLO 在数据集 PASCAL Visual Object Classes(VOC)和MS COCO 中进行了测试。


用目标检测中用于衡量识别精度与速度的:mAP 全类平均正确率(mean Average Precision)和 FPS 帧率(Frame Per Second)进行评估。


最终选定了 YOLOv4 作为目标检测方法。


主流目标检测方法 mAP 测试结果

主流目标检测方法 FPS 测试结果


 行人跟踪:SORT


在DeepSOCIAL 的行人目标跟踪方面,选用了Simple Online and Real-time(SORT) 算法。


人员检测、ID分配、跟踪和移动轨迹展示效果


其中主要使用了卡尔曼滤波(Kalman Filter)结合匈牙利算法(Hungarian algorithm)解决动作预测和数据关联的问题。


 行人距离估计:IPM 逆透视映射


DeepSOCIAL 项目中使用单目视觉,但是使用单个摄像机,将三维世界场景投影到二维透视图像平面,容易导致物体之间的像素距离失真。


通过应用 IPM二维像素点(u,v)将被映射到

相应的三维世界场景坐标点(Xw,Yw,Zw)


在三维空间中,每个框的中心或参考点与三个参数 (x,y,z)相关联,而在从相机接收到的图像中,原来的三维空间被缩减为二维(x,y),深度参数(z)不可用。


为了应用校准的 IPM(逆透视映射)过渡,首先需要通过设置深度参数 z = 0 来消除透视效果,进行摄像机校准,同时还需要知道相机的位置,高度,视野等。


 项目运行代码


1.引入依赖

from IPython.display import display, Javascript, Imagefrom base64 import b64decode, b64encodeimport osimport cv2import numpy as npimport PILimport ioimport htmlimport timeimport matplotlib.pyplot as plt%matplotlib inline


2.编译 YOLOv4

%cd darknet !sed -i 's/OPENCV=0/OPENCV=1/' Makefile!sed -i 's/GPU=0/GPU=1/' Makefile!sed -i 's/CUDNN=0/CUDNN=1/' Makefile!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile!sed -i 's/LIBSO=0/LIBSO=1/' Makefile


3.使用 Darknet 的 Python 接口

# 导入 Darknet 函数来执行对象检测from darknet2 import *
# 载入 YOLOv4 架构 network, class_names, class_colors = load_network("cfg/yolov4.cfg", "cfg/coco.data", "/openbayes/input/input0/DeepSocial.weights")width = network_width(network)height = network_height(network)
# 在图像上运行 Darknet helper 函数def darknet_helper(img, width, height):  darknet_image = make_image(width, height, 3)  img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  img_resized = cv2.resize(img_rgb, (width, height),                              interpolation=cv2.INTER_LINEAR)
 # 获取图像比例,将边界框转换为适当的尺寸  img_height, img_width, _ = img.shape  width_ratio = img_width/width  height_ratio = img_height/height
 # 运行 Darknet 模型  copy_image_from_bytes(darknet_image, img_resized.tobytes())  detections = detect_image(network, class_names, darknet_image)  free_image(darknet_image)  return detections, width_ratio, height_ratio


4.使用 SORT 实现实时跟踪目标

!pip install filterpyfrom sort import *mot_tracker    = Sort(max_age=25, min_hits=4, iou_threshold=0.3)


5.输入设置

Input            = "/openbayes/input/input1/OxfordTownCentreDataset.avi"ReductionFactor  = 2calibration      = [[180,162],[618,0],[552,540],[682,464]]


6.DeepSocial 参数设置和函数引入

&

7.推理过程

&

8.展示结果

6&7&8 三部分完整运行代码过长,请移步至


https://openbayes.com/console/open-tutorials/containers/Qgf0mAml82l


或点击原文阅读查看完整代码


—— 完 ——


往期精彩回顾




站qq群554839127,加入微信群请扫码:
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121520
 
220 次点击