資料介紹
描述
在過去的幾年里,我一直在StreamLogic開發(fā)工具,旨在讓在邊緣構(gòu)建和部署計算機視覺變得更加容易。我最喜歡的目標(biāo)平臺之一是來自 tinyVision.ai的Vision FPGA SoM :
很小的吧?在中心,您可以看到來自 HiMax Imaging 的小型、低功耗且價格低廉的相機模塊。我一直在尋找我可能針對此平臺的新應(yīng)用程序。
幾個月前,在一位商業(yè)伙伴提到他們使用無人機的一個農(nóng)業(yè)用例后,我退出了無人機。無人機是 tinyML 的一個很好的用例;它們需要大量傳感器數(shù)據(jù),并且對尺寸、重量和功率敏感。我對無人機幾乎一無所知,但我整個周末都在嘗試定位和研究開源無人機。在周末結(jié)束之前,我購買了一架無人機:Holybro 的QAV250 套件。
這架無人機沒有預(yù)先組裝,并且是新手,幾個月前,我擁有所有正確的零件并將其從地面上取下來。但是,讓我們跳到故事的結(jié)尾。一旦我開始真正駕駛無人機,我就意識到 GPS 定位是多么的不準(zhǔn)確。使用自動駕駛儀執(zhí)行自主任務(wù)時,您可能會發(fā)現(xiàn)您的無人機遠離計劃的飛行路徑。這在飛行和著陸中都非常危險。就在那時,我想出了這個項目的想法。
目標(biāo)很簡單:使用自動駕駛儀安全著陸無人機。這有兩個部分:1)在預(yù)期的表面上著陸(在我的例子中是人行道)和 2)避免表面上的任何意外障礙物。為了實現(xiàn)這一點,我提出了一種計算機視覺算法來檢測無人機降落時應(yīng)該何時以及向哪個方向移動。
算法設(shè)計
我的解決方案在高層次上非常簡單。向下的攝像頭安裝在無人機的底部。當(dāng)無人機緩慢下降著陸時,它會捕捉圖像進行分析。首先,將無人機正下方的平方米確定為著陸點。其次,還對八個方向(北、東北、東、東南、南、西南、西、西北)的附近站點進行評級。最后,如果附近任何一個站點的評分明顯優(yōu)于當(dāng)前站點,則無人機的位置將沿相應(yīng)方向調(diào)整。
這是從我的無人機拍攝的示例圖像:

如果我們繼續(xù)前進,中間的黑色方塊就是當(dāng)前的著陸點。它周圍的標(biāo)記方塊是評估可能的方向變化的候選站點。顯然,如果我們要降落在人行道上,我們想在這種情況下向東南移動。
嗯,這是高水平,但您可能仍然想知道 1)您如何知道一米的大小以及 2)您如何評價它?第一個很簡單,無人機已經(jīng)有一個高度傳感器,所以你可以估計無人機的高度。鑒于高度、一些相機規(guī)格和一些代數(shù),計算當(dāng)前圖像的每米像素數(shù) (PPM) 非常簡單。在這種情況下,它的計算結(jié)果為 PPM = 168 / H。
對于第二個問題,這就是計算機視覺的用武之地。我們需要能夠?qū)D像進行任意裁剪,并獲得關(guān)于該圖像是無障礙路面的可能性的定量分?jǐn)?shù)。實際值在這里并不重要,只要我們可以比較兩個分?jǐn)?shù)來確定哪個更好。可以手工制作算法,但我選擇訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò) (CNN) 來生成分?jǐn)?shù)。
下一節(jié)將討論我是如何訓(xùn)練 CNN 的,但讓我們看一下上圖的輸出:

此圖顯示當(dāng)前著陸點(標(biāo)記為 C)和所有 8 個方向的候選點的得分。毫無疑問,東南部是希望的贏家。
機器學(xué)習(xí)
如上所述,我選擇使用 CNN 為候選著陸點生成定量分?jǐn)?shù)。具體來說,全卷積網(wǎng)絡(luò)(FCN)。這些與其他 CNN 的不同之處在于它們不以密集或全局池化層結(jié)束。最后一個卷積層的激活圖是網(wǎng)絡(luò)輸出。正如您將看到的,這非常適合此應(yīng)用程序。
訓(xùn)練 FCN 有不同的方法,但我選擇先構(gòu)建分類器 CNN,然后將其轉(zhuǎn)換為 FCN。讓我們先看看我是如何構(gòu)建分類器的。
我想創(chuàng)建一個分類器,將小圖像塊分類為好或壞。但首先,我需要數(shù)據(jù)。自然地,我花了很多時間在互聯(lián)網(wǎng)上搜索一些公共數(shù)據(jù)集。不幸的是,沒有什么真正適合我的任務(wù)。我需要創(chuàng)建自己的數(shù)據(jù)集,但是如何創(chuàng)建?最后,我創(chuàng)建了自己的電池供電圖像記錄器。

