利用Udacity模拟器实现自己的自动驾驶小车

利用Udacity模拟器实现自己的自动驾驶小车

1.软件下载

(1)Unity下载

使用Udacity模拟器需要安装Unity,下载链接:https://unity.cn/releases
下载后进行安装与注册

(2)Udacity模拟器下载

下载链接:https://github.com/udacity/self-driving-car-sim
选择链接中的 Version2, 2/07/17 (本文采用的Windows版本,如下图)
在片描述

2.训练数据采集

解压缩下载的Udacity模拟器压缩包,点击运行beta_simulator.exe,运行后首先设置分辨率和图像质量,开始可设置为640×480和Fastest,如下图:
在这里插入图片描述
设置完成后,点击play进入模拟器,模拟器打开后点击TRAINING MODE(训练模式),如下图:
在这里插入图片描述
进入TRAINING MODE后点击右上角的RECORD选择训练数据保存的位置(注意保存位置要点选到文件夹上,不要选到文件夹内空白处),然后Select,如下图:
在这里插入图片描述
再次点击右上角RECOED,当其变成RECORDING时,就可以手动驾驶小车了,大概驾驶8,9分钟,点击右上角RECORDING,界面中间出现绿色Capturing Data,表示正在记录并存储图片与转向角,8,9分钟左中右三个摄像头共可采集2万多张图片,图片存储在IMG文件夹内,转向角存储在driving_log.csv中,如下图:
在这里插入图片描述
在这里插入图片描述

3.数据增强

(1)由于地图中左转较多,为防止小车易朝左偏出车道,对部分训练图片进行水平翻转,角度取负值。

def horizontal_flip(img, degree):
    choice = np.random.choice([0, 1])
    if choice == 1:
        img, degree = cv2.flip(img, 1), -degree
    return (img, degree)

(2)进行色彩空间转换并随机调整亮度。

def random_brightness(img, degree):
    hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
    alpha = np.random.uniform(low = 0.1, high = 1.0, size = None)
    v = hsv[:, :, 2]
    v = v * alpha
    hsv[:, :, 2] = v.astype('uint8')
    rgb = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2RGB)
    return(rgb, degree)

(3)由于训练数据中转向角为0的情况过多,将部分转向角为0的情况删除,设置丢弃率rate。

def discard_zero_steering(degrees, rate):
    steering_zero_idx = np.where(degrees == 0)
    steering_zero_idx = steering_zero_idx[0]
    size_del = int(len(steering_zero_idx) * rate)
    return np.random.choice(steering_zero_idx, size = size_del, replace = False)

4.网络训练

为实时查看迭代过程中loss变化,安装livelossplot

pip  install livelossplot

网络训练(train.py):

### -*- coding: utf-8 -*-

import numpy as np
from keras.optimizers import SGD, Adam
from keras.layers.core import Dense, Dropout, Activation
from keras.layers import Conv2D, MaxPooling2D, Flatten, PReLU, BatchNormalization
from keras.models import Sequential, Model
from keras import backend as K
from keras.regularizers import l2
import os.path
import csv
import cv2
import glob
import pickle
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
import json
from keras import callbacks
import math
from matplotlib import pyplot
from livelossplot import PlotLossesKeras

SEED = 13

def horizontal_flip(img, degree):
    choice = np.random.choice([0, 1])
    if choice == 1:
        img, degree = cv2.flip(img, 1), -degree
    return (img, degree)

def random_brightness(img, degree):
    hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
    alpha = np.random.uniform(low = 0.1, high = 1.0, size = None)
    v = hsv[:, :, 2]
    v = v * alpha
    hsv[:, :, 2] = v.astype
### 使用深度学习实现无人驾驶小车 #### 深度学习在无人驾驶中的作用 深度学习能够在图像处理方面取得显著成就,其核心在于可以从大量图像数据中自动提取高层次语义特征[^1]。对于无人驾驶小车而言,这意味着通过提供足够的训练样本(即各种路况下的行车影像),可以让模型学会判断不同场景下应该如何调整方向。 #### 构建基于深度学习的无人驾驶小车系统框架 构建这样一个系统的流程大致如下: - **收集与标注数据集** 需要准备大量的行车视频片段作为输入资料,并标记每帧对应的转向角度或其他控制指令。这些数据将成为神经网络的学习素材。 - **设计卷积神经网络(CNN)** 卷积层用于捕捉空间结构信息;池化操作有助于减少参数数量同时保持重要特性不变形。全连接层则负责将局部特征组合成全局描述向量,进而预测出具体的行动指南——比如方向盘转动的角度大小。 ```python import tensorflow as tf from tensorflow.keras import layers, models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(height, width, channels))) model.add(layers.MaxPooling2D((2, 2))) ... model.add(layers.Dense(num_classes)) ``` - **训练模型** 利用之前整理好的带标签的数据集来反复迭代优化权重矩阵直至收敛于最优解附近。此阶段可能涉及到超参调优工作以提升泛化能力。 - **部署至实际硬件平台** 完成离线训练之后便可以考虑将其移植到嵌入式设备上运行实时推断任务了。这通常涉及量化、剪枝等一系列压缩手段降低计算资源消耗。 #### 推荐教程和资源链接 为了更深入地理解这一主题以及获取实践指导,下面列举了一些有价值的参考资料: - Udacity 提供了一个名为《Self Driving Car Engineer Nanodegree》在线课程,涵盖了从基础理论到项目实战在内的广泛内容。 - GitHub 上有许多开源项目可供参考学习,例如 NVIDIA 的 DAVE-2 自动驾驶模拟器实现了端到端的学习方法。 - Coursera 平台上的专项课程如《Deep Learning Specialization by Andrew Ng》,虽然不是专门针对无人车开发,但对于掌握必要的DL技能非常有帮助。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值