當前位置: 華文世界 > 手機

玩手機行為檢測(分類+檢測)

2024-07-06手機

專案背景

因此在工業上,對於手機行為的檢測需求日益增多,目前主要采用檢測進行手機的定位輔助分析。

本專案針對這一特點,實作思路如下:

利用PaddleX快速訓練輕量化檢測模型PP-YOLO Tiny,並透過一個辨識模型MobileNet進行檢測矯正。- 保證即時性的同時,也保證較高的精確度。

一、數據樣式(數據說明)

本專案的數據分為 檢測數據(8000張) 辨識數據(16683張) 兩類:

1.檢測數據

檢測數據位於數據集: 違規使用手機辨識.zip

  • data/data105315/違規使用手機辨識.zip
  • 解壓後,封包含在train.zip中,還需再次解壓數據,最後解壓完成後,數據如下:

    最終用於訓練的檢測數據位於 0_phone 中,檢測數據格式為VOC 格式——可直接使用PaddleX進行數據劃分,並直接用於PPYOLO-Tiny模型的訓練。

    用於檢測的數據在當前專案中僅僅包含 0_phone 下的數據,該數據均為包含手機的圖片,因此,後期專案訓練過程中,可以適當的添加1_no_phone 中的圖片作為背景圖片加入到模型的訓練數據中。

    2.辨識數據

    辨識數據位於數據集: recognize_phonedata.zip

  • data/data105315/recognize_phonedata.zip
  • 解壓後,數據如下:

    其中, 0_recognize_phone資料夾 中包含手機的辨識圖片,1_recognize_nophone 中包含非手機的辨識圖片。

    辨識數據中的 0_recognize_phone資料夾圖片 均來自檢測數據中0_phone中標註的手機(裁剪)數據 ,而1_recognize_nophone資料夾圖片 均來自1_no_phone中隨機裁剪的數據 作為非手機的類別。

    本專案中的非手機圖片數據集由 隨機裁剪 獲得,受限於原始1_no_phone中存在一些大小不均勻的圖片,因此固定大小尺寸進行裁剪後,有的非手機圖片為人或者衣服等。

    但按照該辨識數據集,對於該任務已經有了一個不錯的提高——後期透過完善辨識模型的數據以及泛化精度的提高,將更好的提升該串聯方案的效果。

    二、模型選擇(套用場景考慮)

    考慮到工業套用上,通常要求即時性與部署成本的問題,選擇輕量化化檢測模型PP-YOLO Tiny作為檢測模型——同時,為了保證一個手機辨識的較高準確率,訓練一個辨識是否為手機的辨識模型,對檢測後的目標進行二次辨識,保證檢測的準確性。

    因此,模型的架構為: PP-YOLO Tiny(目標檢測) + MobileNet(影像辨識)

    之所以外加MobileNet作為精度提升的一個元件,是因為PP-YOLO Tiny在追求輕量化時,骨幹網絡相對較弱,在辨識精度上有一定的錯誤率(可能來源骨幹網絡辨識能力不夠,也可能因為定位能力不夠導致辨識受影響);

    三、模型訓練

    首先下載PaddleX2.0用於後期的專案開發。

    pycocotools: 是為了提供COCO數據集的載入功能——以輔助Paddlex實作數據的自動劃分、數據格式轉換等

    (3)載入數據

  • 數據預處理方法:


  • https://github.com/PaddlePaddle/PaddleX/blob/release/2.0.0/docs/apis/transforms/transforms.md

    train_transform:

    VOC格式數據自動載入介面

    (4)生成檢測模型的anchors

    由於不同的數據集的套用場景等不同,因此模型在使用時,往往針對特定數據進行anchor的聚類生成會更容易擬合數據集。

    一般來說,聚類後的anchors僅適用於訓練時特定的大小,部署時不宜改動,否則精度損失較大

    (5)訓練模型

    (6)模型錯誤分析——COCO錯誤分析

    如果直接執行coco_error_analysis失效(及以下程式碼),可手動重新生成json再進行分析(後續程式碼)

    (7)檢測視覺化

    用於展示模型檢測效果

    五、PaddleX-SDK串聯部署

    SDK 是指:

    PaddleX Manufacture 基於PaddleX-Deploy 的端到端高效能部署能力,將套用深度學習模型的業務邏輯抽象成Pipeline ,而接入深度學習模型前的數據前處理、模型預測、模型串聯時的中間結果處理等操作都對應於Pipeline中的節點PipelineNode,使用者只需在Pipeline配置檔中編排好各節點的前後關系,就可以給Pipeline發送數據並快速地獲取相應的推理結果。

  • PaddleX Pipeline:完成業務邏輯的推理預測,同時提供向其發送數據和獲取結果的介面。
  • PaddleX Config: 定義Pipeline的節點類別和前後關系。
  • PaddleX Node:功能節點,例如影像解碼節點、影像縮放節點、興趣區域提取節點、模型推理節點。
  • PaddleX Deploy:高效能模型推理能力。
  • 以PaddleX匯出後的單一檢測模型(無數據前處理、無中間結果處理)為例,配置好流程配置檔後使用簡單幾行程式碼就可以完成預測:

    而對於本專案的SDK部署不再采用 單模型的Pipeline ,而是透過SDK實作更便捷的模型串聯——即多模型Pipeline 。

    檢測+辨識的模型部署串聯Pipeline

    在測試時,請註意使用存在目標的圖片進行串聯測試——因為當前SDK版本下,檢測與辨識串聯時,如果檢測無目標,在傳入辨識模型時會報錯終止。

    檢測與分割串聯時,如檢測無目標,傳入分割模型不會報錯終止!

    節點相關內容可參考下圖

    2.節點表