验证准确率和验证损失在每个周期几乎保持不变

我正在为我的毕业设计制作一个自动化农业机器人。我希望它能在农田内的车道上自动行驶。我仅使用树莓派前置摄像头来采集数据,然后将数据发送到我的电脑进行训练。最初,我只训练它在直线上行驶。由于我没有在电机上使用编码器,因此它可能在某一方向上偏离,所以我必须不断地提供反馈以保持在正确的路径上。样本图像如下,请注意这是黑白图像:enter image description here

我有836张图片用于训练,356张用于验证。当我尝试训练时,我的模型准确率没有显著提高。我尝试了不同的结构,从全连接层到不同的卷积层,我的训练准确率没有显著提高,而且验证准确率和验证损失大多数时候保持不变

我很困惑为什么会这样,这是我的代码问题吗,还是应该对图像应用计算机视觉技术,以便特征更加明显。解决这个问题的更好方法是什么?

我的代码如下:

import numpyfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom keras.layers import Flattenfrom keras.layers.convolutional import Conv2Dfrom keras.layers.convolutional import MaxPooling2D# fix dimension ordering issuefrom keras import backend as Kimport numpy as npimport globimport pandas as pdfrom sklearn.model_selection import train_test_splitK.set_image_dim_ordering('th')# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)def load_data(path):    print("Loading training data...")    training_data = glob.glob(path)[0]    data=np.load(training_data)    a=data['train']    b=data['train_labels']    s=np.concatenate((a, b), axis=1)    data=pd.DataFrame(s)    data=data.sample(frac=1)    X = data.iloc[:,:-4]    y=data.iloc[:,-4:]    print("Image array shape: ", X.shape)    print("Label array shape: ", y.shape)    # normalize data    # train validation split, 7:3    return train_test_split(X, y, test_size=0.3)data_path = "*.npz"X_train,X_test,y_train,y_test=load_data(data_path)# reshape to be [samples][channels][width][height]X_train = X_train.values.reshape(X_train.shape[0], 1, 120, 320).astype('float32')X_test = X_test.values.reshape(X_test.shape[0], 1, 120, 320).astype('float32')# normalize inputs from 0-255 to 0-1X_train = X_train / 255.0X_test = X_test / 255.0# one hot encode outputsnum_classes = y_test.shape[1]# define a simple CNN modeldef baseline_model():    model = Sequential()    model.add(Conv2D(30, (5, 5), input_shape=(1, 120, 320), activation='relu'))    model.add(MaxPooling2D(pool_size=(2, 2)))    model.add(Conv2D(15, (3, 3), activation='relu'))    model.add(MaxPooling2D(pool_size=(2, 2)))    model.add(Dropout(0.2))    model.add(Flatten())    model.add(Dense(128, activation='relu'))    model.add(Dense(50, activation='relu'))    model.add(Dense(num_classes, activation='softmax'))    # Compile model    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])    return model# build the modelmodel = baseline_model()# Fit the modelmodel.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=10)# Final evaluation of the modelscores = model.evaluate(X_test, y_test, verbose=0)print("CNN Error: %.2f%%" % (100-scores[1]*100))

样本输出:这是上述代码的最佳输出:enter image description here


回答:

我通过更改算法结构并使用NVIDIA的深度学习汽车算法解决了这个问题。这个算法非常稳健,并且还应用了基本的计算机视觉技术。你可以在Medium/Youtube上轻松找到针对玩具车的样本实现。这篇文章对我非常有帮助:https://towardsdatascience.com/deeppicar-part-1-102e03c83f2c

此外,这个资源也非常有帮助:

https://zhengludwig.wordpress.com/projects/self-driving-rc-car/

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注