Почему потери остаются постоянными во время тренировок FCN-8?
Я пытаюсь запустить FCN-8. Я сделал следующие шаги:
1. скачал этот репозиторий 2. преобразовал мои данные в LMDB и изменил пути в train_val.prototxt
3. скачал fcn8s-heavy-pascal caffemodel
4. изменение number_of_output
в train_val.prototxt
а также deploy.prototxt
от 60 до 5 (количество классов в моих данных) в последних следующих слоях:
layer {
name: "score59"
type: "Convolution"
bottom: "fc7"
top: "score59"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 5 #60
kernel_size: 1
engine: CAFFE
}
}
layer {
name: "upscore2"
type: "Deconvolution"
bottom: "score59"
top: "upscore2"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 5 #60
bias_term: false
kernel_size: 4
stride: 2
}
}
layer {
name: "score-pool4"
type: "Convolution"
bottom: "pool4"
top: "score-pool4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 5 #60
kernel_size: 1
engine: CAFFE
}
}
layer { type: 'Crop' name: 'crop' bottom: 'score-pool4' bottom: 'upscore2'
top: 'score-pool4c' }
layer {
name: "fuse"
type: "Eltwise"
bottom: "upscore2"
bottom: "score-pool4c"
top: "score-fused"
eltwise_param {
operation: SUM
}
}
layer {
name: "upsample-fused-16"
type: "Deconvolution"
bottom: "score-fused"
top: "score4"
param {
lr_mult: 1
decay_mult: 1
}
convolution_param {
num_output: 5 #60
bias_term: false
kernel_size: 4
stride: 2
}
}
layer {
name: "score-pool3"
type: "Convolution"
bottom: "pool3"
top: "score-pool3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 5 #60
kernel_size: 1
engine: CAFFE
}
}
layer { type: 'Crop' name: 'crop' bottom: 'score-pool3' bottom: 'score4'
top: 'score-pool3c' }
layer {
name: "fuse"
type: "Eltwise"
bottom: "score4"
bottom: "score-pool3c"
top: "score-final"
eltwise_param {
operation: SUM
}
}
layer {
name: "upsample"
type: "Deconvolution"
bottom: "score-final"
top: "bigscore"
param {
lr_mult: 0
}
convolution_param {
num_output: 5 #60
bias_term: false
kernel_size: 16
stride: 8
}
}
layer { type: 'Crop' name: 'crop' bottom: 'bigscore' bottom: 'data' top: 'score' }
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "score"
bottom: "label"
top: "loss"
loss_param {
normalize: false
}
}
Я начал обучение с весов предварительно обученной модели для набора данных паскаля. Но потеря остается постоянной (потеря = 105476) с течением времени.
0112 18:25:07.198588 5878 sgd_solver.cpp:106] Iteration 150, lr = 1e-14
I0112 18:26:07.614239 5878 solver.cpp:228] Iteration 200, loss = 105476
I0112 18:26:07.614459 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:26:07.614490 5878 sgd_solver.cpp:106] Iteration 200, lr = 1e-14
I0112 18:27:06.198556 5878 solver.cpp:228] Iteration 250, loss = 105476
I0112 18:27:06.198801 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:27:06.198834 5878 sgd_solver.cpp:106] Iteration 250, lr = 1e-14
I0112 18:28:05.056469 5878 solver.cpp:228] Iteration 300, loss = 105476
I0112 18:28:05.056715 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:28:05.056751 5878 sgd_solver.cpp:106] Iteration 300, lr = 1e-14
I0112 18:29:04.537042 5878 solver.cpp:228] Iteration 350, loss = 105476
I0112 18:29:04.537261 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:29:04.537293 5878 sgd_solver.cpp:106] Iteration 350, lr = 1e-14
I0112 18:30:05.320504 5878 solver.cpp:228] Iteration 400, loss = 105476
I0112 18:30:05.320751 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:30:05.320796 5878 sgd_solver.cpp:106] Iteration 400, lr = 1e-14
I0112 18:31:06.690937 5878 solver.cpp:228] Iteration 450, loss = 105476
I0112 18:31:06.691177 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:31:06.691207 5878 sgd_solver.cpp:106] Iteration 450, lr = 1e-14
I0112 18:32:06.593940 5878 solver.cpp:228] Iteration 500, loss = 105476
I0112 18:32:06.596643 5878 solver.cpp:244] Train net output #0: loss = 105476 (* 1 = 105476 loss)
I0112 18:32:06.596701 5878 sgd_solver.cpp:106] Iteration 500, lr = 1e-14
Я не знаю, какую часть я делаю неправильно. Я очень ценю вашу помощь в решении этой проблемы.
1 ответ
Вы использовали функцию под названием
surgery.transplant()
вsolve.py
пересадить кофейную модель оригинальной сети в вашу текущую сеть?Вы добавили
weight-filler
а такжеbias-filler
на деконволюционном слое с начальным значением вnet.py
?Выполнив эти два шага, вы выполнили
net.py
создать обновленный слой?
Проверьте эти шаги и посмотрите, что произойдет.