DarkNet - ничего не обнаружено для пользовательских данных обучения - PullRequest
0 голосов
/ 20 мая 2019

Я создал свой собственный набор данных, который представляет собой набор изображений футбольного мяча. Поскольку у меня есть только 1 класс, я изменил ball-yolov3-tiny.cfg как настройку filters на 18 и classes на 1.

Затем я аннотировал изображения и помещал созданные .txt файлы в тот же каталог изображений. Наконец, я начал обучение, используя модель darknet53.conv.74, выполнив команду darknet detector train custom/ball-obj.data custom/ball-yolov3-tiny.cfg darknet53.conv.74.

У меня 134 изображения для обучения и 15 изображений для теста. Вот пример вывода тренировочного процесса:

95: 670.797241, 597.741333 avg, 0.000000 rate, 313.254830 seconds, 6080 images
Loaded: 0.000302 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499381, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.496005, No Obj: 0.496541, .5R: 0.000000, .75R: 0.000000,  count: 32
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499381, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.496005, No Obj: 0.496541, .5R: 0.000000, .75R: 0.000000,  count: 32
96: 670.557190, 605.022949 avg, 0.000000 rate, 312.962750 seconds, 6144 images
Loaded: 0.000272 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499360, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.495868, No Obj: 0.496454, .5R: 0.000000, .75R: 0.000000,  count: 32
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499360, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.495868, No Obj: 0.496454, .5R: 0.000000, .75R: 0.000000,  count: 32
97: 670.165161, 611.537170 avg, 0.000000 rate, 312.681998 seconds, 6208 images
Loaded: 0.000282 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499331, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.495722, No Obj: 0.496397, .5R: 0.000000, .75R: 0.000000,  count: 32
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499331, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344946, Class: 0.498204, Obj: 0.495722, No Obj: 0.496397, .5R: 0.000000, .75R: 0.000000,  count: 32
98: 669.815918, 617.365051 avg, 0.000000 rate, 319.203044 seconds, 6272 images
Loaded: 0.000244 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499294, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344947, Class: 0.498204, Obj: 0.495569, No Obj: 0.496253, .5R: 0.000000, .75R: 0.000000,  count: 32
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499294, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344947, Class: 0.498204, Obj: 0.495569, No Obj: 0.496253, .5R: 0.000000, .75R: 0.000000,  count: 32
99: 669.555664, 622.584106 avg, 0.000000 rate, 320.330266 seconds, 6336 images
Loaded: 0.000244 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499246, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344948, Class: 0.498204, Obj: 0.495409, No Obj: 0.496197, .5R: 0.000000, .75R: 0.000000,  count: 32
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499246, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.344948, Class: 0.498204, Obj: 0.495409, No Obj: 0.496197, .5R: 0.000000, .75R: 0.000000,  count: 32
100: 669.132629, 627.238953 avg, 0.000000 rate, 329.954091 seconds, 6400 images
Saving weights to backup//ball-yolov3-tiny.backup
Saving weights to backup//ball-yolov3-tiny_100.weights
Resizing
576
Loaded: 1.764142 seconds
Region 16 Avg IOU: -nan, Class: -nan, Obj: -nan, No Obj: 0.499216, .5R: -nan, .75R: -nan,  count: 0
Region 23 Avg IOU: 0.430712, Class: 0.498203, Obj: 0.495251, No Obj: 0.496154, .5R: 0.000000, .75R: 0.000000,  count: 32

Вот другие файлы конфигурации:

ball-obj.data

classes= 1
train  = custom/ball-train.txt
valid  = custom/ball-test.txt
names = custom/ball-obj.names
backup = backup/

шариковой obj.names

ball

Когда я использую созданные веса для тестирования одного изображения, просто не удается найти футбольные мячи на изображениях. Нужно ли мне больше (например, 10K) изображений для этого? Или мне нужно тренировать модель долгие часы? Я просто хочу быть уверен, что все, что касается моей настройки, в порядке.

Пожалуйста, не стесняйтесь задавать любые вопросы, касающиеся моего эксперимента. Ваша помощь очень ценится. Заранее спасибо.

p.s. Вот все содержание моего ball-yolov3-tiny.cnf:

[net]
# Testing
batch=1
subdivisions=1
# Training
#batch=64
#subdivisions=2
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 = 500200
policy=steps
steps=400000,450000
scales=.1,.1

[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=1

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
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

[convolutional]
size=1
stride=1
pad=1
filters=18
activation=linear



[yolo]
mask = 3,4,5
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=1
num=6
jitter=.3
ignore_thresh = .7
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, 8

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=18
activation=linear

[yolo]
mask = 0,1,2
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=1
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

Я выполняю команду:

darknet detector train custom/ball-obj.data custom/ball-yolov3-tiny.cfg darknet53.conv.74

Ответы [ 2 ]

1 голос
/ 21 мая 2019
  1. У вас небольшой набор данных, и я думаю, что 15 изображений для тестирования слишком малы.
  2. batch=1 subdivisions=1 означает, что вы тренируете только 1 изображение за 1 итерацию. Если у вас достаточно графического процессора, вы можете попытаться увеличить число, чтобы ваша модель лучше сходилась
  3. Самая очевидная причина, по которой ваша модель плохая, это 100: 669.132629, 627.238953 avg. Вы можете видеть, что средняя потеря составляет 627.238953 , что слишком велико. Хорошая модель YOLO имеет потери около 0,06 ~ 1.

Таким образом, вы можете продолжить обучение в соответствии с моими пунктами выше (100 итераций недостаточно, особенно для Tiny YOLO), увеличить пакет и подразделение и увеличить набор данных.

Добавление : Пересчет ограничивающей рамки с использованием вашего набора данных также является хорошим вариантом, вы можете найти множество отличных примеров и кодов в Интернете.

0 голосов
/ 21 мая 2019

Увеличьте размер пакета до 64 и используйте столько разделений, сколько может вместить ваша память GPU: начните с 1, 2, 4, 8, 16, 32 и, наконец, 64, если вы продолжаете извлекать CUDA из памяти.

Вы должны тренировать свою сеть до тех пор, пока ваш средний уровень потерь не станет <1. </p>

Используете ли вы оригинальную версию darknet из репозитория Joseph Redmons, или вы используете форк?Существует ряд рекомендаций по улучшению обнаружения объектов здесь , однако я не уверен, работают ли они на всех других версиях.

...