前言:來自百度的深度學習工程師,圍繞計算機視覺領域的八大任務,包括:影像分類、目標檢測、影像語義分割、場景文字識別、影像生成、人體關鍵點檢測、視訊分類、度量學習等,進行了較為詳細的綜述並形成此文。
這篇綜述中,介紹了這些任務的基本情況,以及目前的技術進展、主要的模型和效能對比等。而且還逐一附上了GitHub傳送門,用於更進一步的學習與安裝實踐指南。其中不少教程還是用中文寫成,非常友好。這篇綜述全程乾貨,推薦收藏閱讀。
上篇
計算機視覺(Computer Vision)是研究如何使機器“看”的科學,更進一步的說,是使用攝像機機和電腦代替人眼對目標進行識別、跟蹤和測量等的機器視覺,並通過電腦處理成為更適合人眼觀察或傳送給儀器檢測的影像。
形象地說,就是給計算機安裝上眼睛(攝像機)和大腦(演算法),讓計算機像人一樣去看、去感知環境。計算機視覺技術作為人工智慧的重要核心技術之一,已廣泛應用於安防、金融、硬體、營銷、駕駛、醫療等領域。本文上篇中,我們將介紹基於PaddlePaddle的四種計算機視覺技術及其相關的深度學習模型。
一、影像分類
影像分類是根據影像的語義資訊對不同類別影像進行區分,是計算機視覺中重要的基礎問題,是物體檢測、影像分割、物體跟蹤、行為分析、人臉識別等其他高層視覺任務的基礎。
影像分類在許多領域都有著廣泛的應用。如:安防領域的人臉識別和智慧視訊分析等,交通領域的交通場景識別,網際網路領域基於內容的影像檢索和相簿自動歸類,醫學領域的影像識別等。
得益於深度學習的推動,影像分類的準確率大幅度提升。在經典的資料集ImageNet上,訓練影像分類任務常用的模型,包括AlexNet、VGG、GoogLeNet、ResNet、Inception-v4、MobileNet、MobileNetV2、DPN(Dual Path Network)、SE-ResNeXt、ShuffleNet等。
△ AlexNet
△ VGG
△ GoogLeNet
△ ResNet
△ Inception-v4
△ MobileNet
△ SE-ResNeXt
△ ShuffleNet
模型的結構和複雜程度都不一樣,最終得到的準確率也有所區別。下面這個表格中,列出了在ImageNet 2012資料集上,不同模型的top-1/top-5驗證準確率。
△ 影像分類系列模型評估結果
在我們的GitHub頁面上,提供上述與訓練模型的下載。以及詳細介紹瞭如何使用PaddlePaddle Fluid進行影像分類任務。包括安裝、資料準備、模型訓練、評估等等全部過程。還有將Caffe模型轉換為PaddlePaddle Fluid模型配置和引數檔案的工具。
上述頁面的傳送門在此:
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/image_classification
二、目標檢測
目標檢測任務的目標是給定一張影像或是一個視訊幀,讓計算機找出其中所有目標的位置,並給出每個目標的具體類別。
對於人類來說,目標檢測是一個非常簡單的任務。然而,計算機能夠“看到”的是影像被編碼之後的數字,很難解影像或是視訊幀中出現了人或是物體這樣的高層語義概念,也就更加難以定位目標出現在影像中哪個區域。
與此同時,由於目標會出現在影像或是視訊幀中的任何位置,目標的形態千變萬化,影像或是視訊幀的背景千差萬別,諸多因素都使得目標檢測對計算機來說是一個具有挑戰性的問題。
在目標檢測任務中,我們主要介紹如何基於PASCAL VOC、MS COCO資料訓練通用物體檢測模型,包括SSD模型、PyramidBox模型、R-CNN模型。
• SSD模型,Single Shot MultiBox Detector,是一種單階段的目標檢測器。與兩階段的檢測方法不同,單階段目標檢測並不進行區域推薦,而是直接從特徵圖迴歸出目標的邊界框和分類概率。SSD 運用了這種單階段檢測的思想,並且對其進行改進:在不同尺度的特徵圖上檢測對應尺度的目標,是目標檢測領域較新且效果較好的檢測演算法之一,具有檢測速度快且檢測精度高的特點。
△ SSD目標檢測模型結構
△ SSD目標檢測視覺化
△ 目標檢測SSD模型評估結果
在GitHub上,我們更詳細的介紹瞭如何下載、訓練、使用這一模型。
傳送門在此:
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/object_detection
• PyramidBox模型,百度自主研發的人臉檢測模型,是一種語境輔助的單次人臉檢測新方法,能夠解決在不受控制的環境中檢測小的、模糊的及部分遮擋的人臉時的問題,模型於18年3月份在WIDER Face資料集上取得第一名。
△ Pyramidbox 人臉檢測模型
△ Pyramidbox 預測視覺化
△ PyramidBox模型評估結果
如果想進一步瞭解這個模型,傳送門在此(而且是全中文指導):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/face_detection
• R-CNN系列模型,區域卷積神經網路(R-CNN)系列模型是典型的兩階段目標檢測器,相較於傳統提取區域的方法,R-CNN中RPN網路通過共享卷積層引數大幅提高提取區域的效率,並提出高質量的候選區域。Faster R-CNN和Mask R-CNN是R-CNN系列的典型模型。
Faster R-CNN 區域生成網路(RPN)+Fast R-CNN的實現,將候選區域生成、特徵提取、分類、位置精修統一到一個深度網路框架,大大提高執行速度。
Mask R-CNN在原有Faster R-CNN模型基礎上新增分割分支,得到掩碼結果,實現了掩碼和類別預測關係的解藕,是經典的例項分割模型。
△ Faster R-CNN 結構
△ Faster R-CNN 預測視覺化
△ Mask R-CNN結構
△ Mask R-CNN 預測視覺化
△ Faster R-CNN評估結果
同樣,如果你想進一步學習R-CNN安裝、準備、訓練等,可以前往下面這個傳送門:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/rcnn
三、影像語義分割
影像語意分割,顧名思義是將影像畫素按照表達的語義含義的不同進行分組/分割。
影像語義是指對影像內容的理解,例如,能夠描繪出什麼物體在哪裡做了什麼事情等,分割是指對圖片中的每個畫素點進行標註,標註屬於哪一類別。近年來用在無人車駕駛技術中分割街景來避讓行人和車輛、醫療影像分析中輔助診斷等。
分割任務主要分為例項分割和語義分割,例項分割是物體檢測加上語義分割的綜合體,上文介紹的Mask R-CNN是例項分割的經典網路結構之一。在影像語義分割任務中,我們主要介紹兼顧準確率和速度的ICNet,DeepLab中最新、執行效果最好的DeepLab v3+。
• DeepLab v3+,DeepLab語義分割系列網路的最新作,通過encoder-decoder進行多尺度資訊的融合,同時保留了原來的空洞卷積和ASSP層, 其骨幹網路使用了Xception模型,提高了語義分割的健壯性和執行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU。
△ DeepLab v3+ 基本結構
△ DeepLab v3+ 評估結果
照例,GitHub傳送門在此(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/deeplabv3%2B
• ICNet,Image Cascade Network,主要用於影像實時語義分割,主要思想是將輸入影像變換為不同的解析度,然後用不同計算複雜度的子網路計算不同解析度的輸入,然後將結果合併。ICNet由三個子網路組成,計算複雜度高的網路處理低解析度輸入,計算複雜度低的網路處理解析度高的網路,通過這種方式在高解析度影像的準確性和低複雜度網路的效率之間獲得平衡。
△ ICNet網路結構
△ ICNet視覺化
△ ICNet評估結果
進一步上手實踐的傳送門在此(也是中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/icnet
四、場景文字識別
許多場景影像中包含著豐富的文字資訊,對理解影像資訊有著重要作用,能夠極大地幫助人們認知和理解場景影像的內容。場景文字識別是在影像背景複雜、解析度低下、字型多樣、分佈隨意等情況下,將影像資訊轉化為文字序列的過程,可認為是一種特別的翻譯過程:將影像輸入翻譯為自然語言輸出。場景影像文字識別技術的發展也促進了一些新型應用的產生,如通過自動識別路牌中的文字幫助街景應用獲取更加準確的地址資訊等。
在場景文字識別任務中,我們介紹如何將基於CNN的影像特徵提取和基於RNN的序列翻譯技術結合,免除人工定義特徵,避免字元分割,使用自動學習到的影像特徵,完成字元識別。這裡主要介紹CRNN-CTC模型和基於注意力機制的序列到序列模型。
• CRNN-CTC模型,採取CNN+RNN+CTC架構,卷積層使用CNN,從輸入影像中提取特徵序列、迴圈層使用RNN,預測從卷積層獲取的特徵序列的標籤(真實值)分佈、轉錄層使用CTC,把從迴圈層獲取的標籤分佈通過去重整合等操作轉換成最終的識別結果。
• 基於注意力機制的序列到序列模型,提出了基於attention機制的文字識別方法,不需要檢測,直接輸入圖片進行識別,對於識別字元類別數很少的場景很實用,例如車牌識別、自然場景圖片的主要關鍵詞提取等。同時也不要求識別文字必須單行排列,雙行排列,多行排列都可以。在訓練過程中則不需要文字框的標註,訓練資料的收集變得很方便。
△ CRNN-CTC模型結構
△ 基於注意力機制的序列到序列模型結構
△ OCR模型評估結果
GitHub傳送門在此(中文友好):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/ocr_recognition
下篇
上篇中我們介紹了計算機視覺技術在影像分類、目標檢測、影像語義分割、場景文字識別四大基本任務場景下,如何幫助計算機從單個或者一系列的圖片中提取分析和理解的關鍵資訊。當下,視訊在人們生活中越來越重要,伴隨著技術成熟度的提高,計算機視覺技術的突破也從靜態影像識別的“看到”轉向了視訊理解的“看懂”。
接下來,我們一起探索基於PaddlePaddle的影像生成、人體關鍵點檢測、視訊分類相關的深度學習模型。
一、影像生成
影像生成是指根據輸入向量,生成目標影像。這裡的輸入向量可以是隨機的噪聲或使用者指定的條件向量。具體的應用場景有:手寫體生成、人臉合成、風格遷移、影像修復、超分重建等。當前的影像生成任務主要是藉助生成對抗網路(GAN)來實現。
生成對抗網路(GAN)由兩種子網路組成:生成器和識別器。生成器的輸入是隨機噪聲或條件向量,輸出是目標影像。識別器是一個分類器,輸入是一張影像,輸出是該影像是否是真實的影像。在訓練過程中,生成器和識別器通過不斷的相互博弈提升自己的能力。
在影像生成任務中,我們主要介紹如何使用DCGAN和ConditioanlGAN來進行手寫數字的生成,另外還介紹了用於風格遷移的CycleGAN。
• ConditioanlGAN,顧名思義是帶條件約束的生成對抗模型,它在生成模型和判別模型的建模中均引入了額外的條件變數,對於生成器對資料的生成具有指導作用。ConditioanlGAN是把無監督的GAN變成有監督模型的改進,為後續的工作提供了指導作用。
△ ConditioanlGAN結構
△ ConditioanlGAN預測效果圖
傳送門(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
• DCGAN,為了填補CNN在監督學習和無監督學習之間的gap,此篇論文提出了將CNN和GAN結合的DCGAN(深度卷積生成對抗網路),並且DCGAN在無監督學習中取得不錯的結果。
△ DCGAN結構
△ DCGAN預測效果圖
傳送門(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
• CycleGAN,將一類圖片轉換成另一類圖片。傳統的 GAN 是單向生成,CycleGAN 是互相生成,本質上是兩個映象對稱的GAN,構成了一個環形網路,所以命名為 Cycle。風格遷移類任務一般都需要兩個域中具有相同內容的成對圖片作為訓練資料,CycleGAN的創新點就在於其能夠在沒有成對訓練資料的情況下,將圖片內容從源域遷移到目標域。
△ CycleGAN 結構
△ CycleGAN預測視覺化
傳送門(中文):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/cycle_gan
二、人體關鍵點檢測
人體關鍵點檢測,通過人體關鍵節點的組合和追蹤來識別人的運動和行為,對於描述人體姿態,預測人體行為至關重要,是諸多計算機視覺任務的基礎,例如動作分類,異常行為檢測,以及自動駕駛等等,也為遊戲、視訊等提供新的互動方式。
在人體關鍵點檢測任務中,我們主要介紹網路結構簡單的coco2018關鍵點檢測專案的亞軍方案。
• Simple Baselines for Human Pose Estimation in Fluid,coco2018關鍵點檢測專案的亞軍方案,沒有華麗的技巧,僅僅是在ResNet中插入了幾層反摺積,將低解析度的特徵圖擴張為原圖大小,以此生成預測關鍵點需要的Heatmap。沒有任何的特徵融合,網路結構非常簡單,但是達到了state of the art效果。
△ 視訊Demo: Bruno Mars - That’s What I Like [官方視訊]
△ Simple Baselines for Human Pose Estimation in Fluid 評估結果
GitHub傳送門:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/human_pose_estimation
三、視訊分類
視訊分類是視訊理解任務的基礎,與影像分類不同的是,分類的物件不再是靜止的影像,而是一個由多幀影像構成的、包含語音資料、包含運動資訊等的視訊物件,因此理解視訊需要獲得更多的上下文資訊,不僅要理解每幀影像是什麼、包含什麼,還需要結合不同幀,知道上下文的關聯資訊。
視訊分類方法主要包含基於卷積神經網路、基於迴圈神經網路、或將這兩者結合的方法。
在視訊分類任務中,我們主要介紹視訊分類方向的多個主流領先模型,其中Attention LSTM,Attention Cluster和NeXtVLAD是比較流行的特徵序列模型,TSN和StNet是兩個End-to-End的視訊分類模型。
Attention LSTM模型速度快精度高,NeXtVLAD是2nd-Youtube-8M比賽中最好的單模型, TSN是基於2D-CNN的經典解決方案。Attention Cluster和StNet是百度自研模型,分別發表於CVPR2018和AAAI2019,是Kinetics600比賽第一名中使用到的模型。
• Attention Cluster模型為ActivityNet Kinetics Challenge 2017中最佳序列模型,通過帶Shifting Opeation的Attention Clusters處理已抽取好的RGB、Flow、Audio資料。
△ Attention Cluster模型結構
Attention LSTM 模型,採用了雙向長短記憶網路(LSTM),將視訊的所有幀特徵依次編碼。與傳統方法直接採用LSTM最後一個時刻的輸出不同,該模型增加了一個Attention層,每個時刻的隱狀態輸出都有一個自適應權重,然後線性加權得到最終特徵向量。
△ Attention LSTM 模型結構
• NeXtVLAD模型,第二屆Youtube-8M視訊理解競賽中效果最好的單模型,提供了一種將楨級別的視訊特徵轉化並壓縮成特徵向量,以適用於大尺寸視訊檔案的分類的方法。其基本出發點是在NetVLAD模型的基礎上,將高維度的特徵先進行分組,通過引入attention機制聚合提取時間維度的資訊,這樣既可以獲得較高的準確率,又可以使用更少的引數量。
△ NeXtVLAD模型結構
• StNet模型,框架為ActivityNet Kinetics Challenge 2018中奪冠的基礎網路框架,提出“super-image”的概念,在super-image上進行2D卷積,建模視訊中區域性時空相關性。另外通過temporal modeling block建模視訊的全域性時空依賴,最後用一個temporal Xception block對抽取的特徵序列進行長時序建模。
△ StNet模型結構
• Temporal Segment Network (TSN) ,視訊分類領域經典的基於2D-CNN的解決方案,主要解決視訊的長時間行為判斷問題,通過稀疏取樣視訊幀的方式代替稠密取樣,既能捕獲視訊全域性資訊,也能去除冗餘,降低計算量。最終將每幀特徵平均融合後得到視訊的整體特徵,並用於分類。
△ TSN模型結構
△ 基於Youtube-8M資料集的視訊分類模型 評估結果
△ 基於Kinetics資料集的視訊分類模型 評估結果
這部分的詳情,可以移步GitHub,全程中文。傳送門:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/video
四、度量學習
度量學習也稱作距離度量學習、相似度學習,通過學習物件之間的距離,度量學習能夠用於分析物件時間的關聯、比較關係,在實際問題中應用較為廣泛,可應用於輔助分類、聚類問題,也廣泛用於影像檢索、人臉識別等領域。
以往,針對不同的任務,需要選擇合適的特徵並手動構建距離函式,而度量學習可根據不同的任務來自主學習出針對特定任務的度量距離函式。度量學習和深度學習的結合,在人臉識別/驗證、行人再識別(human Re-ID)、影像檢索等領域均取得較好的效能,在這個任務中我們主要介紹基於Fluid的深度度量學習模型,包含了三元組、四元組等損失函式。
△ 度量學習模型 評估結果
GitHub的頁面上有安裝、準備、訓練等方面的指導,傳送門:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/metric_learning