0
本文作者: AI研習(xí)社-譯站 | 2019-02-13 11:26 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Generative models: finding the object position by a single image
作者 | Ian Tsybulkin
翻譯 | 小Y的彩筆
校對(duì) | 鄧普斯?杰弗 審核 | 醬番梨 整理 | 菠蘿妹
原文鏈接:
https://medium.com/@iantsybulkin/generative-models-finding-the-object-position-by-a-single-image-cc36b160a428
機(jī)器人技術(shù)和自動(dòng)駕駛的興起驅(qū)使人們需要更好的機(jī)器視覺。有許多不同的方法可以幫助機(jī)器人來(lái)給自己定位,導(dǎo)航,防止碰撞等等。這其中的一些方法要求非常復(fù)雜的 AI 算法,巨大的訓(xùn)練數(shù)據(jù)集,和昂貴的硬件。在這篇文章中,我們將展示一個(gè)相對(duì)簡(jiǎn)單和強(qiáng)大的算法,既不要求初步訓(xùn)練也不需要強(qiáng)大的硬件來(lái)運(yùn)行。你只需要知道機(jī)器人預(yù)計(jì)要檢測(cè)出哪種物體。這個(gè)算法僅花費(fèi)很小的計(jì)算能力就可以以很棒的準(zhǔn)確率檢測(cè)到目標(biāo)的位置。
更具體的,讓我們假設(shè)有一個(gè)傳送帶在傳送不同尺寸的盒子,一個(gè)機(jī)器人需要將他們堆到不同大小的托盤上。為了實(shí)現(xiàn)這個(gè),機(jī)器人需要檢測(cè)盒子的類型和它的位置。盒子的位置可以用(x, y)坐標(biāo)和盒子一條邊和x軸形成的夾角來(lái)定義,比如,盒子沿傳送帶排列。機(jī)器人只有固定在傳送帶上的相機(jī)。
我們將會(huì)生成許多虛擬的圖像,對(duì)應(yīng)傳送帶上盒子的不同位置。由于這個(gè)原因,我們需要知道相機(jī)的坐標(biāo),和它相對(duì)于參考框架的角度,這些參考框架是與傳送帶相關(guān)的,我們稱之為全局參考框架。
相機(jī)的啟動(dòng)
知道相機(jī)得坐標(biāo)系和它的角度,我們可以找到相機(jī)的外部矩陣,而相機(jī)的外部矩陣是由它的特征確定的,比如焦距和像素?cái)?shù)。外部矩陣可以輕易的通過(guò)一個(gè)標(biāo)準(zhǔn)的相機(jī)校準(zhǔn)流程得到。
所以將任意在全局參考框架中的 3D 向量轉(zhuǎn)化為一個(gè)圖像像素的矩陣,可以用內(nèi)部矩陣和外部矩陣的乘積得到,我們把它記作 M。
那么,我們找到了一個(gè)由相機(jī)矩陣定義的 2D 或 3D 的轉(zhuǎn)換,它允許我們生成不同狀態(tài)下盒子的虛擬圖像。
如果可以將任意的 3D 向量轉(zhuǎn)換成圖像,如果有盒子的 {x, y} 位置,角度 α 和維度 {W x D x H},我們就能生成圖像來(lái)表示在相機(jī)眼中盒子是什么樣的。也就是說(shuō)對(duì)于任何狀態(tài)的盒子 {x, y, α, t},我們可以構(gòu)建一個(gè)虛擬圖像來(lái)表示在相機(jī)眼中類型 t,位置在 {x, y},角度為 α 的盒子的樣子。
現(xiàn)在讓我們定義一個(gè)函數(shù),來(lái)展示虛擬圖像和盒子的“真實(shí)圖像”有多相似。如果虛擬圖片與真實(shí)圖片非常相似,我們可能會(huì)希望我們的虛擬盒子 {x, y, α,t} 距離盒子 {x, y, α} 的位置是非常近的,并且盒子有由類型 t 確定的維度。
一個(gè)好的測(cè)量?jī)蓚€(gè)二進(jìn)制圖像之間相似的的方法是將不匹配的像素加起來(lái)。
例如,在這幅圖中,有大概 20,000 個(gè)像素不匹配,用黃色標(biāo)出。
現(xiàn)在讓我們看一下生成的過(guò)程,它幫我們最小化損失函數(shù),并且將狀態(tài)終止在生成圖片與從相機(jī)得到的盒子的真實(shí)圖片最相似的地方。
我們將從隨機(jī)選擇 {x, y, α, t} 的狀態(tài)開始。用相機(jī)轉(zhuǎn)換矩陣,我們可以得到一個(gè)圖像,并計(jì)算損失函數(shù) L。這是馬爾科夫鏈的初始狀態(tài),它將隨機(jī)轉(zhuǎn)換到下一狀態(tài),相應(yīng)的對(duì)應(yīng)到下面的步驟:
在每個(gè)狀態(tài)我們隨機(jī)生成一個(gè)接近當(dāng)前狀態(tài)的候選狀態(tài) (candidate state),這個(gè)候選狀態(tài)可以通過(guò)下面的式子得到:
其中 δx, δy, δα 是零均值的正態(tài)分布的隨機(jī)變量。
當(dāng) t 是一個(gè)類別變量時(shí),我們可能對(duì)應(yīng)下面的規(guī)則改變它:
現(xiàn)在讓我們假設(shè)我們?cè)跔顟B(tài) Si,候選狀態(tài)是 Si+1。
如果在候選狀態(tài)的損失函數(shù)小于或等于當(dāng)前狀態(tài)的值,我們就認(rèn)為到候選狀態(tài)的概率為1,否則,轉(zhuǎn)換的概率有上面的公式來(lái)定義。很容易注意到候選狀態(tài)越糟糕(損失值越高),轉(zhuǎn)換到該狀態(tài)的概率越小。
然而,比如說(shuō),如果在候選狀態(tài)的損失值只比當(dāng)前狀態(tài)的值高2%,轉(zhuǎn)換到候選狀態(tài)的概率會(huì)是 37%,這說(shuō)明轉(zhuǎn)換是很有可能發(fā)生的。
這個(gè)轉(zhuǎn)換到有更高損失狀態(tài)的隨機(jī)性將幫助我們避開局部最小值,最終到達(dá)一個(gè)損失函數(shù)的全局最小值。
讓我們來(lái)設(shè)置盒子的“真實(shí)位置”的隱藏值,并生成一個(gè)“真實(shí)相機(jī)鏡頭”。
現(xiàn)在,我們運(yùn)行一千次迭代,也就是說(shuō)我們將會(huì)嘗試改變初始隨即狀態(tài)一千次。從下面的圖你可以看到損失函數(shù)在這個(gè)過(guò)程中是如何變化的:
如你所見,我們的生成過(guò)程有大約 300 個(gè)狀態(tài),這意味著只有三分之一的狀態(tài)可以轉(zhuǎn)換到候選狀態(tài)。除此之外,你可能會(huì)看到算法自動(dòng)地終止并重啟了6次,因?yàn)檗D(zhuǎn)到的狀態(tài)很難再有提升。
你可能看到只用了25步就找到了全局最小值。之后的三次都是得到的局部最小值。很有趣的是所有的鏡頭都可以并行地運(yùn)行。
最令人印象深刻的部分是我們得到的準(zhǔn)確率,如你所見,盒子位置的誤差小于 1mm 并且角度誤差僅僅為 0.2 度!
有時(shí)反向解決問題是一個(gè)很好的方法。如例子中所示,如果找到什么樣的輸入可以產(chǎn)生給定的輸出是很容易的且計(jì)算成本很低,那么你可以構(gòu)建一個(gè)生成的過(guò)程,來(lái)猜測(cè)并改進(jìn)初始猜測(cè)轉(zhuǎn)換到下一個(gè)隨即狀態(tài)。
你可以在這里找到完整的代碼:
https://github.com/tsybulkin/box-detect/blob/master/box-detect.ipynb
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
長(zhǎng)按鏈接點(diǎn)擊打開或點(diǎn)擊底部【生成模型:基于單張圖片找到物體位置】:
https://ai.yanxishe.com/page/TextTranslation/1452
AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來(lái)譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。