谷歌Tensorflow框架在自动驾驶汽车车辆识别功能中的应用

2018-10-26 08:19吴丽华
汽车实用技术 2018年20期
关键词:图像识别卷积框架

吴丽华



谷歌Tensorflow框架在自动驾驶汽车车辆识别功能中的应用

吴丽华

(比亚迪产品规划及汽车新技术研究院,广东 深圳 518118)

文章研究了基于谷歌深度学习框架Tensorflow的图像识别在智能驾驶汽车领域里应用的可能性。使用卷积神经网络模型,将车辆图片作为训练集输入神经网络,通过多次训练校正神经网络参数,最终可以得到可以识别汽车图片的神经网络模型。通过学习Tensorflow建模,编程的完整流程,为进一步使用Tensorflow构建图像识别应用打下了基础。

Tensorflow;卷积神经网络;图像识别

1 概述

Tensorflow是谷歌基于DisBelief进行研发的新一代深度学习软件库。 Tensorflow为张量从流图的一端流动到另一端的计算过程。是一个将复杂的数据结构传输至深度学习神经网络中进行分析和处理过程的系统。本文基于tensorflow框架,搭建了一套完整的车辆图片识别系统,对深度学习的图像获取与预处理,识别训练,识别结果整定方面做了详细的研究。

2 Tensorflow深度学习框架

Tensorflow使用图来表示计算任务,在执行计算操作之前需要将图构建完成。每一个非叶子节点都视为一种操作,叶子节点则表示特殊的操作类型,比如返回常量值或者变量值。创建图的最后阶段需要向图中添加一个初始化操作的节点,其作用是将所有的变量进行初始化。图创建完成后,才能启动图。启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。然后进行变量的初始化操作、运行操作节点、更新变量值。在神经网络优化算法中,最常用的方法是反向传播算法。图1主要展示了使用反向传播算法训练神经网络的流程图。反向传播算法需要实现一个迭代的过程。在每次迭代的开始,需要选取小部分训练数据,通过计算训练数据的预测答案与真实答案进行比对,相应的更新神经网络的参数,从而达到优化模型的目的。

图1 神经网络反向传播优化流程图

3 TF构建卷积神经网络

本文采用的训练模型是仿照LeNet5 CNN架构,LeNet 5最早是在1998年由Yann Lecun博士提出的。它是最早的CNN之一,专门用于对手写数字进行分类。就是两个卷积层(每个卷积层后加一个池化层)加两个全连接层加最后一个softmax输出分类结果。

Lenet5架构如下图所示:

图2 卷积神经网络结构

本文的构建的TF卷积神经网络主要有5种结构组成:

(1)输入层。输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。

(2)卷积层。从名字就可以看出,卷积层是一个卷积神经网络中最为重要的部分。卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小块常用的有3*3或者5*5。卷积层试图将神经网络中的每一小块进行更加深入地分析从而得到抽象程度更高的特征。

(3)池化层(pooling)。池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。

(4)全连接层。如图所示,在经过多轮卷积层和池化层的处理之后,在卷积神经网络的最后一般会是由1到2个全连接层来给出最后的分类结果。

(5)Softmax层,该层主要用于分类问题。通过softmax层,可以得到当前样例属于不同种类的概率。

程序运行构建的卷积神经网络,读取已经打乱顺序的训练图像集,每训练一遍则保存新的ckpt文件,该文件为训练模型的参数文件。通过调整训练步长和训练次数,我们就可以训练出可以使用的模型文件。训练程序代码如下:

def run_training():

train_dir = '/data/train/'

logs_train_dir = '/logs/train/'

train,train_label = input_data.get_files(train_dir)

train_batch,train_label_batch = input_data.get_batch(train, train_label,IMG_W,IMG_H,BATCH_SIZE,CAPACITY)

train_logits = model.inference(train_batch, BATCH_SIZE, N_CLASSES)

train_loss = model.losses(train_logits, train_label_batch)

train_op = model.trainning(train_loss, learning_rate)

train_acc = model.evaluation(train_logits,train_label_batch)

summary_op = tf.summary.merge_all()

sess = tf.Session()

