1.项目任务
在常见深度学习模型的基础上(本文为LeNet-5),调整模型结构和参数,使用Tensorflow进行部署。利用公开的德国交通标志数据集进行训练,得到模型,并利用该模型对新的图片进行预测。全文运行环境Linux, 使用语言Python3。需要说明的是,本项目来源于Udacity,在Udacity无人驾驶工程师课程作业的基础上演化而来。
无人驾驶工程师课程_无人车培训_无人驾驶_自动驾驶基础技术-优达学城(Udacity)官网cn.udacity.com
2. 整体思路整体流程
总体而言,本文注重梳理卷积神经网络实现的基本逻辑,希望通过这个小项目打开深度学习的大门,拨开深度学习这颗“大洋葱”最外面的一层表皮,至于里面的果实及本文中未理解清楚的一部分,希望能有机会在后面的学习中解决。
3. 项目实施
3.1 环境搭建
本项目在Linux环境中运行,使用python3搭建Tensorflow模型进行运算。因此第一步先在Linux下搭建Tensorflow运行环境。可以采用anaconda作为python的环境管理仓库,在anaconda中直接通过命令行安装tensorflow。
3.1.1 Anaconda 的安装
Anaconda 为我们提供了很好的python环境管理机制,使同一台电脑上能够允许多个版本的python共存,且相互不干扰;它还能创建独立的环境,相当于在一台主机中分割出一个个独立的空间,存放不同的工作环境。
# 首先到官网上下载anaconda
wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
# 安装anaconda
bash Anaconda3-5.0.1-Linux-x86_64.sh
# 将anaconda添加到环境变量
echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc
# 更新环境变量
source .bashrc
# 更新anaconda
conda upgrade --al
具体可以参考:linux命令 安装anacondablog.csdn.net
3.1.2 Tensorflow的安装
Tensorflow目前最常使用的是版本1.1.1, 它除了正常迭代的版本号之外,还有CPU和GPU之分。本文中的项目模型复杂度不高,需要的算力CPU就能解决,因此在这里选择安装CPU版本的tensorflow。
# 创建一个单独运行的环境,取名py37,采用python3
conda create --name = py37 python=3
# 激活刚刚创建的环境
source acitvate py37
# 安装CPU版本的Tensorflow(此过程需联网)
conda install -c conda-forge tensorflow
安装完成后,我们需要检查tensorflow是否安装好,进入pyhon环境:
import tensorflow as tf
如果没有报错,证明该环境中已经有了tensorflow,安装正确。
激活环境后,进入jupyter notebook工作环境:
#直接键入 jupyter notebook
PS-1:在调试过程中需要掌握一些anaconda常用命令,列举如下,已经会的可直接跳过:
1)查看版本:conda --version
2)创建环境:conda create -n py37 python=3
3)删除环境:conda remove -n py37 --all
4)查看本机所有环境:conda env list
5)激活环境:activate py37
6)安装第三方软件包:conda install 包名 或 pip install 包名
7)卸载第三方软件包: conda remove 包名 或 pip uninstall 包名
8)切换到base环境:activate
PS-2: GPU版本Tensorflow的安装
1)pip install tensorflow-gpu
需要注意的是,不要在同一个环境中共存CPU和GPU版本的Tensorflow, 容易出现环境混乱。
3.2 数据集处理
3.2.1 数据集导入
本文使用的数据集是公开的德国交通标志数据集, 下载地址:German Traffic Sign Benchmarksbenchmark.ini.rub.de
已经被分为了训练集,验证集和测试集三个部分,分别是三个.p 文件,将三个载入。
# 导入pickle模块,用于加载数据,如果该句报错,需要使用anaconda 安装pickle包。在导入其他包
# 的过程中,如果出现没有该模块的情况,也需要使用anaconda安装。
# pickle 用来将python的对象序列化和解序列化
import pickle
# 找到三个数据文件的路径
training_file = '/home/project_our/project2/traffic-signs-data/train.p'
validation_file='/home/project_our/project2/traffic-signs-data/valid.p'
testing_file = '/home/project_our/project2/traffic-signs-data/test.p'
# 加载数据
with open(training_file, mode='rb') as f:
train = pickle.load(f)
with open(validation_file, mode='rb') as f:
valid = pickle.load(f)
with open(testing_file, mode='rb') as f:
test = pickle.load(f)
# 将数据分为图片和标签两个部分,X部分为图片&#