最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

OriginBot智能機(jī)器人開(kāi)源套件|23.視覺(jué)巡線(AI深度學(xué)習(xí))

2023-02-24 14:07 作者:古月居GYH  | 我要投稿

操作環(huán)境及軟硬件配置如下:

  • OriginBot機(jī)器人(視覺(jué)版/導(dǎo)航版)

  • PC:Ubuntu (≥20.04) + ROS2 (≥Foxy) + pytorch + docker

  • 巡線場(chǎng)景:黑色路徑線,背景有明顯反差

應(yīng)用目標(biāo)

在視覺(jué)巡線(OpenCV)中,我們已經(jīng)可以讓小車(chē)跟隨黑色的路徑線運(yùn)動(dòng),實(shí)現(xiàn)了最基礎(chǔ)的視覺(jué)巡線任務(wù),不過(guò)大家可能已經(jīng)發(fā)現(xiàn),基于OpenCV的圖像識(shí)別受光線影響較大,更換場(chǎng)地后,就需要重新調(diào)整閾值,有沒(méi)有可能讓機(jī)器人自主適應(yīng)環(huán)境的變化呢?也就是讓機(jī)器人自己來(lái)學(xué)習(xí)。

沒(méi)問(wèn)題,深度學(xué)習(xí)大家一定都聽(tīng)說(shuō)過(guò),使用這種方法,我們就可以實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)化的視覺(jué)巡線效果,需要適應(yīng)什么樣的場(chǎng)地,只需要采集一些圖片數(shù)據(jù),就可以啦,接下來(lái)我們就來(lái)嘗試一下。

原理簡(jiǎn)介

1.深度學(xué)習(xí)流程

相比傳統(tǒng)圖像處理,深度學(xué)習(xí)能夠讓機(jī)器視覺(jué)適應(yīng)更多的變化,從而提高復(fù)雜環(huán)境下的精確程度。在正式開(kāi)始之前,我們先簡(jiǎn)單介紹下深度學(xué)習(xí)的基本流程。

機(jī)器學(xué)習(xí)的核心目的是要幫助我們解決問(wèn)題,可以分為六個(gè)主要步驟:

  • 問(wèn)題定義:我們要解決的問(wèn)題是什么?比如這里的視覺(jué)巡線,那就要識(shí)別線在圖像中的位置。

  • 數(shù)據(jù)準(zhǔn)備:針對(duì)要解決的問(wèn)題,著手準(zhǔn)備數(shù)據(jù)。比如要準(zhǔn)備各種巡線場(chǎng)景的照片,給機(jī)器學(xué)習(xí)使用。

  • 模型選擇/開(kāi)發(fā):模型就是處理數(shù)據(jù)的一套流程,也就是我們常聽(tīng)說(shuō)的CNN卷積神經(jīng)網(wǎng)絡(luò)、GAN生成對(duì)抗網(wǎng)絡(luò)、RNN循環(huán)神經(jīng)網(wǎng)絡(luò)等等。

  • 模型訓(xùn)練與調(diào)優(yōu):把數(shù)據(jù)放入模型中,訓(xùn)練得到最優(yōu)化的參數(shù),可以理解為是機(jī)器在學(xué)習(xí)的過(guò)程。

  • 模型評(píng)估測(cè)試:就像小測(cè)驗(yàn)一樣,我們拿一些數(shù)據(jù)給訓(xùn)練好的模型,看下效果如何。

  • 部署:一切準(zhǔn)備就緒之后,就可以把訓(xùn)練好的模型放到機(jī)器人上了,也就是正式把知識(shí)傳授給某一個(gè)機(jī)器人,它就可以解決之前提出的問(wèn)題啦。

2.視覺(jué)巡線流程

OriginBot具有兩個(gè)主動(dòng)輪,一個(gè)從動(dòng)輪,通過(guò)兩個(gè)主動(dòng)輪差速進(jìn)行旋轉(zhuǎn)控制。其中MCU模塊主要用于小車(chē)的電機(jī)運(yùn)動(dòng)控制通過(guò)串口與主控旭日X3派進(jìn)行通信。

主控制器選用地平線旭日X3派,具備5T算力,能夠輕松處理復(fù)雜的CNN推理工作。

整套系統(tǒng)如上圖所示,旭日X3派通過(guò)攝像頭獲取小車(chē)前方環(huán)境數(shù)據(jù),圖像數(shù)據(jù)通過(guò)訓(xùn)練好的CNN模型進(jìn)行推理得到引導(dǎo)線的坐標(biāo)值,然后依據(jù)一定的控制策略計(jì)算小車(chē)的運(yùn)動(dòng)方式,通過(guò)UART向小車(chē)下發(fā)運(yùn)動(dòng)控制指令實(shí)現(xiàn)整個(gè)系統(tǒng)的閉環(huán)控制。

PC用于進(jìn)行數(shù)據(jù)標(biāo)注以及訓(xùn)練,為了提高效率這里采用X3派將圖片通過(guò)以太網(wǎng)發(fā)送至PC端進(jìn)行標(biāo)注的方式。

運(yùn)行方法

1.場(chǎng)景說(shuō)明

在OriginBot的應(yīng)用代碼中,我們已經(jīng)為大家訓(xùn)練好了一套巡線的模型,使用的場(chǎng)景如下:

如果大家身邊也有類(lèi)似的環(huán)境,可以暫時(shí)跳過(guò)以上提到的機(jī)器學(xué)習(xí)步驟,直接進(jìn)入部署環(huán)節(jié),我們先來(lái)試一試使用深度學(xué)習(xí)的視覺(jué)巡線效果如何吧。

2.啟動(dòng)視覺(jué)巡線

先將OriginBot放置到巡線的場(chǎng)景中,盡量向下調(diào)節(jié)相機(jī)角度,避免外界干擾。

接下來(lái)啟動(dòng)巡線功能,注意命令后需要跟模型路徑和名稱(chēng)的參數(shù):

SSH連接OriginBot成功后,在終端中輸入如下指令,啟動(dòng)機(jī)器人底盤(pán)和相機(jī):

相機(jī)啟動(dòng)成功后,就可以在巡線終端中看到動(dòng)態(tài)識(shí)別的路徑線位置了:

運(yùn)行后稍等片刻,就可以看到機(jī)器人開(kāi)始巡線運(yùn)動(dòng)啦。

深度學(xué)習(xí)是基于數(shù)據(jù)的,機(jī)器人在數(shù)據(jù)中見(jiàn)過(guò)的場(chǎng)景,才能學(xué)會(huì),如果沒(méi)見(jiàn)過(guò)的,識(shí)別效果就不太好了,所以如果大家使用巡線顏色、周邊環(huán)境差別較大,還是需要盡量多采集一些數(shù)據(jù),讓機(jī)器人都可以學(xué)會(huì),完整的深度學(xué)習(xí)流程可以參考如下內(nèi)容。

AI深度學(xué)習(xí)

接下來(lái)的深度學(xué)習(xí)操作主要分為以上幾個(gè)步驟,在操作之前,還需要完成PC端環(huán)境的配置,我們一起來(lái)體驗(yàn)下深度學(xué)習(xí)吧。

1. PC端環(huán)境配置

PC端的基礎(chǔ)環(huán)境是Ubuntu+ROS+pytorch+docker,請(qǐng)大家先按照電腦端環(huán)境配置完成Ubuntu、ROS、OriginBot功能包的配置。

安裝pytorch

訓(xùn)練框架選用pytorch,大家可以在PC端的Ubuntu系統(tǒng)中,直接使用如下命令進(jìn)行安裝:

安裝Docker

后續(xù)模型轉(zhuǎn)換需要用到Docker,以節(jié)省環(huán)境配置的時(shí)間,需要大家先進(jìn)行安裝,并下載模型轉(zhuǎn)換使用的鏡像。

ubuntu環(huán)境下docker的安裝可以參考如下網(wǎng)站或網(wǎng)上資料完成:

Ubuntu Docker 安裝:

runoob.com/docker/ubunt

安裝完成后,就可以通過(guò)如下命令,下載后續(xù)模型轉(zhuǎn)換的工具鏈和docker鏡像啦。

  • 下載AI工具鏈OE包(6.1GB)

  • 下載AI工具鏈docker(14.8GB)

相關(guān)功能包介紹

