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…

系统架构设计师【论文-2017年 试题2】: 论软件架构风格(包括写作要点和经典范文)

题目:论软件架构风格 (2017年 试题2) 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格 定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和 连接件类型&#xff…

解决Flutter应用程序的兼容性问题

哈喽呀,大家好呀,淼淼又来和大家见面啦,Flutter作为一个跨平台的移动应用开发框架,极大地简化了开发者同时在Android和iOS平台上构建应用的难度。然而,由于不同设备、操作系统版本以及Flutter框架本身的变化&#xff0…

关于valueOf和parseInt的记忆

记住 valueOf 和 parseInt 这些方法所属的类和它们的用法确实可能有些混乱。以下是一些策略和记忆技巧,帮助你更好地记住这些方法: 1. 理解常见的类和方法 了解一些常见的类及其方法所属的类别和用途。 String类: String.valueOf 方法将不同类型的值转…

[C语言]条件编译

C语言条件编译用途&#xff1a; 1.判断宏是否被定义&#xff1b; 2.判断宏是否未被定义&#xff1b; 3.选择性执行 #include <stdio.h>#define DEBUG 10 #define HIGH 2int main() {int value 10;//1.用于判断宏是否被定义 #ifdef DEBUGprintf("1.DEBUG define…

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

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

nginx入门与实践

当谈到NGINX的入门与实践时&#xff0c;理解基本概念并能够应用实际场景非常重要。NGINX是一个高性能的HTTP和反向代理服务器&#xff0c;也可用作负载均衡器和HTTP缓存。以下是一些入门级别的NGINX实践和代码示例&#xff0c;帮助你开始学习和使用它。 1. 安装和基本配置 安…

栅格数据实现最优参数地理探测器(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…

less-loader的less转成CSS的底层原理

在现代Web开发中&#xff0c;CSS预处理器如LESS极大地提高了编写样式的效率和灵活性。而less-loader作为webpack的一个加载器&#xff0c;用于将LESS文件转换为CSS文件。本文将深入探讨less-loader如何工作&#xff0c;从解析LESS文件到生成最终的CSS文件的底层原理。 工作流程…

Go 基础丨切片 slice

1. 底层 runtime/slice.go type slice struct {array unsafe.Pointer // 指向底层数组len int // 切片元素数量cap int // 底层数组容量 }reflect/value.go type SliceHeader struct {Data uintptrLen intCap int }2. 创建 根据数组创建 s : arr[0:3]字面…

低功耗蓝牙ble开发(三)——基于bluez5接口的ble应用示例

5、应用实例 一般 BLE&#xff08;低功耗蓝牙&#xff09;设备的连接流程可以分为以下几个步骤&#xff1a; 启动设备发现&#xff1a;通过 StartDiscovery 方法开始扫描周围的 BLE 设备。监听设备发现信号&#xff1a;监听 InterfacesAdded 信号&#xff0c;以获取发现的设备…

【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…

102. 二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 自己想到的笨方法 /*** Definition for a binary tree node.* public class TreeNode {* public var val: Int* pu…