1、先在UIUC Image Database for Car Detection下载训练数据集。

下载地址:http://cogcomp.org/Data/Car/

下载解压之后文件目录如图所示,这里我们所需的是TrainImages这个文件夹和TestImages文件夹。

2、输入是一幅40*100*1的灰度图片,采用的是CNN网络,经过多次卷积和池化之后得到1*1*1的结果,各层参数如下所示。

我的文件目录组织结构:-CarDetect--CarDetect.py--datas---CarData--models

input : [None, 40, 100, 1]
conv-pool1 :f : 5*5strides : 1nc : 6padding : VALIDmaxpool : 2conv-pool2:f : 5*5strides : 1nc : 16padding : VALIDmaxpool : 2conv3:f : 5*5strides : 1nc : 32padding : VALIDconv4:f : 3*18strides : 1nc : 64padding : VALIDconv5:f : 1*1strides : 1nc : 1padding : VALIDoutput : [None, 1, 1, 1]

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt#定义加载数据的函数,注意训练数据的存储位置
def load_carDats():import cv2import osfile_path = './datas/CarData/TrainImages/'files = os.listdir(file_path)samples = []for file_name in files:data = cv2.imread(file_path + file_name, 0).reshape(-1) / 255label = 0 if file_name.split('-')[0] == 'neg' else 1samples.append((data, label))return samples
#加载数据
datas = load_carDats()
#随机打乱数据
np.random.shuffle(datas)
#划分数据,xs、ys 用来训练网络,x_test、y_test 用来测试网络训练效果
xs = [i[0] for i in datas[:1000]]
ys = np.reshape([i[1] for i in datas[:1000]], newshape=(-1,1))
x_test = [i[0] for i in datas[1000:]]
y_test = np.reshape([i[1] for i in datas[1000:]], newshape=(-1,1))#----------------定义网络中频繁使用的函数,将其重构-----------------#
#权重变量
def weight_variables(shape):weights = tf.truncated_normal(shape, stddev=0.1, dtype=tf.float32)return tf.Variable(weights)#偏置变量
def biase_variables(shape):biases = tf.constant(value=1.0, shape=shape)return tf.Variable(biases)#卷积
def conv2d(x, W):'''计算卷积,x为输入层(shape=[-1,width,height,channel]),W为f*f的共享权重矩阵shape=[f,f,in_layers_num, out_layers_num],水平和垂直方向上的步长都为1'''return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding="VALID")#最大值池化
def max_pooling(x):'''计算最大值混合,x为输入层(一般是卷积结果)shape=[-1,width,height,channels]ksize为混合pooling的核大小2*2,水平和垂直方向上的步长都为2'''return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding="VALID")#---------------------网络前向传播部分------------------#
def deepnn(x, keep_prop):'''定义深层卷积网络,包含了两个卷积-混合层和三个卷积层'''#step1:将原始一维得得数据转换成2维, 第一个表示样本数,第二三个是行列,最后一个是通道数
#     x = tf.reshape(x, shape=[-1, 40, 100, 1])#step2:定义第一的卷积-混合层with tf.name_scope("conv-pooling1"):W_conv1 = weight_variables([5,5,1,6])b_conv1 = biase_variables([6])ret_conv1 = tf.nn.relu(conv2d(x,W_conv1) + b_conv1)  #计算卷积,并使用修正单元对卷积结果进一步处理ret_pooling1 = max_pooling(ret_conv1)  #执行混合操作#step3:定义第二个卷积-混合层with tf.name_scope("conv-pooling2"):W_conv2 = weight_variables([5,5,6,16])b_conv2 = biase_variables([16])ret_conv2 = tf.nn.relu(conv2d(ret_pooling1, W_conv2) + b_conv2)ret_pooling2 = max_pooling(ret_conv2)#step4:定义第三个卷积层with tf.name_scope("conv-pooling3"):W_conv3 = weight_variables([5,5,16,32])b_conv3 = biase_variables([32])ret_conv3 = tf.nn.relu(conv2d(ret_pooling2, W_conv3) + b_conv3)#step5:定义第四个卷积层with tf.name_scope("conv4"):W_conv4 = weight_variables([3,18,32,64])b_conv4 = biase_variables([64])ret_conv4 = tf.nn.relu(conv2d(ret_conv3, W_conv4) + b_conv4)#step6:定义第五个卷积层with tf.name_scope("conv5"):W_conv5 = weight_variables([1,1,64,1])b_conv5 = biase_variables([1])ret_conv5 = conv2d(ret_conv4, W_conv5) + b_conv5return ret_conv5#---------------------训练网络前的准备-----------------------#
#申明输入数据和标签的占位符
x = tf.placeholder(dtype=tf.float32, shape=[None,None, None, 1], name="x-input")
labels = tf.placeholder(dtype=tf.float32, shape=[None, 1], name="y-output")#申明弃权的占位符
keep_prop = tf.placeholder(dtype=tf.float32, name="kprob")#创建分类模型
ret = deepnn(x, keep_prop)
#此时的返回值是 -1*1*1*1的, 为了得到方便运算的结果,这里将reshape
y = tf.reshape(ret, shape=[-1,1])#定义损失函数
with tf.name_scope("loss_function"):loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=labels)
cost = tf.reduce_mean(loss)
#定义训练模型(优化模型)
with tf.name_scope("optimizor"):train = tf.train.AdamOptimizer(0.0005).minimize(cost)#定义验证模型精度的方法
with tf.name_scope("accuracy"):y_hat = tf.nn.sigmoid(y)accuracy_rate = tf.abs(y_hat - labels) < 0.5accuracy_rate = tf.cast(accuracy_rate, dtype=tf.float32)
accuracy = tf.reduce_mean(accuracy_rate)#--------------开始训练网络,并将训练结果保存到文件中---------------#
saver = tf.train.Saver()
sess = tf.Session()
sess.run(tf.global_variables_initializer())  #初始化变量for i in range(10):skip = 10for k in range(0,1000,skip):x_train = np.reshape(xs[k:k+skip], newshape=(-1, 40, 100, 1))sess.run(train, feed_dict={x:x_train, labels:ys[k:k+skip], keep_prop:0.5}) # 训练模型# if (i+1) % 10 == 0:train_accuracy = sess.run(accuracy, feed_dict = {x: np.reshape(xs, (-1,40,100,1)), labels: ys, keep_prop:1.0})print('step %d, train accuracy %g' % (i, train_accuracy))saver.save(sess, "./models/carDetect_model.ckpt", global_step=i)这是我的训练结果:
step 0, train accuracy 0.859
step 1, train accuracy 0.934
step 2, train accuracy 0.965
step 3, train accuracy 0.971
step 4, train accuracy 0.985
step 5, train accuracy 0.991
step 6, train accuracy 0.995
step 7, train accuracy 0.994
step 8, train accuracy 0.995
step 9, train accuracy 0.997#--------------------------开始在新图片中检测-------------------#
import cv2
#导入图片
pic = cv2.imread("../../datas/CarData/TestImages/test-100.pgm", 0)
size = pic.shapeimg  = np.reshape(pic, (-1,size[0], size[1], 1))
#利用上面训练好的网络,开始在新的图片中检测
result = sess.run(ret, feed_dict={x:img})#将检测结果显示
pt1 = np.array([result.argmax()//result.shape[2], result.argmax()%result.shape[2]]) * 4
pt2 = pt1 + np.array([40, 100])pic_2 = cv2.rectangle(pic, (pt1[1], pt1[0]), (pt2[1], pt2[0]), 0, 2)plt.imshow(pic_2, "gray")
plt.show()

3、结果

源码获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接

更多资源获取,请关注公总号RaoRao1994

人工智能TensorFlow进行车辆检测车辆识别相关推荐

  1. matlab 车辆 pdf,关于MATLAB图像处理车辆检测与识别.PDF

    第24卷增刊 数 据 采 集 与 处 理 V01.24No.S ofData 8L oct.2009 2009年10月 Journal AcquisitionProcessing 文章编号:1004- ...

  2. AI车辆检测/车牌识别智能分析网关车辆违停告警功能的开发

    AI人脸检测/口罩检测智能分析网关是一款基于AI边缘计算的智能分析硬件设备,内置多种AI深度学习算法,支持对视频监控场景中的人.车.物.行为等进行抓拍.检测与识别,对异常情况进行实时告警等,可广泛应用 ...

  3. AI人脸检测智能分析网关新增车辆检测/车牌识别,支持车辆违停告警

    AI人脸检测/口罩检测智能分析网关是一款基于AI边缘计算的智能分析硬件设备,内置多种AI深度学习算法,支持对视频监控场景中的人.车.物.行为等进行抓拍.检测与识别,对异常情况进行实时告警等,可广泛应用 ...

  4. 23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)

    我们先看一下效果2023年最新版 yolo车距 行人识别yolov5和v7对比 yolo车距 其他步骤参考另外一篇文章: yolo 车辆测距+车辆识别+单目测距(双目测距)_SYBH.的博客-CSDN ...

  5. 基于视频的车辆识别技术

    一.智能交通技术概述 智能交通系统(Intelligence Transport System ,ITS)是目前世界交通运输领域的前沿研究课题,它融合了电子信息技术,通信技术,自动控制理论,计算机技术 ...

  6. “好司机“——车辆识别APP

    "好司机"--车辆识别APP 文档名称 好司机-产品需求文档PRD 产品名称 好司机 产品描述 一款利用百度智能云的车辆识别模块,利用扫一扫功能识别自己感兴趣的车辆,或是扫描车辆受 ...

  7. python车辆识别硬件_Opencv python之车辆识别项目

    图片车辆识别 根据文章搭建好环境后开始进行做项目linkimport sys import cv2 from PyQt5.QtGui import * from PyQt5.QtWidgets imp ...

  8. 【人工智能项目】MNIST手写体识别实验及分析

    [人工智能项目]MNIST数据集实验报告 这是之前接的小作业,现在分享出来,给大家以学习!!! [人工智能项目]MNIST手写体识别实验及分析 1.实验内容简述 1.1 实验环境 本实验采用的软硬件实 ...

  9. 谈yolov5车辆识别

    目录 **前言** 一.YOLOv5算法简介 二.YOLOv5在车辆识别中的应用 1.  车辆检测 2.  车型分类 3.  车辆跟踪 三.YOLOv5的优点 1.  快速准确 2.  高效性能 3. ...

最新文章

  1. Dubbo基础专题——第二章(Dubbo工程简单实践)
  2. php追加编译imagick
  3. pytorch 查看当前学习率_pytorch调整模型训练的学习率
  4. ASP.NET Session的七点认识(转)
  5. 服务器对象错误quot;ASP 0177:80040154quot;Server.CreateObject
  6. shell调用python脚本传递命名关键字参数_关于python:将字典作为关键字参数传递给函数...
  7. libevent参考手册 系列文章
  8. 百度文库 复制文本 下载文档
  9. 二、列表(java)
  10. vmware虚拟机共享文件夹设置(xp)
  11. MATLAB拉格朗日插值公式代码
  12. 足浴按摩预约下单小程序开发制作功能介绍
  13. android 刷机及基础常识
  14. http://nianjian.xiaze.com/tags.php?/%E4%B8%AD%E5%9B%BD%E7%B2%89%E4%BD%93%E5%B7%A5%E4%B8%9A%E5%B9%B4%
  15. UVA10815 安迪的第一个字典 Andy‘s First Dictionary
  16. zbb20180930 Postman 使用方法详解
  17. CSS样式表中的颜色表
  18. 只需三步,轻松禁止电脑打开指定软件或游戏
  19. 设计模式怎样解决设计问题
  20. 常用win7 快捷键

热门文章

  1. win10打开热点的时候提示我们无法设置热点
  2. 论文投稿指南——中国(中文EI)期刊推荐(第2期)
  3. python方差分析误差棒_一文讲透,带你学会用Python绘制带误差棒的柱状图和条形图...
  4. 问题 A: Jugs
  5. cassandra cql解析
  6. 百度地图html多点标注,百度地图api 同时在地图上标注多个点 有问题 紧急求救...
  7. 启动docker时映射到宿主机时出现 /usr/bin/docker-current: Error response from daemon: driver failed……的解决方案
  8. 可视化工具 roto 3t
  9. java计算机毕业设计vue健康餐饮管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
  10. 计算机网络学习笔记 01(更新)