YOLOv5目标检测——基于YOLOv5的吊车安全监测

移动式起重机是建筑施工中使用的重要设备。 遵守正确的操作程序对于防止事故很重要。 然而,其中存在人为错误的因素。 这里我将举一个例子来说明计算机视觉(CV)如何帮助解决这个问题。

1、移动式起重机操作的安全问题

为简单起见,将移动式起重机分为 3 个部分:车身、支腿和吊臂:

移动式起重机的3个主要部分:臂架、车身(主车)、支腿(提供起重机稳定性的延伸4条支腿)

起重机可以处于 3 种可能的状态:移动、伸出支腿和张开吊臂:

左(移动状态)、中(伸长支腿)、右(张开臂架)

当起重机处于移动状态时,其臂架必须闭合,支腿必须缩回。 在起重机能够抬起吊臂并开始搬运重物之前,必须伸出支腿以增加起重机的稳定性。 最后,打开臂架状态是指臂架升起时的状态。 正确的顺序是停放起重机,均匀伸出支腿,然后再提升吊臂。 在起重机可以移动之前,执行相同的顺序。

问题在于起重机操作员没有遵循正确的顺序。 例如,他们在吊起臂架之前不使用支腿,或者在臂架仍打开或支腿仍伸出时驱动起重机。

在支腿伸出时驾驶起重机。 错误!

这可能非常危险! 一种后果可能是碰撞,但更危险的情况是起重机翻倒。

在这里插入图片描述

起重机翻倒是因为它没有伸出所有的支腿。

这个问题可以通过使用闭路电视摄像机来监控起重机的使用情况来解决。 随着深度学习的进步,我开发了一个人工智能管道,1. 检测起重机在框架内的位置,2. 跟踪起重机的运动,然后 3. 确定起重机的状态。

2、深度学习模型管线

下图是模型管线图。

模型管线

该管线从 YOLOv5 对象检测模型开始,模型检测 2 个类别:人和起重机(人员检测用于另一项任务)。 因为我想跟踪起重机的运动,所以我应用了 DeepSORT。 接下来,起重机的图像被裁剪出来并用作图像分类器的输入。 分类器输出 3 种可能的状态:移动、伸出支腿、打开吊杆。

3、数据采集

工作现场的视频片段被收集了四个月,之后经过处理以找到带有起重机的帧。 总共提取出34个视频片段,然后采样出各个帧。 我们总共标记了 2523 个帧用于训练数据集,2071 个帧用于验证。

数据收集和数据分割的时间表

4、物体检测和跟踪结果

我使用预先训练的权重并冻结模型的主干来微调模型。 我对所有模型大小进行了实验,发现 YOLOv5m 产生了最好的结果。

起重机的 mAP@0.5 为 0.953。 在 0.5 置信度下,起重机召回率为 0.95,在 0.5 置信度下,起重机精度为 0.96,F1 得分为 0.95。

YOLOV5训练日志

来自测试/验证集的预测帧样本

对于跟踪部分,使用了原始的 DeepSORT,并进行了较小的修改。 监控起重机的卡尔曼滤波器状态(速度 x、y、r 和 h)的运动情况。 起重机跟踪的准确度为 100%,可以在测试集的所有帧中正确跟踪和识别起重机。 这是因为场景中通常只有 1 个起重机,并且相对于帧速率而言,它的移动速度相当慢。

5、起重机状态分类器

起重机的图像已获取并分为 3 类(移动式、加长支腿式和开放式吊臂)。 数据集总数总结如下。

分配类别来训练分类器。 数量少且不平衡

存在类别不平衡的问题,其中大部分数据集由 open-boom 类别组成。 因为起重机在使用时会进入场景,大部分时间都处于开臂状态。 移动和伸出支腿状态的示例仅在起重机进入框架到达工作地点的短时间内可用。 班级不平衡会对监督学习产生负面影响。 此外,训练数据集数量较少,存在过拟合的风险。

所以我对起重机状态分类器进行了对比学习。 请查看我的另一篇关于使用三元组损失训练编码器将图像转换为向量表示,然后使用 SVM 对状态进行分类的文章。 该方法产生的模型比经典的多类图像分类器模型更准确。

6、起重机使用监控

