代码参考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
使用白化梳理一遍论文:
目标识别就是图像分类加定位,就是我输入一个图片,输出这个图片物体的类别和物体在图片中的坐标。
举例:
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最终数据