Модификация Deploy.prototxt в GoogLeNet

Я использовал предварительно обученный GoogLeNet, а затем точно настроил его в своем наборе данных для решения задачи бинарной классификации. Набор данных проверки, кажется, дает "loss3/top1" 98,5%. Но когда я оцениваю производительность в своем наборе данных для оценки, это дает мне точность 50%. Какие бы изменения я ни вносил в train_val.prototxt, я вносил те же изменения в deploy.prototxt, и я не уверен, какие изменения мне следует внести в эти строки.

name: "GoogleNet"
layer {
  name: "data"
  type: "input"
  top: "data"
  input_param { shape: { dim:10 dim:3 dim:224 dim:224 } }
}

Какие-либо предложения???


person Ashutosh Singla    schedule 06.05.2016    source источник
comment
Пожалуйста, не публикуйте скриншоты текста, а скопируйте и вставьте сам текст, чтобы поисковая система могла лучше индексировать вопросы/ответы на этом сайте.   -  person Shai    schedule 06.05.2016
comment
Я рад, что вам наконец удалось решить эту проблему, которая у вас была. В ходе этого процесса вы разместили здесь несколько вопросов, которые теперь кажутся не по теме или дублируют этот ответ. Пожалуйста, рассмотрите возможность уборки...   -  person Shai    schedule 09.05.2016


Ответы (1)


Вам не нужно больше ничего менять в вашем deploy.prototxt*, но в том, как вы передаете данные в сеть. Вы должны преобразовывать оценочные изображения так же, как вы преобразовывали изображения для обучения/проверки.
См., например, как classifier.py пропускает входные изображения через должным образом инициализированный класс caffe.io.Transformer.

Слой "Input", который у вас есть в prototxt, — это просто объявление для caffe о выделении памяти в соответствии с входным BLOB-объектом формы 10 на 3 на 224 на 224.


* конечно, вы должны убедиться, что train_val.prototxt и deploy.prototxt полностью одинаковы (за исключением входного(ых) слоя(ев) и слоя(ев) потерь): это включает проверку имен слоя. strong> идентичны, поскольку caffe использует имена слоев для присвоения весов из файла caffemodel фактическим параметрам, которые он загружает. Несоответствие имен приведет к тому, что caffe будет использовать случайные веса для некоторых слоев.

person Shai    schedule 06.05.2016
comment
Я использовал файл сценария, указанный здесь [Ссылка] (github.com/BVLC /caffe/blob/master/python/classify.py) для оценки производительности моих оценочных изображений, и он точно преобразовал изображения так же, как я делал это для обучения и проверки. Но все же производительность не показывает никаких улучшений. Что касается файла развертывания, у меня есть еще одна путаница, мне нужно изменить имена слоев, которые я сделал в train_val.txt? - person Ashutosh Singla; 06.05.2016
comment
Если я масштабирую изображения до 256X256, то вместо 224 не должно быть 256. - person Ashutosh Singla; 06.05.2016
comment
@AshutoshSingla есть масштабирование, а затем обрезка. чтобы быть строгим, вам нужно масштабировать до 256, а затем обрезать до 224. - person Shai; 07.05.2016
comment
Вы должны изменить имена слоев, чтобы они совпадали с именами в train_val.prototxt: иначе caffe не загрузит обученные параметры для этих слоев. просмотрите журнал времени выполнения для слоев, для которых caffe не может загрузить параметры - person Shai; 08.05.2016
comment
Большое спасибо за твою помощь. После изменения имени слоя в deploy.prototxt точность приближается к 98% для итерации № 1000. - person Ashutosh Singla; 08.05.2016