数据集的标注是做训练的重要一环,本次数据集标注以口罩检测为例,介绍使用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数据标注
如下进行标注
多人时进行标注,如下图。
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架构等的训练。