var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://#/hm.js?bbed808a7e81aea9265f249f4cb59cdb"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();
人工智能現(xiàn)在應(yīng)用最好的一個領(lǐng)域就是基于視頻圖像的應(yīng)用,尤其是基于深度卷積神經(jīng)網(wǎng)絡(luò)在視頻圖像領(lǐng)域的應(yīng)用最為火熱。安防是人工智能技術(shù)最好的實踐領(lǐng)域,安防每天產(chǎn)生的全天候的海量視頻圖像數(shù)據(jù)為人工智能提供了最佳實踐基礎(chǔ)。

除了海量數(shù)據(jù)、深度卷積神經(jīng)網(wǎng)絡(luò)算法,還有GPU 或神經(jīng)網(wǎng)絡(luò)硬件加速引擎也在快速安防應(yīng)用領(lǐng)域廣泛應(yīng)用。海量視頻圖像、深度神經(jīng)網(wǎng)絡(luò)算法、GPU 或深度神經(jīng)網(wǎng)絡(luò)硬件加速器,這三者共同推動者人工智能在安防領(lǐng)域的實踐,如圖1所示。其中GPU 和深度神經(jīng)網(wǎng)絡(luò)加速器的發(fā)展驅(qū)動力來自于深度神經(jīng)網(wǎng)絡(luò)算法的發(fā)展。所以在這三者中,深度神經(jīng)網(wǎng)絡(luò)算法的發(fā)展是核心,它決定著深度神經(jīng)網(wǎng)絡(luò)硬件平臺的發(fā)展,同時也關(guān)系著視頻圖像進行標注行為。所以本文著重從深度神經(jīng)網(wǎng)絡(luò)算法的角度,介紹人工智能在安防領(lǐng)域的實踐應(yīng)用。
最早的卷積神經(jīng)網(wǎng)絡(luò)模型(比如LeNet和AlexNet)很是簡單,如圖2所示,使用堆棧式(stack)單卷積或者多卷積加單池化(pooling)的結(jié)構(gòu),卷積層做特征提。鼗憬鋅占湎虜裳。輸入特征映射(inputfeature maps), 即輸入神經(jīng)元(inputneurons)經(jīng)過帶有權(quán)值(weights)的卷積核(conv kernel)進行多維卷積,在輸出神經(jīng)元(output neurons)上得到輸出特征映射(outputfeature maps)。

之后的卷積神經(jīng)網(wǎng)絡(luò)版本,融合了Network In Network 來增加隱層提升非線性表達,它使用1x1卷積映射到隱含空間,再在隱含空間做卷積。同時考慮到多尺度,在單層卷積層中用多個不同大小的卷積核來卷積,最后把結(jié)果串聯(lián)起來得到輸出特征映射。這一結(jié)構(gòu),被稱之為“Incepti on”,由谷歌提出,如圖3所示,代表模式有Inception-v1、Inception-v2、Inception-v3、Inception-v4等版本。



逐層可分離卷積(Depthwise SeparableConvolution)可以認為是Inception 的擴展,它是Inception 結(jié)構(gòu)的極限版本,如圖4所示,一個簡化版本的Inception,我們可以看做一整個輸入做1x1卷積,然后切成三段,分別進行3x3卷積后相連,如圖5所示。圖4和圖5兩個形式是等價的,即Inception 的簡化版本又可以用如下形式表達:
假若不是分成三段,而是分成五段或者更多,那模型的表達能力是不是更強呢?于是我們就切更多段,一直切到不能再切為止,此時正好是輸出通道(output channels)的數(shù)量(極限版本),如圖6所示:

這就是逐層卷積(depthwise convolution),逐層卷積是對輸入的每一個通道(channel)獨立的用對應(yīng)通道的所有卷積核去卷積,假設(shè)卷積核的形狀是filter_height*filter_width*in_channels* channel_multiplier,那么每個輸入通道(in_channel)會輸出channel_multiplier 個通道,最后的特征映射面(feature map)就會有in_channels *channel_multiplier 個通道。反觀普通的卷積,輸出的特征映射面一般就只有channel_multiplier 那么多個通道。
在圖像分割領(lǐng)域,圖像輸入到深度卷積神經(jīng)網(wǎng)絡(luò)中,先對圖像做卷積再池化(即下采樣),降低圖像尺寸的同時增大感受野,但是由于圖像分割預(yù)測是逐個像素輸出的,所以要將池化后較小尺寸的圖像上采樣到原始圖像尺寸進行預(yù)測。上采樣一般采用反卷積(deconv)操作,使得每個像素預(yù)測都能看到較大感受野。因此圖像分割卷積神經(jīng)網(wǎng)絡(luò)中有兩個關(guān)鍵,一個是池化減小圖像尺寸增大感受野,另一個是上采樣擴大圖像尺寸。在先減小再增大尺寸的過程中,就會有信息損失。所以就設(shè)計出一種新的操作:空洞卷積(dilated conv)或者卷積核膨脹,即不通過池化也能有較大的感受野,如圖7所示。

