1、引言
笔者日前在进行目标检测的项目,需要使用YOLO_V3算法,奈何网上目现的教程存在各种各样的坑,无法完美进行复现。本文旨在帮助读者完美实现yolov3进行目标检测,本次实验在Ubuntu 18.04系统环境下,使用的Python版本为3.6.9(Python>=3.6),使用pytorch实现,yolov3检测算法基于eriklindernoren开源的代码。
注:文中所有的代码均整理在:https://github.com/fangcaojun/YOLO_V3-中。
2、制作VOC数据集
2.1、使用LabelImg软件标注图片
下载前文中整理好的代码并解压,将需要标注的图片放入data/VOCdevkit2007/JPEGImages/目录下,之后打开终端Terminal进入解压后的目录并在终端输入以下命令:
#进入LabelImg文件夹
cd YOLO_V3--master/data/labelImg-master/
#安装依赖环境
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
#安装好LabelImg后,在终端下运行软件
python3 labelImg.py
打开后的LabelImg软件界面如下图所示:
图1 LabelImg软件界面
点击Open Dir打开要标注的图片文件夹(YOLO_V3–master/data/VOCdevkit2007/JPEGImages),选择Change Save Dir更改保存生成的xml文件位置(YOLO_V3–master/data/VOCdevkit2007/Annatations)。改好后开始标注图片,按住Ctrl+W选择标注区域进行标注并打上标签,标注好后按Ctrl+S保存,之后再进行下一张图片标注。
2.1、使用xml文件生成VOC数据集
标注完成后我们开始着手制作VOC数据集,转换代码如下所示:
import os
import random
import pickle
from os.path import join
from os import listdir, getcwd
import xml.etree.ElementTree as ET
#测试集test占总数据集比例=(1-trainval_percent),这里是0.2,可根据需要更改trainval_percent的值
trainval_percent = 0.8
#训练集train占trainval(包含训练集train和验证集val)中的比例
train_percent = 0.7
#xml文件的路径
xmlfilepath = 'VOCdevkit2007/Annotations/'
#转换生成的txt文件保存目录
txtsavepath = 'VOCdevkit2007/ImageSets/Main/'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
#生成的数据集保存位置
ftrainval = open('VOCdevkit2007/ImageSets/trainval.txt',