2017-01-12 4 views
1

Я пытаюсь запустить FCN-8. Я сделал следующие шаги: 1. скачан this repository 2. преобразование моих данных в LMDB и изменить пути в train_val.prototxt 3. загрузив fcn8s-большегрузные паскаль caffemodel 4. изменение number_of_output в train_val.prototxt и deploy.prototxt от к (число классов в моих данных) в течение последних следующих слоев:Почему потеря остается постоянной во время тренировки FCN-8?

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 

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

+0

Не могли бы вы проверить, какие слои имеют инструкцию «не нужно назад» во время инициализации? (внутри журнала, перед началом тренировочной фазы) –

+0

@LemmRas благодарит за внимание. Эти три в журнале 'не нуждаются в обратном вычислении': ** label ** не нуждается в обратном вычислении. '** data_data_0_split ** не нуждается в обратном вычислении'. '** данные ** не требуется задний расчет .'. Я добавил эти две строки ** группу: 5 weight_filler: {type: "bilinear"} ** на уровни 'Deconvolution', но проблема все еще там ... Потеря остается постоянной. –

ответ

1
  • Вы использовали функцию под названием surgery.transplant() в solve.py пересадить caffemodel от исходной сети к текущей сети?

  • Вы добавили weight-filler и bias-filler на деконволюционный слой с начальным значением в net.py?

  • После выполнения этих двух шагов вы выполнили команду net.py для создания обновленного слоя?

Проверьте эти шаги и посмотрите, что произойдет.

+0

Спасибо. Я не менял слои, но «вес-наполнитель» есть. Я новичок в питоне и Caffe. Я никогда не использовал 'solve.py' и' net.py'. Единственные шаги, которые я сделал, это подготовить модель с помощью 'solver.prototxt' и' train_val.prototxt', я использовал модель снимка для вывода тестового изображения с помощью скрипта 'infer.py'. Однако выходное изображение всегда черное даже после 200000 итераций. Не могли бы вы сообщить мне, в чем заключается цель 'surgery.transplant()' и что именно делают 'solve.py' и' net.py'? на каком этапе я должен запускать эти скрипты? Заранее спасибо –

+0

surgery.transplant() используется для передачи параметров сети между различными сетевыми структурами. Например: VGG16 используется в качестве исходной сетевой структуры, вы хотите передать предварительно подготовленные параметры на VGG16 в вашу существующую сеть, но ваша текущая сеть имеет другая структура от VGG16, поэтому вам нужна операция. трансплантат («ваша сеть», «VGG16»). – lvxubo

+0

net.py используется для генерации train.prototxt и val.prototxt. solve.py используется для начала процесса обучения. каждый раз, когда вы меняете net.py, вам нужно «python net.py», чтобы сгенерировать новый файл train.prototxt и val.prototxt. это означает, что вы изменили свою структуру сети. – lvxubo

Смежные вопросы