【深度学习】工业安全生产环境违规使用手机的识别

【深度学习】工业安全生产环境违规使用手机的识别为解决此问题,本文从检测的角度入手,使用PaddleDetection中的PicoDet模型进行训练,预测,并完成整体流程。本项目主要包括环境安装、数据准备、模型训练、模型评估、模型预测、模型导出等。

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

1. 引言

1.1 项目简介 

现今,手机已成为人们生活和工作的必需品。但在工业生产环境中,工作人员违规使用手机,屡屡造成安全生产事故,甚至引起人员伤亡。因此,基于工业安全生产和员工人身安全考虑,越来越多的工厂建立起员工手机使用管理规范,限制或禁止员工在生产过程中使用手机。

目前,传统的管理手段有两种:一是禁止将手机带入厂区,二是人员监督核查。两种办法均会耗费大量人力,且无法高效、准确地发现员工违规使用手机的情况。如果引入人工智能技术,对设置在生产工区内摄像头采集的视频图片进行分析,快速、准确识别员工违规使用手机的行为,并进行提示和规范,可有效加强安全生产监管,实现降本、提质、增效,加速数字化转型进程。

因此,为解决此问题,本文从检测的角度入手,使用PaddleDetection中的PicoDet模型进行训练,预测,并完成整体流程。本项目主要包括环境安装、数据准备、模型训练、模型评估、模型预测、模型导出、总结等部分。

PaddleDetection中提出了全新的轻量级系列模型PP-PicoDet,在移动端具有卓越的性能,成为全新SOTA轻量级模型。PP-PicoDet模型具有更高的mAP、较快的预测速度,以及部署友好等特点。目前PP-PicoDet具体性能指标对比如下图所示:

image.png

1.2 数据集介绍 

数据集主要包含训练集和测试集,其中的训练集中有含手机或不含手机的图片。

本项目针对包含手机的训练集图片进行训练。

image.png

2. 环境安装

2.1 克隆PaddleDetection

  • ⚡ PaddleDetection为基于飞桨PaddlePaddle的端到端目标检测套件,内置30+模型算法及250+预训练模型,覆盖目标检测、实例分割、跟踪、关键点检测等方向,其中包括服务器端和移动端高精度、轻量级产业级SOTA模型、冠军方案和学术前沿算法,并提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案,在打通数据处理、模型开发、训练、压缩、部署全流程的基础上,提供丰富的案例及教程,加速算法产业落地应用。

  • ⚡ PaddleDetection作为成熟的目标检测开发套件,提供了从数据准备、模型训练、模型评估、模型导出到模型部署的全流程。

  • ⚡首选从GitHub上面克隆,若网速较慢可以考虑从Gitee克隆,下面提供两种克隆地址。

! git clone https://gitee.com/PaddlePaddle/PaddleDetection

2.2 安装依赖库

通过如下方式安装PaddleDetection依赖,并设置环境变量

%cd ~/work/PaddleDetection/
!pip install -r requirements.txt
 %env PYTHONPATH=.:$PYTHONPATH
%env CUDA_VISIBLE_DEVICES=0

2.3 安装PaddleX

后文将使用PaddleX切分数据集

!pip install paddlex -q

3. 数据准备

3.1 解压数据集

%cd ~
! unzip -q data/data147709/train.zip
# 解压测试集,用于模型预测
%cd ~
! unzip -q /home/aistudio/data/data147709/test_images_b.zip -d /home/aistudio/data/data147709/test_images_b

3.2 数据集格式转换

本项目采用VOC格式数据。Pascal VOC数据格式的目标检测数据,是指每个图像文件对应一个同名的xml文件,xml文件中标记物体框的坐标和类别等信息。Pascal VOC格式数据集所需详细内容如下所示:

├── Annotations
│   ├── 001_0001.xml
│   ├── 001_0002.xml
│    ...
├── JPEGImages
│   ├── 001_0001.jpg
│   ├── 001_0002.jpg
│    ...
├── labels.txt
├── train_list.txt
└── val_list.txt

