教程|用深度学习DIY自动化监控系统(如何自制监控)

选自《媒介》,作者Bharath Raj,汇编人《机器之心》,参与人:卓慧媛和。
它在监控安全和巡逻方面发挥着重要作用,但也是一项非常枯燥的工作。深度学习的出现在一定程度上把人类从这个任务中解放出来。介绍了如何利用基于深度学习的物体检测构建一个简单而有效的监控系统,并比较了GPU多处理推断出的不同物体检测模型在行人检测中的性能。
监控是安保和巡逻不可或缺的一部分。在大多数情况下,这份工作要花很长时间才能找到你不期望发生的事情。我们做的事情很重要,但也是很枯燥的工作。
如果有什么东西可以代替我们的“观察和等待”,生活不是会简单很多吗?你很幸运。随着过去几年的技术进步,我们可以编写一些脚本来自动执行上述任务——并且很容易实现。但在深入之前,我们先问问自己:机器的性能有人类好吗?
熟悉深度学习的人都知道,图像分类器的准确率已经超过了人类的水平。
与人类相比,传统的计算机视觉(CV)和深度学习在ImageNet数据集上的错误率是时变的。(来源:https://www . dsiac . org/resources/journals/dsiac/winter-2017-volume-4-number-1/real-time-situ-intelligent-video-analytics)
与人类相比,机器能以相同(或更好)的标准保持对物体的监控。所以用技术来监控效率要高得多。
监控是一项重复繁琐的工作,可能会导致人的表现下降。但通过使用技术来监控,我们可以在出现问题时集中精力采取行动。为了调查一大片地区,你将需要大量的人力。固定摄像机的视野是有限的。这些问题可以通过使用移动监控机器人(如微型无人机)来缓解。此外,该技术还具有除安全之外的各种应用,如婴儿监视器或自动化产品交付。
太好了!但是我们如何实现自动化呢?
在设计一个复杂的理论之前,我们先考虑一下监控的正常运行。如果我们在观看视频时发现异常,我们会采取行动。所以本质上,我们的技术应该仔细阅读视频的每一帧,希望能发现一些不寻常的东西。这个过程熟悉吗?
您可能已经猜到了,这就是使用带位置的目标检测的本质。它与分类略有不同,即我们需要知道目标的确切位置。此外,我们可能在单个图像中有多个目标。
为了找到目标的准确位置,我们的算法应该检查图像的每个部分,以找到类的存在。这比听起来要难。然而,自2014年以来,深度学习领域不断更新的研究引入了复杂的神经网络,可以实时检测目标。
你看,短短2年,性能提升了这么多!
有几种深度学习架构在内部使用不同的方法来完成相同的任务。最受欢迎的变体是更快的RCNN、YOLO和SSD网络。
速度和精度之间的权衡。更高的mAP和更少的GPU运行时间是最优的。
每个模型依赖于一个基本的分类器,这个分类器对最终的精度和模型大小有很大的影响。此外,目标检测器的选择会极大地影响计算复杂度和最终精度。
选择目标检测算法的过程通常是在速度、精度和模型大小之间进行权衡。
在这篇博文中,我们将学习如何使用目标检测来构建一个简单而有效的监控系统。让我们首先讨论由于监视任务的性质而产生的约束。
监控领域深度学习的限制因素
我们经常想要监视一个大区域。在实现自动监控之前,我们需要考虑一些因素。
1.视频输入
一般来说,为了监控一个大区域,我们需要多个摄像头。此外,这些摄像头需要在某个地方存储数据;或者在本地或者在一些远程存储器中。
典型的监控摄像头。(图片来自Unsplash的Scott Webb)
较高质量的视频将比较低质量的视频占用更多内存。此外,RGB输入流比BW输入流大3倍。由于我们只能存储有限数量的输入流,我们通常会降低质量以最大化存储。
因此,可扩展的监控系统应该能够分析低质量的图像。因此,我们的深度学习算法也必须在低质量图像上进行训练。
2.处理能力
既然输入约束已经解决,我们可以回答一个更大的问题。我们在哪里处理从摄像机获得的数据?有两种方法可以做到这一点。
中央服务器上的处理:来自摄像机的视频流在远程服务器或集群上逐帧处理。这种方法非常健壮,同时它允许我们以高精度利用复杂的模型。明显的问题是延迟;所以你需要一个快速的网络连接来解决延迟问题。另外,如果不使用商业API,服务器设置和维护的成本会很高。
内存消耗和GPU推理时间(毫秒)。大多数高性能型号消耗大量内存。(来源:https://arxiv.org/pdf/1611.10012.pdf)
边缘处理通过连接一个小的微控制器,我们可以对摄像机进行实时推断。没有传输延迟,并且可以比以前的方法更快地报告异常。此外,这对移动机器人来说是一个很好的补充,因此它们不再需要受到可用WiFi/蓝牙范围的限制。(比如微型无人机。)
不同目标检测器的FPS性能。(来源:3359medium.com/@ Jonathan _ hui/object-detection-speed-and-accuracy-comparison-fast-R-CNN-R-FCN-SSD-and-YOLO-5425656 a E359)
缺点是微控制器没有GPU强大,所以你可能会被迫使用精度较低的模型。使用板载GPU可以避免这个问题,但是价格昂贵。一个有趣的解决方案是使用TensorRT这样的软件,可以优化程序的推理过程。
培训监控系统
在本节中,我们将使用目标检测来测试如何识别行人。我们将使用TensorFlow目标检测API来构建我们的模块。我们将简单讨论如何设置API并训练它完成监控任务。详见另一篇博文(https://medium . freecodecamp . org/how-to-play-quiddice-using-the-tensor flow-object-detection-API-b 0742 b 9065d)。
整个过程可以总结为3个阶段:
1.数据准备
2.培训模式
推断
涉及训练目标检测模型的工作流。
如果你想看到能激励你做更多尝试的结果,请向下滚动到阶段3!
阶段1:数据准备
步骤1:获取数据集
过去拍摄的监控视频可能是你能得到的最准确的数据集。然而,在大多数情况下,通常很难获得这样的监控视频。在这种情况下,我们可以训练我们自己的目标检测器,以便从正常图像中识别我们的目标。
从我们的数据集中提取带注释的图像。
如前所述,相机中的图像质量可能较低。所以你必须训练你的模型去适应这样的工作条件。一个巧妙的方法是使用数据增强,这里有详细的解释(https://medium . com/nano nets/how-to-use-deep-learning-when-you-has-limited-data-part-2-data-augmentation-c 26971 DC 8 ed)。本质上,我们必须添加一些噪声来降低数据集中图片的质量。我们也可以尝试模糊和侵蚀效果。
对于目标检测任务,我们将使用TownCentre数据集。我们将使用视频的前3600帧进行训练和验证,剩下的900帧进行测试。您可以使用我的github repo中的脚本来提取数据集。GitHub repo:https://github.com/thatbrguy/Pedestrian-Detector。
步骤2:注释数据集
可以使用LabelImg之类的工具进行评论。这是一项繁琐的任务,但同样重要。注释存储为XML文件。
幸运的是,TownCentre数据集的所有者提供了csv格式的评论。我写了一个快速脚本将评论转换成所需的XML格式,也可以在上面的github repo中找到。
步骤3:克隆存储库。
克隆存储库(https://github . com/thatbrguy/行人检测器)。运行下面的命令来安装需求包,编译一些Protobuf库并设置路径变量。
pip-r requirements . txt sudo apt-get install proto buf-compiler protocol object _ detection/protos/*。proto-python _ out=。export python path=$ python path 3360 ` pwd ` 3360 ` pwd `/slim步骤4:准备支持的输入
我们需要给我们的目标分配一个身份。我们在名为label_map.pbtxt的文件中定义ID,如下所示:
item { ID : 1 name : ‘ target ‘ }接下来,您必须创建一个包含XML和图像文件名的文本文件。例如,如果您的数据集中有图像img1.xml、img2.xml、img1.xml和img2.xml,您的trainval.txt应该如下所示:
Img1img2把你的数据集分成两个文件夹,分别是图像和标注。将label_map.pbtxt和trainval.txt放入annotations文件夹中。在annotations文件夹中创建一个名为xmls的文件夹,并将所有XML文件放入其中。您的目录层次结构应该如下所示:
-base _ directory |-images |-annotations | |-XML | |-label _ map . Pb txt | |-train val . txt第五步:创建TF记录
API接受TFRecords文件格式的输入。使用my repo中提供的create_tf_records.py文件将您的数据集转换为TFRecords。您应该在基本目录中执行以下命令:
python _ TF _ record . py \-data _ dir=` pwd `\-output _ dir=` pwd `程序执行后,会发现两个文件:train.record和val.record
第二阶段:培训模式
第一步:型号选择
如前所述,这是速度和准确性之间的权衡。同时,从零开始创建和训练目标检测器是非常耗时的。因此,TensorFlow目标检测API提供了一堆预训练模型,您可以在您的任务中进行微调。这个过程叫做迁移学习,可以大大加快你的训练过程。
基于MS COCO数据集的预训练模型
下载其中一个模型,并将内容解压缩到您的基本目录中。您将获得模型的检查点、冻结的推理图和pipeline.config文件。
第二步:定义培训任务。
您必须在pipeline.config文件中定义“培训任务”。将文件放在基本目录中。真正重要的是文件的最后几行——您只需要将突出显示的值设置到您自己的文件位置。
gradient _ clipping _ by _ norm : 10.0 fine _ tune _ check point : \ ‘ model . ckpt \ ‘ from _ detection _ check point : true num _ steps : 200000 } train _ input _ reader { label _ map _ path : \ ‘ Annotations/label _ map . Pb txt \ ‘ TF _ record _ input _ reader { input _ path 3: \ ‘ train . record \ ‘ } } eval _ config { num _ examples 3: 80000
执行以下命令开始训练。建议使用GPU足够大的机器(假设你已经安装了TensorFlow的GPU版本)来加快训练过程。
python object _ detection/train . py \-logtostanderr \-pipeline _ config _ path=pipeline . config \-train _ dir=train阶段3:推理
步骤1:导出培训模型
在使用模型之前,您需要将训练好的检查点文件导出到一个冻结的推理图中。其实说起来容易做起来难。——只需执行以下代码(用检查点编号替换“即可xxxxx
」):
python object _ detection/export _ inference _ graph . py \-input _ type=image _ tensor \-pipeline _ config _ path=pipeline . config \-trained _ check point _ prefix=train/model . ckpt-

其他教程

如何用捷径下载ins图片(捷径 ins图片下载)

2022-9-9 1:39:56

其他教程

剑网三官方音乐(剑网三蓬莱背景音乐)

2022-9-9 1:41:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索