手掌静脉识别——利用深度学习进行ROI的选取
根據上一次的matconvnet學習分類左右手之后,我們已經解決了第一個問題,接下來就是如何來選取這樣一個框作為我們的ROI,首先我們來了解一下ROI(感興趣區域),主要的要求就是要包含有較多的的掌脈信息和具有很好的一致性,就是說一旦這個人的手掌脈信息錄入之后,每次識別時提取到的ROI比須是一樣的,因為之后的識別和匹配都是只針對提取到的ROI部分,這樣可以加快識別的速度。目前的手掌靜脈已經有了小范圍的應用。
手掌靜脈ROI區域選定:
? ? 通過學習object dectection主要是人臉識別算法,目前最多的深度學習的人臉檢測算法都是利用首先用一個算法選出的大致的框,比如R_CNN中的Select Search算法,Faster_RCNN中的RPN,但是上述的方法有顯著的效果都是因為圖像包含多類別多層次的信息,所以可以用上述的方法來做一個選擇性的多層分割策略。然而手掌靜脈的圖像整體的像素空間差別不是很顯著,且沒有多層次的信息,所以用上述的方法,不僅加大了算法開銷反而得不到好的結果,同時上述的方法主要是進行物體的檢測,有一個區域融合的過程,所以我們還是直接用傳統的滑動窗口的算法。主要參考《CVPR2015-A-Convolutional-Neural-Network-Cascade-for-Face-Detection》這篇文獻,我們的網絡設計和之后的后處理都是受這篇文獻的啟發而來。
a.? 準備數據:
因為PolyU dataset已經有現成的提取好ROI得圖片,選取2000張作為positive數據集。然后在polyU dataset的整張圖片上用滑動窗口,提取與中心位置的128*128的框有重疊區域20%~50%的框作為negative,有選擇性的在dataset中選取大約20張圖片,得到4000張子圖片作為negative數據集,另外同樣的拿出1000張子圖片作為驗證集的negative樣本,500張ROI圖片作為驗證集的positive樣本。
b.? 網絡設計:
這里的網絡主要的設計思路也來源于上述文獻的48net的結構,但是因為輸入圖像的大小不一致,所以還是要重新設計,下圖是我們設計好的網絡結構。
網絡是一個17層的網絡,包括6個卷積層和3個pooling層及6個reLU層和一個softmax層
卷積層采取了6種不同尺寸的卷積核,采用步長為1進行卷積;
對于conv1,當輸入為128*128時,經過第一層卷積,得到的feature map大小為(128-13)/1 +1 = 117;同理,到最后一層卷積時,得到的是1*1的結果。
為減少參數的數量,防止過擬合現象的發生。我們采取的是max-pooling的策略,步長為2。
分類層
使用的損失函數是softmaxloss,將二維向量歸一到0—1之間。Softmaxloss函數的公式
c. 參數設置:
輸入圖像大小:128*128,因為polyU dataset 中的ROI的大小是128*128,為了最大程度的保存圖片的像素信息,所以沒有進行壓縮,所以最終我們得到的結果也是128*128的
網絡的其他參數如下:
net.meta.trainOpts.learningRate= 0.001 ;
net.meta.trainOpts.numEpochs=30 ;
net.meta.trainOpts.batchSize=100;
?
測試結果:
用200張negative圖片與200張positive圖片進行測試,得到err_rate=0.0025。
a.? 候選框處理:
得到訓練好的網絡之后,我們將一張原圖的主要區域用等距的128*128的框得到子圖,對于255*382的原圖,利用step=4的滑動窗口,并且在原圖的主要區域內也就是說忽略手掌與背景交界的地方,可以得到1000左右的子圖,將這些子圖輸入到網絡中,每個框可以得到一個分數和分類,我們將其中標記為positive的框畫出來,這些框就是我們的候選框,對于這些重疊的框我們首先按照分數的高低排序,然后利用nms(非極大抑制算法),將候選框數量減少。經過多次試驗,得到距離為4是最好的選擇,因為當距離為2的時候在候選框的處理上用的時間過長,而距離為8得到的效果不是很好,所以我們選定4的距離為最終的step。
如下圖所示是整個的處理過程和結果(以polyU dataset中的0001,1_01.jpg為例),可以看出經過網絡篩選的候選框,里面有很豐富的靜脈信息。
nms算法介紹
非極大值抑制算法(Non-maximumsuppression)
非極大值抑制算法是常用的目標檢測框去重復的算法。顧名思義就是抑制不是極大值的元素,搜索局部的極大值。在目標檢測中用于提取分數最高的窗口的。在手掌ROI檢測中,滑動窗口經提取特征,經分類器分類識別后,每個窗口都會得到一個分數。但是滑動窗口會導致很多窗口與其他窗口存在包含或者大部分交叉的情況。這時就需要用到NMS來選取那些領域里分數最高(即是ROI的概率最大),并且抑制那些分數低的窗口。
算法思路如下:
算法輸入:輸入窗口的位置和分數 (x1,y1,x2,y2,score),閾值(overlap)
1、計算所有窗口的面積
Area = (x2-x1+1).*(y2-y1+1)
2、對所有窗口的分數進行從小到大排序并取出最高分數的序號
3、循環計算1到次高分數窗口與最高分數窗口的交叉面積與兩者間最小面積的比例
While ROI檢測框集合I不為空
(1)? 從集合I中取出置信度最大的一個框(xx1,yy1,xx2,yy2)存到待輸出集合J中
(2)? 與集合I中其他框計算交集大小
(3)? 并集 = 兩個框的面積和 – 交集大小
(4)? 計算交并比 交集大小/并集大小,大于閾值 則將相應的組刪去(即抑制此窗口)
4、返回集合J
具體的實現在上面提到的CVPR2015的code里。至此這個問題也得到了解決,指導老師也給予了充分的肯定,接下來就是做實驗驗證方法的可行性了。
總結
以上是生活随笔為你收集整理的手掌静脉识别——利用深度学习进行ROI的选取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈NAT技术背景
- 下一篇: centos7无盘启动_200M Lin