labels.txt:

phone

train.txt/valid.txt:

JPEGImages/RZT0CmSBi2N8qMILyl54acbupVgFxnGh.jpg Annotations/RZT0CmSBi2N8qMILyl54acbupVgFxnGh.xml
JPEGImages/KHvZp79mMVe3dr4RPWB8wiJAakuFG5ct.jpg Annotations/KHvZp79mMVe3dr4RPWB8wiJAakuFG5ct.xml
JPEGImages/xFLCASn0kiEQY8fMrdvPRoXy4Jaqzjh2.jpg Annotations/xFLCASn0kiEQY8fMrdvPRoXy4Jaqzjh2.xml
JPEGImages/SZ1i4fMcHAQ0tuBW9gpe6V8RlGnLxzvX.jpg Annotations/SZ1i4fMcHAQ0tuBW9gpe6V8RlGnLxzvX.xml
JPEGImages/Xp41ZzJrVM9SsRN68vyxUCYgdw5HWD7i.jpg Annotations/Xp41ZzJrVM9SsRN68vyxUCYgdw5HWD7i.xml

0.85:0.15 的比例切分训练集和验证集。并且使用PaddleX工具根据Pascal VOC数据集格式要求,生成相应的train_list.txtval_list.txtlabels.txt文件。使用如下命令进行格式转换和数据集划分。

注:本项目数据集符合PaddleX处理要求,因此首选PaddleX进行格式转换(方便快捷,一行命令解决问题),若PaddleX不能使用的情况下,在备选使用自定义脚本文件处理数据。

更多详细PaddleX使用命令请参考PaddleX官方文档

!paddlex --split_dataset --format VOC --dataset_dir '/home/aistudio/train/0_phone' --val_value 0.15

4. 模型训练

PP-PicoDet模型有如下特点:

  • 🌟 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
  • 🚀 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
  • 😊 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
  • 😍 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。

🔥 本项目选用的模型概览如下所示:

模型 输入尺寸 mAPval
0.5:0.95
mAPval
0.5
参数量
(M)
FLOPS
(G)
预测时延CPU
(ms)
预测时延Lite
(ms)
权重下载 配置文件 导出模型
PicoDet-M 320*320 34.4 50.0 3.46 2.57 8.2ms 17.68ms model | log config w/ 后处理 | w/o 后处理

4.1 修改配置文件

本文使用的模型配置文件为work/PaddleDetection/configs/picodet/picodet_m_320_coco_lcnet.yml

需要修改的配置文件参数如下所示:重点修改学习率,批处理量,训练轮数,传入数据目录等参数。

TrainReader:batch_size: 32
EvalReader:batch_size: 8
base_lr: 0.03
epoch: 300
snapshot_epoch: 10
worker_num: 6

voc.yml配置文件参数如下所示:

TrainDataset:
  !VOCDataSet
    dataset_dir: dataset/VOC2007/0_phone
    anno_path: train_list.txt
    label_list: labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

EvalDataset:
  !VOCDataSet
    dataset_dir: dataset/VOC2007/0_phone
    anno_path: val_list.txt
    label_list: labels.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

TestDataset:
  !ImageFolder
    anno_path: dataset/VOC2007/0_phone/val_list.txt

4.2 启动训练

通过指定修改好的训练yml配置文件,增加--eval边训练边评估,方便观测mAP指标变化。并开启visualDL可视化工具,对loss和mAP变化曲线可视化。仅需要指定 use_vdl 参数和 vdl_log_dir 参数即可。

# 选择配置开始训练。可以通过 -o 选项覆盖配置文件中的参数
%cd /home/aistudio/work/PaddleDetection
!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
-o use_gpu=true \
--use_vdl=true \
--vdl_log_dir=vdl_dir/scalar \
--eval
# 指定配置文件
# 设置或更改配置文件里的参数内容
# 开启VisualDL记录数据
# 指定VisualDL记录数据的存储路径
# 边训练边测试

