写在前面:YOLOV3只有修改了源码才需要重新make,而且make之前要先make clean。
一.准备数据
在/darknet/VOCdevkit1下建立文件夹VOC2007.
voc2007文件夹下建立三个文件夹,分别为Annotations,ImageSets和JPEGImages,其中JPEGImages存放所有.jpg格式的训练图片,Annotations存放所有图片的xml文件
图片最好按数字顺序排列,如00001.jpg,00002.jpg等,可以用脚本生成。
ImageSets文件夹下存放三个子文件夹,Main中存放train.txt,即用于训练的图片名字
二.生成xml文件
xml文件采用labelimg标注
cd labelImg
python labelImg.py
先进入labelImg所在路径,然后用python打开.py文件,即可打开标注工具。
三、生成txt文件
因为YOLOV3训练时需要用的是txt文件,因此需要将xml生成对应的txt,可采用voc_label.py脚本。
在利用voc_label.py脚本生成txt文件之前,还需要先生成一个train.txt文件,该文件位于ImageSets文件夹下的Main文件夹中,主要存图片名称(不包含后缀)
可采用以下脚本生成
# -*- coding:utf-8 -*-
import sys
import os
import random
data_dir='/home/wmy/darknet/VOCdevkit1/VOC2007/JPEGImages'
file_list=[]
write_file_name='/home/wmy/darknet/VOCdevkit1/VOC2007/ImageSets/Main/train.txt'
write_file=open(write_file_name,'w')
for file in os.listdir(data_dir):
if file.endswith(".jpg"):
write_name=file.split('.')[0]
file_list.append(write_name)
sorted(file_list)
number_of_lines=len(file_list)
for current_line in range(number_of_lines):
write_file.write(file_list[current_line]+'\n')
write_file.close()
运行该脚本将生成存放图片名称的txt文件。
将该脚本放在与VOCdevkit1同等目录下,稍作修改。
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
sets=[(', 'train')] #根据数据修