在深度學(xué)習(xí)的整個(gè)流程中,我們將用到三個(gè)直接相關(guān)的功能包/文件夾:

  • 10_model_convert:用來(lái)存放浮點(diǎn)模型轉(zhuǎn)定點(diǎn)模型相關(guān)代碼和配置,該文件夾內(nèi)容全部需要在AI工具鏈docker中運(yùn)行;

  • line_follower_model:用來(lái)存放模型訓(xùn)練相關(guān)內(nèi)容,如數(shù)據(jù)標(biāo)注、模型訓(xùn)練、以及生成onnx模型,該文件夾內(nèi)容全部在PC上運(yùn)行;

  • line_follower_perception:用來(lái)存放旭日X3派上運(yùn)行的代碼,可以在板端編譯或者通過(guò)交叉編譯方式生成旭日X3派上運(yùn)行的package。

其中,10_model_convert和line_follower_model兩個(gè)包放置在originbot_desktop代碼倉(cāng)庫(kù)中,line_follower_perception放置在originbot代碼倉(cāng)庫(kù)中。

環(huán)境準(zhǔn)備好之后,我們就可以著手開(kāi)始啦。

2. 數(shù)據(jù)采集與標(biāo)注

數(shù)據(jù)是深度學(xué)習(xí)的基礎(chǔ),我們先要完成數(shù)據(jù)的采集和標(biāo)注,這個(gè)過(guò)程主要在PC端完成,需要訂閱OriginBot機(jī)器人端的實(shí)時(shí)圖像,主要流程如下:

(1)啟動(dòng)OriginBot相機(jī),采集巡線場(chǎng)景的圖像,發(fā)布圖像話題image_raw;

(2)PC端訂閱OriginBot發(fā)布的圖像話題,獲取圖像數(shù)據(jù);

(3)PC端對(duì)圖像進(jìn)行剪裁,并且人工完成每一幅圖像中路徑線的標(biāo)注;

(4)保存標(biāo)注結(jié)果和對(duì)應(yīng)的圖像。

啟動(dòng)OriginBot相機(jī)

SSH連接OriginBot成功后,在終端中輸入如下指令,啟動(dòng)OriginBot的相機(jī):

在PC端,通過(guò)如下指令,啟動(dòng)line_follower_model包中的數(shù)據(jù)采集與標(biāo)注程序,

為保證通信的流暢,以上使用cyclonedds,配置之后,cyclonedds會(huì)自動(dòng)綁定某一網(wǎng)卡,如果通信網(wǎng)卡不對(duì)的話,可使用如下命令更換:

數(shù)據(jù)采集與標(biāo)注

啟動(dòng)成功后,按下鍵盤(pán)上回車(chē)鍵,程序會(huì)訂閱最新圖像話題,剪裁后通過(guò)一個(gè)可視化窗口顯示出來(lái),數(shù)據(jù)采集成功:

8057f0fb-9925-4b20-b12c-64574956e92a

用鼠標(biāo)左鍵點(diǎn)擊畫(huà)面垂直方向上路徑線的中心處,即完成該幀圖像數(shù)據(jù)的標(biāo)注:

87b8418b-cbc0-48c9-ba0f-3187e364bc64

按下回車(chē)鍵,程序自動(dòng)保存該圖片至當(dāng)前路徑下的image_dataset文件夾中,并且保存標(biāo)記結(jié)果。圖片命名方式為:

xy_[x坐標(biāo)]_[y坐標(biāo)]_[uuid].jpg

其中uuid為圖片唯一標(biāo)志符,避免出現(xiàn)文件名稱(chēng)相同。

不斷調(diào)整機(jī)器人的在場(chǎng)景中的位置,考慮各種可能出現(xiàn)的圖像效果,循環(huán)完成以上數(shù)據(jù)采集和標(biāo)注過(guò)程,采集足夠數(shù)量的數(shù)據(jù),建議至少100張,用于后續(xù)模型訓(xùn)練。當(dāng)環(huán)境或者場(chǎng)地變化時(shí)也可采集對(duì)應(yīng)的圖片一起訓(xùn)練提高模型的適應(yīng)性。

image

3. 模型訓(xùn)練

