硬核解讀KubeEdge基於大模型邊雲協同的機器人語義分割演算法

华为云开发者联盟發表於2024-06-17

本文分享自華為雲社群《KubeEdge:基於大模型邊雲協同的機器人語義分割演算法》,作者:雲容器大未來。

近年來快速發展的視覺大模型(例如 SAM )在促進高精度的智慧感知方面具有很大的潛力。然而,邊緣環境中的資源限制往往會限制這種視覺大模型在本地部署,從而產生相當大的推理延遲,導致難以支援自動駕駛和機器人等實時物聯網智慧感知應用。KubeEdge SIG AI 復旦大學呂智慧團隊胡時京在 KubeEdge-Ianvs 上釋出了基於大小模型協同推理的雲邊協同物聯網感知方法,透過難例樣本挖掘演算法將少量難例樣本上傳雲端由視覺大模型處理,大部分簡單樣本在邊緣端由小模型處理,在保證推理時延的情況下提高了應對難例樣本的處理效果。

kubeedge.png

程式碼請見:https://github.com/kubeedge/ianvs/tree/main/examples/robot/lifelong_learning_bench/semantic-segmentation

一、背景

智慧城市、物聯網( IoT )技術的發展已經在國內外社會中根深蒂固,它們改變了人們日常生活和工作的方式,如自動駕駛、機器人、數字孿生、可穿戴裝置和擴增實境等。其中大量資料從物理世界生成和收集並由各種人工智慧(AI)應用程式處理成使用者需要的資訊越來越成為了一種發展趨勢。據 Gartner 統計,到2025年,物聯網等終端裝置產生的資料量將達到 79.4 zettabytes(ZB),到2030年,物聯網裝置數量將達到1250 億。不斷激增的終端裝置(如移動裝置,物聯網裝置)產生了海量的資料,由於物聯網資料的特點(即容量大、多樣性、產生速度快),傳統的基於雲的物聯網模型已經無法滿足物聯網中智慧應用的要求,資料來源的高度分散性和廣泛分佈的人工智慧應用要求物聯網中的邊緣裝置具有智慧感知的能力,即基於海量物聯網資料訓練邊緣模型並進行高效推理。

1.jpeg

圖1:物聯網感知失敗案例

然而真實世界中的物聯網邊緣裝置往往處在一個動態變化的環境中,例如自動駕駛汽車、機器人等移動邊緣裝置採集的資料會受其位置變化影響,監控攝像頭採集的資料會受時間變化影響。物聯網邊緣裝置採集的資料的分佈和特徵並非一成不變,在真實物聯網邊緣環境中普遍存在資料漂移和資料異構的現象。資料漂移和資料異構現象會對物聯網邊緣裝置的智慧感知能力造成極大影響,嚴重者甚至會導致出現人員傷亡以及業務受損。如圖1所示,2017年,波士頓動力公司的人形機器人 Atlas 因為演示臺所處環境與其訓練所處環境相差較大未能正確識別演示臺邊緣,抱箱摔下演示臺,該事件導致其股價大跌。2020年12月,福州中防萬寶城導購機器人無法識別扶梯,跌落並撞翻兩位客人,造成兩人輕傷。2021年3月,特斯拉視覺識別應用誤把白色卡車識別為天空,導致撞車造成至少兩人喪生,特斯拉市值蒸發約440億美金。2021年10月,美團無人配送車在送貨過程中與一輛私家車相撞,美團被判全責。

以上案例充分說明了資料漂移問題和資料異構問題是目前物聯網智慧感知技術的兩大挑戰。

針對資料漂移問題,現有的解決思路致力於發生資料漂移後對模型在新的資料集上進行重訓練使其能適應新的環境變化。然而重訓練模型也會導致模型忘記之前學習到的資訊,出現災難性遺忘現象。這導致當物聯網邊緣裝置又回到之前的環境時還需要再重新訓練模型,造成了對算力的極大浪費。因此在訓練過程中需要讓模型具備終身學習的能力,使模型一方面可以不斷學習新的資料集中的內容以適應新的環境,另一方面模型也不會大幅度遺忘在舊的資料集上學習到的資訊,從而減少再重訓練的開銷。

