AI視覺識別中目標檢測的關鍵技術

AI視覺識別中目標檢測的關鍵技術

內容來源:2018 年 04 月 21 日,AI教育求職平臺景略集智創始人王文凱在“百度深度學習公開課·北京站:AI工程師的快速進階之路”進行《目標檢測面面觀》演講分享。IT 大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發佈。

閱讀字數:4339 | 11分鐘閱讀

獲取嘉賓演講視頻回放及PPT,請複製:http://t.cn/Rs5DGx2,粘貼至瀏覽器即可。

AI視覺識別中目標檢測的關鍵技術

摘要

本次演講主要介紹視覺識別領域中目標檢測的相關技術,對其中各種不同的檢測方法進行解析和對比。

Visual Recognition

AI視覺識別中目標檢測的關鍵技術

最簡單的視覺識別是根據圖片中的物體對圖片進行分類,典型的就是判斷一張照片是貓還是狗。再進一步不僅要識別圖片中物體,還要對它進行定位。

實際工程中,圖片一般會同時存在多個物體,面對這種複雜場景需要應用目標檢測,同時包含分類和定位。比目標檢測更深入的是語義分割,從上圖可以看到目標檢測只是簡單的框出了物體,而語義分析會挖掘出圖像中更深層次的信息。

Classification

AI視覺識別中目標檢測的關鍵技術

對分類領域稍有熟悉的朋友可能都知道MNIST(手寫數字)數據集,它被稱為DeepLearning中的hello world,主流的深度學習框架都會提供該數據集的相應的接口。

上圖左邊是人眼所看到的圖像,在計算機中被轉化成了右方這樣的矩陣,0表示的是0像素,中間的數字表示顏色由淺到深的過渡。

AI視覺識別中目標檢測的關鍵技術

對於上面圖片的分類,首先會將圖片以像素為單位拆解成特徵向量輸入到神經網絡中,然後輸出猜測——長度為10的向量。這種方法是將二維矩陣展開為一維向量,過程中必然會損失一定的信息。所以在深度學習領域更常見的做法是使用卷積神經網絡。

CNN

AI視覺識別中目標檢測的關鍵技術

這裡輸入的同樣是數字圖片,輸出為10維度向量。不過中間部分有些不同,它是由convolution、subsampling、Pooling構成,核心在於convolution(卷積)。

AI視覺識別中目標檢測的關鍵技術


AI視覺識別中目標檢測的關鍵技術

任意的圖片都可以被轉換為矩陣,圖中中間部分的3*3的小矩陣被稱為卷積核。我們會將卷積核放到圖片矩陣中滑動,重疊部分同樣也是一個3*3的矩陣,對他們進行計算後會得到一個結果,計算公式為對應像素位置的值相乘然後求和。

不同的卷積核對應不同的特徵,如圖中動物圖片的卷積核取值,中間是8,周圍是-1,這表示一個邊緣檢測。在經過滑動計算後展現的就是右邊的feature map(特徵映射),可以看到原圖中的邊緣區域都被高亮了,整體圖片雖然變成了黑白的,但是信息對比更加強烈。

Pooling & ReLu

AI視覺識別中目標檢測的關鍵技術

Pooling是在得到特徵映射後進一步對信息進行簡約化處理,如上圖對某個特徵映射做2*2的切分,每4個點取一個最大值,減小網絡中的計算量只保留最主要的特徵信息。ReLu叫做整流線性單元,它是一個激活函數,小於0的時候值一直為0,大於0的時候恢復正常。

VGG16

AI視覺識別中目標檢測的關鍵技術

卷積神經網絡衍生出過很多不同的版本,VGG16就是其中之一 ,它被很多的目標檢測方案用作特徵提取。VGG16接收的輸入圖片尺寸是224*224。圖中黑色方塊為一個卷積層,後面接著激活函數,紅色塊是石化層。卷積核得到的特徵映射會逐漸縮小,越往後特徵映射的點對應的原圖區域越大。

AI視覺識別中目標檢測的關鍵技術

VGG16一共有16個帶有權重的層,其中13個卷積層和3個全鏈接層,我們可以將卷積核、激活函數、石化層視為一個block模塊。VGG16的整個網絡有138M個參數。

import paddle.v2 as pal
pdl.networks.vgg_16_network(input_image, num_channels,num_classes=1000)

這樣龐大的網絡,使用上圖的方法是最簡單的。這是一段python代碼,通過導入pdI模塊使用VGG16網絡,僅用輸入3個參數,輸入的圖片、通道數、分類數。不過僅用這種方式肯定是無法滿足大多數情況。

import paddle.v2 as pal
def vgg16(input):
def conv_block(ipc, num_filter, groups, dropouts, num_channels=None):
return pdl.networks.img_conv_group(input=ipt, num_channels=num_channels,
pool_type=pdl.pooling.Max(), pool_size=2, pool_stride=2,
conv_num_filter=[num_filter]*groups, conv_filter_size=3,
conv_act=pdl.activation.Rolu(), conv_with_batchnorm=True,
conv_batchnorm_drop_rate=dropouts)

