How to solve 'InvalidArgumentError' during RetinaNet object detection training with Keras and ResNet152?

21 views Asked by At

Getting below InvalidArgumentError: Graph execution error: Detected at node 'mean_squared_error/SquaredDifference' while calling retinanet.fit function.

Node: 'mean_squared_error/SquaredDifference' required broadcastable shapes [[{{node mean_squared_error/SquaredDifference}}]] [Op:__inference_train_function_44676]

1

Model architecture:

from keras.layers import Input
input_tensor = Input(shape=(960, 540, 3))
backbone = ResNet152(weights='imagenet', include_top=False, input_tensor=input_tensor)
final_layer_output = backbone.layers\[-1\].output
print(final_layer_output)

c5 = backbone.get_layer('conv5_block3_out').output
c4 = backbone.get_layer('conv4_block36_out').output
c3 = backbone.get_layer('conv3_block8_out').output

p5 = Conv2D(256, kernel_size=1, strides=1, padding='same')(c5)
p4 = Add()(\[UpSampling2D(size=(2, 2))(p5), Conv2D(256, kernel_size=1, strides=1, padding='same')(c4)\])
p3 = Add()(\[UpSampling2D(size=(2, 2))(p4), Conv2D(256, kernel_size=1, strides=1, padding='same')(c3)\])
p6 = Conv2D(256, kernel_size=3, strides=2, padding='same')(c5)
p7 = Activation('relu')(BatchNormalization()(Conv2D(256, kernel_size=3, strides=2, padding='same')(p6)))

def create_classification_subnet(inputs, num_classes):
    x = inputs
    for i in range(4):
        x = Conv2D(256, kernel_size=3, strides=1, padding='same', activation='relu')(x)        
    outputs = Conv2D(1, kernel_size=3, strides=1, padding='same')(x)   
    outputs = Reshape((-1, 1))(outputs)
    outputs = Activation('sigmoid')(outputs)
    print(outputs.shape)
    return outputs

def create_regression_subnet(inputs, num_coordinates):
    x = inputs
    for i in range(4):
        x = Conv2D(256, kernel_size=3, strides=1, padding='same', activation='relu')(x)
    outputs = Conv2D(4, kernel_size=3, strides=1, padding='same')(x)
    outputs = Reshape((-1, 4))(outputs)
    print(outputs.shape)
    return outputs

num_anchors = 9
num_classes = 1  # Update with the number of classes in your classification labels
num_coordinates = 4  # Update with the number of coordinates in your regression labels

classification_outputs = []
regression_outputs = []

for feature_map in [p3, p4, p5, p6, p7]:
   subnet = create_classification_subnet(feature_map, num_classes)
   classification_outputs.append(subnet)
    
   subnet = create_regression_subnet(feature_map, num_coordinates)
   regression_outputs.append(subnet)

classification = Concatenate(axis=1, name='classification')(classification_outputs)
regression = Concatenate(axis=1, name='regression')(regression_outputs)

inputs = backbone.input
outputs = [classification, regression]

retinanet = Model(inputs=inputs, outputs=outputs)

classification = Concatenate(axis=1, name='classification')(classification_outputs)
regression = Concatenate(axis=1, name='regression')(regression_outputs)

inputs = backbone.input
outputs = \[classification, regression\]

retinanet = Model(inputs=inputs, outputs=outputs)

retinanet.fit(
    train_generator,
    epochs=10,
    steps_per_epoch=len(train_generator),
    verbose=1
)`

Unable to resolve this error. Please help.

I want to monitor training loss for the model.`

0

There are 0 answers