训练 CNN 将椭圆转换为圆形

数据挖掘 喀拉斯 美国有线电视新闻网 图像识别
2022-03-13 20:03:14

我目前的项目与模拟各种成像过程中物体的模糊/卷积效果有关。现在,我从一个初步的人工模型开始。我正在使用 Keras 来实现这一点。

我将人工理想数据创建为 128 x 128 图像中随机位置的一组圆圈。然后我有一个例程,将这些圆圈的坐标和大小作为输入,并在相同位置用椭圆替换圆圈。

我正在尝试训练一个卷积神经网络来执行这个函数的逆运算,即读取带有椭圆作为输入的图像并用圆圈替换它们。我通过将这两种图像类型以及以椭圆作为输入的图像和以圆形作为输出的图像进行分组来创建训练对。

我怎样才能设计一个神经网络来完成这个?现在,我使用的只是返回椭圆图像的扭曲副本,而不是输出带圆圈的图像。

正如您在注释掉的代码中看到的那样,我已经使用了多种不同的 CNN 结构:

model = Sequential()

#model.add(Dense(10, activation = 'relu', input_shape = (80, 128, 128, )))
model.add(Conv2D(nb_classes, kernel_size=3, padding = 'same',
                 activation='relu',
                 input_shape=(128,128,1)))
#model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Conv2D(32, kernel_size = 3, activation='relu', padding = 'same'))
#model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
#model.add(Dropout(0.25))
#model.add(Flatten())
#model.add(Dense(128, activation='relu'))
#model.add(Dropout(0.5))
#model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))

#model.add(UpSampling2D((4,4)))

model.add(Conv2D(nb_classes, (3, 3), activation = 'relu', padding='same'))
#model.add(Dense(10, activation = 'relu', input_shape = (128, 128,)))
model.add(Activation('softmax'))
2个回答

使用您生成的图像来训练尝试重建输入图像的编码器-解码器。我们将这些部分称为输入编码器和椭圆解码器。同时,训练第二个解码器,将输入编码器(即嵌入表示)作为输入,并尝试重建原始圆形图像。然后可以将输入编码器 + 圆形解码器一起用于对样本外观察进行评分。

您的模型的原理类似于Denoising Autoencoder的原理。在这种自动编码器中,您可以训练网络从图像的劣化版本中重建图像。

您需要类似的东西:训练卷积自动编码器以“从输入椭圆中得到一个圆”。

您可以在 Keras 网站上查看 Denoising Autoencoder 的这种实现。我认为这是一个好的开始。