手掌静脉识别——利用深度学习进行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为例),可以看出经过网络筛选的候选框,里面有很丰富的静脉信息。

手掌静脉识别——利用深度学习进行ROI的选取_第1张图片


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里。

至此这个问题也得到了解决,指导老师也给予了充分的肯定,接下来就是做实验验证方法的可行性了。


你可能感兴趣的:(深度学习,医学图像处理,模式识别,图像处理)