做圖像識別有很多不同的途徑。谷歌最近發布了一個使用Tensorflow的物體識別API,讓計算機視覺在各方面都更進了一步。
這篇文章將帶你測試這個新的API,并且把它應用在youtube上(可以在GitHub上獲取用到的全部代碼,鏈接),結果如下:
這個API是用COCO(文本中的常見物體)數據集(http://mscoco.org/)訓練出來的。這是一個大約有30萬張圖像、90種最常見物體的數據集。物體的樣本包括:
這個API提供了5種不同的模型,使用者可以通過設置不同檢測邊界范圍來平衡運行速度和準確率。
上圖中的mAP(平均精度)是檢測邊界框的準確率和回召率的乘積。這是一個很好的混合測度,在評價模型對目標物體的敏銳度和它是否能很好的避免虛假目標中非常好用。mAP值越高,模型的準確度越高,但運行速度會相應下降。
(想要了解更多跟模型有關的知識:鏈接)
我決定使用最輕量級的模型(ssd_mobilenet)。主要步驟如下:
1. 下載一個打包模型(.pb-protobuf)并把它載入緩存
2. 使用內置的輔助代碼來載入標簽,類別,可視化工具等等。
3. 建立一個新的會話,在圖片上運行模型。
總體來說步驟非常簡單。而且這個API文檔還提供了一些能運行這些主要步驟的Jupyter文檔——鏈接
這個模型在實例圖像上表現得相當出色(如下圖):
接下來我打算在視頻上嘗試這個API。我使用了Python moviepy庫,主要步驟如下:
首先,使用VideoFileClip函數從視頻中提取圖像;
然后使用fl_image函數在視頻中提取圖像,并在上面應用物體識別API。fl_image是一個很有用的函數,可以提取圖像并把它替換為修改后的圖像。通過這個函數就可以實現在每個視頻上提取圖像并應用物體識別;
最后,把所有處理過的圖像片段合并成一個新視頻。
對于3-4秒的片段,這個程序需要花費大概1分鐘的時間來運行。但鑒于我們使用的是一個載入緩存的模型,而且沒有使用GPU,我們實現的效果還是很驚艷的!很難相信只用這么一點代碼,就可以以很高的準確率檢測并且在很多常見物體上畫出邊界框。
當然,我們還是能看到有一些表現有待提升。比如下面的例子。這個視頻里的鳥完全沒有被檢測出來。
再進一步,繼續探索
幾個進一步探索這個API的想法:
嘗試一些準確率更高但成本也更高的模型,看看他們有什么不同;
尋找加速這個API的方法,這樣它就可以被用于車載裝置上進行實時物體檢測;
谷歌也提供了一些技能來應用這些模型進行傳遞學習。例如,載入打包模型后添加一個帶有不同圖像類別的輸出層。
轉載36氪:http://36kr.com/p/5090812.html