首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于车辆定位的Keras模型

用于车辆定位的Keras模型
EN

Stack Overflow用户
提问于 2019-09-30 17:07:07
回答 2查看 281关注 0票数 0

我是Keras和TensorFlow的新手。我正在尝试训练一个用于图像分类的卷积神经网络。我有大量的车辆图像,我需要得到一个方向分类。Here是一种使用定向梯度直方图(HOG)的方法(我还需要车顶类,总共有九个类)。

以下是我的CNN的Python代码。

代码语言:javascript
复制
model = Sequential([
    Conv2D(32, (5, 5), input_shape=(1536, 2048, 3)),
    MaxPooling2D(pool_size=(2, 2)),
    Flatten(),
    # One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
    Dense(9, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['accuracy'] 
)

model.fit(
    train_images,                 # Training data
    to_categorical(train_labels), # Training targets
    epochs=4,
    batch_size=16
)

如你所见,我的CNN只有三层。我的训练数据集由100辆不同车辆的样本组成,每辆车都有所有9个所需的方向,总共有900张图像。在四个时期中,我在训练阶段达到了90%的准确率,但在测试阶段只有50%的准确率。这个模型在预测从未见过的图像结果方面表现不佳。

我的CNN模型非常基础。我不得不将历元的数量从5个减少到4个,因为它在第五个历元开始过度拟合。我的问题是:我如何改进我的模型?我的数据集足够大吗?我需要向模型中添加更多的层吗?

提前谢谢。

更新

以下是经过审核的模型:

代码语言:javascript
复制
model = Sequential([
    Conv2D(32, (3, 3), input_shape=(224, 224, 3)),
    MaxPooling2D(pool_size=(2, 2)),

    Conv2D(64, (3, 3)),
    MaxPooling2D(pool_size=(2, 2)),

    Conv2D(128, (3, 3)),
    MaxPooling2D(pool_size=(2, 2)),

    Conv2D(128, (3, 3)),
    Conv2D(256, (3, 3)),
    MaxPooling2D(pool_size=(2, 2)),

    Conv2D(256, (3, 3)),
    MaxPooling2D(pool_size=(2, 2)),

    Flatten(),
    # One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
    Dense(9, activation='softmax')
])
EN

回答 2

Stack Overflow用户

发布于 2019-09-30 17:21:22

训练和测试性能之间的巨大差异通常是过度拟合的迹象。由于您的模型已经相当浅,您可以考虑更改在Conv2D层中计算的要素数量。在使用16或24个功能而不是32个的情况下,它的性能如何?

票数 0
EN

Stack Overflow用户

发布于 2019-09-30 17:25:46

第一个问题:

我会使用更好的小模型,比如MobileNetsEfficientNetB0,因为你现在的模型太小了,它甚至不能在mnist中工作。但要注意不要使用太大的模型,因为它可能更容易在较小的数据集中过度拟合。

此外,减少图像输入大小,224*224通常就足够了,大图像导致在小数据集中过度拟合。

最重要的是不要忘记使用数据增强,就像keras中的ImageDataGenerator

第二个问题:

这不是,我认为即使使用EfficientNetB0也会很困难,至少对于传统的图像分类器来说,你可能需要每个类都有50+图像。据我所知,Siamese networkMatching network可能会提供更好的结果。

第三个问题:

与第一个类似,你的网络甚至比第一个CNN,LeNet更小,它需要32x32的输入图像。

更新:

使用此选项,而不是仅堆叠更多的转换层。

代码语言:javascript
复制
from keras.applications.mobilenet_v2 import MobileNetV2
from keras import layers, models
base_model = MobileNetV2(include_top=False)
x = base_model.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(9, activation='softmax')(x)
model = models.Model(base_model.inputs, x)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58164678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档