当前位置: 首页 > news >正文

基于Faster R-CNN的安全帽目标检测

基于Faster R-CNN的安全帽目标检测项目通常旨在解决工作场所,特别是建筑工地的安全监管问题。这类项目使用计算机视觉技术,特别是深度学习中的Faster R-CNN算法,来自动检测工人是否正确佩戴了安全帽,从而确保遵守安全规定并减少事故风险。

项目背景与目标: 在建筑、矿山和其他高风险作业环境中,安全帽是保护工人免受头部伤害的基本装备。然而,人工检查安全帽的佩戴情况效率低下且容易出错。因此,开发自动化检测系统可以提高工作效率和安全性。

技术细节:

  • 数据收集: 项目首先需要收集大量包含工人头像和安全帽的图像数据,这些数据可能来自于监控摄像头或专门拍摄的照片。
  • 数据标注: 对于每一张图片,需要手动标注安全帽的位置,这通常涉及划定边界框并标记类别(例如,有安全帽、无安全帽)。
  • 模型训练: 使用标注过的数据集来训练Faster R-CNN模型。Faster R-CNN是一个两阶段的目标检测模型,它包括一个区域提议网络(RPN)用于生成候选区域,以及一个用于分类和定位的后续网络。
  • 模型评估: 在测试集上评估模型的性能,调整超参数以优化准确性和召回率。
  • 部署: 将训练好的模型部署到实际环境中,如连接到现场的摄像头,实时分析视频流,识别未戴安全帽的人员。

应用与优势:

  • 实时监控:系统能够连续地分析视频流,及时发现未佩戴安全帽的情况。
  • 减少人力成本:自动化检测减少了对人工监督的需求,节省了人力资源。
  • 提高安全性:通过及时提醒未遵守安全规定的工人,降低潜在的事故风险。
  • 数据分析:收集的数据可用于进一步分析安全行为模式,帮助改善安全管理策略。

挑战与限制:

  • 光照条件变化:室外环境光照变化大,可能影响检测效果。
  • 遮挡问题:工人的姿势、其他物体或人群的遮挡会增加检测难度。
  • 计算资源:实时视频处理需要强大的计算能力,尤其是在边缘设备上。

总之,基于Faster R-CNN的安全帽目标检测项目是一个综合了数据科学、计算机视觉和深度学习技术的解决方案,旨在提高工作场所的安全性。

 

1. 🔥 训练模型前的准备

  • A.数据准备

数据的标注仍然采用VOC格式的数据标注形式,如果是其他的标注形式比如COCO请自行实现相关代码。将数据最终转化为如下形式:

    #  单行数据的结构: (path_filename, x1, y1, x2, y2, class_name)# Note:#   一个path_filename 可能对应多个类别(class_name),每个类别占用一行数据#   x1, y1, x2, y2 是原图像的坐标, 而不是ratio后图像上的坐标#   (x1, y1) 标注框的左上坐标; (x2, y2) 标注框的右下坐标#   x1,y1-------------------#   |                       |#   |                       |#   |                       |#   |                       |#   ---------------------x2,y2

可以运行如下代码实现数据集的准备工作:

python3 ./data/data_pro.py

将在./data文件夹下生成annotation.txt文件,这样训练数据的准备工作即完成。

# path_filename, x1, y1, x2, y2, class_name
/home/myuser/xujing/Faster-R-CNN_hat/data/JPEGImages/000605.jpg,37,12,151,154,hat
/home/myuser/xujing/Faster-R-CNN_hat/data/JPEGImages/000605.jpg,243,1,393,176,hat
/home/myuser/xujing/Faster-R-CNN_hat/data/JPEGImages/PartB_02176.jpg,92,593,180,684,person
/home/myuser/xujing/Faster-R-CNN_hat/data/JPEGImages/PartB_02176.jpg,229,648,357,777,person
  • B.配置文件准备

根据自己的训练集和训练任务修改./keras_frcnn/config.py的配置文件,相关参数的解释和配置如下:

