25/2/16 <算法筆記> MiDas原理

MiDaS(Monocular Depth Sensing)是一種基于單目深度估計的技術,它通過深度學習方法使用單張RGB圖像(普通2D圖像)來估算場景的深度圖(Depth Map)。相比于傳統的依賴專用深度傳感器(如LiDAR或ToF相機)的深度感知方法,MiDaS 不需要額外的硬件,僅依賴普通的單目攝像頭即可對場景的深度進行預測。

以下是通俗化的 MiDaS 原理解析:

1. 什么是深度估計?

在計算機視覺中,深度估計旨在為場景中的每個像素估算與攝像機的距離。這種深度信息可以用灰度圖表示:

  • 場景中的物體越近,像素值越亮(深度越小)。
  • 場景中的物體越遠,像素值越暗(深度越大)。

MiDaS 生成的結果通常是標準化后的相對深度(Relative Depth),而非絕對物理尺度上的距離。

2. MiDaS 的核心原理

(1) 深度估計的訓練目標

MiDaS 的核心目標是通過神經網絡從單張 RGB 圖像提取有意義的特征,并學習將其映射為深度圖。其訓練過程基于多種深度相關數據集,將網絡訓練成為能泛化到多場景、多分辨率、多種鏡頭的深度估計模型。

與其他深度估計方法相比,MiDaS 關注生成相對深度關系,即:預測場景中的物體之間哪個更遠,哪個更近,而非精確的實際測量值。

(2) 網絡結構
  • MiDaS 使用了一種基于圖像特征提取的編碼器-解碼器(Encoder-Decoder)架構
    • 編碼器負責提取圖像中的全局特征(例如形狀、邊緣等),并壓縮到低維特征空間。
    • 解碼器將這些特征逐步上采樣,生成與輸入圖像相同分辨率的深度圖。
  • 最新版本的 MiDaS 使用?Vision Transformer(ViT)?或強大的卷積網絡(如 ResNet 或 EfficientNet)作為特征提取器,使模型能夠捕捉更多場景中的長距離依賴關系和復雜特征。
(3) 訓練數據來源
  • MiDaS 是一種跨領域模型,它通過不同的深度相關數據集進行聯合訓練,比如:
    • 近景目標的精準深度數據集(如 MegaDepth、ReDWeb)。
    • 室內場景(如 NYU Depth 數據集)。
    • 廣域尺度的景深(如 DIW 數據集)。
  • 使用了一種叫?Scale-Invariant Loss(尺度不變損失)?的策略,使模型能夠在平滑過渡和深度關系中保持穩健。
(4) 輸出相對深度
  • MiDaS 的結果表示的是像素間的相對深度關系,而不是物理距離。
  • 比如說,輸出的深度圖可能告訴我們“樹在汽車后面”,但不能直接告訴我們“樹距離攝像頭 10 米”。

3. MiDaS 的執行流程

  1. 輸入處理

    • 一張 RGB 圖像被輸入至深度估計模型。
    • 圖像經過預處理(如標準化和縮放)以適應網絡輸入。
  2. 特征提取

    • 編碼器提取圖像的高維抽象特征,捕捉全局場景結構以及物體之間的關系。
  3. 深度預測

    • 解碼器將特征映射為二維深度圖,并通過獨特的損失函數優化輸出結果,使相對深度信息更加準確。
  4. 后處理與輸出

    • 將神經網絡輸出的深度圖標準化(例如歸一化到0-255),方便視覺化或后續任務使用。

在 MiDaS(或單目深度估計)中,模型的核心目標是從輸入的 RGB 圖像中學習到場景的深度關系,并通過特定的損失函數來優化。這些公式主要圍繞以下幾個方面展開:前向傳播中的深度表示網絡參數優化的損失函數,以及標準化(后處理)操作

MiDaS 的核心任務是將輸入 RGB 圖像(3 通道)映射到一個深度圖(Depth Map,1 通道)。可以用以下公式表示:

MiDaS 使用多種深度相關的訓練數據,其中一部分數據只提供相對深度,而非絕對深度。為此,MiDaS 引入一種尺度不變損失(Scale-Invariant Loss),專注于優化深度關系,而不受絕對尺度的影響。

(1) 尺度不變損失(Scale-Invariant Loss)

尺度不變損失函數用于訓練深度估計模型,讓其專注于預測正確的點間深度關系,而忽略整體深度的絕對大小。這一損失由兩部分組成:點對點誤差項和整體協方差項。

(2) 梯度一致性損失(Gradient Consistency Loss)

此外,為了使預測深度圖展現更平滑的遠近關系,MiDaS 還引入了一個梯度一致性損失,用于比較深度圖的梯度變化(即物體邊緣和紋理等特征):

(3) 總體損失

結合尺度不變損失和梯度一致性損失,MiDaS 的總體損失函數可以表示為:

λgrad?:控制梯度損失對總損失的影響權重(通常是一個超參數)。

