一、完成keras环境搭建

安装和配置环境的过程请参考如下的博客,https://blog.csdn.net/Super_jm_/article/details/78397074

1. 安装CUDA

下载网址:https://developer.nvidia.com/cuda-downloads (注意:Ubuntu下载请务必下载runfile文件,如下图1示)
验证安装成功:使用nvcc --version命令
在这里插入图片描述

2. 安装cuDNN

关于cuDNN的介绍,它是用于神经网络的GPU加速器;
更多具体的介绍参考链接,https://blog.csdn.net/fangjin_kl/article/details/53906874

3. 安装Anaconda

下载链接,https://repo.continuum.io/archive/

4. 安装Tensorflow

安装教程,https://www.oschina.net/translate/how-to-install-and-use-tensorflow-on-ubuntu-16-04
如何判定版本,https://blog.csdn.net/chineseqsc/article/details/80259775
如何知道GPU是否运行计算过程,https://blog.csdn.net/castle_cc/article/details/78389082

5. 安装Keras

安装命令,sudo pip install keras
如何判定版本,https://blog.csdn.net/chineseqsc/article/details/80259775

6. 安装OpenCV

安装命令,sudo pip3 installopencv-python,具体可参考
https://www.cnblogs.com/freshmen/p/7272393.html

二、交通标志分类项目

1. 简介

从一堆交通标志数据集(有62类的数据,如下图2,其中每类数据格式如下图3所示)里面,完成分类训练,并实现输入一张交通标志照片给出分类结果和精确概率。
详细项目情况,请看链接
https://www.cnblogs.com/skyfsm/p/8051705.html
在这里插入图片描述
在这里插入图片描述

2. 神经网络框架

主要是采用了LeNet-5的结构,一共7层,如下图4所示,它是YannLeCun教授于1998年提出的第一个成功用于手写数字识别的卷积神经网络。
详细关于此网络介绍,请查看
https://blog.csdn.net/xjy104165/article/details/78218057 和 https://blog.csdn.net/kaido0/article/details/53161684
在这里插入图片描述

3. 项目代码

代码结构如下所示,第一个文件keras_image_classifer为代码,第二个文件traffic-sign为数据集,如下图5所示;其中keras_image_classifer中包含的文件如下图6,net文件里存放的是LeNet网络的keras实现代码(如图8所示),traffic-sign-code文件放的是训练数据的代码和预测数据的代码(如图8所示);最后是文件traffic-sign放的是数据集(如图7),里面内容如之前的图2和图3所示。
项目代码请下载,https://github.com/AstarLight/Keras-image-classifer-framework

4. 研读代码

(1)分析lenet.py代码

