Я пытаюсь применить уровень CRF к моей сети для двоичной сегментации, но это приводит к ошибке ValueError: Shapes (?, 1, 1) and (?, 336, 1) are not compatible
.
Я хочу вывести тензор с формой (batch_size, 224, 336, 1)
.Судя по ошибке, img_height, похоже, была потеряна после введения CRF.
Ниже приведен пример кода, описывающего модель.Без CRF в конце все работает хорошо.
import keras
from keras.layers import UpSampling2D, Conv2D, Activation, MaxPooling2D
from keras_contrib.layers import CRF
img_width, img_height = 336, 224
kernel_size = 7
input=keras.engine.topology.Input(shape=(img_height, img_width, 3))
e=Conv2D(32,(kernel_size,kernel_size),padding='same')(input)
e1=Activation('relu')(e)
e=MaxPooling2D(pool_size=(2, 2))(e1)
e=Conv2D(64,(kernel_size,kernel_size),padding='same')(e)
e2=Activation('relu')(e)
e=MaxPooling2D(pool_size=(2, 2))(e2)
#Decoder layers
d=UpSampling2D()(e)
d=Conv2D(64,(kernel_size,kernel_size),padding='same')(d)
d=Activation('relu')(d)
d=UpSampling2D()(d)
d=Conv2D(32,(kernel_size,kernel_size),padding='same')(d)
d=Activation('relu')(d)
d=Conv2D(1,(1,1),padding='valid')(d)
d=Activation('sigmoid')(d)
out=CRF(1, sparse_target=True)(d)
autoencoder = Model(inputs=input, outputs=out)
Как правильно добавить CRF в мою сеть сегментации?