Я делаю регистрацию изображения, по сути выясняю, где находится изображение 60x60 на изображении большего размера 74x74. Изображения имеют разные модальности - один визуальный, другой ИК - поэтому простое сопоставление (openCV - matchTemplate) или другие методы (например, Взаимная информация) не работают. Поэтому я пробую полностью сверточную сиамскую сеть. (Две ссылки в конце - но ни с источником.)
Я бы хотел, чтобы сиамская часть сети была идентична с точки зрения структуры / веса, чтобы идентифицированные функции были сопоставимы. Моя задача - «полностью сверточная» часть. Из последней статьи «Благодаря полностью сверточной структуре мы можем подавать на левые и правые ветви патчи входных изображений разного размера».
Вопрос - как это делает полностью сверточная сеть? И как я могу исправить свой код? Что я хочу / Что я получаю
Код:
def convUnit(model,nFilters,strides=1):
model.add(Conv2D(nFilters, padding="same", kernel_size=(3, 3), strides=strides))
model.add(BatchNormalization(epsilon=0.0001, scale=False, center=False))
model.add(Lambda(K.relu))
def getL2(): # From 'hardnet', w/ minor modes
model = Sequential()
model.add(Conv2D(32, padding="same", kernel_size=(3, 3), input_shape=(dimT,dimT,1)))
model.add(BatchNormalization(epsilon=0.0001, scale=False, center=False))
model.add(Lambda(K.relu))
convUnit(model,32)
convUnit(model,64,strides=2)
convUnit(model,64)
convUnit(model,128,strides=2)
convUnit(model,128,strides=2
model.add(Conv2D(128, kernel_size=(8,8)))
model.add(BatchNormalization(epsilon=0.0001, scale=False, center=False))
return model # of size 1,1,128
def createNewModel():
model = getL2() # One model for images
left_unk = Input(shape=(None,None,1))
right_unk = Input(shape=(None,None,1))
encode_L = model(left_unk)
encode_R = model(right_unk)
# Combine - options include 1x1 Conv (per paper), dot product,
# some matmul, ...
#m2 = Dot( 3 )([encode_L, encode_R]) # not sure of axes here - tried combos
siamese_net = Model([left_unk,right_unk],m2)
return siamese_net
Результаты: Когда я запускаю простой прогноз, точка не работает с ...
In[0].dim(1) and In[1].dim(1) must be the same: [1,1,1,128] vs [1,3,3,128] on node dot_11/MatMul
Спасибо!
Ссылки: - Чжан и др., Регистрация мультимодального изображения дистанционного зондирования на основеГлубокая, полностью сверточная нейронная сеть