圖7中的(a) 圖對應(yīng)3x3的1-dilatedconv,和普通的卷積操作一樣,(b) 圖對應(yīng)3x3的2-dilated conv,實際的卷積核尺寸還是3x3,但是空洞為1,也就是對于一個7x7的圖像塊,只有9個紅色的點和3x3的卷積核進行卷積操作,其余的點(綠色點)略過。也可以理解為卷積核的尺寸實際為7x7,但是只有圖(b) 中的9個點的權(quán)重不為0,其余都為0。 可以看到雖然卷積核尺寸只有3x3,但是這個卷積的感受野已經(jīng)增大到了7x7。(c) 圖是4-dilated conv 操作,能達到15x15的感受野。空洞卷積的好處是不做池化帶來損失信息的情況下,加大了感受野,讓每個卷積輸出都包含較大范圍的信息。
還有一種卷積神經(jīng)網(wǎng)絡(luò)稱為可形變卷積(Deformable convolutions)神經(jīng)網(wǎng)絡(luò),其思想很巧妙:它認為規(guī)則形狀的卷積核(比如一般用的正方形3x3卷積)可能會限制特征的提。綣秤杈砘誦偽淶奶匭,讓神經(jīng)網(wǎng)絡(luò)根據(jù)標注標簽反向傳播回來的誤差自動的調(diào)整卷積核的形狀,適應(yīng)網(wǎng)絡(luò)重點關(guān)注的感興趣的區(qū)域,就可以提取更好的特征。如圖8所示,神經(jīng)網(wǎng)絡(luò)會根據(jù)原位置(a),學(xué)習(xí)一個偏移量,得到新的卷積像素點位置(b) 圖,那么一些特殊情況就會成為這個更泛化的模型的特例,例如圖(b) 中圖表示從不同尺度物體的識別,圖(b) 右圖表示旋轉(zhuǎn)物體的識別。


這個思想的實現(xiàn)方法也很常規(guī),上圖9中包含兩處卷積,第一處是獲取偏移(offsets)的卷積,即我們對輸入特征映射面(inputfeature map)做卷積,得到一個輸出(offsetfield),然后再在這個輸出上取對應(yīng)位置的一組值作為偏移。假設(shè)輸入特征映射面的形狀為batch*height*width*channels,我們指定輸出通道變成兩倍,卷積得到的偏移域(offset field) 就是batch*height*width*2×channels。為什么指定通道變成兩倍呢?因為我們需要在這個偏移域里面取一組卷積核的偏移,而一個偏移肯定不能一個值就表示的,最少也要用兩個值(x方向上的偏移和y 方向上的偏移)所以,如果我們的卷積核是3x3,那意味著我們需要3x3個偏移,一共需要2x3x3個值。取完了這些值,就可以順利使卷積核形變了。第二處就是使用變形的卷積核來卷積,這個比較常規(guī)。
還有一種卷積神經(jīng)網(wǎng)絡(luò)稱為“特征重標定卷積神經(jīng)網(wǎng)絡(luò)”,這個卷積是對特征維度作改進的。一個卷積層中往往有數(shù)以千計的卷積核,而且我們知道卷積核對應(yīng)了特征,可是那么多特征要怎樣區(qū)分呢?這種網(wǎng)絡(luò)就是通過學(xué)習(xí)的方式來自動獲取到每個特征通道的重要程度,然后依照計算出來的重要程度去提升有用的特征并抑制對當前任務(wù)用處不大的特征。如圖10所示,首先做普通的卷積,得到了輸出特征映射面(output feature map),它的形狀為C*H*W,這個特征映射面的特征很混亂。然后為了獲得重要性的評價指標,直接對這個特征映射面進行全局平均池化,就得到了長度為C的向量。然后對這個向量加兩個全連接層,做非線性映射,這兩個全連接層的參數(shù),也就是網(wǎng)絡(luò)需要額外學(xué)習(xí)的參數(shù)。最后輸出的向量,我們可以看做特征的重要性程度,然后與特征映射面對應(yīng)通道相乘就得到特征有序的特征映射面了。

