数据集的标注是做训练的重要一环,本次数据集标注以口罩检测为例,介绍使用labelimg的数据标注,并且使用YOLOX进行训练。我们从百度网上搜了一些图片,我们就拿这些图片进行标注并训练,标注对象主要有两个"persion"和"mask",就是普通行人和戴口罩的人两类。首先给大家使用数据集标注软件labelimg。

一:labelimg的安装

labelimg的安装

首先我们进入到我们在上一节创建的python环境

conda activate yolox_train

然后我们执行:

pip install labelimg

如果镜像源不够快也可以指定清华的镜像源

pip install labelimg -i https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

然后安装pyqt5如下操作:

pip install pyqt5

二:labelimg的使用

在yolox环境下执行:labelimg,打开界面,如图:

数据标注 深度学习 数据标注模型训练_目标检测

Open:打开一个图片。

Open Dir:打开一个目录下所有图片。

Change Save Dir:标注后的图片保存目录。

Next Image:下一副图片。

Prev Image:上一副图片。

Create RectBox:标注图片。

YOLO:指标注成yolo格式,点击还可以改为:Pascal VOC、CreatML格式。

三:Pascal VOC数据集格式

(1)准备你的数据集

第一步:筛选图片:一般我们从网上爬下来的图片文件名各异,我们首先要把这些文件进行第一资的筛选,把打不开的,动画图片,卡通等不符合要求的图片删除掉。

第二步:文件重命名:将你认为合格的文件进行重新命名,从000001.jpg,000002,jpg......00000n.jpy进行命名,因为需要训练的文件比较多,你可以编写一个小程序,自动命名这些文件。

(2)PASCAL VOC数据集由三个部分构成,JPEGImages,Annotations,ImageSets。

JPEGImages:存放的是训练与测试的所有图片。
Annotations:里面存放的是每张图片打完标签所对应的XML文件
ImageSets:里面有个Main文件夹,其中包含存储着图片名称的txt文件,分为训练与测试。VOC2007的文件目录如下:

--VOC2007
    --Annotations
    --ImageSets
      --Main
      --Layout
      --Segmentation
    --JPEGImages
    --SegmentationClass
    --SegmentationObject

(3)在这次标注中我们使用Pascal VOC格式保存标注。

先按照VOC2007的数据集格式创建相应的文件夹。然后将我们找到的图片放到JPEGImages文件病人,打开labelimg设置好:

Open Dir:指向“JPEGImages”文件夹,将你的原始图片全都考贝到这个文件夹里去。

Change Save Dir:指向“Annotations“文件夹。labelimg保存标注后会自动存到这个文件夹里。

四:labelimg数据标注

如下进行标注

数据标注 深度学习 数据标注模型训练_机器学习_02

多人时进行标注,如下图。 

数据标注 深度学习 数据标注模型训练_计算机视觉_03

 Next Image时会提示你进行保存。

五:训练数据集的划分

训练数据集的划分:训练集、测试集和验证集,我们可以按比例进行划分,有需要完整数据数据集的标注和划分的小伙伴,可以下载这些数据集,下载地址:

python split_voc.py

六:开始训练

(1)训练

我们这里主要是跟大家演示,所以训练模我们选用一个最小的预训练模型yolox_s.pth,你可以去上一章节们的项目地址去下载这些模型。数据集的处理这里我们使用yolox项目提供的一个例程就可以了路径在:exps/example/yolox_voc/yolox_voc_s.py。这个文件要修改一下:

修改类别:

self.num_classes = 20改为2,因为我们只有两个类别,persion和mask,就是行人和戴口罩的人两类。

self.num_classes = 2

 修改数据集图片列表

image_sets = [('2007', 'trainval'), ('2012', 'trainval')],改为:

image_sets = [('2007', 'trainval')],

修改类别

在YOLOX/yolox/data/datasets文件夹下面有两个文件,voc_classes.py和coco_classes.py

删除原有的类别,然后把我们两个类别加上,voc_classes.py修改如下:

VOC_CLASSES = (
"face",
"mask",
)

coco_classes.py修改如下:

COCO_CLASSES = (
"face",
"mask",
)

开始训练:

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 16 --fp16 -o -c weights/yolox_s.pth

(2)可视化

tensorboard --logdir ./YOLOX_outputs/yolox_voc_s

(3)查看训练结果

查看YOLOX_outputs/yolox_voc_s_bm目录下的文件。这里面有训练过程中所生成的全部pth。一般我们会使用best_ckpt.pth这个文件,这个文件是训练过程中效果最好的一个。

(4)测试训练出来的模型

将best_ckpt.pth文件考贝到weights下,把需要测试的图片考贝到指定目录,比如我们可放在assets下面放一张000206.jpg的图片。然后执行:

python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c weights/best_ckpt.pth --path assets/000206.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu

七:提供一套已经标注好的付费口罩数据集,有需要的小伙伴可点击下载。

口罩检测训练数据集,用于训练自己的深度学习模型。内含1613张图片用于训练,1610张图片标注,并提供已经训练好的yolox的模型,本例提供了数据集整理代码,用于数据集前期处理,包括将中文名转为英文,包括将数据整理为VOC训练格式的文件结构,包括将数据集进行训练集和测试集的自动划分。本数据集以训练yolox为例,同时提供训练的方法及异常处理。训练集也可以用于yolox_v5架构等的训练。