二零二零年的大年初一,给大家拜个年,祝大家鼠年吉祥,万事如意,趁着喜气,把Yolov3训练自己的数据过程,记录一下,共勉共进。

同样,无人机搭载山狗拍摄的视频,目标检测的种类是模型tank和airplane,部分效果图镇贴:

在这里插入图片描述

数据集准备

首先需要将自己的数据集准备好,不同场景下的目标数据尽可能的收集,以提高最终训练结果的准确度。我这边是使用相机对检测目标进行录像,然后每隔几十帧后截取图片保存。效果如图:

在这里插入图片描述

收集完足够图片后,通过开源的标签工具labelImg对目标进行标注,并保存xml文件,为下一步做准备。

数据集预处理

在项目下找到文件夹VOCdevkit\VOC2007,其中会包含文件夹:Annotations(用于存放xml标签数据)、Imagesets(用于存放tet文本数据)、JPEGImages(用于存放原始图片数据),接下来将目标图片集复制进JPEGImages,将标注好的xml文件复制进Annotations,运行test.py,会在Imagesets下生成test文本,看通过修改数值对训练、验证集的数量进行修改,如下图:
在这里插入图片描述

原demo修改

 打开voc_annotations.py,设置好训练的种类后并运行,生成2007_train等文本文件,用于后续训练所用。

在这里插入图片描述

 修改yolo3.cfg文件,搜索YOLO将其fliter(3*(种类+5))、classes=种类,random=0,一共三处修改。

在这里插入图片描述

 修改model_data下的voc_classes.txt和coco_classes.txt成自己训练的类别,即‘tank’和‘airplane’。

在这里插入图片描述

在项目下 建立logs/000/目录,用于存放自己训练所得的最终模型。

在这里插入图片描述

数据集训练

修改完之后,接下来就是漫长的数据训练了。
运行train.py程序进行训练,注意设置好batch_size、Epoch等。我电脑配置是batch_size=3,训练500次,大概是花了一天一夜,loss降到了15左右,检测效果不好,但后面进行了200次的微调训练,loss在16左右,检测效果明显提高,最终保存模型在前面新建的logs文件夹下。
在这里插入图片描述

目标检测

修改yolo3.py中的模型路径,按照前文所说方法,对目标进行识别检测,注意修改置信度和拟合度 ,即score和icu,检测效果如下:

在这里插入图片描述

好的,那么对自己的数据进行训练的整个过程已经结束了,大家可以按照我的步骤尽情的玩耍了。

补充

在训练完成后,可以进行微调训练,提高检测准确精度,训练过程又快又稳定。方法呢,也很简单,修改train.py中的create_model函数如下:

#训练新的模型
#def create_model(input_shape, anchors, num_classes, load_pretrained=False, freeze_body=False, weights_path='模型路径'):   
#微调训练
def create_model(input_shape, anchors, num_classes, load_pretrained=True, freeze_body=True, weights_path='模型路径'):   

长夜漫漫无心睡眠,我以为只有我睡不着觉,原来京京姑娘你也睡不着啊!