2017年6月,pg科技(uniview)與英特爾(intel)聯(lián)合發(fā)布VDC12500系列視圖數(shù)據(jù)中心一體機『昆侖二代』,采用融合業(yè)務(wù)架構(gòu),支持CPU 通用計算板卡、GPU 計算板卡混插,實現(xiàn)通用計算業(yè)務(wù)、智能分析業(yè)務(wù)、大數(shù)據(jù)業(yè)務(wù),廣泛應(yīng)用于人工智能城市的建設(shè):一臺可并發(fā)處理2.4億大庫智能搜索、或200億人車物的結(jié)構(gòu)化數(shù)據(jù)分析、或8億數(shù)據(jù)秒級“以圖搜索”應(yīng)用,具備強勁的高并發(fā)處理能力和集群化管理能力。
昆侖二代高性能專用計算平臺,插CPU 板卡可進行海量數(shù)據(jù)的處理,能夠快速存儲和索引,多種數(shù)據(jù)進行時空碰撞;插GPU 板卡則繼承全部昆侖一代的智能分析功能。昆侖二代=CPU 通用計算+ 大數(shù)據(jù)內(nèi)存計算+GPU 智能計算,實現(xiàn)視頻調(diào)度、大數(shù)據(jù)、智能等全部安防算力的融合。

現(xiàn)在越來越多的卷積神經(jīng)網(wǎng)絡(luò)模型從巨型網(wǎng)絡(luò)到輕量化網(wǎng)絡(luò)一步步演變,模型準確率也越來越高。當前人工智能實踐中追求的重點已經(jīng)不只是準確率的提升,更都聚焦于速度與準確率的平衡,都希望模型又快又準。因此從原來AlexNet、VGGNet,到體積小一點的Inception、ResNet 系列,到目前能移植到移動端的MobileNet、ShuffleNet,我們可以看到這樣一些趨勢:
◆ 大卷積核用多個小卷積核代替;
◆ 單一尺寸卷積核用多尺寸卷積核代替;
◆ 固定形狀卷積核趨于使用可變形卷積核;
◆ 使用1×1 卷積核。
◆ 標準卷積用逐層卷積代替;
◆ 使用分組卷積;
◆ 分組卷積前使用通道重組(channel
shuffle);
◆ 通道加權(quán)計算。
◆ 使用忽略連接(skip connection),讓模型更深;
◆ 稠密連接(densely connection),使每一層都融合上其它層的特征輸出(DenseNet)
由此可見,應(yīng)用于安防領(lǐng)域的人工智能中的深度卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),研究領(lǐng)域為了更快、更準的檢測識別目標,一直在持續(xù)更新模型結(jié)構(gòu),由此也帶來了安防應(yīng)用的不斷推陳出新。
杰夫? 辛頓(Geoffrey Hinton,1947-),以“深度學(xué)習(xí)之父”和“神經(jīng)網(wǎng)絡(luò)先驅(qū)”聞名于世,其對深度學(xué)習(xí)及神經(jīng)網(wǎng)絡(luò)的諸多核心算法和結(jié)構(gòu)(包括“深度學(xué)習(xí)”這個名稱本身,反向傳播算法,受限玻爾茲曼機,深度置信網(wǎng)絡(luò),對比散度算法,ReLU 激活單元,Dropout 防止過擬合,以及深度學(xué)習(xí)早期在語音方面突破)做出了基礎(chǔ)性的貢獻。他近幾年以“卷積神經(jīng)網(wǎng)絡(luò)有什么問題?”為主題做了多場報道,提出了膠囊(Capsule)計劃。Hinton 似乎毫不掩飾要推翻自己盼了30多年時間才建立起來的深度學(xué)習(xí)帝國的想法,他根據(jù)神經(jīng)解剖學(xué)、認知神經(jīng)科學(xué)、計算機圖形學(xué)的啟發(fā),對卷積神經(jīng)網(wǎng)絡(luò)產(chǎn)生了動搖。他的這種精神也獲得了同行李飛飛(ImageNet 創(chuàng)始者)等人肯定。
這標志著人工智能算法并沒有完全成熟起來,雖然現(xiàn)在在安防領(lǐng)域得到大量應(yīng)用,但每種應(yīng)用并不是很完美。這種不完美既有工程實踐問題,更有理論模型問題。在未來的人工智能應(yīng)用道路上,卷積神經(jīng)網(wǎng)絡(luò)或者只是一個暫時的表現(xiàn)很優(yōu)秀的算法,將來必將會出現(xiàn)更加優(yōu)秀的算法。
參考文獻
[1]https://zhuanlan.zhihu.com/p/29367273
[2]http://prlab.tudelft.nl/sites/default/files/Deformable_CNN.pdf
[3]https://arxiv.org/pdf/1610.02357.pdf
[4]https://zhuanlan.zhihu.com/p/28749411
[4]https://zhuanlan.zhihu.com/p/29435406