R-CNN解读+代码梳理

 

代码参考https://blog.csdn.net/u014796085/article/details/83931150#_11

下载的数据集使用matlab分割,自己写了一个17flowers 数据集分割python方法

import os
import shutil
path = 'C:/Users/Administrator/Downloads/17flowers/jpg'
files = os.listdir(path)
n=80
c=[files[i:i+n] for i in range(0,len(files),n)]
print(len(c[16]))
for i in range(len(c)):
    os.makedirs(path + '/' + str(i))
    for j in range(len(c[i])):
        shutil.move(path + '/' + c[i][j], path + '/' + str(i))

解读参考https://blog.csdn.net/u014796085/article/details/83352821

使用白化梳理一遍论文:

目标识别就是图像分类加定位,就是我输入一个图片,输出这个图片物体的类别和物体在图片中的坐标。

举例:

R-CNN解读+代码梳理_第1张图片

1.总结:R-CNN(就是region proposal + cnn)就是我先把图片分成2000分,然后把2000个图片通过CNN图像分类,得到2000个图像中物体类别得分最高的那个框,就是把物体的类别和坐标找到了。

 具体训练步骤:

1.因为训练cnn需要大量的数据,但是具有物体位置标签的数据不多,但是具有物体分类标签的数据很多。所以首先是通过预训练ILSVRC数据集,训练alexnet网络的参数。

2.因为PASCAL VOC 2007数据集,具有20个类,9963张图片,和每张图片中对应的物体的标签和位置。每张图片经过selective search分成2000份,然后把分割的图片和标记的图片对比,其中iou>0.5的标记为对应的物体,<0.5的标记为背景类。

举例:一个具有小狗的图片被分成2000张,每张图片和人工标记出小狗的那个位置对比,只要是占比重大于本身的一半就认为是小狗,不然就认为是背景。

3.训练SVM分类器,得到每个图片的分类得分。输入就是通过alexnet得到的4096的图像特征向量,输出就是21个类比的得分。因为负样本过多,文中采用了难负例挖掘。这样一个图片就得到了2000*21个得分。通过非大值抑制方法,干掉一些框框。得到少量的数据框。比如1*20个数据,然后再踢出每个类别中得分少于阈值的数据,比如类别得分只有0.1 那么这一类就可以去掉,得到1*2个框框

4.训练boundingbox回归,也就对框框进行线性回归,好吧我们已经得到了框框,但是这个框是我们一开始截取的,和真实值是有差距的,那么我们在把这个框做一个线性回归,就是把x,y和原始真正的x,y比较,减少他们的差值。

具体测试步骤:

1.一个图片的2000张分割,

2.分割后的图片重新弄城227*227大小

3.2000个图片送入alexnet得到2000*4096个特征向量

4.2000*4096在送入svm 得到2000*21个数据

5.极大值抑制得到1*21个,类别小于阈值的得到1*2个框

6.框框线性回顾,得到1*2最终数据

R-CNN解读+代码梳理_第2张图片

你可能感兴趣的:(深度学习模型)