首先是配置yolo v3

这部分参考yolo  v3的官网:https://pjreddie.com/darknet/yolo/
<https://pjreddie.com/darknet/yolo/>

 

Detection Using A Pre-Trained Model

This post will guide you through detecting objects with the YOLO system using
a pre-trained model. If you don't already have Darknet installed, you shoulddo
that first <https://pjreddie.com/darknet/install/>. Or instead of reading all
that just run:
git clone https://github.com/pjreddie/darknet cd darknet make
Easy!

You already have the config file for YOLO in the cfg/ subdirectory. You will
have to download the pre-trained weight filehere (237 MB)
<https://pjreddie.com/media/files/yolov3.weights>. Or just run this:
wget https://pjreddie.com/media/files/yolov3.weights
Then run the detector!
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
You will see some output like this:
layer filters size input output 0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416
x 32 0.299 BFLOPs 1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595
BFLOPs ....... 105 conv 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0.353
BFLOPs 106 detection truth_thresh: Using default '1.000000' Loading weights
from yolov3.weights...Done! data/dog.jpg: Predicted in 0.029329 seconds. dog:
99% truck: 93% bicycle: 99%
官网给出的是CPU版本的编译,如果需要使用GPU,则需要修改makefike

 

下面讲解训练自己的数据:

目前使用yolo v3训练自己的数据基本是采用voc格式

voc格式的数据使用labelimg软件进行标注

标注结束后,新建一个文件夹,按照voc数据格式进行存储

例如本人新建了voc2018



 

 

接着,新建三个文件夹



其中Annotations用来存储labelimg生成的xml文件

JPEGImages用来存储原图

ImageSets用来存储训练和测试数据的名称,先面介绍如何生成:

新建train和test文件夹

 



train文件夹存放用于训练的图片

test文件夹用于存放测试的图片

新建一个makeTxt .sh



makeTxt.sh中用于提取训练集和测试集的图片名字(将路径名称换成你自己的)

将路径中的train换成test就可以生成测试集的名字
# /usr/bin/env sh DATA=/home/dagouzi/darknet/voc/VOCdevkit/VOC2018/train
DATASAVE=/home/dagouzi/darknet/voc/VOCdevkit/VOC2018 echo "Create train.txt..."
find $DATA -name *.jpg | cut -d '/' -f9| cut -c 1-8>>$DATASAVE/train.txt echo
"Done.."
 

将train.txt和test.txt拖入ImageSets/Main文件夹下



接下来下载python脚本用于将xml文件修改成txt文件
wget https://pjreddie.com/media/files/voc_label.py
修改其中的代码(按照您的需求,修改其中的文件名)
import xml.etree.ElementTree as ET import pickle import os from os import
listdir, getcwd from os.path import join sets=[('2018', 'train'), ('2018',
'test')] classes = ["min", "jun"] def convert(size, box): dw = 1./size[0] dh =
1./size[1] x = (box[0] + box[1])/2.0 y = (box[2] + box[3])/2.0 w = box[1] -
box[0] h = box[3] - box[2] x = x*dw w = w*dw y = y*dh h = h*dh return (x,y,w,h)
def convert_annotation(year, image_id): in_file =
open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id)) out_file =
open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w')
tree=ET.parse(in_file) root = tree.getroot() size = root.find('size') w =
int(size.find('width').text) h = int(size.find('height').text) for obj in
root.iter('object'): difficult = obj.find('difficult').text cls =
obj.find('name').text if cls not in classes or int(difficult) == 1: continue
cls_id = classes.index(cls) xmlbox = obj.find('bndbox') b =
(float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text),
float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text)) bb =
convert((w,h), b) out_file.write(str(cls_id) + " " + " ".join([str(a) for a in
bb]) + '\n') wd = getcwd() for year, image_set in sets: if not
os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
os.makedirs('VOCdevkit/VOC%s/labels/'%(year)) image_ids =
open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year,
image_set)).read().strip().split() list_file = open('%s_%s.txt'%(year,
image_set), 'w') for image_id in image_ids:
list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
convert_annotation(year, image_id) list_file.close()
接下来
python voc_label.py
即可生成最终的训练集目录和测试集目录



接下来,修改yolov3的相关文件

