从头开始训练一个检测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。

检测模型下载

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