conv1 = conv_block(input, 64, 2, [0.3, 0], 3)
conv2 = conv_block(input, 128, 2, [0.4, 0])
conv3 = conv_block(input, 256, 3, [0.4, 0])
conv4 = conv_block(input, 512, 3, [0.4, 0.4, 0])
conv5 = conv_block(input, 512, 3, [0.4, 0.4, 0])
fc1 = pdl.layer.fc(input=conv5, size=4096, act=pdl.activation.Linear())
fc2 = pdl.layer.fc(input=fc1, size=4096, act=pdl.activation.Linear())
fc3 = pdl.layer.fc(input=fc2, size=1000, act=pdl.activation.Linear())

這是另一種稍顯複雜的寫法,下方定義了5個卷積層和3個全鏈接層。它的好處在於整個模塊都是我們自定義的,可以隨時進行修改。

AI視覺識別中目標檢測的關鍵技術

前面提到過VGG16網絡有138M個參數,如果每個視覺分類的任務都需要重新訓練,整個任務規模還是非常大的。所以常用的做法是基於ImageNet數據集,它有1000類,共1400萬張圖片。一般我們會使用數據集中那些已經被訓練好參數來做。

Object Detection

PASCAL VOC

AI視覺識別中目標檢測的關鍵技術

Object Detection目標檢測需要用到PASCAL VOC數據集,它只有20個類別,雖然相對ImageNet要少很多,但是每張圖片的信息更為豐富。

AI視覺識別中目標檢測的關鍵技術

實現目標檢測最簡單暴力的方法是使用滑動窗口,如上圖讓綠色窗口在圖片上不斷滑動。不過由於無法確定窗口的大小是否匹配要檢測的物體,所以要不斷的縮放圖片來進行匹配,同時線框的形狀也要進行調整,這無疑增大了複雜度。

Region Proposal——selective search

Region Proposal會幫我們限制圖像搜索的空間。它首先假設圖上的每個點為獨立集團,然後根據顏色、紋理、尺寸、包含關係等進行合併。

AI視覺識別中目標檢測的關鍵技術

比如這張圖,最初有非常多的點,之後隨著不斷合併形成了幾個大的集團,下方的線框也就僅剩幾個了,最後再進行分類。這樣的話計算性能有了很大的提升。

Region – based CNN

AI視覺識別中目標檢測的關鍵技術

在通過提名方式大致猜測出圖片中物體種類後,接下來要做的就是對這些塊進行分類。這要用到卷積神經網絡,更具體的是Region based CNN。輸入圖片後提取出region proposals,然後將這些region proposals圖片縮放成統一大小的正方形輸入到CNN中,最後CNN會給出分類結果。

R-CNN Training

AI視覺識別中目標檢測的關鍵技術

R-CNN訓練過程中,首先會在ImageNet上訓練卷積部分提取物體特徵的能力,在嫁接到PASCAL之前還要對網絡進行改造,讓它只輸入21類,多出的1類為背景。這種對神經網絡的改造,用到就是前面展示的相對複雜的代碼。

Fast R-CNN

R-CNN針對每張圖片可能會提取出2000多個region proposals,而對這些region proposals都需要做一遍卷積操作,計算量無形中增大了2000倍,顯然會拖慢運行效率。

AI視覺識別中目標檢測的關鍵技術

為此現在又提出了Fast R-CNN。我們知道圖片經過卷積之後得到的特徵映射,雖然信息量降低了,但是保留下了分類相關的信息。因此region proposals就完全可以不在原圖上進行,而在特徵映射上完成。原先要將圖片切成多份,每份單獨進行一次卷積提取特徵。現在只需要先整體進行一次提取,然後在特徵映射上做若干個區域提名。

Faster RCNN

AI視覺識別中目標檢測的關鍵技術

Fast RCNN相對普通的RCNN速度雖有所提升,不過還可以進一步提高。我們可以將生成Proposal的過程也通過神經網絡完成,相當於神經網絡中又嵌套著一層神經網絡,使整個過程全部通過GPU加速,這種方式被稱為Faster RCNN。

You Only Look Once(YOLO)

Faster RCNN整個流程分為兩個分支,一部分是區域提名,另一部分是特徵提取以及位置分類的計算,一次任務要走兩步。因此雖然在靜態圖片識別上Faster RCNN能很好的完成任務,但是還不滿足在視頻領域實時圖像的識別。

AI視覺識別中目標檢測的關鍵技術


AI視覺識別中目標檢測的關鍵技術

所以又出現了一種新的方法——You Only Look Once。它先對圖片做固定數量切分,在此基礎上進行各種猜測,然後對這些猜測框進行分類以及四個角的迴歸,使迴歸和分類就融合到同一個神經網絡中,實現端到端的訓練。

Single Shot Multi-box Detector(SSD)

AI視覺識別中目標檢測的關鍵技術

這類將區域提名以及位置和分類合併到一起的方法被稱為single shot,上圖是Single Shot的另一種方式multi-box detector的結構圖。multi-box detector也用到了VGG16,不過僅有前三個conv_block,剔除了全鏈接層,原先的FC6、FC7又添加了新的卷積。可以看到其中有若干個卷積塊連接到了最後的detections,也就是在不同尺度的特徵映射上都進行一次物體猜測,這樣精度會稍有提高,對於尺度變化較大的物體也能起到較好的效果。

AI視覺識別中目標檢測的關鍵技術

前面提到的這些方法其本質都是在效率和功率上尋找折中,上圖是對一些經典方法的總結,橫軸是速度,縱軸是MVP。可以看到single shot類的方法明顯要更快一些,不過它的實時性是基於犧牲一定的精度。

以上為今天的分享內容,謝謝大家!


分享到:


相關文章: