Self-Driving Car Project 3 — 交通號誌辨識實作

天道酬勤
5 min readMar 24, 2019

--

交通號誌辨識實作

Github: https://github.com/bob800530/CarND-Traffic-Sign-Classifier-Project/blob/master/writeup_template.md

前言

實作這個專題前,可以先想想看,人類是如何用眼睛辨識交通號誌的?

人類的眼睛能夠藉由號誌的形狀數字顏色文字等特徵,去判斷這個號誌究竟代表甚麼意義,那機器呢?

簡介

這個專題中運用到相當多的技巧,來完成機器視覺這件事,除了影像處理外,加入了類神經網路深度學習卷積網路機器學習演算法,為了實踐這些演算法,選用Python對一連串的圖片進行處理,並呼叫Tensorflow函式庫,進行模型訓練

程式碼講解

Step 0: Load The Data

讀取課程提供的pickle檔,快速的將多張圖片的特徵值標籤讀入變數之中。

Step 1: Dataset Summary & Exploration

在做訓練之前,先檢視看看,究竟讀了些甚麼資料進來

  1. 訓練資料 : 34799張 32*32像素的圖片
  2. 測試資料 : 12630張 32*32像素的圖片
Number of training examples = 34799
Number of testing examples = 12630
Image data shape = (32, 32, 3)
Number of classes = 43

一共有43種交通號誌

以下為每種號誌的分布狀況

Step 2: Design and Test a Model Architecture

選擇的模型為Lenet訓練模型

此模型大略上來說可以切成三個部分

  1. Convolution(卷積): 擷取圖片中的特徵值
  2. Max-Pool(池化): 降低訓練的資料量,增加訓練的速度
  3. Dense: 將資料攤成一維陣列,並開始疊代

此模型主要藉由提升訓練的深度增加模型的準確率,需要做多次的卷積,但為了避免訓練時間過長,需要透過池化,來減低訓練的時間

Step 3: Train, Validate and Test the Model

確立模型後,如何訓練也是一門學問!一股腦把資料有時並不是個好作法

為了設計出更好的訓練流程,會加入Epoch, Batch, Drop rate

1.Batch

為何不能一口氣將資料丟給模型處理呢?

記憶體的容量可能會不足,因此會把資料切成很多組,依序放入模型中訓練,這個組數就稱為Batch

2.Epoch

提升訓練的次數,可提升模型的準確率,而訓練的次數就稱為Epoch

Training...

EPOCH 1 ... Validation Accuracy = 0.685 Training Accuracy = 0.622

EPOCH 2 ... Validation Accuracy = 0.836 Training Accuracy = 0.801

EPOCH 3 ... Validation Accuracy = 0.887 Training Accuracy = 0.867

EPOCH 4 ... Validation Accuracy = 0.911 Training Accuracy = 0.900

EPOCH 5 ... Validation Accuracy = 0.924 Training Accuracy = 0.920

EPOCH 6 ... Validation Accuracy = 0.929 Training Accuracy = 0.935

3.Drop rate

防止過度訓練,會加入Drop rate,每次訓練時,不參考全部的特徵值,避免少數特徵值,就可以決定結果

1. 400 -> 120這個類神經網路,只會留80%的特徵值下來

2. 120 -> 84這個類神經網路,只會留60%的特徵值下來

train_accuracy = evaluate(X_train,y_train, 0.8, 0.6)

Result

經過一連串的訓練後,達到了94.3%的成功率,相當的高!

Test Accuracy = 0.943

心得

這個專案在我心目中是最難的一個,要在短時間內將類神經網路深度學習卷積網路理論應用在實務上,真的完全費盡我所有下班時間,即使現在已經做完這個Project,理論上仍然還有許多不懂的地方,由此可知,想成為一個厲害的AI工程師,可真是不簡單啊!!!

--

--