輸出的深度圖經常是未歸一化的相對深度,因此需要后處理(標準化)以便易于理解或進一步處理。假設原始深度圖的像素值為?D^iD^i?,我們可以對其進行線性歸一化到區間?[0,1][0,1]:

由于 MiDaS 使用的網絡(如 ResNet 或 Vision Transformer)會對輸入圖像進行下采樣,再解碼生成深度圖,可能會導致輸出的深度圖分辨率低于原始圖像分辨率。因此需要插值進行分辨率恢復:

雙線性插值(Bilinear Interpolation):

在推理階段,單張 RGB 輸入圖像?II?進入模型后,經過編碼器提取特征,再通過解碼器生成深度圖:

  • Wencode?:編碼器權重,提取圖像的特征??(I)。
  • Wdecode?:解碼器權重,將低維特征還原以輸出深度圖。
  • 最終得到的深度圖可以通過歸一化和后處理調整,以適用于具體任務。

大致的方法可以歸納為將一張三通道(RGB)的圖片編碼為一通道(單通道)的過程,但背后還涉及更多的細節來確保模型不僅僅是簡單地轉換通道,而是能夠精準地提取和預測深度信息

簡單歸納:RGB(三通道) -> Depth Map(一通道)

但是,不同于對顏色、紋理等直接編碼,這里的一通道并不是像灰度圖那樣只表示亮度,而是深度信息,即圖像中每個像素都含有該點與相機之間的相對距離。模型的核心任務是從三通道圖像中理解物體的幾何關系和場景的三維信息,而這需要模型具備一些特殊能力:

實際做了哪些復雜的事情

  1. 特征提取:看透二維信息的本質

    • 對于三通道的輸入圖片來說,RGB 中的紅、綠、藍通道值本身其實只包含像素亮度信息。要估計深度,模型需要從二維特征中提取潛在的三維信息
    • 舉個例子:模型要認出兩顆球相互遮擋,并判斷哪個更靠近鏡頭。
    • 這就需要依賴神經網絡的編碼器部分(通常是采用預訓練的 ResNet 或 Transformer 變種網絡),學習到這些復雜的特征關系。
  2. 相對深度 vs 絕對深度

    • 由于單目深度估計只能基于一張圖片,它缺乏真實場景的絕對度量(比如激光雷達提供的真實深度值),所以預測出的深度圖是一個相對深度圖
    • 比如一棵樹比一棟建筑物近,但具體的米數可能無法得知。
  3. 損失函數引導的深度學習

    • 模型在訓練時依賴特殊的損失函數,比如 MiDaS 提到的尺度不變損失(Scale-Invariant Loss),這類損失函數能避免模型被圖片縮放和場景比例的問題干擾,讓它更關注哪些物體更近,哪些更遠
  4. 梯度一致性:確保邊界清晰

    • 為了讓深度預測能捕捉到物體的輪廓和邊界,模型還通過梯度損失或邊緣一致性損失,強制讓深度圖中的變化(比如邊緣處的深度差)與原圖片的結構相一致。
  5. 后處理:標準化單通道深度圖

    • 深度圖本身是理論上的相對值,因此最后的輸出通常會經過歸一化或插值來調整尺度或增強可視化效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70079.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python+halcon 解讀labelme標注生成marksimage

這一段代碼封裝了一個類,需要傳統一個圖片和標注后json文件所在的地址,標注的選項是polygon,主要是用于unet深度學習網絡 在初始化時需要輸入文件(imagejeson)路徑,多分類任務的label_list。會在項目目錄下…

從技術債務到架構升級,滴滴國際化外賣的變革

背 景 商家營銷簡述 在外賣平臺的運營中,我們致力于通過靈活的補貼策略激勵商家,與商家共同打造良好的合作關系,也會提供多樣化的營銷活動,幫助商家吸引更多用戶下單。通過這些活動,不僅能夠提高商家的銷量&#xff0c…

英語—四級CET4考試—技巧篇—選詞填空—實操教學—2014 年 6 月大學英語四級考試真題(第 2 套)

🏠個人主頁:fo安方的博客? 💂個人簡歷:大家好,我是fo安方,目前中南大學MBA在讀,也考取過HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等證書。🐳 &…

線性代數中的正交和標準正交向量

在線性代數中,理解正交向量和正交向量至關重要,尤其是對于機器學習中的應用。這篇博文將簡化這些概念,而不會太深入地深入研究復雜的數學。 正交向量 如果兩個向量的點積等于零,則認為這兩個向量是正交的。但點積到底是什么呢&am…

企業文件共享中的權限管理與安全風險防范

在企業的日常運營中,文件共享是必不可少的一項工作。然而,文件共享過程中如果權限管理不當,極易引發安全風險,導致企業敏感信息泄露。因此,加強文件共享中的權限管理與安全風險防范,對于保障企業信息安全至…

急停信號的含義

前言: 大家好,我是上位機馬工,碩士畢業4年年入40萬,目前在一家自動化公司擔任軟件經理,從事C#上位機軟件開發8年以上!我們在開發C#的運動控制程序的時候,一個必要的步驟就是確認設備按鈕的急停…

