OverFeat官方:http://cilvr.nyu.edu/doku.php?id=code:start
参考博客:
http://blog.csdn.net/hjimce/article/details/50187881
http://blog.csdn.net/whiteinblue/article/details/43374195
摘要:
本文提出一种整合框架,通过卷积网络来实现分类、定位、检测三种不同的功能。首先介绍在ConvNet中怎么添加一种滑窗机制,然后也提出了一种新颖的深度学习方法通过目标boundaries来进行目标定位,其中边界区域是逐渐累积得到的。通过单个网络可以同时完成不同的taskes(分类、定位、检测)。这个框架在ILSVRC2013目标检测分来中取得了非常好的成绩。创建了一个前沿方法来进行目标检测。OverFeat特征提取已经发行(http://cilvr.nyu.edu/doku.php?id=software:overfeat:start)。
1、介绍
ConvNets的优势是端对端的训练网络,从图像的底层像素特性到最后的分类输出,每一层都可以作为特许证提取。但是不足就是在训练过程中对标签信息的依赖比较大。
本文主要思想就是训练出一个同时能分类、定位、检测的网络,很明显,他们之间有相辅相成作用。所以会使功能性能更好。比如可以直接结合定位预测(localization predictions)来进行目标检测,检测就不需要backgroud samples了,没有在背景样本上训练,那么网络会集中在positive classes上,定位会更准确。
对于以前的分类网络框架,采用的ImageNet数据,其中分类目标是占整张图像的中心区域,或者大部分人区域。但是对于目标只是图像中的一小个区域还能够很好的分类吗?对于这种情况,提出了三种方法,第一种:可以通过滑窗机制进行。借用对于一张图像的多目标定位的滑窗机制,不需要检测整个目标,只要含有目标的一部分,就可以进行分类了。每个不同的viewing windows含有object中的一部分,不是entire Object或者center of the object,但是这种方法分类结果并不好;第二种:除了每个window的categories,还有定位预测以及边缘大小;第三种:在每个位置和大小区域累积categories置信度。
分析了多任务、人脸检测、姿态分析、定位等现状,并说明本文方法是第一次提出用convNet做定位、检测。提出的评估标注(evaluation criterion)能够更好的提高预测结果。
2、视觉任务
分类、定位、检测三个任务中,前面是后面任务的子任务。分类、定位可以输出一个正确的、以及五个猜想的;但是检测就是检测到多少个就输出多少个;其中定位也是需要背景训练图像。分类、定位的dataset是一样的,但是检测需要添加一些小目标,以及一些显著目标不存在的图像集。
3、第一个任务:分类
分类网络结构基本是AlexNet的前五层;只是其中对feature map进行了offset pooling.
定位网络结构在AlexNet后面全连接层不使用SoftMax分类结构,而是用一个回归网络,这样就可以进行定位预测了;测试结构中会把测试图像做不同resize,论文Table5表格中给了6种不同的输入size;比AlexNet灵活(图像的size可以是任意的)网络与view越匹配,置信度越高。
未完,具体算法改进待续~
将分类与定位网络结合起来就是detection;
‘AlexNet’ network
input 3*224*224
‘fast’ network (table 1 in http://arxiv.org/abs/1312.6229):
input 3x231x231
stage 1: convo: 11×11 stride 4×4; ReLU; maxpool: 2×2 stride 2×2; output (layer 3): 96x24x24
stage 2: convo: 5×5 stride 1×1; ReLU; maxpool: 2×2 stride 2×2; output (layer 6): 256x12x12
stage 3: convo: 3×3 stride 1×1 0-padded; ReLU; output (layer 9) 512x12x12
stage 4: convo: 3×3 stride 1×1 0-padded; ReLU; output (layer 12) 1024x12x12
stage 5: convo: 3×3 stride 1×1 0-padded; ReLU; maxpool: 2×2 stride 2×2; output (layer 16) 1024x6x6
stage 6: convo: 6×6 stride 1×1; ReLU; output (layer 18) 3072x1x1
stage 7: full; ReLU; output (layer 20) 4096x1x1
stage 8: full; output (layer 21) 1000x1x1
output stage: softmax; output (layer 22) 1000x1x1
‘accurate’ network (table 2 in http://arxiv.org/abs/1312.6229):
input 3x221x221
stage 1: convo: 7×7 stride 2×2; ReLU; maxpool: 3×3 stride 3×3; output (layer 3): 96x36x36
stage 2: convo: 7×7 stride 1×1; ReLU; maxpool: 2×2 stride 2×2; output (layer 6): 256x15x15
stage 3: convo: 3×3 stride 1×1 0-padded; ReLU; output (layer 9) 512x15x15
stage 4: convo: 3×3 stride 1×1 0-padded; ReLU; output (layer 12) 512x15x15
stage 5: convo: 3×3 stride 1×1 0-padded; ReLU; output (layer 15) 1024x15x15
stage 6: convo: 3×3 stride 1×1 0-padded; ReLU; maxpool: 3×3 stride 3×3; output (layer 19) 1024x5x5
stage 7: convo: 5×5 stride 1×1; ReLU; output (layer 21) 4096x1x1
stage 8: full; ReLU; output (layer 23) 4096x1x1
stage 9: full; output (layer 24) 1000x1x1
output stage: softmax; output (layer 25) 1000x1x1