基於深度學習的影象語義分析及其應用
本文 轉自“火光搖曳”部落格:語義分析的一些方法(三),主要論述了基於深度學習方法的影象語義分析,包括圖片分類、圖片搜尋、圖片標註(image2text、image2sentence),以及訓練深度神經網路的一些tricks,並介紹語義分析方法在騰訊廣點通上的實際應用。以下為全文內容:
3 圖片語義分析
3.1 圖片分類
圖片分類是一個最基本的圖片語義分析方法。
基於深度學習的圖片分類
傳統的圖片分類如下圖所示,首先需要先手工提取圖片特徵,譬如SIFT, GIST,再經由VQ coding和Spatial pooling,最後送入傳統的分類模型(例如SVM等)。
圖23. 傳統圖片分類流程圖
傳統方法裡,人工特徵提取是一個巨大的消耗性工作。而隨著深度學習的進展,不再需要人工特徵,通過深度學習自動提取特徵成為一種可能。接下來主要講述卷積神經網路在圖片分類上的使用。
下圖是一個經典的卷積神經網路模型圖,由Hinton和他的學生Alex Krizhevsky在ILSVRC(Imagenet Large Scale Visual Recognition Competition) 2012中提出。 整個網路結構包括五層卷積層和三層全連線層,網路的最前端是輸入圖片的原始畫素點,最後端是圖片的分類結果。一個完整的卷積層可能包括一層convolution,一層Rectified Linear Units,一層max-pooling,一層normalization。
圖24. 卷積神經網路結構圖
對於每一層網路,具體的網路引數配置如下圖所示。InputLayer就是輸入圖片層,每個輸入圖片都將被縮放成227*227大小,分rgb三個顏色維度輸入。Layer1~ Layer5是卷積層,以Layer1為例,卷積濾波器的大小是11*11,卷積步幅為4,本層共有96個卷積濾波器,本層的輸出則是96個55*55大小的圖片。在Layer1,卷積濾波後,還接有ReLUs操作和max-pooling操作。Layer6~ Layer8是全連線層,相當於在五層卷積層的基礎上再加上一個三層的全連線神經網路分類器。以Layer6為例,本層的神經元個數為4096個。Layer8的神經元個數為1000個,相當於訓練目標的1000個圖片類別。
圖25. CNN網路引數配置圖
基於Alex Krizhevsky提出的cnn模型,在13年末的時候,我們實現了用於廣點通的圖片分類和圖片檢索(可用於廣告圖片作弊判別),下面是一些示例圖。
圖片分類示例:
圖26. 圖片分類示例圖
圖片檢索示例:
圖27. 圖片檢索示例圖
圖片分類上的最新進展
在ILSVRC 2012中,Alex Krizhevsky基於GPU實現了上述介紹的,這個有60million引數的模型(簡稱為AlexNet),贏得了第一名。這個工作是開創性的,它引領了接下來ILSVRC的風潮。2013年,Clarifai通過cnn模型視覺化技術調整網路架構,贏得了ILSVRC。2014年,google也加入進來,它通過增加模型的層數(總共22層),讓深度更深[48],並且利用multi-scale data training,取得第一名。baidu最近通過更加“粗暴”的模型[44],在GooLeNet的基礎上,又提升了10%,top–5錯誤率降低至6%以下。具體結果如下圖所示。
圖28. ImageNet Classification Result
先簡單分析一下“GoogLeNet”[48,51]所採用的方法:
-
大大增加的網路的深度,並且去掉了最頂層的全連線層:因為全連線層(Fully Connected)幾乎佔據了CNN大概90%的引數,但是同時又可能帶來過擬合(overfitting)的效果。
-
模型比以前AlexNet的模型大大縮小,並且減輕了過擬合帶來的副作用。Alex模型引數是60M,GoogLeNet只有7M。
-
對於google的模型,目前已有開源的實現,有興趣請點選Caffe+GoogLeNet。
再分析一下“Deep Image by baidu[44]”所採用的方法:
-
Hardware/Software Co-design。baidu基於GPU,利用36個服務節點開發了一個專為深度學習運算的supercompter(名叫Minwa,敏媧)。這臺supercomputer具備TB級的host memory,超強的資料交換能力,使能訓練一個巨大的深層神經網路成為可能。而要訓練如此巨大的神經網路,除了硬體強大外,還需要高效的平行計算框架。通常而言,都要從data-parallelism和model-data parallelism兩方面考慮。
-
data-parallelism:訓練資料被分成N份。每輪迭代裡,各個GPU基於各自的訓練資料計算梯度,最後累加所有梯度資料並廣播到所有GPU。
-
model-data parallelism:考慮到卷積層引數較少但消耗計算量,而全連線層引數相對比較多。所以卷積層引數以local copy的形式被每個GPU所持有,而全連線層的引數則被劃分到各個CPU。每輪迭代裡,卷積層計算可以由各個GPU獨立完成,全連線層計算需要由所有GPU配合完成,具體方法請參考[46]。
-
-
Data augmentation。訓練一個如此巨大的神經網路(100billion個引數),如果沒有充分的訓練資料,模型將很大可能陷入過擬合,所以需要採用眾多data augmentation方法增加訓練資料,例如:剪裁,不同大小,調亮度,飽和度,對比度,偏色等(color casting, vignetting, lens distortion, rotation, flipping, cropping)。舉個例子,一個彩色圖片,增減某個顏色通道的intensity值,就可以生成多張圖片,但這些圖片和原圖的類目是一致的,相當於增加了訓練資料。
-
Multi-scale training:訓練不同輸入圖片尺度下(例如512*512,256*256)的多個模型,最後ensemble多個模型的輸出結果。
3.2 Image2text,Image2sentence
上面講述的圖片分類對圖片語義的理解比較粗粒度,那麼我們會想,是否可以將圖片直接轉化為一堆詞語或者一段文字來描述。轉化到文字後,我們積累相對深的文字處理技術就都可以被利用起來。
Image2text
首先介紹一種樸素的基於卷積神經網路的image to text方法。
-
首先它利用深度卷積神經網路和深度自動編碼器提取圖片的多層特徵,並據此提取圖片的visual word,建立倒排索引,產生一種有效而準確的圖片搜尋方法。
-
再充分利用大量的網際網路資源,預先對大量種子圖片做語義分析,然後利用相似圖片搜尋,根據相似種子圖片的語義推匯出新圖片的語義。
其中種子圖片,就是可以覆蓋所有待研究圖片的行業,但較容易分析語義的圖片集。這種方法產生了更加豐富而細粒度的語義表徵結果。雖說簡單,但效果仍然不錯,方法的關鍵在於種子圖片。利用比較好的種子圖片(例如paipai資料),簡單的方法也可以work得不錯。下圖是該方法的效果圖。
圖29. 圖片語義tag標註示例圖
上面的baseline方法,在訓練資料優質且充分的情況下,可以取得很不錯的圖片tag提取效果,而且應用也非常廣泛。但上面的方法非常依賴於訓練資料,且不善於發現訓練資料之外的世界。
另一個直觀的想法,是否可以通過word embedding建立image與text的聯絡[26]。例如,可以先利用CNN訓練一個圖片分類器。每個類目label可以通過word2vec對映到一個embedding表示。對於一個新圖片,先進行分類,然後對top-n類目label所對應的embedding按照權重(這裡指這個類目所屬的概率)相加,得到這個圖片的embedding描述,然後再在word embedding空間裡尋找與圖片embedding最相關的words。
Image detection
接下來再介紹下image detection。下圖是一個image detection的示例,相比於圖片分類,提取到資訊將更加豐富。
圖30. 圖片detection示例
目前最先進的detection方法應該是Region-based CNN(簡稱R-CNN)[75],是由Jeff Donahue和Ross Girshick提出的。R-CNN的具體想法是,將detection分為尋找object和識別object兩個過程。在第一步尋找object,可以利用很多region detection演算法,譬如selective search[76],CPMC,objectness等,利用很多底層特徵,譬如影象中的色塊,影象中的邊界資訊。第二步識別object,就可以利用“CNN+SVM”來做分類識別。
圖31. Image detection系統框圖
-
給定一張圖片,利用selective search方法[76]來產生2000個候選視窗。
-
然後利用CNN進行對每一個候選視窗提取特徵(取全連線層的倒數第一層),特徵長度為4096。
-
最後用SVM分類器對這些特徵進行分類(每一個目標類別一個SVM分類器),SVM的分類器的引數個數為:4096*N,其中N為目標的類別個數,所以比較容易擴充套件目標類別數。
這裡有R-CNN的實現,請點選rcnn code
Image2sentence
那能否通過深度學習方法,直接根據image產生sentence呢?我們先看一組實際效果,如下圖所示(copy from 文獻[43])。
圖32. image2sentence示例圖
關於這個方向,最近一年取得了比較大的突破,工業界(Baidu[77],Google[43],Microsoft[80,81]等)和學術界(Stanford[35],Borkeley[79],UML[19],Toronto[78]等)都發表了一系列論文。
簡單歸納一下,對這個問題,主要有兩種解決思路:
-
Pipeline方法。這個思路相對直觀一點,先學習到image中visual object對應的word(如上一節image detection所述),再加上language model,就可以生成sentence。這種方法各個模組可以獨立除錯,相對來說,更靈活一點。如下圖所示,這是microsoft的一個工作[81],它分為三步:(1)利用上一節提到的思路detect words;(2)基於language model(RNN or LSTM)產生句子;(3)利用相關性模型對句子打分排序。
圖33. “pipeline” image captioning
-
End-to-end方法,即通過一個模型直接將image轉換到sentence。google基於CNN+RNN開發了一個Image Caption Generator[43]。這個工作主要受到了基於RNN的機器翻譯[27][42]的啟發。在機器翻譯中,“encoder” RNN讀取源語言的句子,將其變換到一個固定長度的向量表示,然後“decoder” RNN將向量表示作為隱層初始值,產生目標語言的句子。那麼一個直觀的想法是,能否複用上面的框架,考慮到CNN在圖片特徵提取方面的成功應用,將encoder RNN替換成CNN,先利用CNN將圖片轉換到一個向量表示,再利用RNN將其轉換到sentence。可以通過圖片分類提前訓練好CNN模型,將CNN最後一個隱藏層作為encoder RNN的輸入,從而產生句子描述。如下圖所示。
圖34. “CNN+LSTM” Image Caption Generator
Li-Feifei團隊在文獻[35]也提到一種image2sentence方法,如下圖所示。與google的做法類似,圖片的CNN特徵作為RNN的輸入。
圖35. “CNN+RNN”生成圖片描述
此方法有開源實現,有興趣請參考:neuraltalk
3.3 訓練深度神經網路的tricks
考慮到圖片語義分析的方法大部分都是基於深度學習的,Hinton的學生Ilya Sutskever寫了一篇深度學習的綜述文章[47],其中提到了一些訓練深度神經網路的tricks,整理如下:
-
保證訓練資料的質量
-
使訓練資料各維度數值的均值為0,方差為一個比較小的值
-
訓練時使用minbatch,但不要設得過大,在合理有效的情況下,越小越好。
-
梯度歸一化,將梯度值除於minbatch size。
-
設定一個正常的learning rate,validation無提升後,則將原learning rate除於5繼續
-
模型引數隨機初始化。如果是深層神經網路,不要設定過小的random weights。
-
如果是在訓練RNN or LSTM,對梯度設定一個限值,不能超過15 or 5。
-
注意檢查梯度計算的正確性
-
如果是訓練LSTM,initialize the biases of the forget gates of the LSTMs to large values
-
Data augmentation很實用。
-
Dropout在訓練時很有效,不過記得測試時關掉Dropout。
-
Ensembling。訓練多個神經網路,最後計算它們的預測值的平均值。
4 總結
4.1 語義分析方法在實際業務中的使用
前面講述了很多語義分析方法,接下來我們看看如何利用這些方法幫忙我們的實際業務,這裡舉一個例子,使用者廣告的語義匹配。
在廣點通系統中,使用者與廣告的關聯是通過定向條件來匹配的,譬如某些廣告定向到“北京+男性”,那麼當“北京+男性”的使用者來到時,所有符合定向的廣告就將被檢索出,再按照“ecpm*quality”排序,將得分最高的展示給使用者。但是憑藉一些人口屬性,使用者與廣告之間的匹配並不精確,做不到“廣告就是想使用者所想”,所以使用者和廣告的語義分析就將派上用場了,可以從這樣兩方面來說明:
-
特徵提取。基於上面介紹的方法,提取使用者和廣告的語義特徵。
-
使用者語義特徵。可以從使用者的搜尋,購物,點選,閱讀記錄中發現使用者興趣。考慮到最終的使用者描述都是文字,那麼文字topic分析,文字分類,文字keyword提取,文字核心term提取都可以運用起來,分析出使用者的語義屬性,還可以利用矩陣分解和文字分類找到相似使用者群。
-
廣告語義特徵。在廣點通裡,廣告可以從兩個維度來描述,一方面是文字,包括廣告title和landing page,另一方面是廣告展示圖片。利用文字和圖片的語義分析方法,我們可以提取出廣告的topic,類目,keyword,tag描述。
-
-
語義匹配。提取到相應的語義特徵之後,怎麼用於改善匹配呢?
-
使用者-廣告的語義檢索。基於keyword、類目以及topic,對廣告建立相應的倒排索引,直接用於廣告檢索。
-
使用者-廣告的語義特徵。分別提取使用者和廣告的語義特徵,用於計算使用者-廣告的relevance,pctr,pcvr,達到精確排序。
-
4.2 Future
對於文字和圖片的語義分析,可以看到:最近幾年,在某些任務上,基於深度學習的方法逐漸超過了傳統方法的效果。但目前為止,對於深度學習的發掘才剛剛開始,比較驚豔的神經網路方法,也只有有限幾種,譬如CNN,RNN,RBM等。
上文只是介紹了我們在工作中實踐過的幾個小點,還有更多方法需要我們去挖掘:
-
Video。Learn about 3D structure from motion。如文獻[19]所示,研究將視訊也轉換到自然語言。
-
Deep Learning + Structured Prediction,用於syntactic representation。
4.3 總結
上文主要從文字、圖片這兩方面講述了語義分析的一些方法,並結合個人經驗做了一點總結。
原本想寫得更全面一些,但寫的時候才發現上面所述的只是滄海一粟,後面還有更多語義分析的內容之後再更新。另外為避免看到大篇理論就頭痛,文中儘可能不出現複雜的公式和理論推導。如果有興趣,可以進一步閱讀參考文獻,獲得更深的理解。謝謝。
5 參考文獻
-
Term-weighting approaches in automatic text retrieval,Gerard Salton et.
-
New term weighting formulas for the vector space method in information retrieval
-
A neural probabilistic language model 2003
-
Deep Learning in NLP-詞向量和語言模型
-
Recurrent neural network based language models
-
Statistical Language Models based on Neural Networks,mikolov博士論文
-
Rnnlm library
-
A survey of named entity recognition and classification
-
Deep learning for Chinese word segmentation and POS tagging
-
Max-margin tensor neural network for chinese word segmentation
-
Learning distributed representations of concepts
-
Care and Feeding of Topic Models: Problems, Diagnostics, and Improvements
-
LightLda
-
word2vec
-
Efficient Estimation of Word Representations in Vector Space
-
Deep Learning實戰之word2vec
-
word2vec中的數學原理詳解 出處2
-
斯坦福課程-語言模型
-
Translating Videos to Natural Language Using Deep Recurrent Neural Networks
-
Distributed Representations of Sentences and Documents
-
Convolutional Neural Networks卷積神經網路
-
A New, Deep-Learning Take on Image Recognition
-
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
-
A Deep Learning Tutorial: From Perceptrons to Deep Networks
-
Deep Learning for Computer Vision
-
Zero-shot leanring by convex combination of semantic embeddings
-
Sequence to sequence learning with neural network
-
Exploting similarities among language for machine translation
-
Grammar as Foreign Language Oriol Vinyals, Lukasz Kaiser, Terry Koo, Slav Petrov, Ilya Sutskever, Geoffrey Hinton, arXiv 2014
-
Deep Semantic Embedding
-
張家俊. DNN Applications in NLP
-
Deep learning for natural language processing and machine translation
-
Distributed Representations for Semantic Matching
-
distributed_representation_nlp
-
Deep Visual-Semantic Alignments for Generating Image Descriptions
-
Convolutional Neural Networks for Sentence Classification
-
Senna
-
ImageNet Large Scale Visual Recognition Challenge
-
Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks
-
Gradient-Based Learning Applied to Document Recognition
-
Effetive use of word order for text categorization with convolutional neural network,Rie Johnson
-
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
-
Show and Tell: A Neural Image Caption Generator
-
Deep Image: Scaling up Image Recognition
-
Large-Scale High-Precision Topic Modeling on Twitter
-
A. Krizhevsky. One weird trick for parallelizing convolutional neural networks. arXiv:1404.5997, 2014
-
A Brief Overview of Deep Learning
-
Going deeper with convolutions. Christian Szegedy. Google Inc. 閱讀筆記
-
Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modeling
-
Semi-Supervised Learning Tutorial
-
http://www.zhihu.com/question/24904450
-
LONG SHORT-TERM MEMORY BASED RECURRENT NEURAL NETWORK ARCHITECTURES FOR LARGE VOCABULARY SPEECH RECOGNITION
-
LSTM Neural Networks for Language Modeling
-
LONG SHORT-TERM MEMORY
-
Bengio, Y., Simard, P., Frasconi, P., “Learning long-term dependencies with gradient descent is difficult” IEEE Transactions on Neural Networks 5 (1994), pp. 157–166
-
AliasLDA
-
Gibbs sampling for the uninitiated
-
Learning classifiers from only positive and unlabeled data
-
TF-ICF: A New Term Weighting Scheme for Clustering Dynamic Data Streams
-
LDA數學八卦
-
Chinese Word Segmentation and Named Entity Recognition Based on Conditional Random Fields Models
-
Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
-
Chinese Segmentation and New Word Detection using Conditional Random Fields
-
Gregor Heinrich. Parameter estimation for text analysis
-
Peacock:大規模主題模型及其在騰訊業務中的應用
-
L. Yao, D. Mimno, and A. McCallum. Efficient methods for topic model inference on streaming document collections. In KDD, 2009.
-
David Newman. Distributed Algorithms for Topic Models
-
Xuemin. LDA工程實踐之演算法篇
-
Brian Lott. Survey of Keyword Extraction Techniques
-
Yi Wang, Xuemin Zhao, Zhenlong Sun, Hao Yan, Lifeng Wang, Zhihui Jin, Liubin Wang, Yang Gao, Ching Law, and Jia Zeng. Peacock: Learning Long-Tail Topic Features for Industrial Applications. TIST’2015.
-
劉知遠. 基於文件主題結構的關鍵詞抽取方法研究
-
Hinton. Reducing the Dimensionality of Data with Neural Networks
-
Samaneh Moghaddam. On the design of LDA models for aspect-based opinion mining;
-
The FLDA model for aspect-based opinion mining: addressing the cold start problem
-
Ross Girshick et. Rich feature hierarchies for accurate object detection and semantic segmentation
-
J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.
-
Baidu/UCLA: Explain Images with Multimodal Recurrent Neural Networks
-
Toronto: Unifying Visual-Semantic Embeddings with Multimodal Neural Language Models
-
Berkeley: Long-term Recurrent Convolutional Networks for Visual Recognition and Description
-
Xinlei Chen et. Learning a Recurrent Visual Representation for Image Caption Generation
-
Hao Fang et. From Captions to Visual Concepts and Back
-
Modeling Documents with a Deep Boltzmann Machine
-
A Deep Dive into Recurrent Neural Nets
-
Xiang zhang et. Text Understanding from Scratch