針對資料異構問題,目前快速發展的視覺大模型,如 Meta 公司釋出的 Segment Anything Model(SAM),具有較強的泛化能力,在處理分佈外的異構資料時相比傳統計算機視覺模型效果較好。因此在物聯網感知推理過程中引入視覺大模型是應對資料異構問題的關鍵解決方案之一。

但是以 SAM 為首的大模型由於其引數量較大,難以部署在資源受限的邊緣端,只能部署在雲端使用。而很多邊緣物聯網裝置,例如機器人、自動駕駛汽車,對推理的實時性要求較高,如果將所有推理樣本都上傳雲端處理,會造成較大的通訊開銷,並極大增加推理時延。因此只單獨使用在雲端部署的 SAM 大模型無法滿足實時物聯網感知的需求,需要透過雲端大模型和邊緣小模型的雲邊協同來解決實時物聯網感知的挑戰。

二、基於大模型的邊雲協同物聯網感知系統實現

針對上述物聯網邊緣環境普遍存在的資料漂移和資料異構問題,我們採用終身學習訓練方法動態更新邊緣小模型從而使模型適應新的環境,我們在雲端部署視覺大模型 SAM 用於處理分佈外異構資料從而應對邊緣小模型難以處理的難例推理樣本。同時考慮到雲端部署的 SAM 視覺大模型推理時延較大,難以滿足物聯網實時感知任務的需求,我們採用基於難例樣本挖掘的雲邊協同策略,將大部分簡單推理樣本在邊緣端由邊緣小模型處理,少部分難例推理樣本上傳雲端由雲端 SAM 大模型處理,從而在保證推理時延的情況下提高推理準確率。

2.1 總體架構設計

基於大模型的邊雲協同物聯網感知系統總體架構設計如圖2所示,邊雲協同物聯網感知系統包括雲邊協同推理和終身學習訓練兩部分。

雲邊協同推理模組用於解決物聯網感知的資料異構和實時性問題。以 SAM 為首的大模型具有較強的泛化能力,因此在處理分佈外異構資料時準確率更高。我們透過基於難例樣本挖掘的雲邊協同策略,將大部分簡單樣本在邊緣處理,只有少部分難例樣本才需要上傳雲端由 SAM 大模型處理,從而提高推理實時性。在雲邊協同推理部分,我們在邊緣節點部署 RFNet 模型和難例樣本挖掘演算法用於實現在邊緣端對簡單樣本的推理和判斷推理樣本是否需要上傳雲端。難例樣本挖掘演算法根據 RFNet 模型推理的結果將樣本分為難例樣本和簡單樣本,簡單樣本直接輸出 RFNet 推理結果,難例樣本上傳雲端處理,從而降低推理時延,提高推理實時性。我們在雲端部署 SAM 模型用於對難例樣本的推理結果進行最佳化,從而應對資料異構的問題。最佳化後的雲端推理結果會下載到邊緣節點作為難例樣本的推理結果輸出。SAM 模型可以透過 prompt 的方式以互動的形式對影像進行分割,在本專案中我們參考復旦大學提出的 SSA(Semantic Segment Anything)[1] 方法,用 SAM 模型將影像中所有物體都分割出來從而直接應用 SAM 模型於語義分割任務中。

2.jpeg

圖2:基於大模型的邊雲協同物聯網感知系統架構

終身學習訓練模組用於解決資料漂移問題。當環境變化導致資料分佈發生變化時,原來訓練的 RFNet 模型在面對資料分佈變化後的樣本時推理準確率會出現大幅度下降。終身學習演算法透過在新分佈的資料上持續訓練 RFNet 模型從而提高 RFNet 模型的推理準確率,使之適應資料漂移現象。在終身學習訓練部分,我們將上傳到雲端的難例樣本及其雲端推理結果儲存在 replay buffer 中。當 replay buffer 中樣本超過一定數量時,我們基於 replay buffer 中的難例樣本對 RFNet 模型進行再訓練,從而提高邊緣模型應對資料漂移問題的能力。訓練後的 RFNet 模型會被下載到邊緣節點更新邊緣端的 RFNet 模型。

