速度参数作为CNN中的附加输入来驱动汽车

我想使用图像数据和速度数据来训练CNN驱动。我有游戏中的图像数据,我将数据调整为160x120,所以我有160x120x3数据(因为有3个RGB通道)。 仅使用图像数据,此任务就非常简单,但是如果我必须图像(第二张图像具有30x30x3的速度)或我有确切的编号(使用Tessaract将该30x30x3的图像转换为数字)怎么办? 我只能使用没有速度的图像数据,但这不是一个好的解决方案。我认为结果会很差。我真的很想使用速度数据,因为这是真正的自动驾驶汽车的工作方式。不幸的是,如果涉及到Tensorflow / Keras,那么我是个菜鸟(如果涉及到CNN,则不是),而且我不知道如何组合两个图像或图像和数字。

我有实现AlexNet的代码。

import numpy as np
import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout

# AlexNet model
class AlexNet2(Sequential):
def __init__(self, input_shape, num_classes):
    super().__init__()

    self.add(Conv2D(96, kernel_size=(11, 11), strides=4,
                    padding='valid', activation='relu',
                    input_shape=input_shape,
                    kernel_initializer='he_normal'))
    self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
                          padding='valid', data_format=None))

    self.add(Conv2D(256, kernel_size=(5, 5), strides=1,
                    padding='same', activation='relu',
                    kernel_initializer='he_normal'))
    self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
                          padding='valid', data_format=None))

    self.add(Conv2D(384, kernel_size=(3, 3), strides=1,
                    padding='same', activation='relu',
                    kernel_initializer='he_normal'))

    self.add(Conv2D(384, kernel_size=(3, 3), strides=1,
                    padding='same', activation='relu',
                    kernel_initializer='he_normal'))

    self.add(Conv2D(256, kernel_size=(3, 3), strides=1,
                    padding='same', activation='relu',
                    kernel_initializer='he_normal'))

    self.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
                          padding='valid', data_format=None))

    self.add(Flatten())

    self.add(Dense(4096, activation='relu'))
    self.add(Dense(4096, activation='relu'))
    self.add(Dense(1000, activation='relu'))
    self.add(Dense(num_classes, activation='softmax'))

    self.compile(optimizer=tf.keras.optimizers.Adam(0.001),
                 loss='categorical_crossentropy',
                 metrics=['accuracy'])

    # model = AlexNet2((227, 227, 3), 9)

这是我的主要代码

    train = train_data[:-100]
    test = train_data[-100:]

    X = np.array([i[0] for i in train]).reshape(-1, WIDTH, HEIGHT, 3)
    Y = np.array([i[1] for i in train])

    x_test = np.array([i[0] for i in test]).reshape(-1, WIDTH, HEIGHT, 3)
    y_test = np.array([i[1] for i in test])

    # TensorBoard settings
    log_dir = "gitignore\\games\\Overspeed\\logs\\fit\\" + datetime.now().strftime("%Y%m%d-%H%M%S")
    tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir)
    callback_list = [tensorboard_callback]

    # start training
    model.fit(x=X,
              y=Y,
              epochs=1,
              validation_data=(x_test, y_test),
              callbacks=callback_list)

    # save the whole model
    model.save(MODEL_DIR)

我应该改变什么?也许我应该在某处添加一些图层?我曾考虑过增加速度(以图像或数字形式)以进行展平,但是我不确定这是否是一个好主意以及如何做到这一点。

评论