2016-12-08 2 views
4

Я хотел бы изменить модель ImageNet Caffe, как описано ниже:Как изменить модель Imagenet Caffe?

As the input channel number for temporal nets is different from that of spatial nets (20 vs. 3), we average the ImageNet model filters of first layer across the channel, and then copy the average results 20 times as the initialization of temporal nets.

Мой вопрос, как я могу achive выше результаты? Как я могу открыть модель caffe, чтобы иметь возможность делать эти изменения?

Я прочитал учебник по чистой хирургии, но он не охватывает необходимую процедуру.

Благодарим за помощь!

AMayer

ответ

3

Net Surgery tutorial должна дать вам основы, необходимые для покрытия этого. Но позвольте мне объяснить шаги, которые необходимо сделать более подробно:

  1. Подготовка сетевых архитектур .prototxt: Вам нужно два файла: существующий ImageNet .prototxt файл, и ваша новая временная сетевая архитектура. Вы должны сделать все слои за исключением первых сверточных слоев, идентичных в обеих сетях, включая имена слоев. Таким образом, вы можете использовать файл ImageNet .caffemodel для автоматической инициализации весов.

    Поскольку первый conv-слой имеет разный размер, вы должны указать ему другое имя в своем файле .prototxt, чем в файле ImageNet. В противном случае Caffe попытается инициализировать этот слой с уже существующими весами, что не получится, поскольку они имеют разные формы. (Это то, что происходит в редактировании вашего вопроса.) Просто назовите его, например. conv1b и соответственно изменить все ссылки на этот слой.

  2. Загрузите ImageNet сеть для тестирования, так что вы можете извлечь параметры из файла модели:

    net = caffe.Net('imagenet.prototxt', 'imagenet.caffemodel', caffe.TEST) 
    
  3. Извлечение веса из этой загруженной модели.

    conv_1_weights = old_net.params['conv1'][0].data 
    conv_1_biases = old_net.params['conv1'][1].data 
    
  4. Средние веса на каналах:

    conv_av_weights = np.mean(conv_1_weights, axis=1, keepdims=True) 
    
  5. Загрузите новую сеть вместе со старым .caffemodel файла, так как все слои, за исключением для первого слоя непосредственно использовать гири из ImageNet:

    new_net = caffe.Net('new_network.prototxt', 'imagenet.caffemodel', caffe.TEST) 
    
  6. Назначьте рассчитанные средние веса новой сети

    new_net.params['conv1b'][0].data[...] = conv_av_weights 
    new_net.params['conv1b'][1].data[...] = conv_1_biases 
    
  7. Сохранение веса на новый .caffemodel файла:

    new_net.save('new_weights.caffemodel') 
    
+0

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

+0

У меня ошибка. Я обновил основной пост с кодом, который я использовал на основе вашего предложения, чтобы лучше рассмотреть проблему. Позже я удалю код, чтобы не путать новых читателей. Что я там сделал? Спасибо! – AMayer

+0

Мне удалось получить эту ошибку, но она перешла в другую. Я обновил главный пост. Спасибо! – AMayer

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