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

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