web-dev-qa-db-fra.com

Comment faire un transfert d'apprentissage pour l'algorithme de détection d'objet yolo?

J'ai formé avec succès yolo à la prédiction de mes propres images avec cet article . Là, j'ai changé de classe = 5 (j'ai suivi une formation de 5 classes) et filtré à 50 dans la ligne 224 de mon fichier cfg.
Ce que je veux, c’est que je souhaite effectuer un transfert d’apprentissage pour yolo en formant le dernier calque entièrement connecté et le calque softmax.
Mon fichier cfg est comme suit. 

[net]
batch=64
subdivisions=8
height=416
width=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.0001
max_batches = 45000
policy=steps
steps=100,25000,35000
scales=10,.1,.1

[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

[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

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
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]
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

[maxpool]
size=2
stride=2

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

[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


#######

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

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

[route]
layers=-9

[reorg]
stride=2

[route]
layers=-1,-3

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

[convolutional]
size=1
stride=1
pad=1
filters=50
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=5
coords=4
num=5
softmax=1
jitter=.2
rescore=1

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

absolute=1
thresh = .6
random=0
5
Erandaka Anupama

Avec 5 classes, vous devez définir des filtres de 30 à 50 . Filters = (nombre de classes + 1) * 5

1
Maadh

En fait, c'est filters=(classes + 5)*5

Référence: Ici

1
laza

Je suppose que vous utilisez le framework pjreddie/darknet pour l'implémentation YOLO . Si c'est le cas, vous définissez un paramètre supplémentaire stopbackward=1 au niveau de la couche au-dessus duquel vous n'avez pas besoin de la mise à jour . Dans le fichier parse.c , à la ligne 724:

l.stopbackward = option_find_int_quiet(options, "stopbackward", 0); 

Cela signifie donc que c'est un paramètre à chaque couche, tout comme batch_normalize=1, vous pouvez spécifier stopbackward=1. Ainsi, toutes les couches supérieures à celle-ci ne seront pas mises à jour. Ceci est également visible dans le fichier network.c à la ligne 272:

if(l.stopbackward) break; 
0
lamo_738