【深度學習】工業安全生產環境違規使用手機的識別
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 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.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)