yolov4训练自己的数据模型训练自己的数据模型
看了下yolov4的作者给的操作说明,链接如下:https://github.com/AlexeyAB/darknet#how-to-compile-on-linux-using-make,有兴趣的可以去看看,总结起来,跟yolov3的操作方式基
本一样,所以现在记录一下这次的整个操作流程。
在几个月前,一直在准备一个项目,那个项目已经让人用lableme这个标注软件标注好了图片,但是直到现在,这个项目依旧还没有动工的苗头,估计是悬了,之前也用标注好的数据
进行过yolov3的训练,但是说实话,那时候对于yolov3是一头雾水,只知道按照他人的给的操作流程去做,但是为什么这样做,我是不清楚的,这也导致我自己都不知道当初的训练
模型的流程是否正确,现在好了,前段时间把yolov3,ssd学习了,现在来操作,就知道这样操作的原理了,整个操作流程就知道的很详细了,也知道怎么训练自己的数据了,不再茫
然。
环境说明:yolo系列一直都有linux版本和windows版本,我看了哈,很明显linux版本更加简单,windows版本还需要搭配vs来操作,光vs这个软件就十几个g,太大了,所以我就采取在
ubuntu上训练数据了。
首先,要感谢下面的这篇文章的作者:https://www.cnblogs.com/Assist/p/11091501.html,这篇文章为我梳理了整个思路,这也为我想处理自己的数据,训练自己的模型有了想法。
一般来说,训练coco, vol这些数据集,网上很多教程来进行数据的预处理,但是训练自己的数据,就得自己根据网上的教程来改代码了,因为coco这些数据集的标注文件和图片存储
结果可能跟自己的数据都不一样,对于我用labelme来标注的图像来说,每一张图片会对应一个json文件,这个json文件里面拥有这标注的类别坐标这些信息,所以,我这里值将所有
图片放到一个文件夹,所有json文件放到一个文件夹,但是为了区分训练数据和val数据,我将json进行了划分,一部分放到了train文件夹,一部分放到了val文件夹,最后整个文件的
结构如下:
接下来咱就可以开始正式的数据预处理了,这一块是最麻烦的,我个人觉得哈。我们运行第一个Py文件后,
要创建出下面这几个文件夹:
第一个文件夹用来装xml文件,这个xml文件里面有标签类别,图片的宽高,标签的左上角和右下角坐标这些信息,每一张照片对应一个xml文件,imagesets这个文件夹里面还有一个
文件夹:/Main, 在这个Main文件夹下面会产生train.txt和val.txt,这些文件里面的信息只是图片的名字,不带.jpg这些后缀的名字,而在JPEGImages里面就是所有图片了。
我们假设这第一个py文件叫convertvoc.py,我下面提供我的代码,大家不能照搬,有些地方要改。
'''author:nike hu'''
# -*- coding: utf-8 -*-
import shutil
import os
import json
import cv2
headstr = """\
VOC2007
%06d.jpg
My Database
PASCAL VOC2007
flickr
NULL
NULL
company
%d
%d
%d
0
"""
objstr = """\
%s
Unspecified
0
0
%d
%d
%d
%d
"""
tailstr = '''\
'''
# 上面的不用改
def writexml(idx, head, bbxes, tail):
filename = ("Annotations/%06d.xml" % (idx))
f = open(filename, "w")
f.write(head)
for bbx in bbxes:
f.write(objstr % (bbx[0], bbx[1], bbx[2], bbx[3], bbx[4]))
# 这里就是将文件中标签类别,左上角和右下角坐标存进去