基於大模型的邊雲協同物聯網感知系統總體架構設計如圖2所示,邊雲協同物聯網感知系統包括雲邊協同推理和終身學習訓練兩部分。上述系統架構的優勢在於:

  • 透過難例樣本挖掘,大部分簡單樣本在邊緣節點由 RFNet 模型直接得到推理結果,保證系統可以滿足實時性要求。

  • 少部分 corner case、難例樣本上傳雲端由大模型 SAM 推理得到更完善的推理結果,提高系統推理平均準確率。

  • 透過終身學習訓練,邊緣端 RFNet 模型可以在大模型 SAM 的監督下從難例樣本中學習到一定經驗,從而適應邊緣端複雜多變的環境。

KubeEdge 是目前主流的開源邊緣計算平臺,其子專案 KubeEdge-Ianvs,作為業界首個分散式協同 AI 基準測試平臺,基於 KubeEdge-Sedna 為演算法及服務開發者提供全場景可擴充套件的分散式協同 AI 基準測試,以研發、衡量和最佳化分散式協同 AI 系統。我們基於 Kubeedge-Ianvs 實現了該系統架構,具體在 Ianvs 中實現的模組如圖3所示。

3.jpeg

圖3:在KubeEdge-Ianvs中實現模組

我們將難例樣本挖掘演算法填補在 Ianvs 的未知樣本識別模組,其將樣本分為難例樣本(未知樣本)和簡單樣本(已知樣本)。在雲端節點基於大模型 SAM 對難例樣本的推理在未知樣本推理模組中實現,在邊緣端基於 RFNet 對簡單樣本的推理在已知樣本推理模組中實現。對於終身學習訓練的部分,我們在已知和未知任務處理模組實現,這部分我們延用了 Ianvs 預設的終身學習訓練配置。

2.2 案例分析

我們採用在華為深圳工業園區由智慧機械狗採集的語義分割機器人資料集 Cloud-Robotics 作為本專案的測試 benchmark。Cloud-Robotics 是首個在真實世界場景中由機械狗實地收集的資料集,因此資料集中的圖片都是以機械狗的視角拍攝的,拍攝角度相比 Cityscapes 等自動駕駛語義分割資料集更低,也更貼近實際機器人應用(遞送、巡檢)。資料集官網連結:https://kubeedge-ianvs.github.io/

圖4展示了在 Cloud-Robotics 資料集中RFNet模型和SAM模型部分的推理結果,不難看出 RFNet 在處理部分 corner case 比如反光(第三排圖片)時效果較差,將建築物識別為天空。然而透過大模型 SAM 推理得到分割完善的 mask 後基於畫素級的投票成果將錯誤識別為天空的部分正確識別為了建築物。

4.png

圖4:部分實驗結果展示

我們在[Cloud-Robotics][2] 資料集上進行了實驗,為了進一步對比 SAM+RFNet 效果,我們額外選取了 Huggingface 釋出的在cityscapes資料集上預訓練的[Segformer][3] 模型作為基模型進行測試,測試結果如下表:

640.png

上表展示了不同演算法在 Cloud-Robotics 資料集上對不同類別物體的識別準確率(IoU)。我們將識別物體根據其在資料集中出現的頻率分為常見類別和稀有類別兩種。從結果中可以看出對於常見類別的 Road、Sidewalk 和 builiding 類物體的識別上,SAM+RFNet 雲邊協同和 RFNet 效果提升僅有1%左右,這是因為對於識別常見類別的簡單任務來說,RFNet 模型的準確率已經很高了,再額外加入 SAM 大模型也沒有太多提升空間。而對於園區中出現較少稀有類別的 Car、Terrain 類物體, SAM+RFNet 相比 RFNet 提升平均超過20%以上,這是因為對於識別稀有類別的難例任務來說,RFNet 模型處理效果不好,而 SAM 模型更擅長處理。總體來說, SAM+RFNet 雲邊協同相比只用RFNet準確率提升了8%以上,證明了我們提出的基於大模型的邊雲協同物聯網感知系統的有效性。

同時可以看出使用 Segformer 作為基模型的結果則相差很多,這主要是因為 Segformer 是在 cityscapes 資料集上預訓練的,而 Cloud-Robotics 資料集中存在 cityscapes 資料集中沒有的標籤,同時資料集的分佈差別較大(Cloud-Robotics 面向半封閉工業園區,cityscapes 面向開放世界)導致了 Segformer 推理結果較差。在Cityscapes 資料集上預訓練的 Segformer 模型在 Car 類物體識別上準確率較高,這主要是因為 Cityscapes 資料集是面向開放世界的語義分割資料集,其中 car 類物體出現頻率更高。下圖展示了 RFNet 和 Segformer 的部分推理結果對比。

