物體識別是現(xiàn)在機(jī)器學(xué)習(xí)領(lǐng)域的熱點之一。相當(dāng)長的時間里,計算機(jī)已經(jīng)能相當(dāng)可靠地識別人臉或者貓。但在更大的圖片中去識別一個指定的物體還是人工智能領(lǐng)域的“圣杯”。人類的大腦能非常好地識別物體。我們可以毫無困難地把從物體上反射出來的具有不同頻率的光子轉(zhuǎn)化為關(guān)于我們周邊世界的極度豐富的信息集。而機(jī)器學(xué)習(xí)還依然在為了完成這個簡單的任務(wù)而奮斗。不過近幾年,機(jī)器學(xué)習(xí)已經(jīng)取得了相當(dāng)不錯的進(jìn)步。
深度學(xué)習(xí)算法和一個超大的公共訓(xùn)練數(shù)據(jù)集(稱為ImageNet)共同促成了物體識別領(lǐng)域的一系列令人映像深刻的進(jìn)步。TensorFlow是一個廣為人知的框架,它讓在多種架構(gòu)上實現(xiàn)深度學(xué)習(xí)算法變得很容易。TensorFlow善于利用GPU的運算能力,從而使得它非常適合運行深度學(xué)習(xí)的算法。
造我自己的機(jī)器人
我想造一個能自己識別物體的機(jī)器人。多年的開發(fā)程序和測試的經(jīng)驗已經(jīng)把我塑造成了害怕和實際物體打交道?,F(xiàn)實世界里,測試一個有缺陷的物理設(shè)備可能會把房子燒了,或是燒毀引擎,并讓你等很多天才能拿到替換的零件。

圖1 能識別物體的機(jī)器人的架構(gòu)。圖片由Lukas Biewald授權(quán)使用
而新的第三代樹莓派板是完成這個項目的最佳選擇。在亞馬孫上它僅售36美元,還帶有無線功能、一個四核的CPU、1G的內(nèi)存。加上一個報價6美元的就可以載入一個基于Debian的Raspberian操作系統(tǒng)。圖1顯示了所有這些部件是怎么組合在一起的。而圖2則是這塊板子的照片。

圖2 運行在我車庫里的樹莓派板。圖片由Lukas Biewald授權(quán)使用
我很喜歡SainSmart制造的只用11美元的。這個底盤可以控制不同輪子采用不同的轉(zhuǎn)速,運轉(zhuǎn)的令人驚訝得好(見圖3)。

圖3 機(jī)器人底盤。圖片由Lukas Biewald授權(quán)使用
唯一讓我在有更便宜的選擇的時候還多花錢的東西就是這個Adafruit制造的電機(jī)擴(kuò)展板(見圖4)。這個直流電機(jī)的運行電壓超過了樹莓派板子可以提供的電壓。所以單獨的控制器就成為必須。而Adafruit電機(jī)擴(kuò)展板極其方便好用。使用這個電機(jī)擴(kuò)展板是會要做一點焊接,但這個設(shè)備是極度的容錯。而且Adafruit還提供了一個很好的庫和教程來讓你通過i2C總線來控制電機(jī)。我一開始用的是一個便宜的電機(jī)控制器,但不小心把我的樹莓派板給燒掉了,所以我決定買一個質(zhì)量好一點的替代品。

圖4 已經(jīng)安裝了攝像頭和電機(jī)的樹莓派板。圖片由Lukas Biewald授權(quán)使用
一個正好能裝在樹莓派板上,它能提供實時的視頻來作為物體識別的輸入。攝像頭的選擇就太多了。我選了一個帶紅外功能的攝像頭,這樣就可以讓我的機(jī)器人有夜視功能了。
樹莓派板需要大概2安培的電源,但3安培電流對于我要裝的揚聲器是一個更保險的選擇。iPhone的充電寶是這一任務(wù)的理想選擇。更低安培的充電寶一般不能產(chǎn)生足夠的電流,從而會導(dǎo)致一些問題。不過這個Lumsing power bank的充電寶卻很不錯,而且只用18美元。
這幾個可以讓機(jī)器人免于撞車。11美元就能買到5個。
我還買了我能找到的最便宜的USB揚聲器,然后用了一堆的膠帶、熱膠和泡沫板來把所有的東西粘到一起。作為廢物利用,我還把一些電子設(shè)備的包裝材料給剪了,并在上面畫了一些東西來給這個機(jī)器人增加一點點人性。這里我要說的是,我實際上造了兩個機(jī)器人(見圖5),因為我實驗了不同的底盤、攝像頭、聲吶、軟件和其他的東西。結(jié)果加在一起發(fā)現(xiàn)足夠造兩個版本的機(jī)器人了。

