Move-it無人駕駛黑客馬拉松記錄

Move-it無人駕駛黑客馬拉松記錄

好久沒有更新博客了,近段時間參加了在貴陽由pixmoving舉辦的無人駕駛黑客馬拉松,和來自全球10餘個國家的20餘名黑客在5天時間內做了一輛具備場內駕駛能力的無人駕駛汽車,本片文章其實是我個人對於本次活動的一個記錄,我是本文作者,原文首發在“優達學城Udacity”微信公衆號,更多細節推薦大家關注這個公衆號。

原文鏈接:https://mp.weixin.qq.com/s/T_voXVwvGueo1ozeQ5pFDw

(本人系原文作者)

Hi~大家好,我叫Adam,目前在攻讀計算機視覺方向的碩士,擁有Udacity 無人駕駛工程師納米學位。很高興參加這次 Hackathon,和全球 20 多位無人駕駛工程師一起 coding,打造無人駕駛汽車。

本次 Hackathon(不明真相的羣衆請戳:http://mp.weixin.qq.com/s?__biz=MzI0NzE3NTAzOA==&mid=2652116284&idx=1&sn=461d5f93ee9848f741d4ef42f89d8ca5&chksm=f254b72dc5233e3b8f27a08c839f08091da99c1b6faf95947fd88d2d93f56da7b9edb28ddbea&scene=21#wechat_redirect) 中,我處理並開源了一套規範的交警手勢數據集,這是目前北京路測新規出臺以後唯一開源的數據集,可以供更多的人進行後續的交警手勢識別深度學習模型研究。

這裏寫圖片描述

初識

最初是通過 Udacity 無人駕駛工程師學員羣裏面發的文章瞭解到這次活動的,主辦方推動無人車開發民主化,去中心化的理念吸引了我報名參加這次活動,我本人以及我現在的團隊都是開源軟件的狂熱者和開源社區的貢獻者,我希望能夠通過這次 hackathon 解決無人車開發在開源社區的一些 common issues,惠及更多開發者和 startup 。

在參加活動之前我們在 slack 上討論了目前對於個人開發者而言無人車開發的一些急需解決的問題,並且總結了三個 hack 的目標:

  • CAN-BUS Hack;
  • 擁有基本的循跡,避障能力的場內測試無人駕駛系統,真車測試;
  • 交通警察手勢檢測識別。

通常來說,獲得一輛能夠被控制的汽車是從事開發無人駕駛汽車的第一步,然而傳統車企出於多方面的考慮不會向個人開發者和小的團隊開放其 CAN-BUS 控制接口,開源的 CAN 控制項目(如 OSCC )支持的車型偏少,所以線控汽車是目前個人和Startup普遍面臨的問題,本次的 CAN-BUS Hack的對象分別是由主辦方提供的一輛原型車—— Coffee-Car 以及一臺全新的頂配思域。

這裏寫圖片描述

在獲得可以線控的車輛以後,接下來就是無人駕駛的整個頂層軟件棧,包括感知,定位,決策,控制等多個模塊的算法,在本次Hackathon中,我們主要目的是賦予測試車輛場地內的駕駛能力,目前來說有兩套相對成熟的開源方案可供我們選擇,分別是:

  • Apollo
  • Autoware

這兩個開源框架都能夠快速的實現場內無人駕駛,但就我個人而言,我更加熟悉 Autoware(碰巧本次 Hackathon 也採用了 Autoware 作爲無人駕駛的頂層軟件棧)。

最後一個目標的提出則是因爲北京近日提出的自動駕駛路測新規(《北京市自動駕駛道路測試能力評估內容與方法(試行)》)中明確提出路測車輛應當具備交通指揮手勢的理解能力,目前來說該課題還沒有完善的開源方案,讓無人車理解交警的八組指揮手勢在中國顯然是非常有必要的。

籌備

在明確了 hackathon 的目標以後,針對這些問題我做了一些前期的準備。我本身是 CV 出身,顯然在交警手勢識別這一塊我能做出更大的貢獻,同時我也讀過 Autoware 一些模塊的源代碼,擁有豐富的 ROS 開發經驗,再加上在 Udacity 無人駕駛課程中學習的理論知識,實踐的 project 等等,在去貴陽之前我對本次黑客馬拉松充滿信心。

實際 Hackathon 的過程也和我預想的一樣——大家都非常的給力!一羣來自十幾個國家,涵蓋泛無人駕駛領域各個方向的工程師,在初次見面不到幾個小時就完成了任務的細分,分組分工,整個過程非常自由民主。

這裏寫圖片描述

所有人大致分成了三個小組:CAN 控制組,Autoware 組,交警手勢識別組。

其中 CAN 控制組需要 Hack 進原型車 Coffee-Car 和本田思域的CAN-BUS ,線控車輛的油門剎車和轉向,最終做到使用 Autoware 組提供的 twist 消息控制車輛。

Autoware 組則需要完成整個系統的集成和測試,包括各類傳感器的驅動(在本次 Hackathon 中最終我們只使用了 VLP-32c 激光雷達和工業相機作爲傳感器),採集和繪製測試場地高精度3D地圖, waypoint 的繪製,相機和激光雷達的聯合校準,場內測試等等。

手勢識別組需要完成交警手勢數據集的採集,模型的訓練,手勢識別 ROS 節點等等。我最終加入了交警手勢識別組。

挑戰

通過一些前期的研究我們發現目前交警手勢識別有效的方案仍然不足,僅有的幾篇相關論文都沒有開放其數據集和相關代碼。要基於視覺來檢測交警手勢大致有兩種思路:

第一是先對交警進行 poseestimation,得到其骨架( skeleton )關鍵點信息,然後將序列動作的 skeleton 信息輸入到一種模型中,對序列手勢進行分類;

第二是直接跳過 poseestimation,將序列的動作圖像輸入到一種模型中,對序列圖像的手勢進行識別。

無論採用哪一種思路,都有兩個重要的前提:第一,要準確的識別出交警,將交警和一般的行人區分開來;第二,要有豐富多樣的手勢數據集。所以,團隊首先的任務就是完成相關數據集的採集和準備。

對於交警的識別,我們使用 Python 寫的爬蟲在網絡中抓取了 10000 張包含交警關鍵詞的圖像,我們使用 YOLO2 對抓取的圖像進行了檢測,從而將所有圖片中的人單獨截出並保存,通過我們自己以及現場當地的大學生志願者的人工標註,我們得到了用於交警識別的數據集,包含 10000 餘張中國交警的圖像和 10000 餘張行人的圖像。通過這些數據我們訓練了相應的卷積神經網絡,實現了交警和行人的區分,達到了理想的識別精度。

對於交通手勢數據,由於目前沒有相對規範的公開數據集,我們不得不自行採集,我們嘗試建立第一個相對標準的交警手勢數據集並將其開源,以便更多的開發者和研究者基於該數據集開展交通手勢識別的研究,我們使用 6 臺相機從不同的角度拍攝了來自 20 多位志願者共計 180 餘組交警手勢動作,同時還使用了兩臺激光雷達全程記錄了手勢的點雲數據,我們使用了綠幕作爲採集數據時的背景以便使用者對背景進行填充從而實現數據擴充。

這裏寫圖片描述

我們使用人工標註時間點文件的方式將所有交通手勢從視頻中以 30FPS 的幀率逐幀提出並以圖片的形式保存,最後我們使用 YOLO2 對所有的圖像中的人形進行了提取,得到了一個包含 170000 張交通手勢圖像的序列圖像數據集。

模型論證和訓練

在得到數據集以後,我們開始具體模型的訓練,我們最終選擇直接使用圖像而非 skeleton 來訓練模型(即前文提到的第二種思路),其原因在於 pose estimation 是一個計算密集型的任務,並且 pose estimation 之後得到的 skeleton 相比於原圖像其信息量變得更小了,深度學習方法完全可以直接使用原圖像作爲輸入由神經網絡自行建立抽象表示。

由於活動時間有限,我們沒有能夠成功訓練出序列模型,而是直接使用 Inception-v4 進行了特徵提取和單幀圖像的手勢識別,這一部分的工作和 Udacity 無人駕駛課程中的行爲克隆項目頗爲相似。

最後步驟就是編寫 ROS 節點將模型部署到我們的 Autoware 軟件中,我們訂閱了 Autoware 本身的行人檢測模塊的輸出 topic (仍然是 YOLO2 ),並且將檢測識別結果發佈到 /police_gesture topic 上供決策模塊訂閱,我們的節點在整車上通過了集成測試。

這裏寫圖片描述

結語

最終,我們和其他小組一道,完成了所有的設定目標以及一些額外的目標,實現了無人車的場內測試!再次感謝這次活動的主辦方 pixmoving 以及 Udacity 的幫助和關懷,這樣的線下 Hackathon 給了我們一個很好的機會去接觸真車,接觸無人駕駛完整的技術棧,去應用 Udacity 納米學位中學習到的知識,去認識更多無人駕駛開發者和愛好者。

希望今後國內能夠有更多類似的活動,也祝願 pixmoving-moveit 社區能夠發展壯大,用開源的力量推動無人駕駛的發展進步!

此次黑客馬拉松所有代碼的鏈接:https://github.com/pixmoving-moveit

Hack with love!

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章