4.3 训练过程可视化

上一步训练过程中已开启VisualDL可视化工具,VisualDL记录数据的存储路径为work/PaddleDetection/vdl_dir/scalar,可以将训练保存的.log文件上传到BML中,通过侧边栏的数据模型可视化选项进行查看。其中loss与mAP指标训练可视化结果如下所示:

image.png

image.png

最终训练结果 mAP 指标达到 90%以上,训练效果很不错。

5 模型评估

指定配置文件,使用如下命令进行模型评估。

使用output/picodet_m_320_coco_lcnet/model_final.pdparams地址下保存的model_final模型参数进行评估,评估结果为:mAP(0.50, 11point) = 90.33%

%cd /home/aistudio/work/PaddleDetection
!python tools/eval.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
-o weights=output/picodet_m_320_coco_lcnet/model_final.pdparams

6 模型预测

6.1 开始预测

加载训练好的模型,置信度阈值设置为0.5,执行下行命令对验证集或测试集图片进行预测,此处挑选了一张验证集图片进行预测,并输出预测后的结果到infer_output文件夹下。得到的预测结果如下所示:

image.png

%cd /home/aistudio/work/PaddleDetection
!python3.7 tools/infer.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
--infer_img=/home/aistudio/data/data147709/test_images_b/sJdNXPlBW92IvEFDnq6C4GacZ7QgjUVk.jpg \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=output/picodet_m_320_coco_lcnet/model_final

# 指定模型配置文件
# 测试图片
# 结果输出位置
# 置信度阈值
# 加载训练好的模型 

6.2 可视化预测图片

使用如下代码对指定的预测图片进行可视化。

import cv2
import matplotlib.pyplot as plt
import numpy as np

image = cv2.imread('infer_output/sJdNXPlBW92IvEFDnq6C4GacZ7QgjUVk.jpg')
plt.figure(figsize=(8,8))
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()

可视化结果如下图所示:

image.png

7 模型导出

将模型进行导成部署需要的模型格式。 指定好模型配置文件以及训练好的模型参数,执行下面命令,即可导出模型。

预测模型会导出到inference_model/目录下,包括model.pdmodel、model.pdiparams、model.pdiparams.info和infer_cfg.yml四个文件,分别表示模型的网络结构、模型权重、模型权重名称和模型的配置文件(包括数据预处理参数等)的流程配置文件。

%cd /home/aistudio/work/PaddleDetection
!python tools/export_model.py \
      -c configs/picodet/picodet_m_320_coco_lcnet.yml \
      -o weights=output/picodet_m_320_coco_lcnet/model_final.pdparams \
      --output_dir=inference_model

9 总结

  • 经模型评估,picodet_m_320_coco_lcnet模型经300论训练后,
    m A P ( 0.50 , 11 p o i n t ) 达到 90.33 mAP(0.50, 11point) 达到 90.33%
  • PaddleDetecion中的PicoDet_LCNet模型上手方便,各种模型的配置文件可根据自己需求去修改调整,可复用程度高,因此大大提高了效率。
  • 之所以选用了PicoDet模型,是因为其具备轻量化,部署友好,同时预测速度也较快等优点
  • 当然,PaddleDetection套件中还包含了很多种类的模型,例如,PPYOLO,PicoDet,YOLOv3等,提供多种主流目标检测、实例分割、跟踪、关键点检测算法,能够满足大大小小的开发需求,从而更好完成端到端全开发流程。
  • 在今后的项目中,可以考虑多模型指标对比,对比多个模型在此数据集上的效果。
  • 🔥 注:本文使用的是飞桨深度学习开发套件,编译器为AI Studio Notebook平台。
  • 🔥 本文旨在为读者提供深度学习流程思路参考,若需要运行时,请注意调整文件路径。

今天的文章【深度学习】工业安全生产环境违规使用手机的识别分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17466.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注