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

语言: CN / TW / HK

theme: orange highlight: a11y-dark


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