我们如何计算使用计算机视觉的人数

图片
来自开放源代码的照片

人群的聚集在各个领域(零售,公共服务,银行,开发商)产生了问题。客户需要在许多地方(在服务办公室,行政大楼,建筑工地等)组合并监视有关人数的信息。

人员计数任务具有现成的解决方案,例如,使用带有内置分析功能的摄像机。但是,在许多情况下,重要的是使用以前安装在不同部门的大量摄像机。此外,考虑到特定客户的详细信息的解决方案对他来说会更好。

我们的名字叫Tatyana Voronova和Elvira Dyaminova,我们在2M中心从事数据分析。尽管该主题似乎是当前在计算机视觉问题中考虑的最简单的问题,但是即使在这个问题中,在实践(实现)时,也必须解决许多复杂且不平凡的子任务。本文的目的是通过解决一个基本问题的示例来说明计算机视觉问题的复杂性和基本方法。对于以下材料,我们希望吸引同事:视频分析的开发人员,工程师,项目经理,以便他们讨论所涉及的计算资源,速度测量,与客户沟通的细微差别以及项目实施故事。我们将重点介绍一些使用的数据分析方法。

让我们从下面的语句开始:您需要显示服务办公室队列中的人数。如果根据客户公司的内部规则将队列视为紧急队列,则将开始制定内部方案:
  • 通知需要开设额外的入口/收银台;
  • 经理电话;
  • 告知需要将人员流重定向到其他(更免费的)收银处。

因此,我们的工作将为客户节省很多神经。

使用的机器学习模型


人物剪影检测


最初,我们决定使用已经训练有素的模型来检测人(剪影),因为此类任务具有相当好的解决方案,例如,轮廓定义

因此,在TensorFlow库中有大量的预训练模型

进行测试之后,我们首先确定了两种架构:Faster R-CNN和YOLO v2。后来,在新版本出现之后,我们添加了YOLO v3。

型号描述

YOLO v2识别结果的示例(以下图像是从免费来源获取的-我们无法发布来自客户相机的帧):

图片

Faster R-CNN的识别结果的示例:

图片

YOLO的优点是模型响应速度更快,这在某些任务中很重要。但是,在实践中,我们发现,如果无法使用模型的预训练版本,并且您的专业训练集上需要重新训练,则使用Faster R-CNN更为正确。如果将摄像机安装在距离人足够远的地方(对于1920 x 1080分辨率,轮廓的高度小于100像素),或者有必要另外识别人的个人防护设备:头盔,紧固件,防护服元素,在这种情况下,训练质量取决于您自己的数据集(最多10个)一千个不同的对象)对于YOLO v2,我们不满意。

YOLO v3显示了可接受的结果,但是,与Faster R-CNN相比,YOLO v3的速度测试没有显着优势。另外,我们找到了一种通过使用批处理(图像的分组处理),图像的选择性分析(以下更多内容)来提高识别速度的方法。

对于所有类型的模型,我们使用结果的后处理提高了准确性:我们删除了值中的离群值,并采用了一组连续帧中最常见的值。一台摄像机的一秒钟通常对应25至50帧。当然,为了提高性能(使用越来越多的摄像机),我们不分析每帧,但是通常可以在几秒钟的间隔内给出最终答案,即使用几帧。可以考虑摄像机总数(用于处理的视频流)和可用的计算能力来动态地做出此决定。

在我们自己的数据集上训练的使用Faster R-CNN模型的示例:

图片

现在,我们正在使用SSD-300模型进行测试我们希望这将使我们提高生产率,同时保持可接受的识别质量。

创建自己的训练数据集


在您要创建自己的学习集的情况下,我们为自己开发了以下过程:
  • 我们收集带有所需对象的视频片段:客户的视频,公共领域的视频(布置好的视频,监控摄像机);
  • 我们剪切并过滤视频片段,以使生成的数据集在各种识别对象之间保持平衡;
  • 我们在标记之间分配框架以突出显示必要的对象。标记工具的一个例子 ;
  • 有选择地检查标记结果;
  • 如有必要,我们执行增强:通常我们添加转弯,反射,更改清晰度(形成扩展的标记数据集)。

使用检测区


排队人数计数的问题之一是多个摄像机的可视区域的交集。一个房间中可以安装多个摄像头;因此,重要的是要保留图像的重叠区域,并且当一个人进入多个摄像头的视野时,应考虑一次。

在某些情况下,仅需要在房间的某个区域(服务窗口附近)或平台的某个区域(设备附近)检测到人员。

由于明显的原因,验证限制整个人的边界矩形(框/框架)落入区域(多边形)是错误的。在这种情况下,矩形的底部(三分之一/一半)被分为多个点-节点(采用10 x 10的网格),并检查落入各个选定节点的区域。系统管理员根据房间的几何形状分配``重要''节点(如果未输入特定房间的设置,也会选择默认值)。

图片

此外,正在测试Mask R-CNN架构在我们的任务中的应用。该方法使您可以确定轮廓的轮廓- 在分析与区域的交点时,可以避免使用边框矩形