主要分为三个部分(如下图9所示)
第一部分引入各种需要的包依赖,Sequential是用来建立时间序列模型的(是构建神经网络的二种常用方法之一),Conv2D是二维卷积层,对二维输入窗进行滑动窗卷积,MaxPooling2D指的是最大空间池化,从纠正特征映射中取出窗口最大的元素,Activation指的是激活层,对一个层施加激活函数,Flatten用来将输入压平,即把多维数据一维化,多用在卷积层到全连接层的过度,Dense指的是全连接层,对上一层的神经元进行全部连接,实现特征的非线性化组合,backend指的是后端字段,用来选择后端引擎,配置方法是打开路径~/.keras/keras.json,更改里面的image_data_format字段值(后端介绍,https://keras-cn.readthedocs.io/en/latest/backend/);
第二部分是模型初始化,主要处理输入图像的格式;
model = Sequential(),是用来构建序列模型的;
要提供输入的模式(默认的情况是图像宽度、图像高度、图像通道数),若image_data_format是字符串channels_first,则说明输入模式是图像通道数、图像宽度、图像高度;
第三部分是通过model构建LeNet-5各层结构。
第一层网络结构,采用之前建立的序列模型model的add方法实现。Conv2D(20,(5, 5), padding=“same”, input_shape=inputShape)),其中20指的是卷积核个数,卷积核大小是5*5的矩阵,采用的是填充模式same,保留边界处的卷积结果,使得卷积后的结果和原图像一样大小,具体的卷积计算过程如下图10所示,输入模式同初始化。
在这里插入图片描述
model.add(Activation(“relu”)),为第一层增加激活函数层;
第二层网络结构是最大池化层,MaxPooling2D(pool_size=(2, 2), strides=(2, 2))),其中pool_size参数的意思是代表垂直和水平两个方向的下采样因子,(2, 2)的意思是使图像在两个方向上均变为原长的一半;strides表示步长的意思,(2, 2)代表在两个方向上步长都是2;最大池化的过程见下图11所示;
在这里插入图片描述
第三层网络卷积层和第四层池化层都和之前的一样;
第五层是压平层,将多维的输入转为一维输出;
第六层Dense(500)的意思指的是全连接层,500代表输出的维度;
第七层Dense(classes)中classes指的是输出分类的个数,即最后得到的分类结果,激活函数采用的是softmax
(softmax的分类过程,https://www.jianshu.com/p/ffa51250ba2e,如下图12所示)
在这里插入图片描述
在这里插入图片描述

(2)分析train.py代码

主要分为六个部分(如下图13、14、15所示)
第一部分是导入包依赖部分,matplotlib是python的一个2D绘图库,如果想保存图像但是不想把图像打印出来,可以使用matplotlib.use(“Agg”),其中Agg是保存为png格式图片;
详情http://blog.sina.com.cn/s/blog_836db8100102wlao.html,注意一定再导入pylab或pyplot包之前进行。 第二部分是parameter和argument的区别,https://zhidao.baidu.com/question/2116957332636950747.html
第三部分是参数设置,其中epochs指的是,1e-3的意思是0.001,CLASS_NUM是分类数量,norm_size是归一化图像大小;
在这里插入图片描述
第四部分是加载图像数据,又分为四个子部分,读取图像路径、读入图像内容、归一化处理、标签向量化;
读取图像路径中,常用的函数解释如下
random.seed()方法,https://blog.csdn.net/qq_36142336/article/details/78797190
shuffle() 函数,将序列中所有元素随机排列,http://www.runoob.com/python/func-number-shuffle.html
cv2.imread(),https://blog.csdn.net/weixin_39943271/article/details/79086131
os.path.sep,http://blog.sina.com.cn/s/blog_5dd2af0901012r86.html
第五部分是训练数据过程,
在这里插入图片描述
第六部分是训练函数开始入口,
在这里插入图片描述

(3)分析predict.py代码

主要分为三个部分(如下图16所示)
第一部分是导入各种包依赖,
第二部分是命令行处理程序,
第三部分预测图像类别过程,又分为三个子部分。
在这里插入图片描述
图片与数组的转化,image_to_array,https://blog.csdn.net/code_better/article/details/53242943
ImageDataGenerator,https://www.cnblogs.com/touch-skyer/p/8603751.html
kerasmodel.compile,https://www.cnblogs.com/smuxiaolei/p/8662177.html
fit_generator,http://keras-cn.readthedocs.io/en/latest/models/sequential/
batch与epoch以及iterations的区别,https://blog.csdn.net/chancein007/article/details/73822955

5. 上传代码

Scp指令本地上传服务器,https://www.cnblogs.com/zhaofeng555/p/8075279.html
上传出现not aregular file 解决方案,记得加上-r,可参看链接
https://blog.csdn.net/sdujava2011/article/details/47283949

6. 运行代码

注意:Python多版本的启动,python、python2、python3,sudopython,sudo python2,sudopython3
在这里插入图片描述
系统缺少相应的模块请按如下教程安装,
Installingimutils in ubuntu,https://stackoverflow.com/questions/36579781/installing-imutils-in-ubuntu
Matplotlib,https://blog.csdn.net/yato0514/article/details/78754551
Keras.preprocessing.image,https://github.com/keras-team/keras/issues/692
Nomodule namedtensorflow,
Nomodule named’sklearn.model_selection’,http://blog.51cto.com/emily18/2087973
Nomodule named cv2,
在某.py文件中调用其他.py内的函数,https://blog.csdn.net/winycg/article/details/78512300

7. 运行结果

输入要查询的图像,会返回该图像的类别以及准确率,分别如下图18、19所示;
在这里插入图片描述
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