模型選擇

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)是一種目前廣泛用于圖像,自然語(yǔ)言處理等領(lǐng)域的深度神經(jīng)網(wǎng)絡(luò)模型。1998 年,Lecun 等人提出了一種基于梯度的反向傳播算法用于文檔的識(shí)別。

在這個(gè)神經(jīng)網(wǎng)絡(luò)中,卷積層 (Convolutional Layer) 扮演著至關(guān)重要的角色

隨著運(yùn)算能力的不斷增強(qiáng),一些大型的 CNN 網(wǎng)絡(luò)開(kāi)始在圖像領(lǐng)域中展現(xiàn)出巨大的優(yōu)勢(shì),2012 年Krizhevsky等人提出了AlexNet網(wǎng)絡(luò)結(jié)構(gòu),并在ImageNet圖像分類(lèi)競(jìng)賽中以超過(guò)之前11%的優(yōu)勢(shì)取得了冠軍。

隨后不同的學(xué)者提出了一系列的網(wǎng)絡(luò)結(jié)構(gòu)并不斷刷新ImageNet的成績(jī),其中比較經(jīng)典的網(wǎng)絡(luò)包括:VGG(Visual Geometry Group) ,GoogLeNet和ResNet。卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層、池化層、全連接層以及輸出層組成,其結(jié)構(gòu)如下:

綜合考慮模型成熟度、訓(xùn)練模型對(duì)CPU/GPU的硬件要求,這里選擇ResNet網(wǎng)絡(luò)作為backbone。殘差神經(jīng)網(wǎng)絡(luò)(ResNet)是由微軟研究院的何愷明、張祥雨、任少卿、孫劍等人提出,在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠軍。ResNet巧妙地利用了shortcut連接,解決了深度網(wǎng)絡(luò)中模型退化的問(wèn)題,是當(dāng)前應(yīng)用最為廣泛的CNN特征提取網(wǎng)絡(luò)之一。ResNet18結(jié)構(gòu)如下:

8f27f7d6-97a3-4b9d-bff7-bf2d7652d2bf

在旭日X3派上ResNet18推理性能高達(dá)232FPS,ResNet50推理性能也超過(guò)100FPS,高幀率保證了數(shù)據(jù)處理的實(shí)時(shí)性,是后續(xù)提高車(chē)速以及實(shí)現(xiàn)更復(fù)雜應(yīng)用的必要條件。這里先使用ResNet18網(wǎng)絡(luò)結(jié)構(gòu),后期遇到瓶頸考慮更深的ResNet50網(wǎng)絡(luò)結(jié)構(gòu)。為了滿足輸出引導(dǎo)線坐標(biāo)值x,y這里需要修改ResNet18網(wǎng)絡(luò)FC輸出為2,即直接輸出引導(dǎo)線的x,y坐標(biāo)值。ResNet18輸入分辨率為224x224。

模型訓(xùn)練

以上提到的模型可以直接復(fù)用pytorch中的定義,數(shù)據(jù)集的切分和模型的訓(xùn)練,都封裝在line_follower_model功能包的代碼中。

model_traning

直接在PC端,運(yùn)行如下指令,即可開(kāi)始訓(xùn)練:

model_traning

模型訓(xùn)練過(guò)程需要一段時(shí)間,預(yù)計(jì)在30分鐘左右,請(qǐng)大家耐心等待。

訓(xùn)練完成后,會(huì)產(chǎn)生模型文件。

model_traning

4. 模型轉(zhuǎn)換

pytorch訓(xùn)練得到的浮點(diǎn)模型如果直接運(yùn)行在旭日X3派上效率會(huì)很低,為了提高運(yùn)行效率,發(fā)揮BPU的5T算力,這里需要進(jìn)行浮點(diǎn)模型轉(zhuǎn)定點(diǎn)模型操作。

model_transform

生成onnx模型

在PC端,通過(guò)如下命令,使用generate_onnx將之前訓(xùn)練好的模型,轉(zhuǎn)換成onnx模型:

model_transform

運(yùn)行后在當(dāng)前目錄下得到生成的best_line_follower_model_xy.onnx模型。

model_transform

啟動(dòng)AI工具鏈docker