图片

另一种方法:头部检测(模型训练)


选择模型,增加/更改训练集以及其他纯粹的ML方法并不总是可以达到质量。有时,只有通过改变问题的整个表述(例如,在我们的问题中)才能获得决定性的改进。在这些队列中,人们拥挤并因此彼此重叠,因此识别的质量通常不足以仅在实际条件下使用此方法。

拍摄下图。我们对照片是在手机上拍摄的事实视而不见,其倾斜角度与CCTV摄像机的倾斜角度不对应。框架上有18个人,轮廓检测模型确定了11个人:

图片

为了改善结果,我们从定义轮廓转向定义目标。为此,Faster R-CNN模型是根据从链接(数据集包含人数不同的帧,包括大型群集,其中有不同种族和年龄的人群)。

另外,我们用来自客户(相机)的材料的帧丰富了数据集约三分之一(主要是由于原始数据集戴着帽子的人很少)。教程对于自学习模型很有用

我们遇到的主要问题是图像质量和物体尺寸。头的大小不同(如上图所示),客户相机的镜框分辨率为640x480,因此,有时会将有趣的物体(引擎盖,圣诞球,椅子靠背)检测为头。

例如,在训练数据集中,我们标记了头部:

图片-这些是数据集中的头;

图片-这是椅子的靠背,但是模特想相信这是椅子的头。

但是,总的来说,该模型可以很好地应对人群高度集中的情况。因此,在上面的框架中,我们的模型识别出15个人:

图片

因此,在此图像中,模型找不到仅三个头部,这些头部明显被异物阻塞。

为了提高模型的质量,您可以用更高分辨率的摄像机替换当前的摄像机,并另外收集和标记训练数据集。

然而,值得考虑的是,对于少数人来说,通过轮廓而不是头部进行检测的方法更合适,因为轮廓更难以完全重叠或与异物混淆。但是,如果有人群,那就没有出路了,因此为了排队人数,决定并行使用两个模型-头部和轮廓-结合答案。

轮廓和头部,识别结果的示例:

图片

准确率评估


在测试模型时,选择不参与训练的框架(框架上具有不同人数,不同角度和不同大小的人的数据集),以评估模型的质量,我们使用了召回率和精确度。

回忆 -完整性显示了我们正确预测的实际上属于肯定类别的对象的比例

精度 -精度表示我们正确预测了被识别为肯定类对象的比例

在测试站点上的摄像机的帧上(这些房间中的图像在数据集中)度量:

图片

在新摄像机的帧上(这些房间不在数据集中):

图片

当客户需要一位数字时,即准确性和完整性的组合,我们提供了调和平均值F度量
图片

报告中


服务的重要部分是统计。客户希望与单个框架(以及由他们指定的专职人员)一起以现成的报告(仪表盘)的形式查看结果,这些报告具有不同时间间隔的平均/最大占用率。结果通常以图形和图表的形式表示有趣,这些图形和图表描述了人数随时间的分布情况。

例如,在我们的车架解决方案中,计算了两个模型(剪影和车头)的人数,并选择了最大人数。如果房间中有多个摄像机,则将保存图像重叠区域(通过界面预先设置),当一个人进入多个摄像机的范围时,将对其进行一次考虑。
接下来,针对几个连续的帧形成间隔为Δt的队列中人数的值。在一个小时内,每个房间都会卸载几个这样的时间间隔的值。

时间间隔的大小和间隔数是根据房间数和使用的计算能力确定的。对于每个间隔,由房间中的人数构成一组值。

选择最常用的值(模式)。如果有多个具有相同频率的值,则选择最大值。

结果值是时间t队列中的人数紧跟着有问题的间隔。在短短一个小时内,以不同的时间间隔获得了一组值-即在时刻t_1,t_2 ...处的值。t_n

进一步对于t_1,t_2...。t_n,计算了人数最大值和平均值-这些值在报告中显示为给定小时的高峰和平均负荷。

最大负荷的时间分布图(简单示例):

图片

平均负荷的时间分布图(简单示例):

图片

人群


最后,为完成本主题,我要提到非常大的人群的情况,例如,在人流密集的运动场中的人群。

这些任务是关于估计人群的大小:如果是300人的人群,则回答312或270被认为是可以接受的。

实际上,我们不必借助视频分析来解决此类问题(如果这是有组织的活动,那么每个人都可以更轻松地发布标签)。但是,我们进行了测试。对于此类任务,使用单独的方法,方法概述

复习后的模型结果(在CSRNet上预先训练的模型)已复制:

图片

角度对于此型号的设置很重要,也就是说,如果拍摄位置固定,则效果将优于应用于各种图像时的效果。一般而言,有机会重新训练该模型-当安装的摄像机中的真实视频打开时,可以在模型运行期间提高质量。

该文章的作者:Tatyana Voronova(特沃罗诺娃),Elvira Dyaminova(埃尔维拉

All Articles