无人驾驶实战(二)——TensorFlow实现基于 LeNet5 网络的交通标志识别

引言:交通标志是道路基础设施的重要组成部分,它们为驾驶员及行人提供了道路行驶关键信息,并要求驾
   驶员及时调整驾驶行为,以确保遵守道路安全规定。无人驾驶车辆同样必须遵守交通法规,因此它需要识
   别和理解交通标志。一般来说,我们可以使用计算机视觉的方法来对交通标志进行检测和分类,但这需要
   耗费相当多的时间来处理图像中的重要特征。而现在,我们可以引入深度学习技术来解决这个问题,我们
   可以创建一个能够对交通标志进行分类的模型,并让模型自己学习识别这些交通标志中的最关键的特征。
   
内容:本博客内容来自Udacity无人驾驶纳米学位项目——交通标志的识别,旨在为无人驾驶车辆行驶中需要
   识别和理解交通标志提供一种使用TensorFlow实现的基于 LeNet5 网络的交通标志识别深度学习模型。
   
实现过程
在这里插入图片描述
注意事项
  (1)本项目实现主要采用 CNN 卷积神经网络,具体的网络结构参考 Lecun 提出的 LeNet 结构。
  (2)使用环境:win10 + python shell,图片显示有问题,请只关注图片灰暗程度和分辨率。
  
准备工作
1、下载 “德国交通标志数据集——GTSRB交通信号数据集(包含43种交通信号)”
在这里插入图片描述
  博客提供数据集下载,使用百度云盘即可获取资源,解压后得到数据集(测试集、训练集、验证集)。
  链接:https://pan.baidu.com/s/1l5IHduQcJYU8eLFiht8JAw
  提取码:1cb9
附加:交通标志与类别数对应 excel 文件。
  链接:https://pan.baidu.com/s/1kOf8a5i5MA0QR_coXaXvzQ
  提取码:8s11

(一)、导入需要用到的包

# importing some useful packages
import cv2
import csv
import os
import pickle
import random
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
from tensorflow.contrib.layers import flatten
from sklearn.utils import shuffle
import skimage.morphology as morp
from skimage.filters import rank
from skimage import transform as transf

(二)、加载数据集、输出数据集信息

# Step 0: Load The Data
training_file = '../data/train.p'
validation_file='../data/valid.p'
testing_file = '../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_train, y_train = train['features'], train['labels']
X_valid, y_valid = valid['features'], valid['labels']
X_test, y_test = test['features'], test['labels']

# Step 1: Dataset information
n_train = len(X_train)
n_validation = len(X_valid)
n_test = len(X_test)

_,IMG_HEIGHT,IMG_WIDTH,IMG_DEPTH = X_train.shape
image_shape = (IMG_HEIGHT,IMG_WIDTH,IMG_DEPTH)
n_classes = len(np.unique(y_train))

with open('../data/signnames.csv','r') as sign_name:
    reader = csv.reader(sign_name)
    sign_names = list(reader)
sign_names = sign_names[1:]  # The first one is:"['ClassId', 'SignName']", not counting
NUM_CLASSES = len(sign_names)

n_classes = len(np.unique(y_train))
assert (NUM_CLASSES == n_classes) ,'1 or more class(es) not represented in training set'

print("Number of training examples =", n_train)
print("Number of validation examples =", n_validation)
print("Number of testing examples =", n_test)
print("Image data shape =", image_shape)
print("Number of classes =", n_classes)

signs_ids = pd.read_csv('../data/signnames.csv')
signs_ids.head(10)
print(signs_ids.head(10))

结果展示
(1)数据集大小、图片大小、图片类别数
在这里插入图片描述
分析:数据集信息:
数据集分为训练集、测试集和验证集,具有以下特点:

  1. 图像为32(宽)×32(高)×3(RGB彩色通道)
  2. 训练集由34799张图片组成
  3. 验证集由4410个图像组成
  4. 测试集由12630个图像组成
  5. 共有43个种类

(2)部分 excel 文件信息
在这里插入图片描述
(三)、图像处理

# Step 2: picture process
# plotting 20 traffic sign images
def plt_img(X, y):
    fig, axs = plt.subplots(4,5, figsize = (16, 11))
    fig.subplots_adjust(hspace = .5, wspace = 0.001)
    axs = axs.ravel()
    
    for i in range(20):
        index = random.randint(0, len(X))
        image = X[index]
    
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值