圖5 我的四驅(qū)動機(jī)器人(右邊的)和他的兩驅(qū)動機(jī)器人妹妹。圖片由Lukas Biewald授權(quán)使用
把機(jī)器人組裝好了之后,就該讓它變聰明了。網(wǎng)上有海量的教程教你如何使用樹莓派。如果你曾用過Linux,樹莓派的一切對你而言就都很熟悉了。
如果你想把攝像頭的視頻記錄下來,RPi Cam Web接口能很好地勝任。它非常容易配置。默認(rèn)是把來自攝像頭的最新的畫面存放在RAM磁盤的/dev/shm/mjpeg/cam.jpg里。
如果你想把攝像頭的數(shù)據(jù)發(fā)布到網(wǎng)頁里(這對調(diào)試是非常有幫助的),你可以用Nginx,一個極度快的開源網(wǎng)頁服務(wù)器。我把Nginx配成對攝像頭畫面的網(wǎng)頁請求直接指向上面文件的地址,而其他的請求都發(fā)送到網(wǎng)頁服務(wù)器。
http {
server {
location / {
proxy_pass http://unix:/home/pi/drive.sock;
}
location /cam.jpg {
root /dev/shm/mjpeg;
}
}
}
我隨后開發(fā)了一個簡單的Python 網(wǎng)站服務(wù)器,可以接收鍵盤的指令來轉(zhuǎn)動機(jī)器人的輪子??刂奇I盤本來是一個的遙控汽車的。
另外要說的是,利用聲吶和駕駛系統(tǒng)來控制機(jī)器人的行駛路線從而讓它能避開物體是一件非常有趣的事。
給我的機(jī)器人開發(fā)程序
終于,是時候安裝TensorFlow了。安裝TensorFlow有很多種方法,但TensorFlow提供了makefile命令,從而能針對你特定的操作系統(tǒng)進(jìn)行編譯。這一步驟花費了我?guī)讉€小時,并需要一些依賴包,但總體來說還算順利。
TensorFlow自帶了一個預(yù)建好的模型,叫inception。它可以完成物體識別。這是如何使用運行它的教程。
對一張來自攝像頭的畫面運行tensorflow/contrib/pi_examples/label_image/gen/bin/label_image命令,TensorFlow會返回5個可能物體的猜測。這個模型對于相當(dāng)多的東西的識別都非常好,但是它也很明顯地缺少一個確定的“先驗條件”,即它不知道將會看到的東西是什么。它的訓(xùn)練數(shù)據(jù)里也明顯漏掉了不少物品。比如,它能很好的識別我的筆記本,即使是從很特殊的角度看。但當(dāng)讓它看我的裝一堆電線的籃子的時候,它就一直認(rèn)為這是個烤面包機(jī)。當(dāng)攝像頭被遮擋,拍到的圖像為黑屏或是比較模糊的時候,它就會認(rèn)為是在看一些線蟲。很明顯線蟲是它的訓(xùn)練數(shù)據(jù)里的東西。

圖6 接著鍵盤和顯示器的機(jī)器人。圖片由Lukas Biewald授權(quán)使用
最后我采用Flite開源軟件包來作為機(jī)器人的輸出部分,把文字變成語音。這樣機(jī)器人就可以說出它看到的物體了(見圖6)。
測試我的機(jī)器人
看,這里就是我自制的兩個可以使用深度學(xué)習(xí)進(jìn)行物體識別的機(jī)器人。
最后的一些想法
2003到2005期間,我在斯坦福機(jī)器人實驗室工作。那時候的機(jī)器人一般會要花費幾十萬美元,而且物體識別的能力也比不上我現(xiàn)在的這個機(jī)器人。我很希望能把這個軟件裝入我的無人機(jī)里,這樣就再也不用我自己找鑰匙了。
這里我也希望感謝在這個項目里幫助過我的人。我的鄰居克里斯·馮·達(dá)克、施魯?shù)佟じ实貛Ыo了我的機(jī)器人的友好的人性。我的朋友艾德·麥克洛大大提升了硬件部分的設(shè)計,并教會我使用熱膠和泡沫板。工作在谷歌的皮蒂·沃頓幫助我在樹莓派上很好地編譯了TensorFlow,并提供了非常棒的客戶支持。
Lukas Biewald
Lukas Biewald是CrowdFlower的創(chuàng)始人兼CEO。CrowdFlower始于2009年,是一個數(shù)據(jù)增強(qiáng)的平臺,可以幫助企業(yè)獲得隨需的人力來收集、產(chǎn)生訓(xùn)練數(shù)據(jù),以及參與人-機(jī)器學(xué)習(xí)循環(huán)的工作。 在從斯坦福大學(xué)拿到數(shù)學(xué)學(xué)士和計算機(jī)科學(xué)碩士學(xué)位后,Lukas領(lǐng)導(dǎo)了雅虎日本的搜索相關(guān)團(tuán)隊。隨后他去了Powerset,作為一個資深數(shù)據(jù)科學(xué)家進(jìn)行工作。2008年P(guān)owerset被微軟收購。Lukas還被《公司》雜志評選為30位30歲以下的著名人士。 Lukas還是一位專家級的圍棋選手。

