现在有google的Inception V、ImageNet等基于深度学习的物体检测网络,并且效果非常好。
但很多思想都来源于2014年的一片文章:Rich feature hierarchies for accurate object detection and semantic segmentation
这篇文章是第一次CNN用在图像检测上并给出大量的实验结果。
文章地址:http://xueshu.baidu.com/s?wd=paperuri%3A%28f818e23d213da893fc890f5d96ef4cb3%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fwww.arxiv.org%2Fpdf%2F1311.2524.pdf&ie=utf-8&sc_us=7755102487057457737
这篇文章解决的是在有较少量的训练数据集的时候的物体检测。
两个博客:http://blog.youkuaiyun.com/u011534057/article/details/51240387
与http://blog.youkuaiyun.com/u011534057/article/details/51218218
论文中模型的理解:
1、首先根据数据集ImageNet ILSVC 2012训练一个CNN的分类模型,模型的output为1000维。
(这个数据集是一个类别数据库,即一张图片对应一个类别,共1000个类别,这个数据集是当作迁移学习用的)
网络的最后两层为4096*1000维。
2、采用数据集PASCAL VOC 2007,这个数据集不是一一对应的类别关系,这个数据集是为物体检测服务的。
数据集中每张图片中人为用框框出来某一类别的图片,并进行标注,如一个图片中可能有狗,自行车,人等。
这个数据集中目前总共包括20个类别,共10000张图片(相对来讲数据量挺大的了,平均每一个类别500张)。
训练过程:
(1)把第一步中训练得到的网络的最后一层换成4096*21维(20类+1背景);
(2)对pascal vol 2007数据集中的每张图片p1,采用selective search算法生成2000张左右可能包括物体的图,
这些图片进行一些变换后变成固定的维度;
(3)针对这2000张的每一张,如果与p1中标注过的框(如框住狗的框)的重合度超过0.5,
那么把它当作正样本(即维度为21的output结果的y对应类别位置设为1),否则当作负样本(第21维背景位置设为1);
(4)利用上面生成的这些样本进行训练(或者说调优fine-tunning)。由于负样本很多,影响训练速度,
因此采用较为苛刻的做法选择负样本,如果这个负样本与所有标注过的框框交叉少于0.3才作为负样本;
测试过程:
(1)对于这20个类别,针对每个类别构造二分类的SVM分类器,分类器的输出为是否这个类,
这个SVM分类器的训练数据不是单纯的为上述的正样本与负样本对应的CNN特征,
而是把整个物体都包括进来的框才能作为正样本对应的特征。为什么CNN采用简单的0.5正样本而SVM采用严格正样本呢?
这是因为CNN需要大量的数据训练,在数据量较少时容易发生过拟合,因此要求比较松,对CNN鲁棒性也好,
而SVM适用于小量样本,因此SVM使用严格正样本。
至于负样本,则采用交叉少于0.3(IOU为0.3)的样本作为负样本。
(2)针对一个新图片,由selective search得到2000个左右的框图后,将其输入到每一个SVM中判断此图为某一物体
还是背景。2000个框图对应的特征矩阵为2000*4096,而N个分类器的参数为4096*N(每个分类器对应4096个参数),
将2000*4094的矩阵乘以4096*N的矩阵,得到的矩阵为2000*N的矩阵,最后的结果需要分析这个矩阵。
(3)2000*N的矩阵的每一行可以表示为:这2000个框图类别Ni的概率。针对这些概率,
采用非极大值抑制(NMS)算法去掉没用的矩阵,保留最可能的矩阵。
(4)在得到了最可能的矩阵后,我们并不能说框中的图像就是我们所要的图形,因为这些图形只是用selective search得到的,
因此我们需要一个精修的过程。
框图精修的过程可以理解为一个线性变换,即一个框在经过平移、缩放后与目标图形的框相符合。
因此,这里对于一个框,需要找到一组线性变换的四个参数,来对框进行线性变换。
这四个参数我们通过回归模型来得到,同样需要用到上面提到的正样本。
对于上面的正样本,由我们能计算得到他们与真正的框的线性变换参数,因此我们可以用属于同一类别的这些正样本,
进行梯度下降算法或者最小二乘法,得到框与线性变换参数的对应关系,即输入一个框,得到一组参数。
如果用梯度下降算法来回归的话,那么输入为正样本框的位置参数,输出为线性变换参数。
因此,对(3)得到的最可能的矩阵,输入上面的回归模型,得到线性变换参数,即可得到真正的物体框。
关于Bounding-Box regression的一个博客:http://blog.youkuaiyun.com/u011534057/article/details/51235964
关于整个过程一个非常详细的博客:http://blog.youkuaiyun.com/u011534057/article/details/51218250
——————————————————————————————————————————————
关于这篇文章的一个博客:https://zhuanlan.zhihu.com/p/22287237?refer=startdl
针对第一步的候选区域提取,作者采用的是这篇文章的思想:Selective Search for Object Recognition
这篇文章地址:https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf
这篇文章内容太多了。。。
关于这篇文章的一个博客:http://blog.youkuaiyun.com/mao_kun/article/details/50576003
这篇文章的思想主要是:
首先利用文章Efficient Graph-Based Image Segmentation的算法将图片分成不相交的多个部分,
然后根据这些不相交的部分的相似度,构造类似于霍夫曼树的结构,在构建完成后,
树中的每一个节点都将作为一个生成的结果图片用于判别。
tips:这里在构建树的过程中,需要计算节点之间的相似性,节点相似性的计算包括了多个方面:
如颜色直方图、纹理相似性、大小相似性等。
其中纹理相似性的计算用到了SIFT算法,关于SIFT算法的一个很好的博客:
http://blog.youkuaiyun.com/zddblog/article/details/7521424
——————————————————————————————————————————————
关于文章Efficient Graph-Based Image Segmentation。
这篇文章是将图片中的像素与像素之间的关系作为一个Graph来处理。采用迭代算法,
依次将距离接近的像素归类到一个图像块中。
关于这篇文章一个很好的博客:http://blog.youkuaiyun.com/surgewong/article/details/39008861
——————————————————————————————————————————————