第九期 使用 Keras 在游戏中实现自动驾驶 《显卡就是开发板》

  记得小时候玩的游戏机在没有投币的时候会自动播放预先录制的游戏视频,然后屏幕上会闪烁着”DEMONSTRATION”的字样,当时不理解是预先录制的游戏视频,认为是机器可以自己操控自己玩游戏,因为那时没有什么探索的方式(比如图书馆或者搜索引擎),但还是会占用上课的时间去思考机器自己和自己玩游戏是怎么实现的。好奇心重的人真的每天都生活在坑里,一个接着一个的坑。
  这一期我来演示一个机器通过深度学习的方式和自己玩游戏的小例子,也许通过深度学习的方式,整个游戏外挂行业正在快速迭代中。在检索素材的过程中发现 Udacity 提供的 “Udacity’s Self-Driving Car Simulator” 模型最适合演示,它提供了一个模拟器,可以支持模拟器中汽车的训练和自动驾驶功能,项目使用 MIT 协议开源 https://github.com/udacity/self-driving-car-sim . 可以将源代码下载并用 Unity 工具构建一下,因为不太感兴趣构建的过程,所以我使用官方编译好的bin文件,如果不能下载可以从我的网盘下载 https://pan.baidu.com/s/1dE5PrHJ 将 beta-simulator-linux.zip 解压并赋予执行权限就可以运行模拟器。可以先运行一下,画质和 NFS3 很像,毕竟只是演示画面没有那么细腻。
  在进行演示之前需要安装一个和 pip + virtualenv 很像的另外一种科学实验环境管理器:conda ;虽然 Anaconda 像 MATLAB 一样带有浓厚的商业气息,但 conda 还是完全开源和免费的社区型项目(https://github.com/conda/conda/wiki/Conda-Community),不要被 Anaconda 的臃肿和商业性所遮眼, 将 conda 最小化包装的开源项目 Miniconda 真的可以更大的提升实验环境的部署效率。通过下面的链接可以下载 miniconda:
  https://conda.io/miniconda.html
  https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
  conda 的实验环境搭建是在用户级别的,它的创意之处就在于它把 Python 也当成自己的一个小组件,可以任意指定版本,所以用不到 sudo 之类的操作。使用下面的命令安装 miniconda ,各种 Enter 即可完成

bash Miniconda3-latest-Linux-x86_64.sh 

如果网络质量不给力可以修改 conda 的源为国内镜像,具体步骤请参考 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
  模拟器的训练和自动驾驶,我们使用 https://github.com/naokishibuya/car-behavioral-cloning 提供的方法,网络模型构建依据 Nvidia 的 End-to-End Deep Learning 模型 https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/
下载运行脚本文件 https://github.com/aggresss/GPUDemo/tree/master/car-behavioral-cloning
  conda 通过一个 yml(Yet anther Markup Language) 文件就可以实现环境的部署

conda env create -f environment-gpu.yml

激活实验环境,然后运行驾驶脚本

source activate car-behavioral-cloning
python drive.py model.h5

当出现提示”wsgi starting up on http://0.0.0.0:4567“时说明自动驾驶服务已经开启成功,然后在shell 中执行 beta_simulator.x86_64 选择 Autonomous Mode

这里写图片描述

  原理并不复杂,在选择自动驾驶模式时,模拟器会把每一帧图片提交给 一个 wsgi 服务,这个服务通过将图片传入我们构建的神经网络计算出这张图片应该对应的车辆操作,比如油门刹车和方向盘角度,然后返回给模拟器,模拟器通过返回指令操作车辆。

  深度学习的神经网络通过 Keras 实现非常通俗易懂,5层卷积层和4层全连接层。

def build_model(args):
    """
    Modified NVIDIA model
    """
    model = Sequential()
    model.add(Lambda(lambda x: x/127.5-1.0, input_shape=INPUT_SHAPE))
    model.add(Conv2D(24, 5, 5, activation='elu', subsample=(2, 2)))
    model.add(Conv2D(36, 5, 5, activation='elu', subsample=(2, 2)))
    model.add(Conv2D(48, 5, 5, activation='elu', subsample=(2, 2)))
    model.add(Conv2D(64, 3, 3, activation='elu'))
    model.add(Conv2D(64, 3, 3, activation='elu'))
    model.add(Dropout(args.keep_prob))
    model.add(Flatten())
    model.add(Dense(100, activation='elu'))
    model.add(Dense(50, activation='elu'))
    model.add(Dense(10, activation='elu'))
    model.add(Dense(1))
    model.summary()

    return model

   刚才我们使用的weight文件 model.h5 是预先训练好的,经常会自己开到坑里,我们也可以自己重新训练一下这个网络:在目录下创建 data 文件夹 然后运行模拟器选择Train mode ,进入驾驶模式后点击 RECORD 然后选择 data 文件夹,开始驾驶,结束后在点击暂停按钮,模拟器会自动将刚才驾驶过程中的图片与车轮角度的对应关系生成数据文件,用于下一步的网络训练。
退出后执行 python model.py 就会训练网络,然后通过训练后的 weight 值提交给 drive.py 体验自己训练的网络的准确度。
  实验结束后可以通过如下方式退出并删除实验环境:

source deactivate
conda env remove --name car-behavioral-cloning
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keras使用GPU进行加速需要进行以下步骤: 1. 安装CUDA和cuDNN:首先需要安装CUDA和cuDNN,这是GPU加速的基础,可以从NVIDIA的官方网站下载并安装。 2. 安装TensorFlow或Theano:Keras是一个高度模块化的Python库,可以在多种深度学习框架上运行。TensorFlow和Theano是两个广泛使用的框架,都支持GPU加速。在使用Keras之前,需要先安装其一个框架。 3. 检查GPU支持:在Keras使用GPU加速之前,需要确保GPU可用且Keras能够访问它。可以使用以下代码来检查GPU支持情况: ``` import tensorflow as tf print(tf.test.is_gpu_available()) ``` 如果输出结果为True,则说明GPU可用。 4. 指定GPU:如果有多个GPU可用,则需要指定使用哪个GPU。可以使用以下代码来指定GPU: ``` import os os.environ["CUDA_VISIBLE_DEVICES"] = "0" # 使用第一个GPU ``` 5. 在Keras启用GPU:在Keras启用GPU非常简单,只需要在代码添加以下一行即可: ``` from keras.backend.tensorflow_backend import set_session config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 # 占用30%的GPU显存 set_session(tf.Session(config=config)) ``` 这将允许Keras使用GPU加速计算。 6. 编写代码:在完成上述步骤后,就可以开始使用Keras进行深度学习任务了。可以使用以下代码来编写一个简单的Keras模型: ``` from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(64, activation='relu', input_dim=100)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, batch_size=128) ``` 这将创建一个包含两个密集层的神经网络,并使用GPU加速进行训练。 注意:以上步骤仅适用于使用TensorFlow或Theano作为后端的Keras版本。如果使用CNTK作为后端,则需要使用不同的API来启用GPU加速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值