搭建Udacity无人车开发环境

  “万事开头难”,搭建开发调试环境既是垫脚石,也是拦路虎,不管是一气呵成,还是费尽周章,事后做好记录都是明智之举,可以避免不必要的重复劳动。这篇博客主要记录在win10_64位下基于CPU或者GPU搭建Udacity无人车开发环境的大致过程。

安装Anaconda

  开发python程序经常要涉及第三方库,很容易出现版本混乱和各种不兼容的问题,因此可以安装conda来帮我们管理软件包和依赖,使项目开展更加顺利。由于我只需要最基本的功能,所以选择了安装miniconda,下载地址如下:

https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe

  常用的conda命令可以参考官方的用户指南官方的用户指南

conda换源

  为了提高conda安装的速度,我们可以将conda的源换成科大或是清华的:

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes

  然后把.condarc中channels下面的-defaults这一行删掉,正确的结果如下:

channels:
  - https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
show_channel_urls: true

  此外还要做点准备,将CarND-Term1-Starter-Kit仓库下载到本地,进入项目目录,将meta_windows_patch.yml重命名为meta.yml:

git clone https://github.com/udacity/CarND-Term1-Starter-Kit.git
cd CarND-Term1-Starter-Kit

基于CPU搭建

  基于CPU搭建Udacity无人车开发环境比较简单, 只要根据environment.yml创建carnd-term1就行了:

conda env create -f environment.yml
conda info --envs 查看是否创建成功
conda env remove -n carnd-term1 卸载环境

  environment.yml文件具体内容如下,我在测试中发现缺少requests模块,所以添加了一行’- requests’,也可以之后用conda install requests来单独安装:

name: carnd-term1
channels:
    - https://conda.anaconda.org/menpo
    - conda-forge
dependencies:
    - python==3.5.2
    - numpy
    - matplotlib
    - jupyter
    - opencv3
    - pillow
    - scikit-learn
    - scikit-image
    - scipy
    - h5py
    - eventlet
    - flask-socketio
    - seaborn
    - pandas
    - ffmpeg
    - imageio=2.1.2
    - pyqt=4.11.4
    - requests
    - pip:
        - moviepy
        - tensorflow==1.3.0
        - keras==2.0.9

基于GPU搭建

  基于GPU搭建Udacity无人车开发环境需要考虑的问题较多,但“工欲善其事,必先利其器”,使用GPU来训练神经网络模型相比CPU在速度上至少有几十倍的提升,因此该折腾还得折腾。我这里使用的GPU是Nvidia的GTX 1060 6G,在安装tensorflow-gpu之前,需要先安装CUDA Toolkit、cuDNN和必要的显卡驱动。CUDA Toolkit 和cuDNN的版本要与tensorflow-gpu相适应,可以参照Tensorflow官网经过测试的源代码配置来选择适合你的版本。我这里选择的是tensorflow_gpu-1.3.0,cuDNN v6.0和CUDA Toolkit 8.0,需要注册登陆Nvidia开发者账号才能下载。

# cuDNN v6.0 下载地址
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse6-8
# CUDA Toolkit 8.0 下载地址
https://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe

Visual Studio 2012 安装

  需要注意的是, 在安装CUDA Toolkit之前,还需要先安装Visual Studio,通过运行一些例程来测试GPU是否已经准备就绪。我这里下的是体积适中的Visual Studio 2012,参考博客Microsoft Visual Studio 2012旗舰版(VS2012中文版下载)官方中文版,比较杯具的是C盘空间不够,只能从D盘腾挪了几十G过来,呵呵!

# Microsoft Visual Studio 2012 下载地址
http://download.microsoft.com/download/B/0/F/B0F589ED-F1B7-478C-849A-02C8395D0995/VS2012_ULT_chs.iso
# 序列号:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC

CUDA Toolkit 8.0 安装

  CUDA Toolkit 8.0 安装比较简单,按照提示一步步操作就可以,我下载的是网络版的,只要确保电脑能上网就行。安装驱动过程中画面会出现几次闪烁熄屏,是正常现象。

cuDNN v6.0 安装

  把下载下来的安装包解压到CUDA的安装路径(默认C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)的目录下,然后在Windows环境变量Path中添加动态链接库cudnn64_6.dll的路径(默认是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\cudnn-8.0-windows10-x64-v6.0\cuda\bin), 重启生效就可以了。

GPU环境测试

  Visual Studio 2012、CUDA Toolkit 8.0、cuDNN v6.0都安装好后,可以用Visual Studio 2012打开(默认路径C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0)下的Samples_vs2012.sln工程,将1_Utilities文件夹下的deviceQuery右键设为启动项目,然后直接开始执行不调试,得到下图结果就可以了。其它例程有兴趣也可以运行看看效果。

安装tensorflow-gpu

  根据environment-gpu.yml创建carnd-term1:

conda env create -f environment-gpu.yml

  由于安装过程中报错:

tensorflow_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl is not a supported wheel on this platform.

  发现tensorflow_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl不是为windows系统准备的,所以将environment-gpu.yml中替换成了tensorflow_gpu-1.3.0-cp35-cp35m-win_amd64.whl,由于是要访问国外的网站,需要翻墙并开启全局代理,网速可能不太稳定,有时候还会连不上,做好心理准备。
  environment.yml文件具体内容如下:

name: carnd-term1
channels:
    - https://conda.anaconda.org/menpo
    - conda-forge
dependencies:
    - python==3.5.2
    - numpy
    - matplotlib
    - jupyter
    - opencv3
    - pillow
    - scikit-learn
    - scikit-image
    - scipy
    - h5py
    - eventlet
    - flask-socketio
    - seaborn
    - pandas
    - ffmpeg
    - imageio=2.1.2
    - pyqt=4.11.4
    - requests
    - pip:
        - moviepy
        - https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.3.0-cp35-cp35m-win_amd64.whl
        - keras==2.0.9

终极测试

  基于CPU或者GPU搭建好无人车开发环境carnd-term1后,可以进行最后的测试。首先,下载我们要运行的测试环境的仓库:

git clone https://github.com/udacity/CarND-Term1-Starter-Kit-Test.git
cd CarND-Term1-Starter-Kit-Test

  然后激活conda的carnd-term1环境后运行jupyter notebook:

activate carnd-term1
jupyter notebook test.ipynb

  浏览器会自动跳转到 http://localhost:8888/notebooks/test.ipynb 网址,经测试,jupyter notebook的每个单元都能够正常执行,没有错误,说明Windows环境下的carnd-term1已经完全ok了。效果图如下:

总结

  “好的开始是成功的一半”,搭建好开发环境后,我们就可以专注于学习无人车相关的知识和编程实现上了。Perfect!