2

Я немного новичок в caffe, и я получаю странное поведение. Я пытаюсь использовать точную настройку на bvlc_reference_caffenet для выполнения задачи OCR.Сеть Caffe, получающая очень низкие потери, но очень плохая точность при тестировании

Я взял свою предварительно обработанную сеть, изменил последний уровень FC на количество классов выпуска, которые у меня есть, и переучился. После нескольких тысяч итераций я получаю потери в размере ~ .001 и точность более 90 процентов при тестировании сети. Тем не менее, когда я пытаюсь запустить свою сеть по данным, я получаю ужасные результаты, не превышающие 7 или 8 процентов.

код я использую для запуска сети является:

[imports] 

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt', 'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel', 
         image_dims=(227, 227, 1)) 

input_image = caffe.io.load_image('/Training_Processed/6/0.png')  
prediction = net.predict([input_image]) # predict takes any number of images, and formats them for the Caffe net automatically  
cls = prediction[0].argmax() 

Любые мысли о том, почему эта работа может быть настолько бедны?

Спасибо!

PS: Дополнительная информация, которая может быть полезной или непригодной. При классификации, как показано ниже, классификатор, по-видимому, предпочитает определенные классы. Несмотря на то, что у меня проблема с классом 101, мне кажется, что присваивается максимум 15 различных классов.

PPS: Я также уверен, что не перерабатываю. Я тестировал это с моментальными снимками, и все они демонстрируют те же плохие результаты.

ответ

5

Ваш код для тестирования модели размещены кажется, пропустить некоторые компоненты:

  1. Похоже, вы не вычитают среднее изображения.
  2. Вы не обменяли каналы с RGB на BGR.
  3. Вы не масштабировали входы до диапазона [0..255].

Глядя на подобных случаях caffe.Classifier вы можете увидеть что-то вроде:

net = caffe.Classifier('bvlc_reference_caffenet/deploy.prototxt', 
         'bvlc_reference_caffenet/caffenet_train_iter_28000.caffemodel', 
         mean = NP.load('ilsvrc_2012_mean.npy'), 
         input_scale=1.0, raw_scale=255, 
         channel_swap=(2,1,0), 
         image_dims=(227, 227, 1)) 

Это важно иметь такое же преобразование входного сигнала в тесте, как в процессе обучения.