为了监控起重机的使用情况,观察了两件事:起重机状态排序和起重机状态移动。 正确的起重机顺序总结如下。

起重机的正确使用顺序

对于顺序检查,起重机状态应始终处于移动伸出支腿打开臂架的状态。 分类器的预测存储在固定大小的 FIFO 缓冲区中。 缓冲器内存储的状态被共同用来确定起重机的实际状态。 这使得整体预测对于噪声或单个帧的错误预测更加稳健。

用于存储每个帧的预测起重机状态的 FIFO 缓冲区

一旦知道了起重机的状态,我就通过检查履带式起重机中边界框的 x、y、宽度和高度的卡尔曼速度矩阵来检查起重机是否静止。 如果起重机位于伸出的支腿或打开的吊臂中,则起重机应保持静止。

7、结束语

该系统的结果表明,它可以24小时监控起重机活动,无需人工干预。 这样可以防止可能导致设备损坏和生产时间损失的事故,从而节省金钱和时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 离线安装客户端

1. 官方网址下载对应架构的安装包。 比如我的是centOs 7 x64。则需下载如图所示的安装包。 2. 安装 使用如下命令依次安装 devel , client-plugins, client. rpm -ivh mysql-community-*.x86_64.rpm --nodeps --force 在Linux系统中,rpm是一个强大的包管理工具&…

Python基础教程(二十四):日期和时间

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

springboot弘德图书馆座位预约管理系统-计算机毕业设计源码07028

摘 要 在面对当今培育人才计划的压力,人们需要汲取更多的不同领域的知识来不断扩充自己的知识层面,因此他们对学习的欲望不断扩大,图书馆作为我们的学习宝地,有着不可替代的地位。但是在信息化时代,传统模式下的图书馆…

栅格数据实现最优参数地理探测器(OPGD)详细教程!(上)

数据准备 要探寻一堆因素对因变量的影响,首先你要确定要用哪些自变量来影响哪个因变量 想好了之后 你需要到相应的网站去下载你的研究区的自变量和因变量数据的栅格数据(可以是离散的,也可以是连续的) 后续操作是到Arcgis里对你的数据处理一下 由于不是教程的重点,这里就…

uniApp @input事件更改输入框值,值改变了但是页面没更新新的值

