騰訊TEG視覺演算法團隊負責人肖萬鵬:看圖說話—從演算法角度理解影象內容
10月28日FMI 2018人工智慧與大資料高峰論壇深圳場圓滿落幕,騰訊TEG視覺演算法團隊負責人肖萬鵬以從演算法角度理解影象內容為主題進行了精彩的分享。
騰訊TEG 視覺演算法團隊負責人肖萬鵬
以下是肖萬鵬演講內容,飛馬網根據現場速記進行了不改變原意的編輯(有刪減):
肖萬鵬:非常感謝主持人,我今天分享的內容是《看圖說話——從演算法角度理解影象內容》,分三塊:一是影象內容的理解角度。二是影象描述演算法的發展和優化。三是看後續的發展方向是什麼。
01
第一部分:影象內容的理解角度
從人的角度理解這個圖,你們覺得怎麼描述或者它的內容應該怎麼總結出來?
從演算法的角度,最簡單的是基於分類演算法,比如給出圖片的定義,是機場的場景,機場場景的含義,取決於你做分類演算法的時候標籤怎麼設定的。基於實體檢測的演算法,它會告訴你影象裡面有男人、女人、飛機,這兩個演算法是現在比較常見的,都是基於標籤的。這種基於分類、多標籤的方式,它的弊端是隻能識別出實體是什麼或者場景是什麼,但是他把實體之間的資訊,人與人的行為這些資訊損失了。但是在我們現在的場景,其實對於圖片語義理解的需求越來越旺盛,所以因為這些需求,基於影象描述的演算法就應運而生。如果用這種演算法看,對圖片的描述是停在機場的飛機前有一個男人和女人,相對前面兩個基於標籤的演算法多了很多實體關係和行為資訊。這三種方法我們再抽象出來,分類演算法是“是什麼“,實體檢測是“有什麼”,影象描述演算法就是“幹什麼”。從語義級別是由低到高的過程。接下來我們的內容會基於第三塊內容,影象描述演算法,從框架和演算法的技術點來看怎麼做的,有什麼優勢和缺點。
02
第二部分:影象描述演算法的發展以及優化
我們先把整個影象描述演算法的架構抽象一下,整體看來就是這塊內容:一是Encoder、二是Decorder、三是損失函式。前面兩個最早是機器翻譯場景,前兩者主要的應用場景是把兩種維度的資訊關聯起來,比如機器翻譯的場景是把語言資訊去通過Encoder編碼到隱藏空間,再用Decoder把編碼好的特徵解碼到另外的語言,完成機器翻譯的動作。影象描述也是一樣的,首先通過影象的畫素資訊得到一個特徵,再通過Decoder將特徵翻譯成人理解的話。前面的Encoder、Decoder就是一個圖片輸入進來得到一句話。真正訓練的時候不可缺少的還有評估,只有客觀的評價這個描述好壞,演算法才能對整個模型進行優化。
接下來講和這三塊相關的演算法和技術點。Encoder大家常用的是CNN、R-CNN。Decoder大部分都是RNN,LSTM,以及Attention的trick。損失函式有最早的Cross Entropy,N-gram,以及專門針對影象描述演算法做SPICE。除了每塊的技術點和演算法,整個訓練的流程也會有些技巧在裡面,這裡主要介紹最早的MLE,以及後面引入了強化學習和對抗生成網路。
看一個演算法首先要知道演算法的好壞,首先從損失函式開始,展開所有內容之前先看影象描述演算法到底要解決的問題是什麼。從訓練的維度看,如果是訓練樣本,其實就是一張圖,讓不同的人或者同一個人對這張圖進行描述,描述的越豐富越好,這是訓練角度收集樣本的要求。在推理的過程中,其實就是輸入一張圖,根據這張圖過這個模型之後產生相應的描述,描述的越準確,跟圖的相關性越高越好,這是簡單的樣本展示。
怎麼評估它的好壞?
從主觀角度判斷分為四個層級:
一是描述的沒有任何錯誤,這是最好的。
二是描述會有些錯誤,比如把床識別成了沙發。
三是描述了很多錯誤,但是多少和圖有關。
四是完全描述錯誤。
可以發現,從人的角度來看很直觀,但是它的缺點是沒有辦法通過計算得到,所以沒有辦法把這套標準用到機器學習裡面。我們要做的是尋找一個客觀能夠量化、能夠求導的評估方式。
第一種方式是Cross Entropy,它很簡單,因為我們知道把一張圖片最後生成一句話,是一個詞一個詞生成,每個詞和ground truth裡面對應的詞有相關的概率,Cross Entropy就是把每個詞評估出來的概率求和,目標就是讓這個概率越大越好,這是最簡單的Cross Entropy。這種方法有一個弊端,很容易爆炸,後面會介紹。
第二種方式是基於N-gram,這個演算法會關注連續出現詞的頻率,它的頻率越高就認為得分越高。但是這種基於N-gram的方式有一個弊端,它永遠優先選擇頻率比較高的連續詞來做輸出,會導致最後通過演算法生成的語句的多樣性很差。
第三種方式是SPICE的方式,不再以連續出現詞頻的方式做統計,而是從語法結構或者語義結構上做理解。
有了評估方式之後,我們怎麼來去提取影象特徵,這是最重要的。
提取圖片特徵現在常用的是基於CNN或者R-CNN,這是視覺範圍比較通用的。基於CNN網路提取的特徵,它的特點是全域性資訊更好。R-CNN關注的是圖片裡面的實體是什麼,這種R-CNN的好處是提取的資訊更加有針對性。兩者會有一個互補的關係。
有了這種提取特徵的演算法之後,下一步是怎麼把特徵解析為一句話?
現在常用的都是RNN的方式,這個結構是最早的CNN+RNN,。這個結構一直被模仿,而且持續被超越,這就是做開創性演算法的魅力和重要性,任何相關演算法都會提到它。之後,做了進一步的優化,首先它用Google Net替換了AlexNet,把後面結構複雜的換成lstm,整個結構變得簡單,只要在開始的時候把影象傳給LSTM做初始就可以,後面只要傳入預測的詞或者訓練的詞就可以。基本上現在所有相關的演算法大致都是這種結構。大家基本上都會在這上面做優化。其中比較重要的優化是Attention,它的作用可以理解為把特徵做加權,現在開始更多的應用到影象場景,包括special,基於空間,還有一些基於特徵通道的,這對整體優化的效果很明顯。
接下里講講MLE的流程。
當一個影象的特徵和上次預測的詞傳入進來,會得到下一個詞的概率是什麼。這個詞做比較之後得到一個損失,累加起來作為訓練的損失。訓練的過程中都沒有問題,它每次會傳入正確的東西,但是預測的時候會發現有問題,預測的某個詞不一定準確,預測的某個詞錯了之後,把錯誤的詞傳遞到下面的狀態,導致後面都不可控。這就是它的問題。為了解決這個問題,我們引入強化學習,強化學習非常適合在這種需要做延遲獎勵的場景,強化學習更關注整句話翻譯完了之後整體的效果怎麼樣。通過引入強化學習,一定程度上解決了MLE的問題,但是多樣性的問題並沒有解決。這塊我們引入了GANs,通過GANs把生成語句變得富有多樣性。
我們現在整體的架構,其實比較簡單,一個圖片過來先通過CNN,CNN提出之後,通過特徵加權,加權之後,為了不去損失原圖資訊,把原圖特徵加進來,原圖特徵和加權特徵都有,給到RNN,同時預測詞再做Embedding,一起輸出給RNN,RNN會輸出下一個詞的Attention,受前一個詞的影響,下一個詞會發生變化,同時預測詞是什麼。預測的詞產生完之後會分兩個判斷,一個是基於語言模型的判別,另外一個是傳給自己通過一個神經網路做的判別器。
CNN會稍微比RNN複雜一點,過來一張圖通過CNN的東西得到向量,最後得到特徵,接下來把生成的詞或者語句做Embedding之後,跟影象的特徵拼接在一起,最後得到的這個特徵圖其實同時包含影象資訊和語句資訊。然後用不同大小的卷積對這個特徵圖做卷積操作,然後再對卷積後的特徵圖的每行資料做max pooling,然後把二維矩陣降到一維,這時候再把不同的向量拼到一起,不同網路大小的卷積之後的結果向量拼到一起,就會得到一個特徵,特徵後面會接MLP,後面做分類,預測這個語句是人寫的還是機器生成的。這是基於CNN的判別器。基於RNN的簡單很多,把影象用CNN提取特徵傳給LSTM,後面每個時刻都傳入對應的詞,不管是Ground truth還是機器生成的,後面也是接MLP,看到底人寫的語句還是機器生成的語句,這是基於RNN的判別器。
做優化之後,效果是怎麼樣的?
在不同的模型上做驗證,發現基於CNN的判別器和RNN的判別器融合後的結果最好,融合的方式很簡單。影象過來之後去預測詞,同時過基於CNN的判別器產生的模型和基於RNN判別器產生的模型,這兩個模型預測詞的概率哪個更高,我們就認為這個詞是下一個狀態的輸入,通過這個方式很好的把這種基於RNN的判別器和CNN判別器的優點融合起來。我們在所有模型上,結果都比原始好很多。基於CNN的判別器和RNN的判別器各有優劣。GANs的優化會讓語句通順很多,而且描述更加豐富。
03
第三部分:What’s next?
第一張特朗普的圖按照上面的思路可以做到如下描述:一個男人和一個女人站在飛機前。但這遠遠不夠。我們希望描述出來的是這樣:特朗普和穿著黑色套裝的中年女人,在一架停在地面上的飛機前行走,飛機上寫著“TRUMP”,遠處還有幾個人。
特朗普通過人臉識別可以識別到。穿著黑色套裝,這是做人體識別或者人體屬性或者著裝識別很容易得到。中年女人,通過體態或者年齡識別。行走,通過分類或者可以做基於骨架的識別,把人的關鍵點識別出來,對骨架做進一步分類,很容易知道他的行為是什麼。TRUMP,這種印刷體很容易識別。遠處還有幾個人,很容易根據人體檢測的大小判斷出來它是在遠處。這些資訊每個點都可以通過已有的成熟技術得到,其實我們現在要做的是怎麼把這些零散的資訊去跟已有的演算法結合起來。怎麼做到像人一樣描述圖片是我們現在努力的方向。
影象和視訊內容的理解與挖掘
最早網際網路出現的時候,傳播的東西大部分是基於文字,包括新聞之類的。現在隨著智慧機的普及,視訊和影象越來越多,佔比越來越大。但是基於資料探勘的場景,依然沒有跟上步伐,大部分還是基於文字或者基於使用者資訊的挖掘。影象裡面的內容價值很大.
影象分類、實體檢測、描述演算法,視訊行為分析、人臉識別、OCR、視訊實體跟蹤、音轉文、視訊也包括音訊資訊,這些都是可能得到影象資訊的演算法,這些東西每個單點的演算法都已經非常成熟。由這些單點演算法我們得到的是人物資訊、描述資訊等等,這些資訊其實還沒有完全被利用起來,相當於這是一座金礦,但是缺少挖掘的工具。比如關係鏈,如果這裡拍合照,每個人人臉都可以檢測出來,而且每個人臉都有唯一的ID,那同時出現在一張圖片的人不知道什麼關係,但是有聯絡,比如今天大家都來這個論壇,這肯定有聯絡,通過人臉建立聯絡,再擴散出來,我們完全有可能得到基於人臉ID的資訊。
圖片傳播的熱度和視訊傳播的熱度也是一種熱度,這種熱度現在是越來越成為一個趨勢,比如說颱風,你怎麼把影象視訊的內容關聯起來,挖掘現在的熱點是什麼。前面我們說想做成這樣,也是一樣,把不同資訊融入在這個演算法裡面來,得到更加詳盡、更加知識層面的東西,而不只是資訊。以上兩方面是我們現在正在努力的方向。
今天的分享就到這裡。謝謝大家!
關注公眾賬號
【飛馬會】
▼
往期福利
關注飛馬會公眾號,回覆對應關鍵詞打包下載學習資料;回覆“入群”,加入飛馬網AI、大資料、專案經理學習群,和優秀的人一起成長!
回覆 數字“18”526份行業報告+白皮書:AI人工智慧、機器人、智慧出行、智慧家居、物聯網、VR/AR、 區塊鏈等(附下載)