计算机视觉CV算法分类,计算机视觉(CV)的算法有哪些,具体都有哪些特点?...
目前計算機視覺主要分類有目標識別、目標檢測(識別+定位)、目標分割(檢測+分割),而應用層面就多了,文字描述較繁瑣,簡單地畫了一部分,如下:
而算法層面,理論上是無窮種的,同一個需求,根據場景可能會有非常多的差異變化,從而實現路徑會有很多,如人臉識別。
人臉識別算法主要包含三個模塊:
1.人臉檢測(Face Detection):確定人臉在圖像中的大小和位置,也就是在圖像中預測anchor;
2.人臉對齊(Face Alignment):它的原理是找到人臉的若干個關鍵點(基準點,如眼角,鼻尖,嘴角等),然后利用這些對應的關鍵點通過相似變換(Similarity Transform,旋轉、縮放和平移)將人臉盡可能變換到標準人臉;
3.人臉特征表征(Feature Representation):它接受的輸入是標準化的人臉圖像,通過特征建模得到向量化的人臉特征,最后通過分類器判別得到識別的結果。關鍵點是怎樣得到不同人臉的有區分度的特征,比如:鼻子、嘴巴、眼睛等。
MTCNN
MTCNN算法主要由三個框架組成,分別是PNet,RNet,ONet。下面將分別介紹這三個部分。
理論基礎:
PNet
Proposal Network (P-Net):該網絡結構主要獲得了人臉區域的候選窗口和邊界框的回歸向量。并用該邊界框做回歸,對候選窗口進行校準,然后通過非極大值抑制(NMS)來合并高度重疊的候選框。
因為實際的圖片大小不一,所以PNet是一個全卷積網絡,對于輸入的圖片大小可以是任意值;將圖片輸入PNet之前,有一個循環,每一次循環會將圖片進行縮放,再輸入PNet;這樣形成一個圖片金字塔,圖片每次縮放因子是0.80(論文的初始值應該是0.709),當寬高小于12時候這張圖片對應的循環結束,12是PNet的最小圖片輸入尺寸。下圖表示的是PNet的結構
由上面這張圖可以得到,一張12x12x3的圖片最終的輸出的結果是1x1x32的特征圖,再分成三條支路,用于人臉分類、邊框回歸、人臉特征點定位。
這三條支路的損失函數分別是交叉熵(二分類問題常用)、平方和損失函數、5個特征點與標定好的數據的平方和損失。最后的總損失是三個損失乘上各自的權重比之和,在PNet里面三種損失的權重是1:0.5:0.5。將圖片輸入PNet后,得到了cls_cls_map, reg這兩個數組,其中cls_cls_map是(H,W,2)的二維數組,就是非人臉和人臉的概率。PNet直接輸出的邊界框并不是傳統回歸中的邊界坐標,而是預測人臉位置相對于輸入圖片的位置差,即為reg。
將cls_cls_map里面人臉的概率和一個事先設定的閾值相比較,如果大于這個閾值,就將這張圖片對應的reg數組里面的預測值提取出來,通過逆運算得到原始像素坐標。對于 x * y 的輸入,將產生大小為[(x?12)/2+1]?[(y?12)2+1]的輸出。因為池化層的步長是2,所以上述式子的分母為2。將reg的坐標通過此方法可還原預測邊框值在原始圖片的像素坐標。最后返回的數組是(x1,y1,x2,y2,score,reg),其中(x1,y1,x2,y2)是bbox在原始圖片中的像素坐標。score是cls_cls_map對應的人臉概率。
完成這一步后,將使用非極大值抑制法(NMS)去掉一些重復框,這個算法的原理是將上一步返回的數組的score值最大的那一行元素提取出來,將剩下的所有的元素的score和一個設定好的閾值相比較,將score值大于閾值(0.5)的元素拋棄,再將剩下的元素重復之前的提取最大值并進行比較的操作。直到最后,這樣就初步拋棄了那些重合度較高的人臉框。
因為(x1,y1,x2,y2)是在原圖像中的像素坐標,reg是候選框區域相對于像素坐標的偏差,這樣講將原像素坐標加上偏差值,即可得到候選框的坐標。將初步篩選后的的bbox按照上面的方法refine,到此為止,PNet這一部分就結束了。輸出的是候選框的4個坐標加上對應的score值。
RNet
Refine Network (R-Net):該網絡結構還是通過邊界框回歸和NMS來去掉那些false-positive區域。只是由于該網絡結構和P-Net網絡結構有差異,多了一個全連接層,所以會取得更好的抑制false-positive的作用。
首先將PNet的輸出resize成正方形,這主要是基于人臉一般都是正方形的。
再將PNet生成的bbox里的元素調整一下,生成(dy, edy, dx, edx, y, ey, x, ex, tmpw, tmph)這樣的數組;生成的元素的意義如下:
1>. dx,dy:bbox的相對本身起點坐標(0,0)。
2>. edx,edy:bbox的相對本身終點坐標(tmpw-1, tmph-1)。
3>. x,y : 原始圖片的bbox起點。
4>. ex,ey:原始圖片的bbox結束點。
在生成的過程還會有檢測,避免bbox的坐標超出原始圖片或者為負值;接下來遍歷這個數組,將里面的bbox從原始圖片里面摳出來,resize成24x24同時進行歸一化。
完成了前面的操作后就是將24x24的圖片喂入RNet了,下圖表示的是RNet的結構:
可以看出RNet最后是采用的全連接層,這也是為什么喂入的圖片統一成24x24大小。
由上面這張圖可以得到,一張24x24x3的圖片最終的輸出的結果是3x3x64的特征圖,再經歷全連接層后分成三條支路,用于人臉分類、邊框回歸、人臉特征點定位。這三條支路的損失函數和PNet的一樣,各損失的權重比也為1:0.5:0.5。
將圖片輸入RNet后,得到了cls_scores, reg這兩個數組,cls_scores表示非人臉和人臉的概率,reg表示bbox的回歸信息。同樣將cls_scores中人臉的概率與實現設定的閾值比較,將大于閾值的圖片對應的bbox提取出來,過濾掉一部分非人臉的bbox。
接著再次調用NMS,拋棄掉大量的重疊率高的人臉框,經過兩次的篩選,剩下的bbox的數量就少了很多。最后進行RNet的最后一步操作,就是回歸信息reg來調整bbox的坐標,大致就是將bbox的4個坐標乘上bbox的寬或者高,其中x和寬相乘,y和高相乘。最后就是返回調整后的四個坐標
ONet
Output Network (O-Net):該層比R-Net層又多了一層卷基層,所以處理的結果會更加精細。作用和R-Net層作用一樣。但是該層對人臉區域進行了更多的監督,同時還會輸出5個地標(landmark)。
首先將RNet的輸出resize成正方形,接下來的操作和對應的RNet部分相似,只是再喂入ONet之前圖片是resize乘48x48。
將48x48x3的圖片喂入ONet后輸出的是3x3x128的特征圖,經過全連接層后同樣是有著三條支路。三條支路的損失函數與PNet、RNet一樣,但是三個損失函數的權重比為1:0.5:1。
這次從ONet的輸出接受cls_scores, reg, landmark這三個數組,同樣先根據cls_scores的人臉概率是否大于設定的閾值來拋棄一部分非人臉框。接下來就是確定landmark的值,因為前面直接得到的關鍵點的x、y坐標相關信息并不是x、y的值,而是一個相對于寬高的偏置值,最終的關鍵點的x、y值可以通過這個偏置值和bbox的寬或者高(x與寬,y與高)相乘再與bbox的坐標相加得到。
接下來就是回歸信息reg來調整bbox的坐標,與RNet輸出前的操作一樣。完成之后經歷兩次的NMS操作,但是這次的NMS操作與之前的略有不用,大家可以看詳細的代碼解釋。最后就可以輸出bbox和landmark了,至此算法就結束了。
在人臉識別領域除了MTCNN,還有:
PFLD算法,目前主流數據集上達到最高精度、ARM安卓機140fps,模型大小僅2.1M;
虹軟屬于人臉檢測技術,能夠幫助您檢測并且定位到影像(圖片或者視頻)中的人臉;
基于深度神經網絡的深度檢測:mask R-CNN、YOLO、SSD、fast R-CNN等等
綜上,每個算法模型適用場景不盡相同,所以不好評判各算法的優劣。
總結
以上是生活随笔為你收集整理的计算机视觉CV算法分类,计算机视觉(CV)的算法有哪些,具体都有哪些特点?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试用例文档模板 简书,如何写出高质
- 下一篇: 个性化 服务器运行失败,VirtualB