開源|MultiNet模型解決自動駕駛中的道路分割、車輛檢測和街道分類(附源代碼)

微信公眾號:全球人工智慧

文章來源:GitHub 作者:Marvin Teichmann 翻譯:張妮娜

MultiNet模型分析

MultiNet能夠同時完成道路分割、汽車檢測和道路分類的任務。MultiNet模型的實時存檔速度和分割性能都處於最先進水平。詳細的模型描述請查閱我們的論文。

優化後的MultiNet模型在實時速度下表現良好,其要素KittiSeg在道路分割方面設置了一項新的最先進技術,而另一要素KittiBox在推理速度和檢測性能上對基線Faster-RCNN進行了改進。

該模型被設計為encoder-decoder架構,在每項任務中使用一個VGG編碼器和幾個獨立解碼器。此存儲庫包括允許在一張網路中將幾個tensorflow模型的通用代碼組合在一起,不可視任務的代碼由KittiSeg、KittiBox和KittiClass存儲庫提供,這些存儲庫在該項目中作為子模塊。該項目的構建旨在與TensorVision後端兼容,後端能夠以十分簡潔的方式組織實驗。

要求

代碼需要Tensorflow 1.0版本以及以下python庫:

  • matplotlib

  • numpy

  • Pillow

  • scipy

  • runcython

這些模塊可以通過以下代碼進行安裝:

pip install numpy scipy pillowmatplotlib runcython or pip install -r requirements.txt。

建立

1、克隆該存儲庫:MarvinTeichmann/MultiNet

2、將所有子模塊初始化:git submodule update--init --recursive

3、通過 cd submodules / KittiBox /submodules / utils / && make構建cython代碼

4、[可選]下載KittiRoad數據:

ⅰ. 這裡檢索 kitti 數據url網址: Download

ⅱ.指令python download_data.py --kitti_url URL_YOU_RETRIEVED

5、[可選]運行cdsubmodulesn / KittiBox / submodules / KittiObjective2 / && nmake構建Kitti評估代碼(更多詳細信息請參閱子模塊/ KittiBox /submodules / KittiObjective2 / nREADME.md)

使用demo.py運行模型只需要完成步驟1至3。只有當您想使用train.py訓練模型時,才需要步驟4和5。需要注意的是,我建議使用download_data.py,而不是自行下載數據。該腳本還將提取並準備相應的數據。如果您想控制數據的存儲位置,請參閱「管理數據存儲」這部分內容。

教程

入門

運行:python demo.py --gpus 0 --inputdata / demo / um_000005.png使用demo.png作為輸入指令以獲取預測信息。

運行:python evaluate.py對一個訓練模型進行評估。

運行:python train.py --hypes hypes /multinet2.json訓練一個multinet2模型

如果您想理解這些代碼,我建議先查看demo.py。我已經在文件中儘可能地記錄下每個步驟。

只有MultiNet3(同時完成檢測和分割任務)的訓練是開箱即用的。用於訓練分類模型的數據是不公開的,不能用於訓練完整的MultiNet3(用於檢測、分割和分類任務)模式。完整的代碼已在此提供,因此,如果您有自己的數據,您仍然可以訓練MultiNet3模型。

管理數據存儲

MultiNet允許將數據存儲與代碼分離。這在許多伺服器環境中非常受用。默認情況下,數據存儲在MultiNetn / DATA文件夾和MultiNet / RUNS中運行輸出。可以通過設置bash環境變數$ TV_DIR_DATA和$ nTV_DIR_RUNS來更改此行為。

在.profile中,包括導出TV_DIR_DATAn =「/ MY / LARGE / HDD / DATA」在內,所有數據將被下載到/ MY / LARGE / HDD / DATA n/。在您的.profile中包括導出TV_DIR_RUNS =「/ MY / LARGE / HDD / RUNS」,所有運行將保存到/ MY /n LARGE / HDD / RUNS / MultiNet

修改模型並在您自己的數據上進行訓練

該模型由文件hypesn / nmultinet3.json控制。此文件將代碼指向對子模型的實現過程中。使用MultiNet代碼,將已提供的所有模型進行載入,並將解碼器集成到一個神經元網路中。要在您自己的數據上進行訓練,足以修改子模型的hype文件。從KittiSeg入手將是最佳選擇,KittiSeg是有據可查的。

RUNDIR和實驗組織

MultiNet可幫助您組織大量實驗。為此,每次運行的輸出都存儲在MultiNet的rundir中。每個rundir包含:

  • output.log 列印到屏幕上的一個訓練輸出副本

  • tensorflowevents可在rundir中運行

  • tensorflow checkpoints,訓練模型可從rundir中載入

  • [dir]images一個包含示例輸出圖像的文件夾。 image_iter控制整個驗證集的轉儲頻率

  • [dir] model_files為構建模型所需的所有源代碼的副本。如您有很多版本的模型,此項操作對您是很有幫助的。

為跟蹤所有實驗,您可以以—name為flag,為每個rundir建立獨特的名稱。--projectn flag將運行存儲在單獨的子文件夾中,可以運行不同系列的實驗。例如,運行python train.py --project nbatch_size_bench --name size_5將使用dir作為rundir:$ TV_DIR_RUNS/ KittiSeg / nbatch_size_bench / size_5_KittiSeg_2017_02_08_13.12。

使用flag--nosave非常有用,而非在rundir中插入垃圾信息。

有用的Flag&Variabels

以下Flag在使用KittiSeg和TensorVision時將會起到幫助,所有Flag可用於所有腳本。

--hypes:指定hype文件的使用

--logdir:指定logdir的使用

--gpus:指定在哪些GPU上運行代碼

--name:為運行程序分配一個名稱

--project:將項目分配給運行程序

--nosave:調試運行,logdir將被設置為debug

此外,以下TensorVision環境中的Variables將非常有用:

$ TV_DIR_DATA:指定數據的元目錄

$ TV_DIR_RUNS:指定輸出的元目錄

$ TV_USE_GPUS:指定默認GPU行為

在集群上,設置$ TV_USE_GPUS = force是有用的。這將使flag—gpus變為強制性操作,並確保在正確的GPU上運行。

論文地址:arxiv.org/pdf/1612.0769

GitHub資源:MarvinTeichmann/MultiNet

兼職翻譯 招聘

《全球人工智慧》面向全球招聘多名海外:圖像技術、語音技術、自然語言、機器學習、數據挖掘等專業技術領域的兼職翻譯,工作內容及待遇請在公眾號內回復「兼職+個人微信號」聯繫工作人員。

熱門文章推薦

活動|12位AI大佬齊聚ACM TURC 2017-中國(已開始報名)

恐怖|50 億條用戶隱私信息泄露,嫌犯竟是互聯網名企工程師

乾貨|周志華揭開機器學習本質的57張PPT

重磅|百度PaddlePaddle發布最新API 從三大方面優化了性能

重磅|NVIDIA發布兩款"深度神經網路訓練"開發者產品:DIGITS 5 和 TensorRT

重磅|「薩德」——不怕!我國的人工智慧巡航導彈可破解

重磅|MIT發布腦控機器人:用腦電波(10毫秒分類)糾正機器人錯誤

重磅|谷歌預言:2029年通過納米機器人和器官再造 或將實現人類永生

重磅|Messenger bot錯誤率高達70% Facebook被迫削減AI投資

招聘|騰訊大規模招聘AI開發工程師 年薪30-80W

推薦閱讀:

資訊理論與機器學習
番外篇(6)——共軛梯度的效果
Learn R | 機器學習中的人工神經網路(六)

TAG:自动驾驶 | GitHub | 机器学习 |