精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

搭建一個開源ADAS項目的步驟流程

智能汽車電子與軟件 ? 來源:車端 ? 2023-04-14 17:18 ? 次閱讀

一、項目范圍

該項目是一個高級駕駛輔助系統的原型,專注于感知算法(目標檢測、車道線分割和交通標志分類)。它提供了3個主要功能:

前方碰撞警告

車道偏離警告

交通標志檢測及超速預警

它還提供了「有限的」虛擬硬件訪問權限,作為邁向商業產品的一步:

通過 LAN 中的 GPS 源的 GPS 讀取器

一個 CAN 讀取器,用于從虛擬 can 總線讀取車速和轉向信號

但是,可以使用 GPS 模塊或 CAN 轉 USB 電纜收集 GPS 和 CAN 信號。我將提供一些關于如何設置這些設備的說明。

二。硬件設置

30b0433c-daa3-11ed-bfe3-dac502259ad0.png

處理該項目所有輸入的中心組件是中央處理器。這臺計算機接收兩個輸入:(i) 來自相機的圖像,以及 (ii) 汽車底盤數據,例如汽車速度和轉向信號。中央處理負責處理這些輸入以在需要時發出警告。在這個項目的范圍內,由于實驗條件有限,我們實施了一個模擬模塊來提供相機和傳感器讀取器輸入的替代方案」。在商業產品中,傳感器讀取器模塊可以通過 GPS 模塊和 CAN 總線讀取器(例如 CAN 轉 USB 電纜)來實現;可以使用 USB 攝像頭提供攝像頭輸入。

「硬件清單:」

Jetson Nano 開發者套件

Sandisk Ultra 64GB class-10 SD

Wareshare 5寸液晶觸摸屏

Wareshare 8Ω 5W 喇叭

Jetson Nano 2寸5V散熱風扇

透明外殼。

1.如何獲取汽車傳感器(速度,轉向燈)

使用 GPS 模塊

「出于開發和教育目的:」

從您的手機共享 GPS:

從 Google Play 商店下載「共享 GPS應用程序。」

設置您的手機局域網地址,src/sensors/car_gps_reader.cpp并使用此應用程序與您的 Jetson Nano 共享 GPS 信息。這樣,我們就可以獲取GPS信號,估計車速。

使用 USB GPS 接收器

「對于商業產品:」

查看此模塊精度:< 3m。

如何設置CAN總線以讀取車速和轉向信號

「基本信息」

在這個項目中,我們沒有在真車上設置物理 CAN 總線(只是一個使用 socket CAN 的仿真系統)。但是,它可以通過使用 CAN 轉 USB 電纜來實現。

CAN總線的一些信息:

一般信息

如何侵入您的車輛?:hacking-can-bus.pdf

開源 CAN 電纜:CANtact。這將支持您將 CAN 總線連接到 linux 套接字,「我的 ADAS 源代碼已經支持該套接字」

硬件設計

固件:

在韓國

您還需要 OBD-II 到 DB9 電纜來連接汽車 OBD-II

一旦 CANtact 設備處理了來自車輛的 CAN 消息,它們就會通過 USB B 型端口輸出。因此,這需要 USB-B 到 USB-A 電纜:https://www.amazon.com/AmazonBasics-USB-2-0-Cable-Male/dp/B00NH11KIK

「我們在哪里可以找到要連接的 CAN 總線?」

在這個項目中,我們只使用虛擬 CAN 總線,因此項目源代碼仍然不支持與汽車 CAN 總線的真實連接。不幸的是,雖然 CAN 總線是汽車行業的標準,但如果您想找到您的 can 線在哪里,您通常需要查看汽車電氣圖才能找到內部 CAN 總線。自 1996 年以來,有一個名為 OBD2 的汽車標準,可以提供一種方便的方式連接到 CAN 總線。

「OBD2接口在哪里?」

OBD-II 端口通常位于儀表板下方,方向盤柱下方(下圖中的 1 - 3)。如果端口不在轉向柱下方,請在數字 4 - 9 指示的區域中尋找端口。

30c60780-daa3-11ed-bfe3-dac502259ad0.png

「我怎樣才能反轉CAN工程并讀取速度?」

