人群距离监测 DeepSOCIAL 最全汉化论文+源码导读

百家 作者:大数据文摘 2021-09-26 16:14:28

大数据文摘转载自HyperAI超神经


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


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, Image
from?base64 import?b64decode, b64encode
import?os
import?cv2
import?numpy as?np
import?PIL
import?io
import?html
import?time
import?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?filterpy
from?sort?import?*
mot_tracker = Sort(max_age=25, min_hits=4, iou_threshold=0.3)


5.输入设置


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


6.DeepSocial 参数设置和函数引入&7.推理过程&8.展示结果

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

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


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



点「在看」的人都变好看了哦!。

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接