5.png

圖5:不同模型效果展示

如圖5所示,可以看出因為 Segformer 在分類時就將整個天空都識別為了建築,因此即便 SAM 推理的結果中將天空正確切割出來了,最後 SAM+Segformer 的推理結果中天空仍然是分類錯誤的。

這告訴我們 SAM 大模型不能解決一切問題,最終推理結果還是依賴於使用的小模型推理標籤準確。因此即便在使用大模型進行雲邊協同推理時,對邊緣端小模型進行終身學習更新仍然是必要的。

三、基於KubeEdge-lanvs的使用教程

在這章中我們透過執行 Ianvs 終身學習的 cloud-robotics 樣例向大家講解基於 KubeEdge-Ianvs 實現大模型邊雲協同物聯網感知的基本流程。Ianvs 安裝流程以及終身學習更詳細的介紹可以參考:Ianvs-lifelong-learning-tutorial[4]。

首先我們需要配置好 Cloud-Robotics 的資料集,先建立資料集的資料夾,注意如果你把資料集放到別的位置,本教程中的部分路徑配置也要一併修改。

mkdir /data
cd /data
mkdir datasets
cd datasets
download datasets in https://kubeedge-ianvs.github.io/download.html

配置好資料集後,我們可以準備執行示例程式碼了。Cloud-Robotics 示例執行的程式碼放在/ianvs/project/ianvs/examples/robot/lifelong_learning_bench/semantic-segmentation下,我們首先要配置 python 路徑(這裡如果 Ianvs 安裝位置不一樣的話需要更改路徑):

export PYTHONPATH=$PYTHONPATH:/ianvs/project/ianvs/examples/robot/lifelong_learning_bench/semantic-segmentation/testalgorithms/rfnet/RFNet

然後我們需要去安裝 SAM 大模型:

cd /ianvs/project
git clone https://github.com/facebookresearch/segment-anything.git
cd segment-anything 
python -m pip install -e .

下載模型引數:

wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth

為了儲存模型推理結果,我們需要按照以下指令安裝 mmcv 和 mmdetection:

python -m pip install https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/mmcv-2.0.0-cp39-cp39-manylinux1_x86_64.whl
cd /ianvs/project
git clone https://github.com/hsj576/mmdetection.git
cd mmdetection
python -m pip install -v -e .

在機器配置效能不足以執行 SAM 模型的情況下,我們為 Cloud-Robotics 資料集中的所有 SAM 推理結果準備了一個快取。你可以從這個連結 [5]下載快取,並把快取檔案放在“/ianvs/project/”中:

cp cache.pickle /ianvs/project

透過使用快取,可以在不安裝 SAM 模型的情況下模擬基於大模型的邊雲協同推理。

除此之外,我們還在這個連結 [6]中提供了一個預訓練的 RFNet 模型,如果你不想從零開始訓練 RFNet 模型,可以使用我們預訓練的 RFNet 模型:

cd /ianvs/project
mkdir pretrain
cp pretrain_model.pth /ianvs/project/pretrain
in /ianvs/project/ianvs/examples/robot/lifelong_learning_bench/semantic-segmentation/testalgorithms/rfnet/RFNet/utils/args.py set self.resume = '/ianvs/project/pretrain/pretrain_model.pth'

上述所有配置完成後,執行下面指令即可進行基於 SAM 大模型的邊雲協同推理:

cd /ianvs/project/ianvs
ianvs -f examples/robot/lifelong_learning_bench/semantic-segmentation/benchmarkingjob-sam.yaml

相關資料:

[1] SSA(Semantic Segment Anything):https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_capacity_plugin.mdhttps://github.com/fudan-zvg/Semantic-Segment-Anything

[2] Cloud-Robotics:https://kubeedge-ianvs.github.io/

[3] Segformer:https://huggingface.co/docs/transformers/model_doc/segformer

[4] Ianvs-lifelong-learning-tutorial:https://ianvs.readthedocs.io/en/latest/

[5] https://pan.baidu.com/s/1oGGBa8TjZn0ccbznQsl48g?pwd=wpp1

[6] https://pan.baidu.com/s/1h8JnUgr1hfx5QnaFLLkMAg?pwd=jts4

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章