如何用100美元和TensorFlow來造一個能“看”東西的機器人
編者注:想了解如何使用TensorFlow來執行你的機器學習工作流,請關注谷歌的伊萊·比克斯比和艾米·昂魯在2016年11月1到2日於舊金山舉辦的培訓課程。
物體識別是現在機器學習領域的熱點之一。相當長的時間裡,計算機已經能相當可靠地識別人臉或者貓。但在更大的圖片中去識別一個指定的物體還是人工智慧領域的“聖盃”。人類的大腦能非常好地識別物體。我們可以毫無困難地把從物體上反射出來的具有不同頻率的光子轉化為關於我們周邊世界的極度豐富的資訊集。而機器學習還依然在為了完成這個簡單的任務而奮鬥。不過近幾年,機器學習已經取得了相當不錯的進步。
深度學習演算法和一個超大的公共訓練資料集(稱為ImageNet)共同促成了物體識別領域的一系列令人映像深刻的進步。TensorFlow是一個廣為人知的框架,它讓在多種架構上實現深度學習演算法變得很容易。TensorFlow善於利用GPU的運算能力,從而使得它非常適合執行深度學習的演算法。
造我自己的機器人
我想造一個能自己識別物體的機器人。多年的開發程式和測試的經驗已經把我塑造成了害怕和實際物體打交道。現實世界裡,測試一個有缺陷的物理裝置可能會把房子燒了,或是燒燬引擎,並讓你等很多天才能拿到替換的零件。
圖1 能識別物體的機器人的架構。圖片由Lukas Biewald授權使用
而新的第三代樹莓派板是完成這個專案的最佳選擇。在亞馬孫上它僅售36美元,還帶有無線功能、一個四核的CPU、1G的記憶體。加上一個報價6美元的迷你SD卡就可以載入一個基於Debian的Raspberian作業系統。圖1顯示了所有這些部件是怎麼組合在一起的。而圖2則是這塊板子的照片。
圖2 執行在我車庫裡的樹莓派板。圖片由Lukas Biewald授權使用
我很喜歡SainSmart製造的只用11美元的機器人底盤。這個底盤可以控制不同輪子採用不同的轉速,運轉的令人驚訝得好(見圖3)。
圖3 機器人底盤。圖片由Lukas Biewald授權使用
唯一讓我在有更便宜的選擇的時候還多花錢的東西就是這個Adafruit製造的電機擴充套件板(見圖4)。這個直流電機的執行電壓超過了樹莓派板子可以提供的電壓。所以單獨的控制器就成為必須。而Adafruit電機擴充套件板極其方便好用。使用這個電機擴充套件板是會要做一點焊接,但這個裝置是極度的容錯。而且Adafruit還提供了一個很好的庫和教程來讓你通過i2C匯流排來控制電機。我一開始用的是一個便宜的電機控制器,但不小心把我的樹莓派板給燒掉了,所以我決定買一個質量好一點的替代品。
圖4 已經安裝了攝像頭和電機的樹莓派板。圖片由Lukas Biewald授權使用
一個標價15美元的攝像頭正好能裝在樹莓派板上,它能提供實時的視訊來作為物體識別的輸入。攝像頭的選擇就太多了。我選了一個帶紅外功能的攝像頭,這樣就可以讓我的機器人有夜視功能了。
樹莓派板需要大概2安培的電源,但3安培電流對於我要裝的揚聲器是一個更保險的選擇。iPhone的充電寶是這一任務的理想選擇。更低安培的充電寶一般不能產生足夠的電流,從而會導致一些問題。不過這個Lumsing power bank的充電寶卻很不錯,而且只用18美元。
這幾個HC-SR04型的聲吶感測器可以讓機器人免於撞車。11美元就能買到5個。
我還買了我能找到的最便宜的USB揚聲器,然後用了一堆的膠帶、熱膠和泡沫板來把所有的東西粘到一起。作為廢物利用,我還把一些電子裝置的包裝材料給剪了,並在上面畫了一些東西來給這個機器人增加一點點人性。這裡我要說的是,我實際上造了兩個機器人(見圖5),因為我實驗了不同的底盤、攝像頭、聲吶、軟體和其他的東西。結果加在一起發現足夠造兩個版本的機器人了。
圖5 我的四驅動機器人(右邊的)和他的兩驅動機器人妹妹。圖片由Lukas Biewald授權使用
把機器人組裝好了之後,就該讓它變聰明瞭。網上有海量的教程教你如何使用樹莓派。如果你曾用過Linux,樹莓派的一切對你而言就都很熟悉了。
如果你想把攝像頭的視訊記錄下來,RPi Cam Web介面能很好地勝任。它非常容易配置。預設是把來自攝像頭的最新的畫面存放在RAM磁碟的/dev/shm/mjpeg/cam.jpg裡。
如果你想把攝像頭的資料釋出到網頁裡(這對除錯是非常有幫助的),你可以用Nginx,一個極度快的開源網頁伺服器。我把Nginx配成對攝像頭畫面的網頁請求直接指向上面檔案的地址,而其他的請求都傳送到網頁伺服器。
http {
server {
location / {
proxy_pass http://unix:/home/pi/drive.sock;
}
location /cam.jpg {
root /dev/shm/mjpeg;
}
}
}
我隨後開發了一個簡單的Python 網站伺服器,可以接收鍵盤的指令來轉動機器人的輪子。控制鍵盤本來是一個的遙控汽車的。
另外要說的是,利用聲吶和駕駛系統來控制機器人的行駛路線從而讓它能避開物體是一件非常有趣的事。
給我的機器人開發程式
終於,是時候安裝TensorFlow了。安裝TensorFlow有很多種方法,但TensorFlow提供了makefile命令,從而能針對你特定的作業系統進行編譯。這一步驟花費了我幾個小時,並需要一些依賴包,但總體來說還算順利。
TensorFlow自帶了一個預建好的模型,叫inception。它可以完成物體識別。這是如何使用執行它的教程。
對一張來自攝像頭的畫面執行tensorflow/contrib/pi_examples/label_image/gen/bin/label_image命令,TensorFlow會返回5個可能物體的猜測。這個模型對於相當多的東西的識別都非常好,但是它也很明顯地缺少一個確定的“先驗條件”,即它不知道將會看到的東西是什麼。它的訓練資料裡也明顯漏掉了不少物品。比如,它能很好的識別我的筆記本,即使是從很特殊的角度看。但當讓它看我的裝一堆電線的籃子的時候,它就一直認為這是個烤麵包機。當攝像頭被遮擋,拍到的影象為黑屏或是比較模糊的時候,它就會認為是在看一些線蟲。很明顯線蟲是它的訓練資料裡的東西。
圖6 接著鍵盤和顯示器的機器人。圖片由Lukas Biewald授權使用
最後我採用Flite開源軟體包來作為機器人的輸出部分,把文字變成語音。這樣機器人就可以說出它看到的物體了(見圖6)。
測試我的機器人
看,這裡就是我自制的兩個可以使用深度學習進行物體識別的機器人。
最後的一些想法
2003到2005期間,我在史丹佛機器人實驗室工作。那時候的機器人一般會要花費幾十萬美元,而且物體識別的能力也比不上我現在的這個機器人。我很希望能把這個軟體裝入我的無人機裡,這樣就再也不用我自己找鑰匙了。
這裡我也希望感謝在這個專案裡幫助過我的人。我的鄰居克里斯·馮·達克、施魯蒂·甘地帶給了我的機器人的友好的人性。我的朋友艾德·麥克洛大大提升了硬體部分的設計,並教會我使用熱膠和泡沫板。工作在谷歌的皮蒂·沃頓幫助我在樹莓派上很好地編譯了TensorFlow,並提供了非常棒的客戶支援。
Lukas Biewald
Lukas Biewald是CrowdFlower的創始人兼CEO。CrowdFlower始於2009年,是一個資料增強的平臺,可以幫助企業獲得隨需的人力來收集、產生訓練資料,以及參與人-機器學習迴圈的工作。 在從史丹佛大學拿到數學學士和電腦科學碩士學位後,Lukas領導了雅虎日本的搜尋相關團隊。隨後他去了Powerset,作為一個資深資料科學家進行工作。2008年Powerset被微軟收購。Lukas還被《公司》雜誌評選為30位30歲以下的著名人士。 Lukas還是一位專家級的圍棋選手。
相關文章
- Tensorflow搞一個聊天機器人機器人
- 如何用Java寫一個聊天機器人Java機器人
- 如何用 TensorFlow 訓練聊天機器人(附github)機器人Github
- 近來學習的一點東西
- [譯] 如何用 Python 寫一個 Discord 機器人Python機器人
- 如何用 Python 和 Flask 建立部署一個 Facebook Messenger 機器人PythonFlaskMessenger機器人
- 未來學東西的思路
- 從零開始造一個“智障”聊天機器人機器人
- 每個學習C++BUILDER的人必須看的東西C++UI
- js中的arguments是一個好東西JS
- 年末分享些東西,看的中就拿去
- 這個烹飪機器人可以做100多道菜:機器大廚來了機器人
- 從智慧客服說起,看小i機器人如何用AI賦能產業升級改造|M-TECHAI助力中國智造產業論壇機器人AI產業
- rlwrap 是一個好東西 for linuxLinux
- 每個學習C++BUILDER的人必須看的東西。 (轉)C++UI
- 程式碼是寫給人看的,不是寫個機器看的
- 原來 GitHub 不僅能學程式碼,還有這些東西Github
- 全球最厲害的機器人都在北京!快來看!機器人
- dbca裡面的 示例方案 和 HR schema是一個東西嗎
- 來聊聊,這個Java到底是什麼東西?Java
- 一個運維人員能同時管理100+伺服器嗎?運維伺服器
- 乾貨 | 如何用 Python 打造一個聊天機器人?【附程式碼】Python機器人
- TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一個東西嗎?TCPHTTPKeep-Alive
- 谷歌能用機器人給美國製造業創造新未來嗎?谷歌機器人
- 機械手「成精」了,能從手臂上溜走,拿完夠不到的東西,還能爬回來自動合體
- 具身智慧賦能機器人,「AI+人形機器人」論壇在浦東新區成功舉行機器人AI
- 電銷機器人能帶來什麼好處?機器人
- 為機器人打造萬能底座:機器人安卓的產業機遇機器人安卓產業
- 一圖簡看智慧聊天機器人的設計機器人
- 近期做的一些東西
- 【智慧製造】機器人與智慧製造機器人
- 框架是個什麼東西?框架
- 整了個JSON分頁的東西JSON
- 東莞飯店驚現機器人服務生:一個頂倆又“好管”機器人
- **微控制器的RAM 和ROM 儲存了哪些東西?**
- 我用tensorflow實現的“一個神經聊天模型”:一個基於深度學習的聊天機器人模型深度學習機器人
- ROS 和Web 帶來更智慧的機器人ROSWeb機器人
- Linux能夠提供消費者想要的東西嗎?Linux