【深度学习】工业安全生产环境违规使用手机的识别
theme: orange highlight: a11y-dark
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
1. 引言
1.1 项目简介
现今,手机已成为人们生活和工作的必需品。但在工业生产环境中,工作人员违规使用手机,屡屡造成安全生产事故,甚至引起人员伤亡。因此,基于工业安全生产和员工人身安全考虑,越来越多的工厂建立起员工手机使用管理规范,限制或禁止员工在生产过程中使用手机。
目前,传统的管理手段有两种:一是禁止将手机带入厂区,二是人员监督核查。两种办法均会耗费大量人力,且无法高效、准确地发现员工违规使用手机的情况。如果引入人工智能技术,对设置在生产工区内摄像头采集的视频图片进行分析,快速、准确识别员工违规使用手机的行为,并进行提示和规范,可有效加强安全生产监管,实现降本、提质、增效,加速数字化转型进程。
因此,为解决此问题,本文从检测的角度入手,使用PaddleDetection中的PicoDet模型进行训练,预测,并完成整体流程。本项目主要包括环境安装、数据准备、模型训练、模型评估、模型预测、模型导出、总结等部分。
PaddleDetection中提出了全新的轻量级系列模型PP-PicoDet,在移动端具有卓越的性能,成为全新SOTA轻量级模型。PP-PicoDet模型具有更高的mAP、较快的预测速度,以及部署友好等特点。目前PP-PicoDet具体性能指标对比如下图所示:
1.2 数据集介绍
数据集主要包含训练集和测试集,其中的训练集中有含手机或不含手机的图片。
本项目针对包含手机的训练集图片进行训练。
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.xml
以 0.85:0.15 的比例切分训练集和验证集。并且使用PaddleX工具根据Pascal VOC数据集格式要求,生成相应的train_list.txt
,val_list.txt
,labels.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指标训练可视化结果如下所示:
最终训练结果 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文件夹下。得到的预测结果如下所示:
``` %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() ``` 可视化结果如下图所示:
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平台。
- 🔥 本文旨在为读者提供深度学习流程思路参考,若需要运行时,请注意调整文件路径。
- 【深度学习】TensorFlow线性回归案例演示(3)
- 【机器学习】LSTM神经网络实现中国人口预测(2)
- 【数据处理】北京市租房案例实战(5)
- 【数据处理】Pandas库:画图与文件读取
- 【数据处理】Pandas库:数组运算
- 【数据处理】北京市租房案例实战(3)
- 【PaddleDetection深度学习】中国交通标志图像分类任务
- 【数据处理】北京市租房案例实战(4)
- 【数据处理】北京市租房案例实战(2)
- 【数据处理】Seaborn-NBA数据分析案例(4)
- 【深度学习】工业安全生产环境违规使用手机的识别
- 【数据处理】北京市租房案例实战(1)
- 【数据处理】Seaborn-NBA数据分析案例(2)
- 【Numpy】数据处理-Numpy库基本介绍
- 【Numpy数据处理】ndarray介绍
- 【深度学习】医学影像目标检测-疟原虫识别问题
- Linux操作系统-基本使用(1)
- 智能算法-粒子群算法(3)
- 智能算法-粒子群算法(2)
- 智能算法-禁忌搜索算法(2)