這些表情包,都見過吧?
平時鬥圖、發朋友圈、發微網誌、知乎抖機靈最離不開它們了。
不過,表情包上的那些網絡金句都是.jpg或者.gif的圖檔格式,無法被搜尋、無法被計算機監測,字太小不清晰的時候還會讓視力不好的同學看不清楚。
總之,圖檔版的文字有種種不友善的地方。
是以Facebook幹脆出了一個能識别表情包的AI,名叫Rosetta,看看你們發的消息裡配的表情包都是些啥。

Facebook官方部落格給到的例子是一個西班牙語的企鵝表情包。
雖然圖上的西班牙文看不太懂,不過可以腦補一下,表情包上本來隻有白色加粗大字,Rosetta用藍色框選出表情包上的文字,然後識别出來,文字上面那一行是它的識别結果。
當然,不止表情包,還有各類其他圖檔。如果發小黃圖或者其他什麼不友善的圖檔被Rosetta發現,它就會啟動删帖大法。
Rosetta模型
Rosetta如何識别圖檔上的文字呢?
不是普通的OCR,而是用Faster R-CNN識别出有字的區域後,再進行文字識别。
具體步驟如下:
● 訓練一個可以将圖像表示為卷積特征映射的CNN;
● 訓練一個區域提議網絡(region proposal network,RPN),将圖檔分為寬5高7共35個小特征圖作為輸入,RPN找到一些看起來有文字的目标區輸出;
● 從每個區域特征圖中提取資訊,用分類器識别,之後按提案置信度排序,選擇最靠譜的提案。
上面這張圖則表明了兩步模型結構:
第一步是用Faster R-CNN檢測字元;
第二步是用有CTC(Connectionist Temporal Classification)損失的ResNet-18完全卷積模型來進行文字識别。
上面兩個模型獨立訓練。
而在訓練中,Facebook用上了Caffe2支援的、最近開源的Detectron framework。
另外他們還用上了LSTM來提高模型準确性。
△ 最終的文本識别模型結構
有特殊的訓練技巧
考慮到低學習率會讓模型欠拟合,而高學習率會導緻模型發散,Facebook調整了訓練程式:
一是先隻用比較短的單詞來訓練,最多隻有五六個字母,之後從少到多,用更長的單詞來訓練,逐漸增強單詞的長度;
二是從低學習率開始,保證模型不會發散,之後再逐漸提高學習率,保證模型穩定。確定穩定之後再降低學習率。
“我們不要手動搞資料集!”
由于Rosetta并不是一個純英文識别AI,它需要學的語言種類太多,單單訓練英文識别都要大量資料,何況Facebook的全球使用者來自各國,會使用各種不同的語言了。
于是,Facebook除了用人類手工标注的資料之外,還找了一些機器生成的資料集,也就是,找一個AI資料民工,強行給一些無辜的圖檔加字。
這個AI資料民工來自牛津大學VGG實驗室2016年發表在CVPR上的論文《 Synthetic Data for Text Localisation in Natural Images》,可以給正常的自然景物照片上,添加一些蛇精病一樣的文字。
這樣,批量生産的帶字圖檔就自帶了标注,一個AI生産資料,喂給另一個AI來訓練,自給自足。如果以後的模型都用AI生産的資料來喂養的話,估計幾十年後不少模型的賣點就變成了:
“人類标注,手動調參,純天然原生态,古早味模型。”
不僅能認表情包
除了識别表情包和删帖,Rosetta還可以用來實作照片搜尋、識别菜單、輔助視力障礙者認知圖檔等功能,而且這些功能并不僅僅适用于英文,連阿拉伯語都可以識别。
隻不過,阿拉伯語是從右往左寫的,是以Facebook在處理阿拉伯語的時候多加了一道從左往右翻過來的步驟。
原文釋出時間為:2018-09-12
本文作者:關注前沿科技
本文來自雲栖社群合作夥伴“
量子位”,了解相關資訊可以關注“
”。