【飛槳開發者說】吳東昱,北京鋼鐵俠科技深度學習算法工程師,主要研究深度學習、無人駕駛等。git
我在觀察歷屆智能車競賽以及教學實驗中發現,採用傳統視覺算法的視覺智能車只能在特定賽道中行駛,一旦賽道環境改變,必須修改大量的代碼才能運行。算法適應性差是制約智能車場景化適配的重要因素。而「AI智能車」藉助深度學習算法,經過真實數據採集到模型新訓練偏偏可以解決這一問題。基於飛槳平臺,咱們快速研製出了「無人駕駛智能車」,已經實現了道路檢測以及交通標識識別(紅綠燈/限速牌/人行道/停車位)等功能。在本文中,我將爲你們揭祕「基於飛槳的無人駕駛智能車」的具體實現過程和效果。github
第一步:如圖1所示,在智能車硬件配置上,高性能處理器是實現深度學習算法運行的必備條件,目前通用流行的高性能處理器如:intel CPU、NVDIA GPU、百度Edgeboard系列、NXP i.MX8系列,在這裏咱們選擇了基於百度Edgeboard系列的高性能板卡做爲智能車的主處理器。算法
圖1.智能車硬件框架網絡
第二步:在解決了處理器的問題以後,要實現智能車對道路和交通標識的識別就要面臨深度學習框架和深度學習算法的選擇。目前通用流行的深度學習框架有Tensorflow、飛槳(PaddlePaddle)、Caffe、PyTorch等。咱們選擇了飛槳,飛槳做爲國產化的深度學習框架,配合一站式開發平臺AI Studio,爲用戶提供了優質的開發服務。進一步藉助飛槳平臺發佈的官方支持的工業級模型以及高性能推理引擎Paddle Lite,能夠快速實現天然語言處理、計算機視覺、推薦引擎等多個領域應用的開發和部署。框架
在車道線識別上,咱們採用的是卷積神經網絡CNN。CNN在圖像領域有重要的應用價值,結合實際測試經驗,咱們的智能車採用了5個卷積層加2個全鏈接層來構成車道線網絡模型,智能車總體工做流程可分爲數據集建立、數據處理、模型訓練和部署預測四步。ide
經過手柄遙控智能車在賽道內按照適當速度運行,記錄過程當中的每一幀圖像及對應的轉彎角度。採集的圖像如圖2所示。函數
圖2 採集的圖像集性能
代碼解析:學習
運行的程序包括三個進程分別控制:獲取手柄數據、保存圖像數據以及保存轉彎數據;經過建立一個互斥鎖,使得圖像數據和角度信息一一對應保存下來;最後將轉彎數據轉成npy文檔,便於下一步的調用。測試
圖3 數據採集代碼解析
對獲取的圖像信息進行預處理,提取出圖像中的賽道,並保存處理後的圖像。處理後的圖像如圖4所示。
圖4 處理後的數據
代碼解析:
依次讀取數據集中的圖像,根據顏色閾值限定對每一張圖像顏色信息進行二值化處理並另存到特定目錄下,如圖5所示。
圖5 數據處理代碼解析
以卷積神經網絡爲主體搭建深度學習網絡框架,並將圖像及轉彎角度信息放入模型中進行訓練,最終獲得訓練後的模型,搭建的模型如圖6所示。
圖6 模型訓練
本過程經過飛槳框架,在其中定義損失函數、優化方案、層數、卷積核大小等參數。具體代碼如圖7所示。
圖7 模型訓練代碼解析
將AI Studio獲得的飛槳CNN模型下載到終端,並經過局域網傳入智能車的主處理器上,在智能車主處理器上利用Paddle Lite實現模型調用。
而後把智能車放置在賽道中,智能車經過調用訓練好的模型,根據實時採集的圖像信息,輸出對應的轉彎角度,進而實現自主運行,具體實現代碼如圖8所示。
圖8 預測部署代碼解析
運行的視頻請點擊以下連接:
詳情可查看GitHub項目地址:
https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/mobile
若是使用過程當中遇到任何問題,你們可經過Paddle Lite官方QQ羣與開發人員進行技術交流及問題反饋,羣號:696965088。
>> 訪問 PaddlePaddle 官網,瞭解更多相關內容。