您可以使用 Wireshark 或 candump 查找車速和轉向燈在哪里。CAN總線是沒有加密的,大家可以根據下面的說明嘗試查找。

2. 如何標定相機

將 USB 攝像頭連接到 Jetson Nano 板后,我們需要運行 OpenADAS 軟件來校準攝像頭。校準實際上是基于透視變換的距離估計。這是為距離計算校準相機的便捷方式。

變換參數包括從真實世界距離到鳥瞰圖像空間的米到像素映射,以及鳥瞰圖像到相機圖像之間的透視變換矩陣。為了計算這些參數,我們使用以下解決方案:在汽車前面放一塊紅地毯,測量距離 W1、W2、L1、L2。地毯應該足夠大,并且必須對稱地放置在汽車的長軸上。

30ccd4e8-daa3-11ed-bfe3-dac502259ad0.png

單擊設置按鈕以打開相機校準。

在 UI 中輸入 L1、L2、W1、W2。

30ddf9ee-daa3-11ed-bfe3-dac502259ad0.png

之后,通過單擊「重新拍攝照片」選擇 4 個點,選擇一個點并移動滑塊。這些點必須以正確的順序拾取。相機標定后,標定文件將被保存data/camera_calib.txt并在每次啟動程序時加載回來。

三、感知模型和算法

1. 物體檢測與交通標志分類模型

該物體檢測模塊負責檢測前方障礙物物體,如其他車輛或行人,以及交通標志。這些結果可用于前方碰撞預警和超速預警。為了提供這些功能,該模塊包含兩個主要組件:基于 CenterNet 的對象檢測神經網絡和基于 ResNet-18 的交通標志分類網絡。因此,我們將在下圖中看到 2 個深度學習模型。

30e79670-daa3-11ed-bfe3-dac502259ad0.png

1.1.使用 CenterNet 進行目標檢測

CenterNet 是一種簡單但高效的對象檢測模型。與其他流行的目標檢測模型相比,CenterNet 可以非常有效地適應速度-精度權衡。與其他流行的基于錨框的對象檢測網絡不同,CenterNet 依靠關鍵點檢測器來檢測對象的中心,然后回歸其他屬性。

30ecf43a-daa3-11ed-bfe3-dac502259ad0.png

CenterNet管道 「論文:」作為點的對象 - Xingyi Zhou、Dequan Wang、Philipp Kr?henbühlhttps://arxiv.org/abs/1904.07850。

「訓練」

我使用 CenterNet 作者的官方存儲庫來訓練對象檢測器(進行了一些修改)。請閱讀此處的安裝步驟以安裝培訓所需的環境。

「筆記:」

我建議使用 Anaconda 或 Miniconda 為每個任務創建一個虛擬環境。不要混合你的環境,因為我們必須使用不同的 Python 和包版本。

「必須使用」PyTorch v0.4.1 并將其設置為此處的說明:https://github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md。不保證其他版本有效。

