Я новичок в глубоком обучении, и я надеюсь, что если вы поможете мне решить мою проблему.
Я хочу создать модель CNN, которая принимает два входных изображения и производит один выход, который является классомдва изображения.Модель берет одно изображение из набора данных типа 1 и одно изображение из набора данных типа 2.У меня есть два набора данных: type1 и type2, и каждый набор данных содержит одинаковое количество классов, но количество изображений в каждом классе в наборе данных type1 больше, чем количество изображений в каждом классе в наборе данных type2.Ниже приведена структура наборов данных.
Модель должна взять одно изображение из набора данных Type1 и одно изображение из набора данных Type2, а затем классифицировать эти изображения в один класс (ClassA или ClassB или ------).
Type1 dataset
|Train
|ClassA
|image1
|image2
|image3
|image4
-----
|ClassB
|image1
|image2
|image3
|image4
-----
|ClassC
|image1
|image2
|image3
|image4
-----
|ClassD
|image1
|image2
|image3
|image4
-----
----------------
|Validate
-----------
|Test
--------------
Type2 dataset
|Train
|ClassA
|image1
|image2
-----
|ClassB
|image1
|image2
-----
|ClassC
|image1
|image2
-----
|ClassD
|image1
|image2
-----
----------------
|Validate
-----------
|Test
--------------
Итак, я хочу создать модель, которая вводит два изображения (из типов 1 и 2), если они принадлежат одному и тому же классу.Кроме того, я хочу, чтобы каждое изображение из type1 было в паре с каждым изображением из type2 из того же класса.Как я могу это сделать ???
Код:
in1 = Input(...)
x = Conv2D(...)(in1)
--------
--------
out1 = Dense(...)(x)
in2 = Input(...)
x = Conv2D(...)(in2)
--------
--------
out2 = Dense(...)(x)
concatenated_layer = concatenate([out1, out2]) # merge the outputs of the two models
output_layer = Dense(no_classes, activation='softmax', name='prediction')(concatenated_layer)
modal= Model(inputs=[in1, in2], outputs=[output_layer])
input_imgen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
rotation_range=5.,
horizontal_flip = True)
test_imgen = ImageDataGenerator()
def generate_generator_multiple(generator,dir1, dir2, batch_size, img_height,img_width):
genX1 = generator.flow_from_directory(dir1,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
genX2 = generator.flow_from_directory(dir2,
target_size = (img_height,img_width),
class_mode = 'categorical',
batch_size = batch_size,
shuffle=False,
seed=7)
while True:
X1i = genX1.next()
X2i = genX2.next()
yield [X1i[0], X2i[0]], X2i[1] #Yield both images and their mutual label
inputgenerator=generate_generator_multiple(generator=input_imgen,
dir1=train_iris_data,
dir2=train_face_data,
batch_size=32,
img_height=224,
img_width=224)
testgenerator=generate_generator_multiple(generator=test_imgen,
dir1=valid_iris_data,
dir2=valid_face_data,
batch_size=1,
img_height=224,
img_width=224)