共计 3102 个字符,预计需要花费 8 分钟才能阅读完成。
作者 |Priya Dwivedi
编译 |Flin
起源 |medium
介绍
美国和欧洲的许多城市当初都在审慎地从新凋谢。人们被要求在外出时放弃平安间隔。然而人们照着做吗?城市对人们的平安间隔是否合乎规定进行评估并采取相应的口头是很重要的。如果大多数人都恪守疫情期间的命令,那么就能够平安地凋谢更多的公共场合。
然而,如果呈现了太多违规行为,那么敞开这些场合可能更平安。
这正是迈阿密海滩公园产生的事。公园于四月底凋谢,但因为太多人蔑视与戴口罩和社交平安间隔无关的规定,公园在一周内就敞开了。该市通过警员监控公园并收回正告。但人类监测可能不是一个切实可行的解决办法。
咱们如何应用人工智能和机器学习来检测人们是否遵循社交间隔规定?大多数城市曾经在公共场所装置了摄像头,这些摄像头正好能够用于此目标。
在这个博客中,我展现了如何应用行人跟踪算法来监控违规行为。我也在我的 Github 上开源了代码。请参阅上面的模型。
-
我的 Github
- https://github.com/priya-dwiv…
社会间隔违规检测和计数:
在深度学习剖析中,咱们十分热衷于应用数据迷信和机器学习来解决问题。如果你须要数据迷信帮忙来应答这场危机,请分割咱们。原稿全文登载在咱们的网站上:
- https://deeplearninganalytics…
行人跟踪
数据
咱们首先须要的是视频数据来构建和测试咱们的模型。我应用了凋谢的 MOT 数据集(https://motchallenge.net/)。
MOT 数据集是计算机视觉行人跟踪的规范数据集。许多最先进的算法都是在这些数据上训练和测试的。这个数据集有许多开源的剪辑片段显示在不同的相机角度下的人的静止。我抉择了一个固定在一个高度的摄像机的一个小片段,它显示在德国的城镇核心。
你能够从这里(http://www.robots.ox.ac.uk/Ac…)下载这个剪辑片段。请看上面这个剪辑片段中的一个帧。
应用深度排序进行行人跟踪
在计算机视觉中,行人跟踪是指给一个人一个 ID,在他呈现的每一帧中检测出他,并将他的 ID 转发进来。一旦他来到了这个 ID,咱们就不会重复使用他的 ID。如果一个新的人进入,他就会被一个新的 ID 初始化。
跟踪往往是一项艰难的工作,因为人们可能看起来很类似,导致模型切换 ID。人们可能会被另一个人或物体挡住,当他们呈现时会被调配一个新的 ID。近年来,深度学习技术在多指标跟踪基准(https://motchallenge.net/resu…)上的性能有了显著进步。目前多指标跟踪技术的精度是 62.0
你能够在我的博客中浏览更多对于深度学习行人跟踪的内容。
- https://towardsdatascience.co…
为什么咱们须要进行行人跟踪?
起因是咱们想找出违反社会间隔规定的人的数量。在没有跟踪器的状况下,如果两个人走得很近,那么他们在每一帧中都会被视为违规,然而如果咱们应用跟踪器,那么咱们能够将其视为一次违规事件。
在这个博客中,我应用了深度排序模型(https://arxiv.org/abs/1703.07402)进行跟踪。
这个模型的代码是作者在他们的 GitHub(https://github.com/nwojke/dee…)上公开公布的。
深度排序模型应用人的地位和外观来跟踪。地位信息通过 Kalman 滤波器捕捉,Kalman 滤波器预测盒子的下一个可能地位,而外观信息是应用生成嵌入的深度学习模型生成的。
若要在此视频上运行代码,须要将原始图像和蕴含所有边界框地位的检测文件传递给跟踪器。而后,跟踪器应用这些信息为每帧中的每个人调配一个 ID。deep sort 博客上具体解释了这一点。请参见上面对此剪辑执行跟踪的后果。正如你所看到的,每个人都被调配了一个 ID,这个 ID 被胜利地转入下一帧。跟踪器还输入一个 csv,其中蕴含轨迹的详细信息。
我曾经在 Github 上(https://github.com/priya-dwiv…)共享了这个文件,咱们将在代码的下一部分应用它。
应用深度排序模型进行行人跟踪:
发现违反社交间隔的行为
为了检测社会间隔违规行为,咱们在框架中选取每个轨道,并测量其与框架中其余轨道的间隔。每个轨迹基本上都是一个带 ID 的边界框,因而能够应用它们之间的欧氏间隔将边界框与另一个边界框进行比拟。代码如下所示。
def distance_boxes (boxA, boxB):
import math
center_boxA = [(boxA[0] + boxA[2])/ 2.0, (boxA[1] + boxA[3])/2.0]
center_boxB = [(boxB[0] + boxB[2])/ 2.0, (boxB[1] + boxB[3])/2.0]
pixel_distance = math.sqrt(((center_boxA[0]-center_boxB[0])**2)+((center_boxA[1]-center_boxB[1])**2) )
return pixel_distance
当初咱们开始建模。其代码在上面共享。这与我的 Github 中的代码雷同。
- https://github.com/priya-dwiv…
对每个帧运行的次要步骤是:
- 比拟每个轨迹和其余轨迹之间的像素间隔
- 如果间隔小于靠近间隔阈值,则两人间隔太近。因而,将 safe=1 放在两个边界框的数据框中。变量“safe”稍后用于可视化
- 咱们还想计算每个 ID 的总违规次数。这被计算为它们太靠近的其余 ID。因而,只有间隔小于靠近间隔阈值,咱们都会在字典中保护一个过于靠近的轨迹列表
代码运行得很慢,因为它须要将每个轨道与其余轨道进行比拟,并在 600 帧以上执行此操作。这些计算中有许多是反复的,因为它将别离测量轨道 1 与轨道 2 之间的间隔,而后轨道 2 与轨道 1 之间的间隔。
为了节省时间,我将两次计算的后果存储在一次传递中。因而,当比拟 track1 和 track 2 时,后果将写入数据帧中各自的行中。这样能够将运行工夫缩小一半。
我发现,像素间隔为 70 对于检测那些“仿佛”走得太近的人来说是相当正当的。代码的可视化模块会在框太近时亮显红色框,并显示每个框的违规计数。带有后果的示例框架如下所示。
理论部署
如果要部署它,须要思考一些事件。
- 摄像机须要注册,这样咱们就能够正确地将像素间隔映射到事实世界中的间隔
- 如果存在间断的摄像机阵列,那么咱们可能须要增加行人重辨认性能,以帮忙跟踪器在摄像机之间转发 ID 和违规计数。在过来的几年里,人们对行人重辨认(https://arxiv.org/abs/2001.04193)进行了大量的钻研
- 这里的代码是轻量级的,能够在与摄像机绑定的 Jetson TX2(https://developer.nvidia.com/…)之类的嵌入式设施上运行。
论断
跟踪是计算机视觉中的一个重要问题,有着宽泛的利用。其中一个应用程序就是检测社交间隔违规行为。这能够帮忙城市评估公共卫生危险,并在较平安的状况下从新凋谢公共场合。
我心愿你能尝试一下代码,并尝试一下在更改靠近规范间隔时会产生什么。
参考文献
-
MOT 挑战
- https://motchallenge.net/
-
深度排序算法
- https://arxiv.org/abs/1703.07402
原文链接:https://medium.com/swlh/using…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/