Using resnet50 to extract feature

  1. #resnet feature extraction  
  2. import os  
  3. os.chdir('/root/caffe-master/examples')  
  4.   
  5. import numpy as np  
  6. import matplotlib.pyplot as plt  
  7. import itertools  
  8. import csv  
  9.   
  10. plt.rcParams['figure.figsize']=(10,10)  
  11. plt.rcParams['image.interpolation']='nearest'  
  12. plt.rcParams['image.cmap']='gray'  
  13.   
  14. import sys  
  15.   
  16. caffe_root='../'           #this file should be run from {caffe_root}/examples(otherwise change this line)  
  17.   
  18. import caffe  
  19.   
  20. caffe.set_mode_gpu()  
  21.   
  22. model_def='../atongtest/ResNet-50-deploy.prototxt'  
  23. model_weights='../atongtest/ResNet-50-train2_iter_350000.caffemodel'  
  24.   
  25. net=caffe.Net(model_def,model_weights,caffe.TEST)  
  26.   
  27. MEAN_PROTO_PATH=caffe_root+'atongtest/ResNet_mean.binaryproto'  
  28.   
  29. blob=caffe.proto.caffe_pb2.BlobProto()  
  30. data=open(MEAN_PROTO_PATH,'rb').read()  
  31. blob.ParseFromString(data)  
  32. array=np.array(caffe.io.blobproto_to_array(blob))  
  33.   
  34. mu=array[0]  
  35. mean=mu.mean(1).mean(1)  
  36.   
  37. net=caffe.Classifier(model_def,model_weights,mean=mean,channel_swap=(2,1,0),raw_scale=255,image_dims=(224,224))  
  38.   
  39.   
  40.   
  41. #rootdir 根目录,subdir 根目录下的子目录,若没有 则为[], subfile:根目录下的文件,若没有 则为[]  
  42. #os.walk 先遍历根目录,然后将子目录路径添加到原根目录,以rootdir+subdir[i] 做为新的根目录继续遍历 ,由此实现 给定路径下所有文件的遍历  
  43. #imgpath:带检测图片路径  
  44. #Imglist :所有图片的路径  
  45. imgpath='/root/lfw-gray-224'  
  46. imglist=[]  
  47. for (rootdir, subdir, subfile) in os.walk(imgpath):  
  48.     for img_jpg in subfile:  
  49.         if img_jpg.endswith('.jpg'):  
  50.             imglist.append(os.path.join(rootdir, img_jpg))  
  51.   
  52. #Pre_feature_ndarray  存放所有图片的特征值,第一行为随机向量,为了可以将后续提取的图片连接,处理完所有图片后删除第一行,  
  53. #得到存放所有图片特征值的 ndarray :Final_feature  
  54. pre_feature_ndarray=np.random.randn(1,2048)  
  55. for subimg in imglist:  
  56.     input_image=caffe.io.load_image(subimg)  
  57.     prediction=net.predict([input_image])  
  58.     face_feature=net.blobs['pool5'].data[0]  
  59.     feature_reshape=face_feature.reshape((1,2048))    
  60.       
  61.     pre_feature_ndarray=np.r_['0',pre_feature_ndarray,feature_reshape]  
  62.   
  63. final_feature=pre_feature_ndarray[1:]  
  64.   
  65. #特征值 个数  
  66. feature_num=len(final_feature)  
  67.   
  68. infile=file('/root/class_in.csv','wb')  
  69. outfile=file('/root/class_out.csv','wb')  
  70.   
  71. d1=csv.writer(infile)  
  72. d2=csv.writer(outfile)  
  73. #计算特征值距离  
  74. #itertools.combination('ABCD',2): AB AC AD BC BD CD    itertools 迭代器  
  75. for img1,img2 in itertools.combinations(range(feature_num),2):  
  76.   
  77. #    distance_feature=np.linalg.norm(final_feature[img1]-final_feature[img2])  
  78.     v1=final_feature[img1].reshape(1,2048)  
  79.     v2=final_feature[img2].reshape(1,2048)  
  80.       
  81.     cos_distance=np.sum((v1*v2),1)/(np.linalg.norm(v1)*np.linalg.norm(v2))  
  82.     img1_path=imglist[img1]  
  83.     img2_path=imglist[img2]  
  84.     if os.path.dirname(img1_path)==os.path.dirname(img2_path):  
  85.         d1.writerow([cos_distance])  
  86.     else:  
  87.         d2.writerow([cos_distance])  
  88.   
  89. infile.close()  
  90. outfile.close()  


Original url:
http://blog.csdn.net/zuqiutxy/article/details/71156593
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值