
本文為 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:利用深度強化學習玩吃豆人遊戲
深度強化學習新趨勢:谷歌如何把好奇心引入強化學習智能體