train_writer = tf.summary.FileWriter ( logs_train_dir, sess. graph)

saver = tf.train.Saver()

sess.run(tf.global_variables_initializer())

coord = tf.train.Coordinator()

threads = tf.train.start_queue_runners (sess=sess,coord= coord)

try:

for step in np.arange(MAX_STEP):

if coord.should_stop():

break

_,tra_loss,tra_acc = sess.run([train_op,train_loss,train_acc])

if step % 50 == 0:

print('Step %d, train loss = %.2f, train accuracy = %.2f%%' %(step, tra_loss, tra_acc))

summary_str = sess.run(summary_op)

train_writer.add_summary(summary_str, step)

if step % 2000 == 0 or (step + 1) == MAX_STEP:

checkpoint_path = os.path.join(logs_train_dir, 'mode2. ckpt')

saver.save(sess, checkpoint_path, global_step = step)

except tf.errors.OutOfRangeError:

print ('Done training -- epoch limit reached')

finally:

coord.request_stop()

coord.join(threads)

sess.close()

然后,运用训练好的模型,我们可以代入ckpt参数文件,检测测试图片分辨类别。代码实例如下:

with tf.Session() as sess:

print('reading checkpoints...')

ckpt = tf.train.get_checkpoint_state(logs_train_dir)

if ckpt and ckpt.model_checkpoint_path:

global_step =ckpt.model_checkpoint_ path.split('/') [-1]. split('.')[-1]

saver.restore(sess,ckpt.model_checkpoint_path)

print('Loading success, global_step is %s'% global_step)

else:

print ('No checkpoint file found')

prediction = sess.run(logit, feed_dict={x: image_array})

max_index = np.argmax(prediction)

通过训练模型,最终可以得到训练集的正确率为 100%;测试集数据集正确率为 90%以上。

4 总结

本文构建了一种基于卷积神经网络的图像识别方法,由输入层,卷积层,池化层,全连接层和softmax层构成,对于识别图像有着不错的效果。目前,深度学习广泛的应用于学术界和工业界。Tensorflow有着编程简单、优化算法集成度高,使用灵活的特性,利用Tensorflow将会使建模,编程,分析效率大大提高。本文介绍了Tensorflow平台下神经网络模型构建的一般方法和流程,并且得到了较高识别率精度的模型。对构建更复杂的神经网络具有一定的参考意义。

[1] 章敏敏,徐和平等.谷歌Tensorflow机器学习框架及应用[J].微型机与应用,2017(5).

[2] 曹大有,胥帅.基于Tensorflow预训练模型快速、精准的图像分类器[J].汉江师范学院院报,2017(3).

[3] 郑泽宇,顾思宇.Tensorflow 实战Google深度学习框架[m].电子工业出版社.

[4] 黄文坚,唐源.tensorflow实战[m].中国工信出版集团,电子工业出版社.

Application of Google Tensorflow Framework in Automatic Driving Vehicle Identification Function

Wu Lihua

(BYD Product Planning and Automotive New Technology Research Institute,Guangdong Shenzhen 518118)

This paper make the research on the Google deep learning Framework, Tensorflow, and study the image recognition utilization possibility in the intelligent drive area. The model used in this paper is based on Convolutional Neural Network (CNN), we collect auto images for the image data set, which used as training set. Through multiple training tests we set the parameters of the Convolutional Neural Network and set up one CNN model used for auto image recognition. During the tensorflow model programming process, we set up the whole process for deep learning training, which are useful for the later tensorflow image recognition applications.

Tensorflow; Convolutional Neural Network; image recognition

U471.4

B

1671-7988(2018)20-38-03

U471.4

B

1671-7988(2018)20-38-03

吴丽华,就职于比亚迪产品规划及汽车新技术研究院。

10.16638/j.cnki.1671-7988.2018.20.013

猜你喜欢
图像识别卷积框架
支持向量机的舰船图像识别与分类技术
基于计算机视觉的图像识别技术研究
有机框架材料的后合成交换
框架
Rn上的测度双K-框架
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
基于Resnet-50的猫狗图像识别
从滤波器理解卷积