我修改了官方存儲庫以使用 Berkeley DeepDrive (BDD) 數據集](https://bdd-data.berkeley.edu/)。您可以在此處克隆源代碼以開始訓練。在我的存儲庫中,我用10個類訓練了 CenterNet:person、、、、、、、、、和。ridercarbustruckbikemotortraffic lighttraffic signtrain

「使用 TensorRT 進行模型優化」

使用 PyTorch 框架訓練 CenterNet 后,我們獲得 PyTorch 模型格式(.pth)的模型文件。為了優化 NVIDIA Jetson Nano 上的推理速度,我們需要將這些模型轉換為 TensorRT 引擎文件。轉換是通過稱為 ONNX(開放式神經網絡交換)的中間格式完成的。首先使用 PyTorch ONNX 模塊將 PyTorch 模型轉換為 ONNX 格式(步驟 1)。

之后,我們將 ONNX 模型轉換為每個推理平臺的 TensorRT 引擎(步驟 2)。因為從ONNX到TensorRT引擎的轉換時間比較長,所以在我的實現中,我將TensorRT引擎轉換后序列化到硬盤,每次程序啟動時加載。在此步驟中,我們必須注意 TensorRT 引擎在不同計算機硬件上的構建方式不同。所以,

30f9eb5e-daa3-11ed-bfe3-dac502259ad0.png

使用此存儲庫將預訓練模型轉換為 ONNX 格式

「筆記:」

創建另一個虛擬環境,這與培訓不同。這個新的 Python 環境應該使用 Pytorch v1.0 或 v1.1。我為上面的這個轉換任務準備了一個存儲庫。您可以使用此處的說明來設置您自己的環境。

您可以從該文件夾convert_to_onnx_mobilenet.py中閱讀(對于 MobileNetv2 主干)和convert_to_onnx_rescdn18.py(對于 ResNet-18 主干)中的一些轉換示例源代碼。

擁有 ONNX 模型后,轉到 OpenADAS 以更新配置文件中新對象檢測模型的路徑:src/configs/config_object_detection.h.您還可以使用此存儲庫進行轉換。

1.2.交通標志分類

由于「BDD 數據集」的限制——它只包含 1 類交通標志(未指定標志類型),我不得不訓練另一個神經網絡來識別標志類型。由于速度和準確性高,因此也選擇了「ResNet-18來完成這項任務。」我使用 Tensorflow 和 Keras 框架訓練了模型。

「數據集」

在這個項目中,我只設計了對最大速度標志進行分類的系統,并將每個速度級別視為一個單獨的對象類。為了收集足夠的訓練數據,我使用了 2 個數據集:Mapillary Traffic Sign Dataset (MTSD) 和 German Traffic Sign Recognition (GRSRB) 數據集。由于 MTSD 是一個交通標志檢測數據集,我使用標志邊界框來裁剪它們以進行分類任務。裁剪后,我合并了 2 個數據集,得到 18,581 個最高限速交通標志圖像分為 13 個類別,以及 879 個末端限速標志(將所有末端限速標志僅視為 1 類)。

此外,我使用來自其他交通標志和物體的 20,000 張裁剪圖像作為“未知”類別。該數據集中共有 15 個類別:最大速度標志(5km/h、10km/h、20km/h、30km/h、40km/h、50km/h、60km/h、70km/h、80km/h , 90 公里/小時, 100 公里/小時, 110km/h、120km/h)、限速終點(EOSL)等標志(OTHER)。之后,這個數據集被分成 3 個子集:訓練集(80%)、驗證集(10%)和測試集(10%)。每個交通標志類別的分布是隨機的。

「訓練步驟」

使用此存儲庫中的源代碼來訓練交通標志分類器

「第一步:初始化環境」

創建anaconda環境:

conda create --name python=3.6

激活創建的環境并安裝所有要求:

pip install requirements.txt

「第 2 步:訓練模型」

準備如下結構的數據集:

3106392c-daa3-11ed-bfe3-dac502259ad0.png

使用以下命令訓練模型:

pythontrain.py

「使用 TensorRT 進行模型優化」

轉換為 UFF

convert_h5_to_pb.py修改和中的模型路徑convert_pb_to_uff.py。

將.h5模型轉換為.pb, 最后.uff:

pipinstallrequirements-h5-to-uff.txt
pythonconvert_h5_to_pb.py
pythonconvert_pb_to_uff.py

擁有 ONNX 模型后,轉到 OpenADAS 以更新配置文件中新交通標志分類模型的路徑:src/configs/config_sign_classification.h.

2.車道線分割模型

車道線檢測模塊負責檢測車道線和車道偏離情況。然后將該結果用于車道偏離警告。我使用深度神經網絡和霍夫變換線檢測器進行車道線檢測。下面介紹車道線檢測的流程。

31100150-daa3-11ed-bfe3-dac502259ad0.png

車道線檢測流水線

用于車道線分割的 U-Net 模型

U-Net 是一種在生物醫學圖像分割中表現良好的全卷積網絡,它可以用較少的訓練圖像數據展示高精度的分割結果。我將 U-Net 應用于車道線分割問題,并結合霍夫變換以線方程的形式找到車道線。

3121f6ee-daa3-11ed-bfe3-dac502259ad0.png

U網模型

為了在嵌入式硬件上運行輕量級分割模型,我對原始 U-Net 模型進行了兩次修改:

(1) 將decoder filters的數量調整為128, 64, 32, 16, 8個filters,從decoder的頂部到網絡的輸出;

(2) 用 ResNet-18 主干替換原來的主干。

這些修改減少了 U-Net 中的參數數量,并為我們提供了一個可以超過 200 幀每秒 (FPS) 運行的輕量級模型(模型 U-Net ResNet-18 輸入大小 384x382,RTX 2070 GPU 上的 TensorRT float 16 ).

數據集

數據集是從Mapillary Vista 數據集準備的,并進行了一些修改。原始數據集包含訓練集中約 18000 張圖像和驗證集中約 2000 張圖像。我合并這些集合,刪除一些不包含車道線或有太多噪音的圖像。最終數據集有 15303 張圖像。我將這個集合隨機分成三個子集:10712 張圖像用于訓練(~70%),2296 張圖像用于驗證(~15%)和 2295 張圖像用于測試(~15%)。因為 Mapillary Vista 的標簽包含很多對象類,所以我只保留車道線類來生成二值分割掩碼作為新標簽。

312c315e-daa3-11ed-bfe3-dac502259ad0.png

Mapillary Vistas 數據集預處理——圖像 A、B 來自 Mapillary Vitas

訓練

使用我的存儲庫訓練 U-Net 進行車道線分割

「第一步:初始化環境」

創建anaconda環境:

conda create --name python=3.6

激活創建的環境并安裝所有要求:

pip install requirements.txt

「第 2 步:訓練模型」

在目錄中創建新的配置文件list_config請不要修改舊的配置文件,以便我們更好地觀察,模型和訓練歷史將自動保存到saved_models文件夾中。

對于培訓,只需運行:

python model/train.py

或者

./train.sh

使用 TensorRT 進行模型優化

轉換為 UFF

為此任務創建另一個虛擬環境。

convert_h5_to_pb.py修改和中的模型路徑convert_pb_to_uff.py。

.h5將模型轉換為.pb,并最終使用這些命令(請更新和.uff中模型的正確路徑)convert_h5_to_pb.pyconvert_pb_to_uff.py

pipinstallrequirements-h5-to-uff.txt
pythonconvert_h5_to_pb.py
pythonconvert_pb_to_uff.py

擁有 UFF 模型后,轉到 OpenADAS 以在車道檢測配置文件中更新該新模型的路徑:src/configs/config_lane_detection.h.

使用霍夫變換進行車道線檢測

霍夫變換是一種在圖像處理中非常有效的線檢測算法。該算法的總體思想是創建從圖像空間(A)到新空間(B)的映射,空間(A)中的每條線對應空間中的一個點(B),空間中的每個點(A)對應空間中的正弦曲線 (B)。將 (A) 中的所有點投影到空間 (B) 中的正弦曲線后,我們找到交點密度最高的地方。然后將這些位置投影到 (A) 成線。通過這種方式,霍夫線變換算法可以在圖像空間(A)中找到線。

尋找候選車道線的過程如下圖所示。從線分割網絡產生的分割掩碼,車道線檢測模塊使用概率霍夫變換來檢測原始線段(1)。之后,使用由 Bernard A. Galler 和 Michael J. Fischer 在 1964 年反轉的不相交集/聯合查找森林算法將這些線劃分為組。我們使用線之間的空間距離和角度差將屬于一個線段分組同一條線。經過步驟(2),我們可以看到不同的線組被繪制成不同的顏色。步驟 (3) 接收這些線組作為輸入,并使用具有 L2 距離的最大似然估計在每個組中擬合一條線。

313b71e6-daa3-11ed-bfe3-dac502259ad0.png

線候選檢測

該系統將車道分割模型與上述車道檢測算法相結合,可以檢測不同環境下的車道線,判斷車道偏離情況。它為車道偏離警告模塊創建可靠的輸入。

4.警告規則

該系統使用基于規則的警告算法。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • GPS技術
    +關注

    關注

    0

    文章

    26

    瀏覽量

    10245
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2720

    瀏覽量

    463399
  • ADAS系統
    +關注

    關注

    4

    文章

    226

    瀏覽量

    25681
  • 讀取器
    +關注

    關注

    0

    文章

    45

    瀏覽量

    5233

原文標題:如何搭建一個開源ADAS項目

文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    凌蒙派OpenHarmony開源項目榮獲本期Gitee官方推薦

    近日,我司凌蒙派OpenHarmony開源項目榮獲本期Gitee官方推薦。本期Gitee官方推薦不僅是對凌蒙派OpenHarmony開源項目的高度認可,也是對我司在推動
    的頭像 發表于 11-20 01:04 ?151次閱讀
    凌蒙派OpenHarmony<b class='flag-5'>開源</b><b class='flag-5'>項目</b>榮獲本期Gitee官方推薦

    搭建開源大語言模型服務的方法

    本文我們將總結5種搭建開源大語言模型服務的方法,每種都附帶詳細的操作步驟,以及各自的優缺點。
    的頭像 發表于 10-29 09:17 ?140次閱讀

    MXoptiCal-簡化精密測量-只需幾個步驟即可實現致的目標測量#ADAS

    adas
    北匯信息POLELINK
    發布于 :2024年09月20日 10:16:32

    Matepad pro12.2 已上市半個月,但是還沒有在開源網站看到該項目的開源信息,違背開源精神

    Matepad pro12.2 已上市半個月,本人自己也購買了同款12+256的pad,想要同步學習下這款pad的些體驗還不錯的功能點,但是目前為止還沒有在開源網站看到該項目的開源
    發表于 08-27 17:25

    ADAS系統組成簡介#ADAS

    adas
    北匯信息POLELINK
    發布于 :2024年08月03日 20:05:37

    pytorch環境搭建詳細步驟

    PyTorch作為廣泛使用的深度學習框架,其環境搭建對于從事機器學習和深度學習研究及開發的人員來說至關重要。以下將介紹PyTorch環境搭建的詳細
    的頭像 發表于 08-01 15:38 ?724次閱讀

    在PyTorch中搭建最簡單的模型

    在PyTorch中搭建最簡單的模型通常涉及幾個關鍵步驟:定義模型結構、加載數據、設置損失函數和優化器,以及進行模型訓練和評估。
    的頭像 發表于 07-16 18:09 ?1793次閱讀

    性能測試的流程步驟有哪些

    性能測試是軟件測試的重要環節,主要目的是評估軟件在不同負載條件下的性能表現,以確保軟件能夠滿足用戶的需求。本文將詳細介紹性能測試的流程步驟
    的頭像 發表于 05-29 16:00 ?701次閱讀

    開源項目】用ESP32做一個數字沙漏

    沙漏用來形象地顯示時間的流逝,現在市面上很難找到大型沙漏了,常見的只有廚房用的小沙漏,大概能顯示3到5分鐘。 在這個項目里,作者制作了完整流程正好為
    發表于 04-28 11:44

    開放原子開源基金會與 9 開源項目舉行捐贈簽約儀式

    軟件、OpenTenBase、MetaToC、crowdos、NXROS、Dorothy SSR、onps 開源網絡協議共 9 開源項目捐贈方代表共同簽約。
    的頭像 發表于 12-21 17:30 ?825次閱讀
    開放原子<b class='flag-5'>開源</b>基金會與 9 <b class='flag-5'>個</b><b class='flag-5'>開源</b><b class='flag-5'>項目</b>舉行捐贈簽約儀式

    ADAS1000晶振不起振的原因?

    現有問題想請教下,我使用ADAS1000-3搭配STM32進行單導心電電路的搭建,對ADAS
    發表于 12-19 06:12

    pcb設計流程步驟

    pcb設計流程步驟
    的頭像 發表于 12-13 17:30 ?3880次閱讀

    如何自己搭建服務器?

    如何自己搭建服務器?自己搭建服務器涉及到硬件和軟件兩
    的頭像 發表于 12-12 16:52 ?3761次閱讀

    搭建ftp服務器的步驟

    搭建ftp服務器的步驟? 搭建FTP服務器是項需要定技術知識的任務,但是只要按照以下步驟進行
    的頭像 發表于 12-07 16:32 ?1124次閱讀

    搭建ssm框架的詳細流程

    有效地集成和利用這些開源框架,提高開發效率,并且具有良好的可擴展性和可維護性。 本文將詳細介紹搭建SSM框架的流程,包括環境搭建、創建項目
    的頭像 發表于 12-03 14:52 ?3304次閱讀