前言
上次我們一起 使用 TensorFlow 來做簡單的手寫數字辨識,雖然我們可以自己使用這些 API 兜自己的模組,但我們也可以利用現成的工具,節省開發時間。
安裝
安裝步驟可以參考官方的 README文件。我自己是在 Ubuntu 14.04 + Indigo 測試過,也 OK,只要記得將一些安裝 kinetic package 的地方更新成 indigo 就好。例如第二步的 camera dependencies:
sudo apt-get install ros-indigo-usb-cam ros-indigo-openni2-launch
真實環境測試
安裝成功之後,立刻就來試試看真實環境下的測試結果,執行 launch 檔之後,應該就可以看到跳出如下視窗,顯示出辨識的物體。
我們都知道,要做 object recognition 有很多種不同的 neural network 可以用,這個 package 預設是使用 Single Shot Detector,SSD 主要的優點在於速度,根據他們在 PASCAL VOC、MS COCO、ILSVRC 等 Dataset 測試的結果,SSD 的準確度跟 region proposals 的方法差不多,但速度快很多。詳細介紹可以參考這篇文章。
換一個不同的 model
接下來讓我們來嘗試換換,其實只要編輯 detect_ros.py 裡面的 MODEL_NAME 就好。首先,我們先到 tensorflow 的 detection model zoo,我下載了 ssd_inception_v2_coco 的 tar.gz 檔。把裡面的 model 解壓縮到 tensorflow_object_detector/data/models 後,再去改 detect_ros.py 裡面的 MODEL_NAME:
# What model to use
#MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
MODEL_NAME = 'ssd_inception_v2_coco_2017_11_17'
因為筆者在換 model 的時候,已經離拍上圖好一小陣子,所以上圖的香蕉已經被筆者吃掉,場景也變了。
那如果你是想要更新辨識物體的種類,那就更新 detect_ros.py 裡面的 LABEL_NAME,這就不贅述了。
總結
今天我們玩了一個 OSRF 的 Object Detector,如果有想要做自己的機器人應用,需要用到物體辨識功能,不妨就直接拿這個 package 來用用,就算你覺得現有的 model 都不太好用,想自己重新 train 一個或 finetune 一個來符合自己的使用場景,也還是可以利用這個 package,抽換掉 model 就好,可以省下不少時間。
延伸閱讀
關於作者:
@pojenlai 演算法工程師,對機器人、電腦視覺和人工智慧有少許研究,正在學習用心體會事物的本質跟不斷進入學生心態改進。