圖像記錄器每秒捕獲圖像并將它們寫入 SD 卡。這使我能夠在著陸期間從我的無人機收集圖像,如下所示:

手頭有許多圖像,我創(chuàng)建了三個不同類別的補丁數(shù)據(jù)集:
- 地面(非人行道)
- 路面
- 未知(人行道邊緣/非人行道)
我最初收集了大約 2,000 個補丁。然后我花了很多時間嘗試訓(xùn)練一個淺層網(wǎng)絡(luò)(2 個卷積層),但沒有取得多大成功。我嘗試了許多數(shù)據(jù)增強和網(wǎng)絡(luò)結(jié)構(gòu)都無濟于事。網(wǎng)絡(luò)總是會在驗證集上生成隨機結(jié)果或做出恒定的選擇 (:sigh:)。
除了獲取更多數(shù)據(jù)外,別無他法。所以,我從我的圖像中收集了大約 1, 800 個補丁。Bingo,大約有 4, 800 個補丁,訓(xùn)練表現(xiàn)良好,經(jīng)過一些實驗,我的網(wǎng)絡(luò)達到了 88% 的準(zhǔn)確率。這是最終的網(wǎng)絡(luò):
model = Sequential([
layers.Input(shape=(tgt_width,tgt_height,3)),
layers.Conv2D(10, 5, strides=2, padding='valid', activation='relu'),
layers.Conv2D(3, 3, padding='valid'),
layers.GlobalAveragePooling2D(),
])
這個模型只有 1, 033 個參數(shù)!
有關(guān)完整的訓(xùn)練過程,請參閱training.ipynb
代碼存儲庫中的 Jupyter 筆記本。
全卷積網(wǎng)絡(luò)
有了地面補丁分類器,是時候?qū)⑵滢D(zhuǎn)換為我們可以應(yīng)用于整個圖像的 FCN。查看上面的網(wǎng)絡(luò),您可以看到通過移除 GlobalAveragePooling2D 層,我們最終得到了一個僅包含卷積層的網(wǎng)絡(luò)。它接受任何圖像大小并生成比例大小的激活圖。FCN 的結(jié)果實際上與以滑動窗口方式將補丁分類器應(yīng)用于圖像中的所有補丁相同。輸出圖中每個位置的激活值是輸入圖像中相應(yīng)位置的補丁的分類器結(jié)果。
這真的有效嗎?我們來看一下。這是示例圖像的渲染和 FCN 的相應(yīng)輸出:

右圖顯示了路面類的 FCN 輸出。將正確圖像中的值與候選站點相加,可以得出該站點的分?jǐn)?shù)。
這是呈現(xiàn)相同數(shù)據(jù)的另一種方法:

在這張圖片中,我用一個紅色正方形覆蓋了原始圖像,其透明度是路面類輸出的倒數(shù)(即越有可能是路面,越透明)。查看目標(biāo)著陸點,紅色越多,得分越低。
創(chuàng)建 FCN 并將權(quán)重從訓(xùn)練的分類器轉(zhuǎn)移到 FCN 的所有詳細(xì)信息都在evaluation.ipynb
代碼存儲庫的 Python 筆記本中。
量化
我對網(wǎng)絡(luò)進行了量化,以使用 8 位權(quán)重和 8 位激活來獲得更好的運行時性能。您可以遵循 Tensorflow 文檔中描述的標(biāo)準(zhǔn)程序,但我使用了我自己的方法,該方法具有更簡單的量化模型。該過程在README
代碼存儲庫中進行了詳細(xì)說明。
這是量化網(wǎng)絡(luò)的輸出示例:

這與原始網(wǎng)絡(luò)的輸出幾乎沒有區(qū)別:

硬件構(gòu)建
我已經(jīng)有了一個帶有 Vision FPGA SoM 的硬件堆棧和一個來自Battery-powered Image Logger項目的微控制器。不幸的是,結(jié)果證明微控制器太小了。計算 FCN 中每一層的輸入/輸出激活圖的大小,我們發(fā)現(xiàn)我們需要 48KB 的緩沖區(qū)空間。幸運的是,還有另一個符合要求的 Feather 板。
Feather M4 Express 不僅速度更快,而且擁有高達 192KB 的 RAM!該項目不需要 SD 卡,因此我們的構(gòu)建只是堆疊在 Feather M4 Express 上的 Vision FPGA SoM 板。

體積小、重量輕、電池供電!
執(zhí)行
從框圖中您可以看到 FPGA 被用作相機模塊和微控制器之間的橋梁。

