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