全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型

前言

我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做一个全流程机器视觉工程开发,不涉及过多理论。

书接上文,我们在先前的文章全流程机器视觉工程开发(一)环境准备,paddledetection和labelme中说明了如何准备PaddleDetection环境和Labelme工具,现在我们来做后续的开发工作。

到这里开始我们就可以开始尝试训练模型了。当然了,工欲善其事,必先利其器,我们在正式训练模型之前,先要学会如何获得数据集。

在正式开始训练和使用之前,可以先来测试一下如何使用paddledetection库。与传统的python库不同,PaddleDetection库与其说是一个库,不如说是一个类似于ffmpg那样的一个程序,通过给程序入口点参数来控制PaddleDetection库的行为

在当前的文章中,所有的操作都是直接通过python直接操作具体的文件执行的,所以我们现在在CMD上默认你已经转到了PaddleDetection的目录下,比如我的电脑上是这样:

cd /d E:LeventureWorkShopPythonPaddleDetection

在这里插入图片描述

然后所有的命令也都是通过cmd执行的,当然了你也可以通过脚本或者python终端去完成这些任务,这些都是无所谓的。

注:为了写文档的方便,下文中为了编写的方便,Paddledetection库统一称为PD库,当前目录指的是PaddleDetection的库根目录

试用

首先我们安装完成后,按照教程,先尝试这个命令检查库的安装情况:

python ppdet/modeling/tests/test_architectures.py

通过后会提示如下信息:

..........
----------------------------------------------------------------------
Ran 12 tests in 2.480s
OK (skipped=2)

在PD库中,已经提供了一些Demo图片以供测试,就在当前目录下的demo文件夹中
在这里插入图片描述
我们这里取000000014439.jpg进行测试,在cmd中输入如下命令:

python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg

这里我暂时先不解释这条命令做了什么,我们先来看结果。结果输出到当前目录/output文件夹下

在这里插入图片描述

开发流程

开发一个训练模型,我们大概有如下流程:

  1. 使用labelme对数据集标签进行划分
  2. 转换labelme数据集到COCO数据集或者VOC数据集,这里转换成COCO数据集
  3. 修改PaddleDetection的配置文件,以我们给定的数据集为训练集
  4. 进行训练
  5. 进行预测

使用labelme 对数据集进行划分

这个部分比较简单,参考图片标注工具Labelme的安装及使用方法

然后我们获得了图片和标签,我们画好文件夹,如图:

图片在文件夹:
在这里插入图片描述

标签在
J:Trainlabelme_annos
在这里插入图片描述

转换labelme数据集到COCO数据集或者VOC数据集,这里转换成COCO数据集

我们这里要用到PD项目下的工具,tools/x2coco.py

我们在cmd中输入:

python tools/x2coco.py --dataset_type labelme --json_input_dir J:Trainlabelme_annos --image_input_dir J:Trainlabelme_imgs --output_dir J:Traincocome --train_proportion 0.8 --val_proportion 0.2 --test_proportion 0.0

上面每一个–标签 空格后面的内容就是参数的内容

–dataset_type :当前转换的数据类型
–json_input_dir:标签json文件的目录路径
–image_input_dir:图片文件的目录路径
–output_dir:输出路径
–train_proportion:训练集数据占比
–val_proportion:评估集数据占比
–test_proportion:测试集数据占比

我们这里输入这个命令,就会在J:Traincocome文件夹下创建一个COCO数据格式的数据集
在这里插入图片描述

修改PaddleDetection的配置文件,以我们给定的数据集为训练集

在使用之前,我们要先选定一个模型

能用的模型有挺多的,我们这里以yolov3为例

找到yolov3_mobilenet_v1_270e_coco的配置文件,在.configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml

在这里插入图片描述
这里这个…/datasets/coco_detection.yml就是当前这个模型配置数据集的目录,我们转到这个文件
./configs/datasets/coco_detection.yml

在这里插入图片描述

这里我已经改了,你可以按照我给的目录和注释自己修改。

到此就已经配置好了我们想要的数据集。

进行训练

进行训练的话,比较简单,就是直接调库。

python -u tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --eval

这里的configs路径是根据我们前面挑选和使用的模型来进行修改,不同的模型有不同的优势,准确度或者训练时间或者mAP值都不同,这里我们不关心细节,只关心结果。

在这里插入图片描述

这里就已经开始进行了训练,这里可以看到需要训练好几个小时,慢慢等吧。

等训练结束后,输入命令

python -u tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --output_dir=./inference_model

导出这个模型,当然了这个模型也会保存在C盘一个临时位置,后面再训练模型的话会把原先这个模型覆盖掉也是很正常的。

导出之后,会导出一个.pdparams文件,这个文件之后我们会用。

进行预测

进行预测的命令也很简单,这个时候我们就可以来看看我们本文开头的那个测试命令了:

python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg

我们通过这个infer.py来进行的预测工作,参数列表如下:

-c :模型的配置文件
-o : use_gpu=true 是否使用gpu weights= 用什么模型,这里我们可以使用我们自己训练的,网上实际上也提供了一些训练好的模型,当你在初始化训练的时候实际上已经把训练好的模型下载到你本地了,训练完成后你也可以自行导出到本地。你可以自己找找
–infer_img :需要推测的图片

在这里插入图片描述
在这里插入图片描述