① 神經網路淺談
人工智慧技術是當前炙手可熱的話題,而基於神經網路的深度學習技術更是熱點中的熱點。去年穀歌的Alpha Go 以4:1大比分的優勢戰勝韓國的李世石九段,展現了深度學習的強大威力,後續強化版的Alpha Master和無師自通的Alpha Zero更是在表現上完全碾壓前者。不論你怎麼看,以深度學習為代表的人工智慧技術正在塑造未來。
下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產品是「圖形處理器」(GPU),而GPU被證明能大大加快神經網路的訓練速度,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢。
好,話不多說,下面簡要介紹神經網路的基本原理、發展脈絡和優勢。
神經網路是一種人類由於受到生物神經細胞結構啟發而研究出的一種演算法體系,是機器學習演算法大類中的一種。首先讓我們來看人腦神經元細胞:
一個神經元通常具有多個樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。
下圖是一個經典的神經網路(Artificial Neural Network,ANN):
乍一看跟傳統互聯網的拓撲圖有點類似,這也是稱其為網路的原因,不同的是節點之間通過有向線段連接,並且節點被分成三層。我們稱圖中的圓圈為神經元,左邊三個神經元組成的一列為輸入層,中間神經元列為隱藏層,右邊神經元列為輸出層,神經元之間的箭頭為權重。
神經元是計算單元,相當於神經元細胞的細胞核,利用輸入的數據進行計算,然後輸出,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現數據的輸入輸出,相當於細胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經元層,一個神經網路可以有很多個隱藏層。
神經網路的關鍵不是圓圈代表的神經元,而是每條連接線對應的權重。每條連接線對應一個權重,也就是一個參數。權重具體的值需要通過神經網路的訓練才能獲得。我們實際生活中的學習體現在大腦中就是一系列神經網路迴路的建立與強化,多次重復的學習能讓迴路變得更加粗壯,使得信號的傳遞速度加快,最後對外表現為「深刻」的記憶。人工神經網路的訓練也借鑒於此,如果某種映射關系出現很多次,那麼在訓練過程中就相應調高其權重。
1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP:
符號化後的模型如下:
Sum函數計算各權重與輸入乘積的線性組合,是神經元中的線性計算部分,而sgn是取符號函數,當輸入大於0時,輸出1,反之輸出0,是神經元中的非線性部分。向量化後的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。
但是,MP模型中,權重的值都是預先設置的,因此不能學習。該模型雖然簡單,並且作用有限,但已經建立了神經網路大廈的地基
1958年,計算科學家Rosenblatt提出了由兩層神經元組成(一個輸入層,一個輸出層)的神經網路。他給它起了一個名字–「感知器」(Perceptron)
感知器是當時首個可以學習的人工神經網路。Rosenblatt現場演示了其學習識別簡單圖像的過程,在當時引起了轟動,掀起了第一波神經網路的研究熱潮。
但感知器只能做簡單的線性分類任務。1969年,人工智慧領域的巨擘Minsky指出這點,並同時指出感知器對XOR(異或,即兩個輸入相同時輸出0,不同時輸出1)這樣的簡單邏輯都無法解決。所以,明斯基認為神經網路是沒有價值的。
隨後,神經網路的研究進入低谷,又稱 AI Winter 。
Minsky說過單層神經網路無法解決異或問題,但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。
下圖為兩層神經網路(輸入層一般不算在內):
上圖中,輸出層的輸入是上一層的輸出。
向量化後的公式為:
注意:
每個神經元節點默認都有偏置變數b,加上偏置變數後的計算公式為:
同時,兩層神經網路不再使用sgn函數作為激勵函數,而採用平滑的sigmoid函數:
σ(z)=1/(1+e^(-z) )
其圖像如下:
理論證明: 兩層及以上的神經網路可以無限逼近真實的對應函數,從而模擬數據之間的真實關系 ,這是神經網路強大預測能力的根本。但兩層神經網路的計算量太大,當時的計算機的計算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的復雜計算量問題,帶動了業界使用兩層神經網路研究的熱潮。
但好景不長,演算法的改進僅使得神經網路風光了幾年,然而計算能力不夠,局部最優解,調參等一系列問題一直困擾研究人員。90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。
由於以上原因,SVM迅速打敗了神經網路演算法成為主流。神經網路的研究再一次進入低谷, AI Winter again 。
多層神經網路一般指兩層或兩層以上的神經網路(不包括輸入層),更多情況下指兩層以上的神經網路。
2006年,Hinton提出使用 預訓練 」(pre-training)和「微調」(fine-tuning)技術能優化神經網路訓練,大幅度減少訓練多層神經網路的時間
並且,他給多層神經網路相關的學習方法賦予了一個新名詞–「 深度學習 」,以此為起點,「深度學習」紀元開始了:)
「深度學習」一方面指神經網路的比較「深」,也就是層數較多;另一方面也可以指神經網路能學到很多深層次的東西。研究發現,在權重參數不變的情況下,增加神經網路的層數,能增強神經網路的表達能力。
但深度學習究竟有多強大呢?沒人知道。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。
同時,科研人員發現GPU的大規模並行矩陣運算模式完美地契合神經網路訓練的需要,在同等情況下,GPU的速度要比CPU快50-200倍,這使得神經網路的訓練時間大大減少,最終再一次掀起了神經網路研究的熱潮,並且一直持續到現在。
2016年基於深度學習的Alpha Go在圍棋比賽中以4:1的大比分優勢戰勝了李世石,深度學習的威力再一次震驚了世界。
神經網路的發展歷史曲折盪漾,既有被捧上神壇的高潮,也有無人問津的低谷,中間經歷了數次大起大落,我們姑且稱之為「三起三落」吧,其背後則是演算法的改進和計算能力的持續發展。
下圖展示了神經網路自發明以來的發展情況及一些重大時間節點。
當然,對於神經網路我們也要保持清醒的頭腦。由上圖,每次神經網路研究的興盛期持續10年左右,從最近2012年算起,或許10年後的2022年,神經網路的發展將再次遇到瓶頸。
神經網路作為機器學習的一種,其模型訓練的目的,就是使得參數盡可能的與真實的模型逼近。理論證明,兩層及以上的神經網路可以無限逼近真實的映射函數。因此,給定足夠的訓練數據和訓練時間,總能通過神經網路找到無限逼近真實關系的模型。
具體做法:首先給所有權重參數賦上隨機值,然後使用這些隨機生成的參數值,來預測訓練數據中的樣本。假設樣本的預測目標為yp ,真實目標為y,定義值loss,計算公式如下:
loss = (yp -y) ^2
這個值稱之為 損失 (loss),我們的目標就是使對所有訓練數據的損失和盡可能的小,這就轉化為求loss函數極值的問題。
一個常用方法是高等數學中的求導,但由於參數不止一個,求導後計算導數等於0的運算量很大,所以常用梯度下降演算法來解決這樣的優化問題。梯度是一個向量,由函數的各自變數的偏導數組成。
比如對二元函數 f =(x,y),則梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函數值上升最快的方向。梯度下降演算法每次計算參數在當前的梯度,然後讓參數向著梯度的反方向前進一段距離,不斷重復,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。下圖為梯度下降的大致運行過程:
在神經網路模型中,由於結構復雜,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)演算法。反向傳播演算法利用了神經網路的結構進行計算,不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。當然,梯度下降只是其中一個優化演算法,其他的還有牛頓法、RMSprop等。
確定loss函數的最小值後,我們就確定了整個神經網路的權重,完成神經網路的訓練。
在神經網路中一樣的參數數量,可以用更深的層次去表達。
由上圖,不算上偏置參數的話,共有三層神經元,33個權重參數。
由下圖,保持權重參數不變,但增加了兩層神經元。
在多層神經網路中,每一層的輸入是前一層的輸出,相當於在前一層的基礎上學習,更深層次的神經網路意味著更深入的表示特徵,以及更強的函數模擬能力。更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。
如上圖,第一個隱藏層學習到「邊緣」的特徵,第二個隱藏層學習到「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
前面提到, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的「異或」(XOR)非線性問題,所以神經網路的研究沒有前途,但當增加一層神經元後,異或問題得到了很好地解決,原因何在?原來從輸入層到隱藏層,數據發生了空間變換,坐標系發生了改變,因為矩陣運算本質上就是一種空間變換。
如下圖,紅色和藍色的分界線是最終的分類結果,可以看到,該分界線是一條非常平滑的曲線。
但是,改變坐標系後,分界線卻表現為直線,如下圖:
同時,非線性激勵函數的引入使得神經網路對非線性問題的表達能力大大加強。
對於傳統的樸素貝葉斯、決策樹、支持向量機SVM等分類器,提取特徵是一個非常重要的前置工作。在正式訓練之前,需要花費大量的時間在數據的清洗上,這樣分類器才能清楚地知道數據的維度,要不然基於概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經網路中,由於巨量的線性分類器的堆疊(並行和串列)以及卷積神經網路的使用,它對雜訊的忍耐能力、對多通道數據上投射出來的不同特徵偏向的敏感程度會自動重視或忽略,這樣我們在處理的時候,就不需要使用太多的技巧用於數據的清洗了。有趣的是,業內大佬常感嘆,「你可能知道SVM等機器學習的所有細節,但是效果並不好,而神經網路更像是一個黑盒,很難知道它究竟在做什麼,但工作效果卻很好」。
人類對機器學習的環節干預越少,就意味著距離人工智慧的方向越近。神經網路的這個特性非常有吸引力。
1) 谷歌的TensorFlow開發了一個非常有意思的神經網路 入門教程 ,用戶可以非常方便地在網頁上更改神經網路的參數,並且能看到實時的學習效率和結果,非常適合初學者掌握神經網路的基本概念及神經網路的原理。網頁截圖如下:
2) 深度學習領域大佬吳恩達不久前發布的《 神經網路和深度學習 》MOOC,現在可以在網易雲課堂上免費觀看了,並且還有中文字幕。
3) 《神經網路於深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍。
② 平滑濾波的3×3演算法原理
平滑濾波
低頻增強的空間域濾波技術
平滑濾波是低頻增強的空間域濾波技術。它的目的有兩類:一類是模糊;另一類是消除噪音。空間域的平滑濾波一般採用簡單平均法進行,就是求鄰近像元點的平均亮度值。鄰域的大小與平滑的效果直接相關,鄰域越大平滑的效果越好,但鄰域過大,平滑會使邊緣信息損失的越大,從而使輸出的圖像變得模糊,因此需合理選擇鄰域的大小。
中文名
平滑濾波
外文名
Smoothing
拼音
píng huá lǜ bō
注音
ㄆㄧㄥˊ ㄏㄨㄚˊㄌㄩˋ ㄅㄛ
濾波目的處理要求濾波原因濾波方法其他方式TA說
濾波目的
濾波的本義是指信號有各種頻率的成分,濾掉不想要的成分,即為濾掉常說的雜訊,留下想要的成分.這即是濾波的過程,也是目的.
一是抽出對象的特徵作為圖像識別的特徵模式;另一個是為適應圖像處理的要求,消除圖像數字化時所混入的雜訊。
處理要求
一是不能損壞圖像的輪廓及邊緣等重要信息;二是使圖像清晰視覺效果好。
濾波原因
各類圖像處理系統在圖像的採集、獲取、傳送和轉換(如成像、復制掃描、傳輸以及顯示等)過程中,均處在復雜的環境中,光照、電磁多變,所有的圖像均不同程度地被可見或不可見的雜訊干擾。雜訊源包括電子雜訊、光子雜訊、斑點雜訊和量化雜訊。如果信噪比低於一定的水平,雜訊逐漸變成可見的顆粒形狀,導致圖像質量的下降。除了視覺上質量下降,雜訊同樣可能掩蓋重要的圖像細節,在對採集到的原始圖像做進一步的分割處理時,我們發現有一些分布不規律的椒鹽雜訊,為此採取相應的對策就是對圖像進行必要的濾波降噪處理。
濾波方法
圖像的雜訊濾波器有很多種,常用的有線性濾波器,非線性濾波器。採用線性濾波如鄰域平滑濾波,對受到雜訊污染而退化的圖像復原,在很多情況下是有效的。但大多數線性濾波器具有低通特性,去除雜訊的同時也使圖像的邊緣變模糊了。而另一種非線性濾波器如中值濾波,在一定程度上可以克服線性濾波器所帶來的圖像模糊問題,在濾除雜訊的同時,較好地保留了圖像的邊緣信息。
鄰域平滑濾波原理
鄰域平均法[2]是一種利用Box模版對圖像進行模版操作(卷積運算)的圖像平滑方法,所謂Box模版是指模版中所有系數都取相同值的模版,常用的3×3和5×5模版如下:
鄰域平均法的數學含義是:
(式4-1)
式中:x,y=0,1,…,N-1;S是以(x,y)為中心的鄰域的集合,M是S內的點數。
鄰域平均法的思想是通過一點和鄰域內像素點求平均來去除突變的像素點,從而濾掉一定雜訊,其優點是演算法簡單,計算速度快,其代價會造成圖像在一定程度上的模糊。
中值濾波原理
中值濾波[2]就是用一個奇數點的移動窗口,將窗口的中心點的值用窗口內的各點中值代替。假設窗口內有五點,其值為80、90、200、110和120,那麼此窗口內各點的中值及為110。
設有一個一維序列f1,f2,…,fn,取窗口長度(點數)為m(m為奇數),對其進行中值濾波,就是從輸入序列中相繼抽出m個數fi-v,…,fi-1,fi,fi+1,…,fi+v(其中fi為窗口中心值,v=(m-1)/2),再將這m個點按其數值大小順序排序,取其序號的中心點的那個數作為濾波輸出。數學公式表示為:
Yi=Med{fi-v,…,fi-1,fi,fi+1,…,fi+v} i∈N v=(m-1)/2 (式4-2)
Yi稱為序列fi-v,…,fi-1,fi,fi+1,…,fi+v的中值
例如,有一序列{0,3,4,0,7},重新排序後為{0,0,3,4,7}則Med{0,0,3,4,7}=3。此列若用平滑濾波,窗口也取5,那麼平滑濾波輸出為(0+3+4+0+7)/5=2.8。
把一個點的特定長度或形狀的鄰域稱作窗口。在一維情況下,中值濾波器是一個含有奇數個像素的滑動窗口。中值濾波很容易推廣到二維,此時可以利用二維形式的窗口。
對於平面圖像採用的二維中值濾波可以由下式表示:
(式4-3)
式中:A為窗口,{fij}為二維數據序列,即數字圖像各點的灰度值。
對於本系統,由於採集到的是24位真彩色圖像,每個像素點分別有R、G、B三個灰度分量,故要在窗口內分別找到這三個分量的中值,分別用這三個中值去代替窗口中心像素點的R、G、B三個灰度分量的值。
③ BP神經網路(誤差反傳網路)
雖然每個人工神經元很簡單,但是只要把多個人工
神經元按一定方式連接起來就構成了一個能處理復雜信息的神經網路。採用BP演算法的多層前饋網路是目前應用最廣泛的神經網路,稱之為BP神經網路。它的最大功能就是能映射復雜的非線性函數關系。
對於已知的模型空間和數據空間,我們知道某個模型和他對應的數據,但是無法寫出它們之間的函數關系式,但是如果有大量的一一對應的模型和數據樣本集合,利用BP神經網路可以模擬(映射)它們之間的函數關系。
一個三層BP網路如圖8.11所示,分為輸入層、隱層、輸出層。它是最常用的BP網路。理論分析證明三層網路已經能夠表達任意復雜的連續函數關系了。只有在映射不連續函數時(如鋸齒波)才需要兩個隱層[8]。
圖8.11中,X=(x1,…,xi,…,xn)T為輸入向量,如加入x0=-1,可以為隱層神經元引入閥值;隱層輸出向量為:Y=(y1,…,yi,…,ym)T,如加入y0=-1,可以為輸出層神經元引入閥值;輸出層輸出向量為:O=(o1,…,oi,…,ol)T;輸入層到隱層之間的權值矩陣用V表示,V=(V1,…,Vj,…,Vl)T,其中列向量Vj表示隱層第j個神經元的權值向量;隱層到輸出層之間的權值矩陣用W表示,W=(W1,…,Wk,…,Wl)T,
其中列向量Wk表示輸出層第k個神經元的權值向量。
圖8.11 三層BP網路[8]
BP演算法的基本思想是:預先給定一一對應的輸入輸出樣本集。學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。正向傳播時,輸入樣本從輸入層傳入,經過各隱層逐層處理後,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉入誤差的反向傳播。將輸出誤差以某種形式通過隱層向輸入層逐層反傳,並將誤差分攤給各層的所有神經元,獲得各層的誤差信號,用它們可以對各層的神經元的權值進行調整(關於如鎮歲何修改權值參見韓立群著作御兆睜[8]),循環不斷地利用輸入輸出樣本集進行權值調整,以使所有輸入樣本的輸出誤差都減小到滿意的精度。這個過程就稱為網路的學習訓練過程。當網路訓練完畢後,它相當於映射(表達)了輸入輸出樣本之間的函數關系。
在地球物理勘探中,正演過程可以表示為如下函數:
d=f(m) (8.31)
它的反函數為
m=f-1(d) (8.32)
如果能夠獲得這個反函數,那麼就解決了反演問題。一般來說,難以寫出這個反函數,但是我們可以用BP神經網路來映射這個反函數m=f-1(d)。對於地球物理反問題,如果把觀測數據當作輸入數據,模型參數當作輸出數據,事先在模型空間隨機產生大量樣本進行正演計算,獲得對應的觀測數據樣本,利用它們對BP網路進行訓練,則訓練好的網路就相當於是地球物理數據方程的反函數。可以用它進行反演,輸入觀測數據,網路就會輸出它所對應的模型。猜如
BP神經網路在能夠進行反演之前需要進行學習訓練。訓練需要大量的樣本,產生這些樣本需要大量的正演計算,此外在學習訓練過程也需要大量的時間。但是BP神經網路一旦訓練完畢,在反演中的計算時間可以忽略。
要想使BP神經網路比較好地映射函數關系,需要有全面代表性的樣本,但是由於模型空間的無限性,難以獲得全面代表性的樣本集合。用這樣的樣本訓練出來的BP網路,只能反映樣本所在的較小范圍數據空間和較小范圍模型空間的函數關系。對於超出它們的觀測數據就無法正確反演。目前BP神經網路在一維反演有較多應用,在二維、三維反演應用較少,原因就是難以產生全面代表性的樣本空間。
④ 目標跟蹤檢測演算法(四)——多目標擴展
姓名:劉帆;學號:20021210609;學院:電子工程學院
https://blog.csdn.net/qq_34919792/article/details/89893665
【嵌牛導讀】基於深度學習的演算法在圖像和視頻識別任務中取得了廣泛的應用和突破性的進展。從圖像分類問題到行人重識別問題,深度學習方法相比傳統方法表現出極大的優勢。與行人重識別問題緊密相關的是行人的多目標跟蹤問題。
【嵌牛鼻子】深度多目標跟蹤演算法
【嵌牛提問】深度多目標跟蹤演算法有哪些?
【嵌牛正文】
第一階段(概率統計最大化的追蹤)
1)多假設多目標追蹤演算法(MHT,基於kalman在多目標上的拓展)
多假設跟蹤演算法(MHT)是非常經典的多目標跟蹤演算法,由Reid在對雷達信號的自動跟蹤研究中提出,本質上是基於Kalman濾波跟蹤演算法在多目標跟蹤問題中的擴展。
卡爾曼濾波實際上是一種貝葉斯推理的應用,通過歷史關聯的預測量和k時刻的預測量來計算後驗概率:
關聯假設的後驗分布是歷史累計概率密度的連乘,轉化為對數形式,可以看出總體後驗概率的對數是每一步觀察似然和關聯假設似然的求和。但是若同時出現多個軌跡的時候,則需要考慮可能存在的多個假設關聯。
左圖為k-3時刻三個檢測觀察和兩條軌跡的可能匹配。對於這種匹配關系,可以繼續向前預測兩幀,如圖右。得到一種三層的假設樹結構,對於假設樹根枝乾的剪枝,得到k-3時刻的最終關聯結果。隨著可能性增加,假設組合會爆炸性增多,為此,只為了保留最大關聯性,我們需要對其他的節點進行裁剪。下式為選擇方程
實際上MHT不會單獨使用,一般作為單目標追蹤的擴展添加。
2)基於檢測可信度的粒子濾波演算法
這個演算法分為兩個步驟:
1、對每一幀的檢測結果,利用貪心匹配演算法與已有的對象軌跡進行關聯。
其中tr表示一個軌跡,d是某一個檢測,他們的匹配親和度計算包含三個部分:在線更新的分類學習模型(d),用來判斷檢測結果是不是屬於軌跡tr; 軌跡的每個粒子與檢測的匹配度,採用中心距離的高斯密度函數求和(d-p)表示;與檢測尺寸大小相關的閾值函數g(tr,d),表示檢測與軌跡尺度的符合程度, 而α是預設的一個超參數。
計算出匹配親和度矩陣之後,可以採用二部圖匹配的Hungarian演算法計算匹配結果。不過作者採用了近似的貪心匹配演算法,即首先找到親和度最大的那個匹配,然後刪除這個親和度,尋找下一個匹配,依次類推。貪心匹配演算法復雜度是線性,大部分情況下,也能得到最優匹配結果。
2、利用關聯結果,計算每個對象的粒子群權重,作為粒子濾波框架中的觀察似然概率。
其中tr表示需要跟蹤的對象軌跡,p是某個粒子。指示函數I(tr)表示第一步關聯中,軌跡tr是不是關聯到某個檢測結果,當存在關聯時,計算與關聯的檢測d 的高斯密度P{n}(p-d );C{tr}§是對這個粒子的分類概率;§是粒子通過檢測演算法得到的檢測可信度,(tr)是一個加權函數,計算如下:
3)基於馬爾科夫決策的多目標跟蹤演算法
作者把目標跟蹤看作為狀態轉移的過程,轉移的過程用馬爾科夫決策過程(MDP)建模。一個馬爾科夫決策過程包括下面四個元素:(S, A, T(.),R(.))。其中S表示狀態集合,A表示動作集合,T表示狀態轉移集合,R表示獎勵函數集合。一個決策是指根據狀態s確定動作a, 即 π: SA。一個對象的跟蹤過程包括如下決策過程:
從Active狀態轉移到Tracked或者Inactive狀態:即判斷新出現的對象是否是真。
從Tracked狀態轉移到Tracked或者Lost狀態:即判斷對象是否是持續跟蹤或者暫時處於丟失狀態。
從Lost狀態轉移到Lost或者Tracked或者Inactive狀態:即判斷丟失對象是否重新被跟蹤,被終止,或者繼續處於丟失狀態。
作者設計了三個獎勵函數來描述上述決策過程:
第一個是:
即判斷新出現的對象是否為真,y(a)=1時表示轉移到跟蹤狀態,反之轉移到終止狀態。這是一個二分類問題,採用2類SVM模型學習得到。這里用了5維特徵向量:包括x-y坐標、寬、高和檢測的分數。
第二個是:
這個函數用來判斷跟蹤對象下一時刻狀態是否是出於繼續跟蹤,還是處於丟失,即跟蹤失敗。這里作者用了5個歷史模板,每個模板和當前圖像塊做光流匹配,emedFB表示光流中心偏差, 表示平均重合率。 和 是閾值。
第三個是:
這個函數用來判斷丟失對象是否重新跟蹤,或者終止,或者保持丟失狀態不變。這里當丟失狀態連續保持超過 (=50)時,則轉向終止,其他情況下通過計算M個檢測匹配,來判斷是否存在最優的匹配使上式(3-14)獎勵最大,並大於0。這里涉及兩個問題如何設計特徵以及如何學習參數。這里作者構造了12維與模板匹配相關的統計值。而參數的學習採用強化學習過程,主要思想是在犯錯時候更新二類分類器值。
第二階段 深度學習應用
1)基於對稱網路的多目標跟蹤演算法
關於Siamese網路在單目標跟蹤深度學習中有了介紹,在這里不再介紹,可以向前參考。
2)基於最小多割圖模型的多目標跟蹤演算法
上述演算法中為了匹配兩個檢測採用LUV圖像格式以及光流圖像。Tang等人在文獻中發現採用深度學習計算的類光流特徵(DeepMatching),結合表示能力更強的模型也可以得到效果很好的多目標跟蹤結果。
基於DeepMatching特徵,可以構造下列5維特徵:
其中MI,MU表示檢測矩形框中匹配的點的交集大小以及並集大小,ξv和ξw表示檢測信任度。利用這5維特徵可以學習一個邏輯回歸分類器。
同樣,為了計算邊的匹配代價,需要設計匹配特徵。這里,作者採用結合姿態對齊的疊加Siamese網路計算匹配相似度,如圖9,採用的網路模型StackNetPose具有最好的重識別性能。
綜合StackNetPose網路匹配信任度、深度光流特徵(deepMatching)和時空相關度,作者設計了新的匹配特徵向量。類似於[2], 計算邏輯回歸匹配概率。最終的跟蹤結果取得了非常突出的進步。在MOT2016測試數據上的結果如下表:
3)通過時空域關注模型學習多目標跟蹤演算法
除了採用解決目標重識別問題的深度網路架構學習檢測匹配特徵,還可以根據多目標跟蹤場景的特點,設計合適的深度網路模型來學習檢測匹配特徵。Chu等人對行人多目標跟蹤問題中跟蹤演算法發生漂移進行統計分析,發現不同行人發生交互時,互相遮擋是跟蹤演算法產生漂移的重要原因[4]。如圖10。
在這里插入圖片描述
針對這個問題,文獻[4]提出了基於空間時間關注模型(STAM)用於學習遮擋情況,並判別可能出現的干擾目標。如圖11,空間關注模型用於生成遮擋發生時的特徵權重,當候選檢測特徵加權之後,通過分類器進行選擇得到估計的目標跟蹤結果,時間關注模型加權歷史樣本和當前樣本,從而得到加權的損失函數,用於在線更新目標模型。
該過程分三步,第一步是學習特徵可見圖:
第二步是根據特徵可見圖,計算空間關注圖(Spatial Attention):
其中fatt是一個局部連接的卷積和打分操作。wtji是學習到的參數。
第三步根據空間注意圖加權原特徵圖:
對生成的加權特徵圖進行卷積和全連接網路操作,生成二元分類器判別是否是目標自身。最後用得到分類打分選擇最優的跟蹤結果。
4)基於循環網路判別融合表觀運動交互的多目標跟蹤演算法
上面介紹的演算法採用的深度網路模型都是基於卷積網路結構,由於目標跟蹤是通過歷史軌跡信息來判斷新的目標狀態,因此,設計能夠記憶歷史信息並根據歷史信息來學習匹配相似性度量的網路結構來增強多目標跟蹤的性能也是比較可行的演算法框架。
考慮從三個方面特徵計算軌跡歷史信息與檢測的匹配:表觀特徵,運動特徵,以及交互模式特徵。這三個方面的特徵融合以分層方式計算。
在底層的特徵匹配計算中,三個特徵都採用了長短期記憶模型(LSTM)。對於表觀特徵,首先採用VGG-16卷積網路生成500維的特徵ϕtA,以這個特徵作為LSTM的輸入計算循環。
對於運動特徵,取相對位移vit為基本輸入特徵,直接輸入LSTM模型計算沒時刻的輸出ϕi,對於下一時刻的檢測同樣計算相對位移vjt+1,通過全連接網路計算特徵ϕj,類似於表觀特徵計算500維特徵ϕm,並利用二元匹配分類器進行網路的預訓練。
對於交互特徵,取以目標中心位置周圍矩形領域內其他目標所佔的相對位置映射圖作為LSTM模型的輸入特徵,計算輸出特徵ϕi,對於t+1時刻的檢測計算類似的相對位置映射圖為特徵,通過全連接網路計算特徵ϕj,類似於運動模型,通過全連接網路計算500維特徵ϕI,進行同樣的分類訓練。
當三個特徵ϕA,ϕM,ϕI都計算之後拼接為完整的特徵,輸入到上層的LSTM網路,對輸出的向量進行全連接計算,然後用於匹配分類,匹配正確為1,否則為0。對於最後的網路結構,還需要進行微調,以優化整體網路性能。最後的分類打分看作為相似度用於檢測與軌跡目標的匹配計算。最終的跟蹤框架採用在線的檢測與軌跡匹配方法進行計算。
5)基於雙線性長短期循環網路模型的多目標跟蹤演算法
在對LSTM中各個門函數的設計進行分析之後,Kim等人認為僅僅用基本的LSTM模型對於表觀特徵並不是最佳的方案,在文獻[10]中,Kim等人設計了基於雙線性LSTM的表觀特徵學習網路模型。
除了利用傳統的LSTM進行匹配學習,或者類似[5]中的演算法,拼接LSTM輸出與輸入特徵,作者設計了基於乘法的雙線性LSTM模型,利用LSTM的隱含層特徵(記憶)信息與輸入的乘積作為特徵,進行匹配分類器的學習。
這里對於隱含層特徵ht-1,必須先進行重新排列(reshape)操作,然後才能乘以輸入的特徵向量xt。
其中f表示非線性激活函數,mt是新的特徵輸入。而原始的檢測圖像採用ResNet50提取2048維的特徵,並通過全連接降為256維。下表中對於不同網路結構、網路特徵維度、以及不同LSTM歷史長度時,表觀特徵的學習對跟蹤性能的影響做了驗證。
可以看出採用雙線性LSTM(bilinear LSTM)的表觀特徵性能最好,此時的歷史相關長度最佳為40,這個值遠遠超過文獻[5]中的2-4幀歷史長度。相對來說40幀歷史信息影響更接近人類的直覺。
⑤ 擁塞演算法
基於包丟失檢測的 Reno、NewReno 或者 cubic 為代表,其主要問題有 Buffer bloat 和長肥管道兩種。和這些演算法不同,bbr 演算法會以時間窗口內的最大帶寬 max_bw 和最小 RTT min_rtt,並以此計算發送速率和擁塞窗口
RTProp : round-trip propagation time BtlBW : bottleneck bandwidth,bbr 演算法關於擁塞窗口的核心就是計算 BtlBW 和 RTprop,根據這兩者值計算 BDP
bbr 演算法輸出 pacing_rate 和 cwnd 兩個數據。pacing_rate 決定發包速率,cwnd 為窗口大小
TCP Tahoe 和 Reno
這兩個演算法是根據其第一次加入到4.3BSD的時間回溯命名的,兩個名字對應自其第一次出現時BSD的代號,而代號分別取自太浩湖(Lake Tahoe)和其附近的城市裡諾市
• Tahoe:如果收到三次重復確認——即第四次收到相同確認號的分段確認,並且分段對應包無負載分段和無改變接收窗口——的話,Tahoe演算法則進入快速重傳,將慢啟動閾值改為當前擁塞窗口的一半,將擁塞窗口降為1個MSS,並重新進入慢啟動階段
• Reno:如果收到三次重復確認,Reno演算法則進入快速重傳,只將擁塞窗口減半來跳過慢啟動階段,將慢啟動閾值設為當前新的擁塞窗口值,進入一個稱為「快速恢復」的新設計階段
Fast recovery
是Reno演算法新引入的一個階段,在將丟失的分段重傳後,啟動一個超時定時器,並等待該丟失分段包的分段確認後,再進入擁塞控制階段。如果仍然超時,則回到慢啟動階段
TCP Vegas
至1990年代中期,TCP量度延遲和RTT都是以傳輸緩存中最後一個被傳送的分段包為准。vegas通過度量傳輸緩存中每個傳送分段包來代替只量度一個分段包,通過每次度量的平均值來增加擁塞窗口。該演算法取名自內華達州最大的城市拉斯維加斯。不過由於一些資源公平性原因,該演算法並沒有在彼得森的實驗室之外廣泛部署。一些研究認為該演算法和其他擁塞演算法混合使用,可能會導致性能競爭不及其他演算法。在各種TCP擁塞演算法的比較研究中,Vegas被認為是最平滑的控制演算法,其次為CUBIC
TCP New Reno
TCP New Reno是對TCP Reno中快速恢復階段的重傳進行改善的一種改進演算法,其定義於RFC 6582,覆蓋了原有在RFC 3782和RFC 2582的舊定義。
在Reno的快速恢復中,一旦出現3次重復確認,TCP發送方會重發重復確認對應序列號的分段並設置定時器等待該重發分段包的分段確認包,當該分段確認包收到後,就立即退出快速恢復階段,進入擁塞控制階段,但如果某個導致重復確認的分段包到遇到重復確認期間所發送的分段包存在多個丟失的話,則這些丟失只能等待超時重發,並且導致擁塞窗口多次進入擁塞控制階段而多次下降。而New Reno的快速恢復中,一旦出現3次重復確認,TCP發送方先記下3次重復確認時已發送但未確認的分段的最大序列號,然後重發重復確認對應序列號的分段包。如果只有該重復確認的分段丟失,則接收方接收該重發分段包後,會立即返回最大序列號的分段確認包,從而完成重發;但如果重復確認期間的發送包有多個丟失,接收方在接收該重發分段後,會返回非最大序列號的分段確認包,從而發送方繼續保持重發這些丟失的分段,直到最大序列號的分段確認包的返回,才退出快速恢復階段。
New Reno在低錯誤率時運行效率和「選擇確認」(Selective ACKnowledgement,SACK)相當,在高錯誤率仍優於Reno
TCP Hybla
TCP Hybla旨在消除由於高延遲地面線路或者衛星無線鏈路下導致的RTT過長而對TCP鏈接的影響。它通過對擁塞窗口動態分析來修改,來減少對RTT的性能依賴
TCP BIC 和 CUBIC
TCP BIC(Binary Increase Congestion control)旨在優化高速高延遲網路(即根據RFC 1072所定義的「長肥網路」(long fat network,LFN))的擁塞控制,其擁塞窗口演算法使用二分搜索演算法嘗試找到能長時間保持擁塞窗口最大值的值。Linux內核在2.6.8至2.6.18使用該演算法作為默認TCP擁塞演算法。
CUBIC則是比BIC更溫和和系統化的分支版本,其使用三次函數代替二分演算法作為其擁塞窗口演算法,並且使用函數拐點作為擁塞窗口的設置值。Linux內核在2.6.19後使用該演算法作為默認TCP擁塞演算法
TCP Westwood和Westwood+
TCP Westwood改良自New Reno,不同於以往其他擁塞控制演算法使用丟失來測量,其通過對確認包測量來確定一個「合適的發送速度」,並以此調整擁塞窗口和慢啟動閾值。其改良了慢啟動階段演算法為「敏捷探測(Agile Probing)」,和設計了一種持續探測擁塞窗口的方法來控制進入「敏捷探測」,使鏈接盡可能地使用更多的帶寬。Westwood+使用更長的帶寬估計間隔和優化的濾波器來修正Westwood對ACK壓縮場景對帶寬估計過高的問題。通過以上改良,TCP Westwood系列演算法在有線網路和無線網路的擁塞控制上獲取平衡,尤其研究中針對於無線通信網路上
Compound TCP
復合TCP(Compound TCP)是微軟自己實現的TCP擁塞控制演算法,通過同時維護兩個擁塞窗口,來實現在長肥網路有較好的性能而又不損失公平性。該演算法在Windows Vista和Windows Server 2008開始廣泛部署,並通過補丁的方式回溯支持到Windows XP和Windows Server 2003。在Linux上也有一個舊版本的移植實現
TCP PRR
TCP PRR(TCP Proportional Rate Rection )是旨在恢復期間提高發送數據的准確性。該演算法確保恢復後的擁塞窗口大小盡可能接近慢啟動閾值。在Google進行的測試中,能將平均延遲降低3~10%,恢復的超時減少5%。PRR演算法之後作為Linux內核3.2版本的默認擁塞演算法
TCP BBR
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google設計,於2016年發布的擁塞演算法。以往大部分擁塞演算法是基於丟包來作為降低傳輸速率的信號,而BBR則基於模型主動探測。該演算法使用網路最近出站數據分組當時的最大帶寬和往返時間來創建網路的顯式模型。數據包傳輸的每個累積或選擇性確認用於生成記錄在數據包傳輸過程和確認返回期間的時間內所傳送數據量的采樣率。該演算法認為隨著網路介面控制器逐漸進入千兆速度時,與緩沖膨脹相關的延遲相比丟包更應該被認為是識別擁塞的主要決定因素,所以基於延遲模型的擁塞控制演算法(如BBR)會有更高的吞吐量和更低的延遲,可以用BBR來替代其他流行的擁塞演算法,例如CUBIC
QUIC Quick UDP Internet Connections
QUIC旨在提供幾乎等同於TCP連接的可靠性,但延遲大大減少。它主要通過兩個理解HTTP流量的行為來實現這一點:
第一個變化是在連接創建期間大大減少開銷。由於大多數HTTP連接都需要TLS,因此QUIC使協商密鑰和支持的協議成為初始握手過程的一部分。 當客戶端打開連接時,伺服器響應的數據包包括將來的數據包加密所需的數據。
QUIC使用UDP協議作為其基礎,不包括丟失恢復。相反,每個QUIC流是單獨控制的,並且在QUIC級別而不是UDP級別重傳丟失的數據。這意味著如果在一個流中發生錯誤,協議棧仍然可以獨立地繼續為其他流提供服務
QUIC包括許多其他更普通的更改,這些更改也可以優化整體延遲和吞吐量
每個數據包是單獨加密的,因此加密數據時不需要等待部分數據包。 在TCP下通常不可能這樣做,其中加密記錄在位元組流中,並且協議棧不知道該流中的更高層邊界。這些可以由運行在更上層的協議進行協商,但QUIC旨在通過單個握手過程完成這些
QUIC的另一個目標是提高網路切換期間的性能,例如當移動設備的用戶從WiFi熱點切換到移動網路時發生的情況。 當這發生在TCP上時,一個冗長的過程開始了:每個現有連接一個接一個地超時,然後根據需要重新創建。期間存在較高延遲,因為新連接需要等待舊連接超時後才會創建。 為解決此問題,QUIC包含一個連接標識符,該標識符唯一地標識客戶端與伺服器之間的連接,而無論源IP地址是什麼。這樣只需發送一個包含此ID的數據包即可重新創建連接,因為即使用戶的IP地址發生變化,原始連接ID仍然有效
QUIC在應用程序空間中實現,而不是在操作系統內核中實現。當數據在應用程序之間移動時,這通常會由於上下文切換而調用額外的開銷。 但是在QUIC下協議棧旨在由單個應用程序使用,每個應用程序使用QUIC在UDP上託管自己的連接
Chromium的網路堆棧同時打開QUIC和傳統TCP連接,並在QUIC連接失敗時以零延遲回退到TCP連接