首页 > 解决方案 > 如何使用 Keras 教 CNN 识别比教学数据集更大的图像上的对象

问题描述

我对神经网络没有那么丰富的经验,由于学校项目,我目前正在学习使用 Keras 和 Deeplearning。

我有一组尺寸为:1500 x 500

SO上有人建议我剪切图像以提取数据集,所以我使用了:

image_slicer

python3包。当我删除所有不代表我正在搜索的对象的图像(道路上的线条)时,我留下了图像数据集,每个图像的大小:150 x 50。

我想教我的神经网络识别 1500 x 500 图像上的这些部分。

在尝试为 MNIST 教授 CNN 时,我所做的是以下代码:

cnn.add( Conv2D(30, (5, 5), input_shape = (28, 28, 1), activation = "relu") )
cnn.add( MaxPooling2D(pool_size = (2, 2)) )
cnn.add( Conv2D(15, (3, 3),  activation = "relu") )
cnn.add( AveragePooling2D(pool_size = (2, 2)) )
cnn.add( Flatten() )
cnn.add( Dense(500, activation = "relu") )
cnn.add( Dropout(0.5) )
cnn.add( Dense(10, activation = "softmax") )

cnn.compile( Adam(lr = 0.01), loss = "categorical_crossentropy", metrics = ["accuracy"] )

cnn.fit( X_train, Y_train, epochs = 10, validation_split = 0.1, batch_size = 400, verbose = 1, shuffle = True )

但是现在我的数据集图像大小与我想测试神经网络的图像大小不匹配,所以我不确定该怎么做。

(1) 我应该教 CNN 图像大小:input_shape = (150, 50, 1),因为我的数据集由 150x50 的灰度图像组成,然后将大小为 1500 x 500 的图像传递给 CNN(以及如何,作为我的CNN 中的 input_shape 与这个大小的图像不匹配,所以程序会中断)?

(2) 另外,我想在图像上绘制包含我正在搜索的对象的区域。我相信我会使用 openCV 来显示图像并绘制矩形,但是我将如何要求 CNN 在包含我正在搜索的对象的新图像上找到区域,因为对象大小不会是 150x50,因为我正在搜索路线和它们可以比数据集图像大小更长更窄吗?

我还有两个快速的问题。

(3) 是否可以将 CNN 教学后“导出”,然后在下次运行程序时避免教学步骤?我想说的是:

if metrics["accuracy"] >= 0.9:
    # export neural network

在我使用 Teaching_NN.py 导出它之后,我将如何在 search_NN.py 中加载该网络结构和参数?

(4)我只搜索一种类型的对象,那就是道路线(我不在乎它是否是分段线)。如果我要使用 binary_crossentropy,我将有两个标签 1 和 0,但我只需要其中一个。如果我不使用其中之一可以吗?

我知道这可能要问的太多了,但是如果有人也可以至少给我一些伪代码,那就太好了。:)

标签: python-3.xkerasdatasetconv-neural-network

解决方案


推荐阅读