從頭開始訓練一個檢測QR二維碼區域的YOLOv3模型

條形碼和二維碼在識別的時候主要包含定位和解碼兩個步驟。尋找碼的位置,除了用傳統的圖像算法之外,也可以藉助深度學習。那麼深度學習的效率如何,我做了一個實驗。

爲QR二維碼訓練YOLOv3模型

編譯Darknet

下載Darknet

git clone https://github.com/AlexeyAB/darknet --depth 1

我的環境是Windows,所以需要安裝以下工具:

環境搭建的時候,CUDA是最坑的。雖然在命令行中發現nvcc可以工作,但CMake可能死活找不到。這裏的問題是CUDA的Visual Studio插件沒有裝對地方。有人提到的方法是CUDA要在Visual Studio之後安裝。但依然可能找不到,原因就是系統中包含了多個版本的VC++編譯器。在我的環境中,CUDA插件是沒有正確安裝的,所以要手動從C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions 拷貝到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations

接下來就是運行build.ps1編譯Darknet。如果PowerShell的安全策略是默認的,需要用管理員權限啓動並修改權限:

Set-ExecutionPolicy Bypass
build.ps1

編譯完之後運行命令查看下是不是GPU版本:

darknet.exe detector test
 CUDA-version: 10010 (10010), cuDNN: 7.6.5, CUDNN_HALF=1, GPU count: 1
 CUDNN_HALF=1

準備數據

在網上找一些QR的圖片,我手裏有250張。然後用labeImg標註每張圖的QR位置:

在這裏插入圖片描述

我在LabelImg里加入了碼型識別,在框選的時候會自動得到對應的碼型。以下是我的數據集。

在這裏插入圖片描述

在Darknet的data目錄下創建qrcode和qrcode-valid目錄。把這些圖片和標註信息拷貝到兩個目錄中,一個用於訓練,一個用於校驗。

創建相應的配置文件:qrcode.data, qrcode.txt, qrcode-valid.txt, qrcode.names, qrcode-yolo3v.cfg and qrcode-yolov3-tiny.cfg

因爲只需要訓練一個類,cfg文件做以下修改:

classes=1
filters=18
max_batches = 4000
steps=3200,3600

具體意義可以參考文檔:https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

訓練模型

下載darknet53.conv.74開始訓練模型:

darknet.exe detector train data/qrcode.data cfg/qrcode-yolov3.cfg darknet53.conv.74

在這裏插入圖片描述

darknet.exe detector train data/qrcode.data cfg/qrcode-yolov3-tiny.cfg darknet53.conv.74

在這裏插入圖片描述

QR區域檢測性能測試

我的硬件配置

GPU: NVIDIA RTX2060
CPU: Intel(R) Core(TM) i5-4460  CPU @ 3.20GHz, 3201 Mhz, 4 Core(s), 4 Logical Processor(s)

測試圖片

在這裏插入圖片描述

YOLOv3-tiny測試

darknet.exe detector test qrcode.data qrcode-yolov3-tiny.cfg qrcode-yolov3-tiny_last.weights 20201105151910.jpg

Done! Loaded 24 layers from weights-file
 Detection layer: 16 - type = 28
 Detection layer: 23 - type = 28
20201105151910.jpg: Predicted in 3.717000 milli-seconds.
QR_CODE: 97%

在這裏插入圖片描述

YOLOv3測試

darknet.exe detector test qrcode.data qrcode-yolov3.cfg qrcode-yolov3_last.weights 20201105151910.jpg 

Done! Loaded 107 layers from weights-file
 Detection layer: 82 - type = 28
 Detection layer: 94 - type = 28
 Detection layer: 106 - type = 28
20201105151910.jpg: Predicted in 31.717000 milli-seconds.
QR_CODE: 100%

在這裏插入圖片描述

通過對比發現YOLOv3比YOLOv3-tiny的耗時多。掃碼的實時性要求比較高,YOLOv3-tiny更適合QR。

檢測模型下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章