本文介绍如何制作数据集、修改代码、不加载预权重从头跑自己的训练数据
一、简单回顾一下yolo原理:
1、端到端,输入图像,一次性输出每个栅格预测的一种或多种物体
2、坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。
坐标w,h代表了预测的bounding box的width、height相对于整幅图像(或者栅格)width,height的比例。
3、
每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文: https://www.cnblogs.com/makefile/p/YOLOv3.html © 康行天下
每个格子可以输出B个bounding box,但是最终只会输出IOU占比最高的bounding box 作为输出,所以, 一个格子只能预测一个类别。
4、loss=∑i=0s2coordErr+iouErr+clsErr
考虑各项权重:λcoord = 5, λnoobj = 0.5。因为不包含物体的框较多,需要弱化对应的权重影响,不然会导致包含物体的框贡献低,训练不稳定甚至发散。
5、如果想一个格子预测多个类别,需要Anchors. --yolo2
二、如何使用yolo3,训练自己的数据集进行目标检测
第一步:下载VOC2007数据集,把所有文件夹里面的东西删除,保留所有文件夹的名字。
像这样:
第二步:把你所有的图片都复制到JPEGImages里面
像这样:
第三步:生成Annotations下的文件
工具:LabelImg ,链接:https://pan.baidu.com/s/1GJFYcFm5Zlb-c6tIJ2N4hw 密码:h0i5
像这样:
第四步:生成ImageSets/Main/4个文件。在VOC2007下建个文件test.py,然后运行
像这样:
test.py代码:
import os
import random
trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = ‘Annotations’
txtsavepath = ‘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(‘ImageSets/Main/trainval.txt’, ‘w’)
ftest = open(‘ImageSets/Main/test.txt’, ‘w’)
ftrain = open(‘ImageSets/Main/train.txt’, ‘w’)
fval = open(‘Imag