self.verbose = True  # 显示训练过程
self.network = 'vgg' # backbone 目前支持vgg(VGG16),resnet50,xception,inception_resnet_v2# 数据增强策略
self.use_horizontal_flips = False  # 水平随机裁剪
self.use_vertical_flips = False  # 垂直随机裁剪
self.rot_90 = False    # 随机90度旋转# Anchor Box的scale
# 根据具体的情况去修改,一般是图像或目标的大小做调整!!!!
# self.anchor_box_scales = [128,256,512]
self.anchor_box_scales = [4,8,16,64,128,256,512,1024]# Anchor Box的ratio
self.anchor_box_ratios = [[1, 1], [1, 2], [2, 1]]
# self.anchor_box_ratios = [[1, 1]]# 图像最小变填充后的尺寸
self.im_size = 600# 图像channel-wise上的mean和std,这个值是根据ImageNet数据集得到的
# 可以根据自己训练集调整
self.img_channel_mean = [103.939, 116.779, 123.68]
self.img_scaling_factor = 1.0# 一次得到的ROI的个数
self.num_rois = 32# RPN网络特征图的缩小倍数(VGG16的是16,其他网络请自行修改该参数)
# 换网络时 要换的!!!
self.rpn_stride = 16
# 训练时是否做类别blance
self.balanced_classes = False# Regression时的scaling the stdev
self.std_scaling = 4.0
self.classifier_regr_std = [8.0, 8.0, 4.0, 4.0]# 训练集制作过程中的正负样本的划分策略,详细才考faster R-CNN原论文
# overlaps for RPN
self.rpn_min_overlap = 0.3
self.rpn_max_overlap = 0.7# overlaps for classifier ROIs
self.classifier_min_overlap = 0.1
self.classifier_max_overlap = 0.5# class类别映射
self.class_mapping = None# base network的预训练模型的存放位置
# keras预训练模型可以在这里下载: https://github.com/fchollet/deep-learning-modelsself.model_path = './pre_train/vgg16_weights_tf_kernels_notop.h5'  # 我们使用VGG16

2. 🐎 训练模型

预训练模型:Shell下运行

python3 train_frcnn.py --path="./data/annotation.txt" --network="vgg" --input_weight_path="./pre_train/vgg16_weights_tf_kernels_notop.h5"

windows下直接运行我们写好的批处理文件:

run_train.bat

3. 🚀 模型推断

将需要测试的图像和视频拷贝到./new_test文件夹

  • A.单张图像推断

Shell下运行:

python3 test_frcnn.py --path="./new_test"

windows下直接运行我们写好的批处理文件:

run_inference.bat
  • B.视频推断

Shell下运行:

python3 test_frcnn_video.py --path="./new_test/test_video.mp4"

windows下直接运行我们写好的批处理文件:

test_video.bat

4. 🎉 DEMO

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis分布式锁-Redisson可重入锁原理的个人见解。
  • 【全面介绍Pip换源】
  • 【密码学】密码学数学基础:剩余系
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十四)-无人机操控关键绩效指标(KPI)框架
  • Vue3 前置知识
  • 基于hive数据库的泰坦尼克号幸存者数据分析
  • starRocks搭建
  • 14、Python之super star:一颗星、两颗星,满天都是小星星
  • Rust 版本升级:rustup update stable 报错
  • 2300. 咒语和药水的成功对数
  • BUUCTF逆向wp [MRCTF2020]Transform
  • 【Linux】多线程_7
  • Spring解决循环依赖:三级缓存
  • 17-3 向量数据库之野望3 - SingleStoreDB 实践教程
  • MongoDB教程(六):mongoDB复制副本集
  • ----------
  • 网络传输文件的问题
  • 【EOS】Cleos基础
  • Apache的80端口被占用以及访问时报错403
  • crontab执行失败的多种原因
  • Golang-长连接-状态推送
  • GraphQL学习过程应该是这样的
  • Laravel 菜鸟晋级之路
  • Linux gpio口使用方法
  • mysql外键的使用
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python 基础起步 (十) 什么叫函数?
  • React中的“虫洞”——Context
  • spring boot 整合mybatis 无法输出sql的问题
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里云购买磁盘后挂载
  • 初探 Vue 生命周期和钩子函数
  • 从零开始学习部署
  • 全栈开发——Linux
  • 让你的分享飞起来——极光推出社会化分享组件
  • 王永庆:技术创新改变教育未来
  • 优秀架构师必须掌握的架构思维
  • Java数据解析之JSON
  • raise 与 raise ... from 的区别
  • ​决定德拉瓦州地区版图的关键历史事件
  • #QT(智能家居界面-界面切换)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (C语言)fread与fwrite详解
  • (C语言)共用体union的用法举例
  • (C语言)字符分类函数
  • (多级缓存)缓存同步
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读30/100)Convolutional Pose Machines
  • 、写入Shellcode到注册表上线
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .mysql secret在哪_MySQL如何使用索引