Keras, регистрация изображений, полная сверточная сеть - PullRequest
0 голосов
/ 10 ноября 2019

Я делаю регистрацию изображения, по сути выясняю, где находится изображение 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

Спасибо!

Ссылки: - Чжан и др., Регистрация мультимодального изображения дистанционного зондирования на основеГлубокая, полностью сверточная нейронная сеть

...