<uni-easyinputtype"text"trim"all":inputBorder"false"v-model"customFormData.completePercent"input"(val) > completeOnInput(val)"placeholder"请输入" /> function completeOnInput(val) {let num…

【Linux】进程_7

文章目录 五、进程8. 进程地址空间9. 进程终止10. 进程等待 未完待续 五、进程 8. 进程地址空间 我们上节知道了进程地址空间是根据页表来使虚拟地址转换成内存中的物理地址&#xff0c;那这种 地址空间 页表 的机制有什么好处呢&#xff1f;①这种机制可以将物理内存从无序…

Elixir学习笔记——Erlang 库

Elixir 提供了与 Erlang 库的出色互操作性。事实上&#xff0c;Elixir 不鼓励简单地包装 Erlang 库&#xff0c;而是直接与 Erlang 代码交互。在本节中&#xff0c;我们将介绍一些 Elixir 中没有的最常见和最有用的 Erlang 功能。 Erlang 模块的命名约定与 Elixir 不同&#x…

Springboot整合阿里云ONS RocketMq(4.0 http)

1. 引入依赖 <!--阿里云ons&#xff0c;方便的接入到云服务--> <dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</artifactId><version>1.8.4.Final</version> </dependency>2. 配置 配…

2024年下一个风口是什么?萤领优选 轻资产创业项目全国诚招合伙人

2024年&#xff0c;全球经济与科技发展的步伐不断加快&#xff0c;各行各业都在探寻新的增长点与风口。在这样的时代背景下&#xff0c;萤领优选作为一个轻资产创业项目&#xff0c;正以其独特的商业模式和前瞻的市场洞察力&#xff0c;吸引着众多创业者的目光。(领取&#xff…

SqlSugar有实体CURD应用-C#

本文所述开发环境&#xff1a;.C#、NET8、Visual Studio2022 SqlSugar有实体查询数据表 首先根据《SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#》中的描述的表结构创建所有表的实体类如下&#xff1a; 表名创建的实体类名tb_studentStudenttb_teacherTeachertb_c…

++++++局部变量、全局变量及变量的存储类别++++====+++指针+++

局部变量、全局变量及变量的存储类别 局部变量与全局变量的基本概念 局部变量&#xff1a;在函数内部定义的变量称为局部变量&#xff0c;也称为内部变量。它们只在定义它们的函数内部有效&#xff0c;即只有在这个函数被调用时&#xff0c;局部变量才会被分配内存空间&#x…

【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条

总结 需要安装插件 mouse-wheel 和 scrollbar 在PC端如何开启鼠标滚动? 需要安装官方提供的滚动插件&#xff1a;mouse-wheel https://better-scroll.github.io/docs/zh-CN/plugins/mouse-wheel.html 为了开启鼠标滚动功能&#xff0c;你需要首先引入 mouseWheel 插件&…

光伏工程开发的详细步骤

光伏工程作为可再生能源领域的重要组成部分&#xff0c;其开发过程涉及多个环节&#xff0c;包括开发、测绘、设计、施工和运维等。下面将详细介绍这些步骤。 一、开发阶段 1、前期调研&#xff1a;对目标地区进行能源政策、市场需求、资源条件等方面的调研&#xff0c;评估项…

SuperMap GIS基础产品FAQ集锦(20240617)

一、SuperMap iDesktopX 问题1&#xff1a;请问udbx数据源的数据集最多支持多少个属性字段&#xff1f; 现在客户合并数据集后属性字段有1119个&#xff0c;导致无法复制数据集 11.1.1 【问题原因】理论上是没有上限&#xff0c;我们底层没有针对这点进行限制&#xff0c;通常…

.gitignore文件忽略的内容不生效问题解决

文章目录 ①&#xff1a;现象②&#xff1a;原因③&#xff1a;解决 ①&#xff1a;现象 在已经提交过的git管理的项目中&#xff0c; 新增加一个.gitignore文件&#xff0c;文件内忽略内容不生效或者修改.gitignore文件之后&#xff0c;文件内新增的忽略内容不生效 ②&#…

了解 Blazor Server App 项目结构

在本文中&#xff0c;你将获得以下问题的答案 先决条件如何创建 Blazor Server App 项目&#xff1f;Blazor Server 应用程序的项目结构是什么样的&#xff1f;每个默认文件夹有什么用如何设置启动razor组件或页面运行&#xff1f; 先决条件 HTML、CSS 和 Javascript 的基本…

如何使用任意浏览器远程访问本地搭建的Jellyfin影音平台

文章目录 前言1. Jellyfin服务网站搭建1.1 Jellyfin下载和安装1.2 Jellyfin网页测试 2.本地网页发布2.1 cpolar的安装和注册2.2 Cpolar云端设置2.3 Cpolar本地设置 3.公网访问测试4. 结语 前言 本文主要分享如何使用Windows电脑本地部署Jellyfin影音服务并结合cpolar内网穿透工…

如何在招聘中开始使用AI?

在人工智能时代&#xff0c;招聘团队面临着“用更少的钱做更多的事情”的压力&#xff1a;用更少的钱和更少的团队。根据一项调查&#xff0c;58%的受访者认为&#xff0c;“提高我们助教团队的效率&#xff0c;降低成本”是明年招聘职位的首要任务。在招聘中使用人工智能是提高…

【机器学习300问】119、什么是语言模型?

语言模型&#xff08;Language Models&#xff09;是自然语言处理&#xff08;NLP&#xff09;的重要组成部分&#xff0c;它的目的是量化一段文本或一个序列的概率。简单讲就是你给语言模型一个句子&#xff0c;它给你计算出特定语言中这个句子出现的概率。这样的概率度量可以…

【Netty】nio阻塞非阻塞Selector

阻塞VS非阻塞 阻塞 阻塞模式下&#xff0c;相关方法都会导致线程暂停。 ServerSocketChannel.accept() 会在没有建立连接的时候让线程暂停 SocketChannel.read()会在没有数据的时候让线程暂停。 阻塞的表现就是线程暂停了&#xff0c;暂停期间不会占用CPU&#xff0c;但线程…