ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用自定义数据集训练YOLO

2022-01-04 02:01:09  阅读:253  来源: 互联网

标签:... 定义数据 训练 voc cfg YOLO filters need your


YOLO Training Conclusion on Custom Dataset and FAQs

YOLO official website

Prepare dataset

You can google how to prepare your custom dataset. There are lots of tutorials available. I recommend this article.

My custom dataset has ~15k images and 3 classes. I just replace image files in VOC dataset /VOCdevkit with my custom images and run official python script to generate data YOLO needs. You can click the official website link above to find the script. It's easy to learn how to use it.

Compile

We need to modify Makefile before we make it.

GPU=1 # If you have a GPU, it will speed up the training process greatly.
CUDNN=1 # Using cudnn
OPENCV=0 # Using camera
OPENMP=0
DEBUG=0
...

Then, just make the source code.

Train

There are three files needing to be modified before training on custom dataset.

  • First, you just need to write class names in your dataset to data/voc.names. Of course, you can change the file name.
class A
class B
class C
...
  • Second, you need to modify cfg/voc.names. Just change it based on your custom dataset and file paths.
classes= 3
train  = <path to train file>/train.txt
valid  = <path to test file>/test.txt
names = data/voc.names
backup = backup
  • Before strating step 3, I recommend you to read this article to understand what parameters mean.
  • Third, the key step here. We need to modify yolo network configuration to meet our requirements for custom dataset. Read configuration below carefully. Here we give two examples, yolov2-tiny-voc.cfg and yolov3-voc.cfg, you can configure the network you like.
// yolov2-tiny-voc.cfg
[net]
# Testing
# batch=1
# subdivisions=1

# Training
batch=64 # you need to comment testing cfg and uncomment training cfg
subdivisions=2

width=416
height=416
channels=3
...

# you can change it for your own settings
learning_rate=0.001
max_batches = 40200
policy=steps
steps=-1,100,20000,30000
scales=.1,10,.1,.1
...
...
[convolutional]
size=1
stride=1
pad=1
filters=40 # filters = num * (classes + coords + 1) = 5 * (3 + 4 + 1)
activation=linear

[region]
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
bias_match=1
classes=3 # you may need to change this
coords=4 # compute filters above
num=5 # compute filters above
softmax=1
jitter=.2
rescore=1

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6
random=1
// yolov3-voc.cfg
[net]
# Testing
# batch=1
# subdivisions=1

# Training
batch=64 # you need to comment testing cfg and uncomment training cfg
subdivisions=2

width=416
height=416
channels=3
...

# you can change it for your own settings
learning_rate=0.001
max_batches = 40200
policy=steps
steps=-1,100,20000,30000
scales=.1,10,.1,.1
...
...
[convolutional]
size=1
stride=1
pad=1
filters=24 # filters = 3 * (classes + 5)
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=3 # you need to modify
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
...
...
[convolutional]
size=1
stride=1
pad=1
filters=24 # filters = 3 * (classes + 5)
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=3 # you need to modify
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
...
...
[convolutional]
size=1
stride=1
pad=1
filters=24 # filters = 3 * (classes + 5)
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=3 # you need to modify
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1
  • Now, we can run the training command. Here we train from scratch, you also can download pre-trained weights from YOLO official website above.
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg
  • In addition, you can read this article to understand outputs of YOLO.

Test

It's easy to test model trainde well. Just run command here.

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights <path to testing image>

If you get no bounding box in predictions.jpg, you firstly need to check your cfg/yolov3-voc.cfg file. In fact, I forgot to uncomment testing configuration in .cfg file. And just modify it, you will get correct prediction results. If nothing changes, you need to think about whether your custom dataset correctly generated.

FAQs

1. Dimension mismatch when loading network model

Obviously, your network filters is incorrect. Go back to .cfg file and modify filters.

2. CUDA Out of Memory when loading data

You need to modify cfg/yolov3-voc.cfg. Increase subdivisions, or decrease batch.

3. Appearence of lots of nan when training.

First, check your data path and data whether is correct. If that is not ok, you should focus on learning_rate. Generally, you should decrease your learning_rate in .cfg file.

4. Training output obj=0.000000

It means that your network does not detect any object. Definately, it has some problems. You could tune learning_rate and batch in .cfg file. Generally, you should decrease the learning_rate or decrease the batch.

5. No bounding boxes when testing images

I also encountered the problem. Actually, it is a careless problem. Just go back to the .cfg file and uncomment testing configuration and comment training configuration.

标签:...,定义数据,训练,voc,cfg,YOLO,filters,need,your
来源: https://www.cnblogs.com/swxu/p/15761101.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有