【深度學習】工業安全生產環境違規使用手機的識別

語言: 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 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.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平台。
  • 🔥 本文旨在為讀者提供深度學習流程思路參考,若需要運行時,請注意調整文件路徑。