解壓縮之前下載好的AI工具鏈的docker鏡像和OE包,并將docker鏡像解壓出來(lái)的數(shù)據(jù)文件都拷貝到OE包中的data文件夾下。

image
image

將originbot_desktop代碼倉(cāng)庫(kù)中的10_model_convert包拷貝到至OE開(kāi)發(fā)包ddk/samples/ai_toolchain/horizon_model_convert_sample/03_classification/目錄下。

image

再把line_follower_model功能包下標(biāo)注好的數(shù)據(jù)集文件夾和生成的onnx模型拷貝到以上10_model_convert包中:

image

然后回到OE包的根目錄下,加載AI工具鏈的docker鏡像:

image

生成校準(zhǔn)數(shù)據(jù)

該步驟生成的校準(zhǔn)數(shù)據(jù)主要供下一步模型編譯進(jìn)行校準(zhǔn)用,可以使用訓(xùn)練模型的部分?jǐn)?shù)據(jù),沒(méi)有特殊要求,只要確保標(biāo)準(zhǔn)正確即可,數(shù)量以100張左右為宜,上一步我們已經(jīng)將數(shù)據(jù)集拷貝完成。

在啟動(dòng)的Docker鏡像中,完成如下操作:

image

模型編譯生成定點(diǎn)模型

該步驟將生成定點(diǎn)模型文件,用于后續(xù)在機(jī)器人上的部署:

image

編譯成功后,會(huì)在10_model_output路徑下生成最終的模型文件。

image

我們可以右鍵拷貝模型文件,放到line_follower_model功能包里,以備后續(xù)部署使用。

image

5. 模型部署

通過(guò)前面模型轉(zhuǎn)換已經(jīng)得到可以在X3派BPU上運(yùn)行的定點(diǎn)模型,如何將其部署在X3派上,實(shí)現(xiàn)圖像獲取、模型推理、運(yùn)動(dòng)控制整套功能呢?這里基于TogetherROS中的Hobot DNN實(shí)現(xiàn)。Hobot DNN是TogetherROS軟件棧中的板端算法推理框架,在地平線旭日X3派上利用BPU處理器實(shí)現(xiàn)AI推理功能,為機(jī)器人應(yīng)用開(kāi)發(fā)提供更簡(jiǎn)單易用的模型集成開(kāi)發(fā)接口,包括模型管理、基于模型描述的輸入處理及結(jié)果解析,以及模型輸出內(nèi)存分配管理等功能。

模型部署

將編譯生成的定點(diǎn)模型resnet18_224x224_nv12.bin,拷貝到OriginBot端line_follower_perception功能包下的model文件夾中,替換原有的模型,并且重新編譯工作空間。

編譯完成后,就可以通過(guò)如下命令部署模型,其中參數(shù)model_path和model_name指定模型的路徑和名稱(chēng):

e15c780e42a2fc9bb4895f6425a9275

啟動(dòng)相機(jī)

先將OriginBot放置到巡線的場(chǎng)景中。

通過(guò)如下命令,啟動(dòng)零拷貝模式下的攝像頭驅(qū)動(dòng),加速內(nèi)部的圖像處理效率:

相機(jī)啟動(dòng)成功后,就可以在巡線終端中看到動(dòng)態(tài)識(shí)別的路徑線位置了:

image-20220822151357113

啟動(dòng)機(jī)器人

最后,再啟動(dòng)OriginBot底盤(pán),機(jī)器人就可以自主尋線運(yùn)動(dòng)啦:


OriginBot智能機(jī)器人開(kāi)源套件|23.視覺(jué)巡線(AI深度學(xué)習(xí))的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
扎赉特旗| 苍南县| 瑞昌市| 伊金霍洛旗| 松溪县| 左云县| 明水县| 榕江县| 洛阳市| 太谷县| 怀来县| 叶城县| 余姚市| 彭州市| 永仁县| 城市| 无棣县| 明溪县| 西乡县| 德清县| 琼海市| 余庆县| 波密县| 安阳市| 万安县| 崇信县| 晴隆县| 简阳市| 霍林郭勒市| 大理市| 宜阳县| 吴忠市| 德格县| 惠安县| 乐清市| 雅江县| 阿拉善左旗| 昭通市| 竹山县| 河池市| 定襄县|