yolov3在win10下训练自己的数据

确定自己配好yolov3的环境了,跑官方的例子也成功后,现在考虑自己的数据。

首先确定自己cuda环境是否设置好了(我自己是重新加了环境变量,具体请百度)。
按着官方教程顺序来吧。

1

darknet-master\build\darknet\x64目录下,复制一个yolov3.cfg,另存为yolo-obj.cfg。打开yolo-obj.cfg(用notepad、vscode之类的),需要做一些修改:

""batch和 subdivisions可选择性修改,注释上面或者下面,我用的如下,相对来说跑起来慢点""
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=16

接着在这个文件里还有6个地方要改,但是是3块地方。搜索yolo,yolo-obj.cfg总共出现了3次,分别都要修改,如下图:
在这里插入图片描述
观察我注释掉的地方,yolo区域的classes,和对应上方的convolutional区域的filters,要修改为你自己的参数。classes为你自己的类,我的只有一个,所以设为1,而另一个公式为:filters=(class+5)x3),带入1,为18,所以我设的8。而该文件这样的区域有3处,修改完这3个区域,6行代码。

2

在目录中build\darknet\x64\data\创建文件obj.names,具有对象名称-每个都在新行中。像这么写:

在这里插入图片描述
每一行都是一个对象名字,因为我只有一个标注,所以只有一行。

3

在目录中build\darknet\x64\data\创建文件obj.data,这么写:

classes= 1   
train  = data/train.txt
valid  = data/test.txt
names = data/obj.names
backup = backup/

注意修改自己类别数量。

4

将对象的图像文件(.jpg)放在目录中build\darknet\x64\data\obj\

5

开始标记数据,生成自己的数据集。官方Yo_lo_mark,我用的是labelImg(密码:lu56)。labelImg基于Python,pyqt5 的环境,挺好用的,简单介绍下:

  1. 下载完软件解压,运行文件夹下根目录labelImg.py程序
  2. 选择好opendir和savedir
  3. 对图像进行标注,每标注完了注意保存,他会在savedir目录下生成xml文件。
  4. 这里我在网盘:e7vi放了一个模板,文件解压后有五个文件夹和二个py程序,其中Annotations存放上步骤生成的xml文件,运行test.py,会在ImageSets里生成几个txt文件,然后将voc_label.py移到整个文件夹外运行,该程序会生成label文件夹,里面生成了你标注的图像的txt文件。
    在这里插入图片描述
  5. 当然这方面网上教程很多,具体可以自行查询,这里只是简单介绍。需要的也只是4生成的txt文件。单独一个txt文件如下:
    在这里插入图片描述
    我只有一个类,所以这里第一列都是0

6

在build\darknet\x64\data\中创建train.txt,使用图像的文件名,每个文件名在新行中,路径相对于darknet.exe,例如,包含:

data/obj/img1.jpg
data/obj/img2.jpg
data/obj/img3.jpg

7

下载卷积层的预训练权重(154 MB):https://pjreddie.com/media/files/darknet53.conv.74,然后放到目录中build\darknet\x64中

8开始训练

使用命令行开始培训:darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74

9

训练结束后-取得成绩yolo-obj_final.weights从路径build\darknet\x64\backup\

总结

因为在写这篇博客的时候,程序还在跑,所以,无法展示。先说说期间遇到的问题。
刚开始的时候在第一步设置了batch和subdivisions,将他们分为设为了64和16,跑的时候直接内存不足。后来改成了1和1,跑的导师挺快,但是最后无法收敛,直接Nan。
我重新新建了一个项目,按上面设置完后,多干了一件事就是修改Makefile:

# GPU=0
# CUDNN=0
GPU=1#要用到Gpu,所以设为了1
CUDNN=1#同上
CUDNN_HALF=0
OPENCV=0#要调用摄像头就设为1
AVX=0
OPENMP=0
LIBSO=0
DEBUG=0#用DEBUG就设为1
...
CC=gcc
CPP=g++
# NVCC=nvcc #网上搜说这个要设为自己的,也不说的详细
NVCC = C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/bin/nvcc#我默认安装的,也就这么设
...
ifeq ($(GPU), 1)
# COMMON+= -DGPU -I/usr/local/cuda/include/#网上都说改为自己路径
COMMON+= -DGPU -I/C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/include/#我这么改的
CFLAGS+= -DGPU
feq ($(OS),Darwin) #MAC
LDFLAGS+= -L/usr/local/cuda/lib -lcuda -lcudart -lcublas -lcurand
else
LDFLAGS+= -L/C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 -lcuda -lcudart -lcublas -lcurand#我把这个改成了这样

不知道这么改对不对,但是,修改后(加上前面cuda环境变量添加),在batch=64 ,subdivisions=8 下顺利跑通了。给一个在跑的图像:
在这里插入图片描述
希望能帮到大家!哈哈开心!

猜你喜欢

转载自blog.csdn.net/dz4543/article/details/85302075