數據結構:圖;鄰接矩陣和鄰接表

鄰接矩陣: 1.概念: 鄰接矩陣是圖的存儲結構之一,通過二維數組表示頂點間的連接關系。 2.具體例子 : 一.無向圖鄰接矩陣示例: 示例圖(頂點:A、B、C,邊:A-B、B-C&…

Kubernetes-master 組件

以下是Kubernetes Master Machine的組件。 etcd 它存儲集群中每個節點可以使用的配置信息。它是一個高可用性鍵值存儲,可以在多個節點之間分布。只有Kubernetes API服務器可以訪問它,因為它可能具有一些敏感信息。這是一個分布式鍵值存儲,所…

【第2章:神經網絡基礎與實現——2.1 前饋神經網絡的結構與工作原理】

老鐵們好!今天我們要來一場長達兩萬字的超詳細技術探險,我會像拆解樂高積木一樣把前饋神經網絡(Feedforward Neural Network)的每個零件擺在臺面上,用最接地氣的方式讓你徹底搞懂這個深度學習基石的工作原理。準備好了嗎?我們開始吧! 第一章:神經網絡的 “樂高積木” 1…

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存儲集群的訪問憑證、API Server 的地址和認證信息,允許用戶和 kubectl 等工具與 Kubernetes 集群進行交互。它通常包含多個集群的配置,支持通過上下文&am…

【環境安裝】重裝Docker-26.0.2版本

【機器背景說明】Linux-Centos7;已有低版本的Docker 【目標環境說明】 卸載已有Docker,用docker-26.0.2.tgz安裝包安裝 1.Docker包下載 下載地址:Index of linux/static/stable/x86_64/ 2.卸載已有的Docker 卸載之前首先停掉服務 sudo…

字節跳動后端二面

📍1. 數據庫的事務性質,InnoDB是如何實現的? 數據庫事務具有ACID特性,即原子性、一致性、隔離性和持久性。InnoDB通過以下機制實現這些特性: 🚀 實現細節: 原子性:通過undo log實…

SpringBoot中使用MyBatis-Plus詳細介紹

目錄 一、MyBatis-Plus的使用步驟 1.引入MybatisPlus的起步依賴 2.定義Mapper(也叫dao)層的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus時要做如下配置 5.條件構造器 Wrapper 一、MyBatis-Plus的使用步驟 1.引入MybatisPlus的起步依賴 M…

vue3讀取webrtc-stream 視頻流

一.首先下載webrtc-stream&#xff0c;方便自己本地搭建視頻流服務 https://download.csdn.net/download/cyw8998/90373521 解壓后&#xff0c;啟動命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代碼如下 <template><h1>video</h1><video id&…

vue3搭建實戰項目筆記二

vue3搭建實戰項目筆記二 2.1.git管理項目2.2.隱藏tabBar欄2.2.1 方案一&#xff1a;在路由元信息中設置一個參數是否顯示tabBar2.2.2 方案二&#xff1a;通過全局設置相對定位樣式 2.3.項目里封裝axios2.3.1 發送網絡請求的兩種做法2.3.2 封裝axios并發送網絡請求2.3.2.1 對axi…

USC 安防平臺之移動偵測

隨著第四次科技革命的開啟&#xff0c;AI技術獲取了突飛猛進的發展&#xff0c;視頻監控對應的視頻分析技術也獲取了巨大的發展。 還記得15年前采用人工提取特征做前景背景分離和提取&#xff0c;大部分依賴CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;開發難度…

Unity CommandBuffer繪制粒子系統網格顯示

CommandBuffer是 Unity 提供的一種在渲染流程中插入自定義渲染命令的機制。在渲染粒子系統時&#xff0c;常規的渲染流程可能無法滿足特定的渲染需求&#xff0c;而CommandBuffer允許開發者靈活地設置渲染參數、控制渲染順序以及執行自定義的繪制操作。通過它&#xff0c;可以精…

【天地圖】繪制、刪除點線面

使用天地圖繪制、刪除點線面 實現效果圖地圖組件完整代碼使用地圖組件完整代碼 實現效果圖 地圖組件完整代碼 // 天地圖組件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文詳細文檔.2(基于黑馬、ChatGPT、DeepSeek)

通過B站黑馬程序員的八股文教學&#xff0c;自己也二刷了&#xff0c;結合ChatGpt、deepSeek總結了一下,Java八股文詳細文檔.2&#xff08;Redis篇和消息中間件篇&#xff0c;還沒有寫完&#xff0c;這只是一部分&#xff09; Java八股文詳細文檔.1&#xff08;包含JVM篇、數據…

簡述 tsconfig.json 中 rootDir 和 include 之間的關系

tsconfig.json 中的 rootDir 和 include 之間有一定的關系&#xff0c;但它們的作用是不同的。理解它們的關系可以幫助你更好地配置 TypeScript 項目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 編譯器&#xff08;tsc&#xff09;的“根目錄”。它的主要作用是&#x…