Caffe: инициализация двух каналов сиамских сетей с одинаковыми предварительно подготовленными весами, но без разделения весов во время тренировки

Я пытался реализовать сиамскую сеть, описанную в "Видении леса с деревьев: целостный подход к гетерогенному распознаванию лиц в ближней инфракрасной области, CVPRW 2016". Подход включает инициализацию двух каналов сиамской сети с одинаковыми предварительно подготовленными весами модели одного канала. Это довольно прямолинейно в кафе, когда весы делятся. Но я стремлюсь реализовать его таким образом, чтобы веса не были разделены (приходится учиться вместе без одинаковых весов, используя контрастные потери, как упомянуто в вышеприведенной статье, но инициализация на обоих каналах должна быть одинаковой). Я не мог найти способ реализовать это в кафе. У кого-нибудь из вас есть какие-нибудь предложения для аккуратных подходов или хаков, чтобы сделать это в кафе? Благодарю.

1 ответ

Вы можете загрузить исходную и сиамскую модель назначения в python, используя caffe:

netSrc = caffe.Net('deploySrc.prototxt',
                'src.caffemodel',
                caffe.TEST)
netDst = caffe.Net('deployDst.prototxt',
                'dst.caffemodel',
                caffe.TEST)

Затем вы можете назначить для каждого слоя веса от источника до места назначения. Допустим, вы хотите скопировать слой conv из источника в convA и convB в сиамской сети:

netDst.params['convA'] = netSrc.params['conv']
netDst.params['convB'] = netSrc.params['conv']

Затем сохраните результаты в новой кофейной модели:

netDst.save('dstInitialized.caffemodel')
Другие вопросы по тегам