FPGA 將捕獲的圖像以圖像傳感器的原始格式(即拜耳濾波器圖像)傳遞給微控制器。FPGA 的預(yù)構(gòu)建編程文件在代碼庫中提供。
這讓微控制器的任務(wù)是:
- 將圖像從 Bayer 轉(zhuǎn)換為 RGB 格式
- 將圖像下采樣到 80x80
- 執(zhí)行 FCN 推理
- 對目標(biāo)站點區(qū)域求和
所有這些任務(wù)的源代碼都包含在sketch
代碼存儲庫的文件夾中。我將在這里對代碼做一些評論。
完整的原始圖像超過 100KB,雖然這個 MCU 有 192KB,但我不想不必要地浪費空間。下采樣的圖像只需要 20KB。您將在從 FPGA 讀取圖像的循環(huán)中看到,它在讀取時執(zhí)行拜耳轉(zhuǎn)換和下采樣,一次一個塊,因此我們只需要為下采樣圖像提供足夠的空間。
這個網(wǎng)絡(luò)沒有使用 CNN 框架,而是非常簡單,以至于我實現(xiàn)了自己的卷積和激活函數(shù)。這些在gndnet.cpp
文件中定義。如果您有興趣了解有關(guān)卷積如何工作的更多信息,它的編寫方式非常簡單。我并不太擔(dān)心性能,但這些可能會被 ARM神經(jīng)網(wǎng)絡(luò)庫中的函數(shù)取代以獲得更好的性能。
結(jié)果
著陸算法與無人機飛行控制器的集成超出了此概念驗證的范圍。目標(biāo)是設(shè)計和訓(xùn)練算法,證明其有效性并獲得一些性能數(shù)據(jù)。
從質(zhì)量上看,該算法看起來不錯。它已在用于培訓(xùn)的站點以及未用于培訓(xùn)的站點的測試圖像上進行了評估。結(jié)果非常令人鼓舞。當(dāng)然,要投入生產(chǎn),人們可能希望對來自多個站點的數(shù)據(jù)進行訓(xùn)練。
在性能方面,從圖像捕獲到分?jǐn)?shù)計算的整個過程大約是 525 毫秒。這意味著略低于 2 FPS。這可能會起作用,因為無人機確實以相當(dāng)慢的速度下降。但是,這很容易得到改善。例如,如果將 Bayer 轉(zhuǎn)換和下采樣功能移至 FPGA,則時間會縮短到 200 毫秒多一點。那將超過 4 FPS,這絕對足夠了。
- 折疊無人機開源構(gòu)建
- 自動送貨無人機開源分享
- 自主無人機交付和充電系統(tǒng)開源分享
- 無人機mavimg開源分享
- Arduino無人機開源分享
- 迷你無人機開源分享
- 無人機滑降著陸控制系統(tǒng)的設(shè)計與實現(xiàn) 5次下載
- 如何對無人機視覺導(dǎo)航中的圖像處理的姿態(tài)進行解算 6次下載
- 使用機器視覺實現(xiàn)無人機著陸技術(shù)的詳細(xì)資料說明 16次下載
- 無人機和無人機控制方法及無人機遠程操控系統(tǒng)方法說明 69次下載
- 基于機載視覺引導(dǎo)的無人機自主循跡研究 18次下載
- 無人機技術(shù)之無人機開源系統(tǒng)教學(xué)PPT下載 29次下載
- 無人機偵測和反制系統(tǒng) 30次下載
- 無人機著陸滑跑數(shù)學(xué)模型與糾偏控制 11次下載
- 小型無人機數(shù)據(jù)鏈與自主飛控系統(tǒng)設(shè)計
- 無人機中超聲波原理 2579次閱讀
- Percepto Robotics宣布Sparrow無人機機器視覺算法 4751次閱讀
- 美國陸軍計劃采用微波系統(tǒng)驅(qū)趕空中無人機 3725次閱讀
- 即使沒有GPS網(wǎng)絡(luò)覆蓋 無人機也可以精準(zhǔn)落地 6473次閱讀
- 怎樣使無人機安全飛行?無人機飛行需要掌握什么安全知識 1.6w次閱讀
- 新疆為什么禁飛無人機_新疆無人機禁飛區(qū)域 5.7w次閱讀
- 水下無人機的用途和優(yōu)勢有哪些 9549次閱讀
- 水下無人機原理分析 1.4w次閱讀
- nixie微型無人機的功能介紹_nixie微型無人機多少錢 1.3w次閱讀
- 微型無人機發(fā)展前景_無人機發(fā)展趨勢 8518次閱讀
- 大疆做不做軍用無人機 2w次閱讀
- 中國有哪些軍用無人機_國內(nèi)軍用無人機排名 11.3w次閱讀
- 大疆無人機如何在禁飛區(qū)起飛 15.3w次閱讀
- 中國無人機技術(shù)型號種類介紹 3.5w次閱讀
- 電動無人機和油動無人機性能的對比 2805次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論