生成模型:基於單張圖片找到物體位置

本文爲 AI 研習社編譯的技術博客,原標題 :

Generative models: finding the object position by a single image

作者 | Ian Tsybulkin

翻譯 | 小Y的彩筆

校對 | 鄧普斯•傑弗       審覈 | 醬番梨      整理 | 菠蘿妹

原文鏈接:

https://medium.com/@iantsybulkin/generative-models-finding-the-object-position-by-a-single-image-cc36b160a428


機器人技術和自動駕駛的興起驅使人們需要更好的機器視覺。有許多不同的方法可以幫助機器人來給自己定位,導航,防止碰撞等等。這其中的一些方法要求非常複雜的 AI 算法,巨大的訓練數據集,和昂貴的硬件。在這篇文章中,我們將展示一個相對簡單和強大的算法,既不要求初步訓練也不需要強大的硬件來運行。你只需要知道機器人預計要檢測出哪種物體。這個算法僅花費很小的計算能力就可以以很棒的準確率檢測到目標的位置。

 工業上的應用

更具體的,讓我們假設有一個傳送帶在傳送不同尺寸的盒子,一個機器人需要將他們堆到不同大小的托盤上。爲了實現這個,機器人需要檢測盒子的類型和它的位置。盒子的位置可以用(x, y)座標和盒子一條邊和x軸形成的夾角來定義,比如,盒子沿傳送帶排列。機器人只有固定在傳送帶上的相機。

 相機的啓動

我們將會生成許多虛擬的圖像,對應傳送帶上盒子的不同位置。由於這個原因,我們需要知道相機的座標,和它相對於參考框架的角度,這些參考框架是與傳送帶相關的,我們稱之爲全局參考框架。 

知道相機得座標系和它的角度,我們可以找到相機的外部矩陣,而相機的外部矩陣是由它的特徵確定的,比如焦距和像素數。外部矩陣可以輕易的通過一個標準的相機校準流程得到。

所以將任意在全局參考框架中的 3D 向量轉化爲一個圖像像素的矩陣,可以用內部矩陣和外部矩陣的乘積得到,我們把它記作 M。

那麼,我們找到了一個由相機矩陣定義的 2D 或 3D 的轉換,它允許我們生成不同狀態下盒子的虛擬圖像。

 生成圖像

如果可以將任意的 3D 向量轉換成圖像,如果有盒子的 {x, y} 位置,角度 α 和維度 {W x D x H},我們就能生成圖像來表示在相機眼中盒子是什麼樣的。也就是說對於任何狀態的盒子 {x, y, α, t},我們可以構建一個虛擬圖像來表示在相機眼中類型 t,位置在 {x, y},角度爲 α 的盒子的樣子。

現在讓我們定義一個函數,來展示虛擬圖像和盒子的“真實圖像”有多相似。如果虛擬圖片與真實圖片非常相似,我們可能會希望我們的虛擬盒子 {x, y, α,t} 距離盒子 {x, y, α} 的位置是非常近的,並且盒子有由類型 t 確定的維度。

 損失函數

一個好的測量兩個二進制圖像之間相似的的方法是將不匹配的像素加起來。

例如,在這幅圖中,有大概 20,000 個像素不匹配,用黃色標出。

 生成的算法

現在讓我們看一下生成的過程,它幫我們最小化損失函數,並且將狀態終止在生成圖片與從相機得到的盒子的真實圖片最相似的地方。

我們將從隨機選擇 {x, y, α, t} 的狀態開始。用相機轉換矩陣,我們可以得到一個圖像,並計算損失函數 L。這是馬爾科夫鏈的初始狀態,它將隨機轉換到下一狀態,相應的對應到下面的步驟:

在每個狀態我們隨機生成一個接近當前狀態的候選狀態 (candidate state),這個候選狀態可以通過下面的式子得到:

其中 δx, δy, δα 是零均值的正態分佈的隨機變量。

當 t 是一個類別變量時,我們可能對應下面的規則改變它:

 變換可能性

現在讓我們假設我們在狀態 Si,候選狀態是 Si+1。

如果在候選狀態的損失函數小於或等於當前狀態的值,我們就認爲到候選狀態的概率爲1,否則,轉換的概率有上面的公式來定義。很容易注意到候選狀態越糟糕(損失值越高),轉換到該狀態的概率越小。

然而,比如說,如果在候選狀態的損失值只比當前狀態的值高2%,轉換到候選狀態的概率會是 37%,這說明轉換是很有可能發生的。

這個轉換到有更高損失狀態的隨機性將幫助我們避開局部最小值,最終到達一個損失函數的全局最小值。

 仿真

讓我們來設置盒子的“真實位置”的隱藏值,並生成一個“真實相機鏡頭”。

現在,我們運行一千次迭代,也就是說我們將會嘗試改變初始隨即狀態一千次。從下面的圖你可以看到損失函數在這個過程中是如何變化的:

如你所見,我們的生成過程有大約 300 個狀態,這意味着只有三分之一的狀態可以轉換到候選狀態。除此之外,你可能會看到算法自動地終止並重啓了6次,因爲轉到的狀態很難再有提升。

你可能看到只用了25步就找到了全局最小值。之後的三次都是得到的局部最小值。很有趣的是所有的鏡頭都可以並行地運行。

 準確率

最令人印象深刻的部分是我們得到的準確率,如你所見,盒子位置的誤差小於 1mm 並且角度誤差僅僅爲 0.2 度!

 總結

有時反向解決問題是一個很好的方法。如例子中所示,如果找到什麼樣的輸入可以產生給定的輸出是很容易的且計算成本很低,那麼你可以構建一個生成的過程,來猜測並改進初始猜測轉換到下一個隨即狀態。

你可以在這裏找到完整的代碼:

https://github.com/tsybulkin/box-detect/blob/master/box-detect.ipynb

想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開或點擊【生成模型:基於單張圖片找到物體位置】:

https://ai.yanxishe.com/page/TextTranslation/1452

AI研習社每日更新精彩內容,觀看更多精彩內容:

盤點圖像分類的竅門

深度學習目標檢測算法綜述

生成模型:基於單張圖片找到物體位置

AutoML :無人駕駛機器學習模型設計自動化

等你來譯:

如何在神經NLP處理中引用語義結構 

你睡着了嗎?不如起來給你的睡眠分個類吧! 

高級DQNs:利用深度強化學習玩吃豆人遊戲

深度強化學習新趨勢:谷歌如何把好奇心引入強化學習智能體 

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