使用paddle框架无人驾驶 —— 卷积神经网络计算方向盘打角

前言

之前一直在弄车道线的检测和识别,效果都不佳,要么车道线分割太慢了,要么容易出现丢线的情况处理的不是很好,所以索性直接用卷积神经网络做一个线性拟合。

完整文章地址

古月居博客网站

效果

用魔法玩欧卡2,使用国产深度学习框架paddlepaddle部署无人驾驶

传送门:视屏链接

数据采集

读取欧卡2的数据做训练集属实花了我点功夫,步骤如下:

  • 首先安装虚拟摇杆vJoySetup.exe
  • 在欧卡里设置操纵模式为键盘加vJoy
  • 然后用py代码发送虚拟摇杆位置控制方向盘转动
  • 用py代码写一个全局键盘监控的代码,使用‘u’ ‘i’两个按键来控制方向盘。
  • 我为什么不用pygame直接读joy的角度呢?因为真的试了很久读不到,好像是光标的问题,解决不了。

数据集

下载地址:csdn链接

数据集样式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
log文件前面是图片地址,空格后是角度

数据集处理代码

import numpy as np
import glob
import os

# 数据路径
data_path = "../result/"
trainList = '../train_data.txt'
testList = '../test_data.txt'
# 多少比例用作训练集
ratio = 0.8

# 只读csv文件
with open(data_path + "log.txt",'r') as logFile:
    _list = logFile.readlines()

    # 判断图片数是否匹配
    ls_imgs = glob.glob(data_path + 'IMG/*.jpg')
    print(len(ls_imgs))
    print(len(_list))
    assert len(ls_imgs) == len(_list),'number of images does not match'


    if (os.path.exists(trainList)):
        os.remove(trainList)
    if (os.path.exists(testList)):
        os.remove(testList)

    with open(trainList, 'a') as f_train:
        with open(testList, 'a') as f_test:
            for index,_list in enumerate(_list):
                ang = int(_list.split(" ")[-1])
                img = _list.split(" ")[0]
                if index % (int(10*ratio) + 1) == 0:
                    f_test.write(img + " " + str(ang) + "\n")
                else:
                    f_train.write(img + " " + str(ang) + "\n")

    print("生成完毕,路径:" + testList + " | " +trainList)

网络结构

def cnn_model(image):

    conv1 = fluid.layers.conv2d(input=image, num_filters=24, filter_size=5, stride=2, act='relu')
    conv2 = fluid.layers.conv2d(input=conv1, num_filters=32, filter_size=5, stride=2, act='relu')
    conv3 = fluid.layers.conv2d(input=conv2, num_filters=64, filter_size=5, stride=2, act='relu')
    conv4 = fluid.layers.conv2d(input=conv3, num_filters=64, filter_size=3, stride=2, act='relu')
    conv5 = fluid.layers.conv2d(input=conv4, num_filters=64, filter_size=3, stride=1, act='relu')
    fc1 = fluid.layers.fc(input=conv5, size=100, act=None)
    drop_fc1 = fluid.layers.dropout(fc1, dropout_prob=0.1)
    fc2 = fluid.layers.fc(input=drop_fc1, size=50, act=None)
    drop_fc2 = fluid.layers.dropout(fc2, dropout_prob=0.1)
    predict = fluid.layers.fc(input=drop_fc2, size=1, act=None)
    return predict

优化方向

  • 优化网络结构
  • 优化数据集
  • 对数据进行预处理,提高提取车道线的准确率和完全率以及速度,然后再利用处理的结构传入卷积神经网络训练。
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页