*
修改cfg/voc.data文件,进行修改(根据您的目录修改):
classes= 2 train = /home/dagouzi/darknet/voc/train.txt valid =
/home/dagouzi/darknet/voc/test.txt names = data/voc.names backup = backup
*
修改data/voc.names文件,进行修改(根据您的类别修改):
min jun
*
修改cfg/yolov3-voc.cfg文件,进行修改(根据您的目录修改):
[net] # Testing #batch=1 #subdivisions=1 # Training batch=32 subdivisions=16
width=416 height=416 channels=3 momentum=0.9 decay=0.0005 angle=0 saturation =
1.5 exposure = 1.5 hue=.1 learning_rate=0.001 burn_in=1000 max_batches = 50200
policy=steps steps=40000,45000 scales=.1,.1 [convolutional] batch_normalize=1
filters=32 size=3 stride=1 pad=1 activation=leaky # Downsample [convolutional]
batch_normalize=1 filters=64 size=3 stride=2 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=32 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=64 size=3 stride=1
pad=1 activation=leaky [shortcut] from=-3 activation=linear # Downsample
[convolutional] batch_normalize=1 filters=128 size=3 stride=2 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=64 size=1 stride=1
pad=1 activation=leaky [convolutional] batch_normalize=1 filters=128 size=3
stride=1 pad=1 activation=leaky [shortcut] from=-3 activation=linear
[convolutional] batch_normalize=1 filters=64 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=128 size=3 stride=1
pad=1 activation=leaky [shortcut] from=-3 activation=linear # Downsample
[convolutional] batch_normalize=1 filters=256 size=3 stride=2 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=128 size=1 stride=1
pad=1 activation=leaky [convolutional] batch_normalize=1 filters=256 size=3
stride=1 pad=1 activation=leaky [shortcut] from=-3 activation=linear
[convolutional] batch_normalize=1 filters=128 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=256 size=3 stride=1
pad=1 activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=256 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear # Downsample
[convolutional] batch_normalize=1 filters=512 size=3 stride=2 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=256 size=1 stride=1
pad=1 activation=leaky [convolutional] batch_normalize=1 filters=512 size=3
stride=1 pad=1 activation=leaky [shortcut] from=-3 activation=linear
[convolutional] batch_normalize=1 filters=256 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=512 size=3 stride=1
pad=1 activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear # Downsample
[convolutional] batch_normalize=1 filters=1024 size=3 stride=2 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=512 size=1 stride=1
pad=1 activation=leaky [convolutional] batch_normalize=1 filters=1024 size=3
stride=1 pad=1 activation=leaky [shortcut] from=-3 activation=linear
[convolutional] batch_normalize=1 filters=512 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 filters=1024 size=3 stride=1
pad=1 activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=512 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=1024 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear [convolutional]
batch_normalize=1 filters=512 size=1 stride=1 pad=1 activation=leaky
[convolutional] batch_normalize=1 filters=1024 size=3 stride=1 pad=1
activation=leaky [shortcut] from=-3 activation=linear ######################
[convolutional] batch_normalize=1 filters=512 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 size=3 stride=1 pad=1
filters=1024 activation=leaky [convolutional] batch_normalize=1 filters=512
size=1 stride=1 pad=1 activation=leaky [convolutional] batch_normalize=1 size=3
stride=1 pad=1 filters=1024 activation=leaky [convolutional] batch_normalize=1
filters=512 size=1 stride=1 pad=1 activation=leaky [convolutional]
batch_normalize=1 size=3 stride=1 pad=1 filters=1024 activation=leaky
[convolutional] size=1 stride=1 pad=1 filters=21 activation=linear [yolo] mask
= 6,7,8 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198,
373,326 classes=2 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=1
[route] layers = -4 [convolutional] batch_normalize=1 filters=256 size=1
stride=1 pad=1 activation=leaky [upsample] stride=2 [route] layers = -1, 61
[convolutional] batch_normalize=1 filters=256 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 size=3 stride=1 pad=1
filters=512 activation=leaky [convolutional] batch_normalize=1 filters=256
size=1 stride=1 pad=1 activation=leaky [convolutional] batch_normalize=1 size=3
stride=1 pad=1 filters=512 activation=leaky [convolutional] batch_normalize=1
filters=256 size=1 stride=1 pad=1 activation=leaky [convolutional]
batch_normalize=1 size=3 stride=1 pad=1 filters=512 activation=leaky
[convolutional] size=1 stride=1 pad=1 filters=21 activation=linear [yolo] mask
= 3,4,5 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198,
373,326 classes=2 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=1
[route] layers = -4 [convolutional] batch_normalize=1 filters=128 size=1
stride=1 pad=1 activation=leaky [upsample] stride=2 [route] layers = -1, 36
[convolutional] batch_normalize=1 filters=128 size=1 stride=1 pad=1
activation=leaky [convolutional] batch_normalize=1 size=3 stride=1 pad=1
filters=256 activation=leaky [convolutional] batch_normalize=1 filters=128
size=1 stride=1 pad=1 activation=leaky [convolutional] batch_normalize=1 size=3
stride=1 pad=1 filters=256 activation=leaky [convolutional] batch_normalize=1
filters=128 size=1 stride=1 pad=1 activation=leaky [convolutional]
batch_normalize=1 size=3 stride=1 pad=1 filters=256 activation=leaky
[convolutional] size=1 stride=1 pad=1 filters=21 activation=linear [yolo] mask
= 0,1,2 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198,
373,326 classes=2 num=9 jitter=.3 ignore_thresh = .5 truth_thresh = 1 random=1
接着下载预训练模型
wget https://pjreddie.com/media/files/darknet53.conv.74
最后开始进行训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信