欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

caffe预测、特征可视化python接口调用

发布时间:2025/3/21 python 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 caffe预测、特征可视化python接口调用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转载自:

深度学习(九)caffe预测、特征可视化python接口调用 - hjimce的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/hjimce/article/details/48972877


网上有很多caffe训练好的模型,有的时候我们仅仅想要方便的调用已经训练好的模型,利用python进行预测分类测试,查看可视化结果,这个时候,我们可以使用caffe为我们写好的python接口文件,我们在安装caffe的时候,有一步:make  pycaffe。这个便是安装caffe的python 结果函数,把自己用的代码记录一下,以便日后直接复制粘贴使用。感觉使用python就是轻松,如果用caffe的c++接口,挺麻烦的。

下面的使用例子是自己搞利用CNN进行性别预测的python接口调用实例:

[python] view plaincopy
  • # coding=utf-8  
  • import os  
  • import numpy as np  
  • from matplotlib import pyplot as plt  
  • import cv2  
  • import shutil  
  • import time  
  •   
  • #因为RGB和BGR需要调换一下才能显示  
  • def showimage(im):  
  •     if im.ndim == 3:  
  •         im = im[:, :, ::-1]  
  •     plt.set_cmap('jet')  
  •     plt.imshow(im)  
  •     plt.show()  
  •   
  • #特征可视化显示,padval用于调整亮度  
  • def vis_square(data, padsize=1, padval=0):  
  •     data -= data.min()  
  •     data /= data.max()  
  •   
  •     #因为我们要把某一层的特征图都显示到一个figure上,因此需要计算每个图片占用figure多少比例,以及绘制的位置  
  •     n = int(np.ceil(np.sqrt(data.shape[0])))  
  •     padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((00),) * (data.ndim - 3)  
  •     data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))  
  •   
  •     # tile the filters into an image  
  •     data = data.reshape((n, n) + data.shape[1:]).transpose((0213) + tuple(range(4, data.ndim + 1)))  
  •     data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])  
  •   
  •     showimage(data)  
  •   
  •   
  • #设置caffe源码所在的路径  
  • caffe_root = '../../../caffe/'  
  • import sys  
  • sys.path.insert(0, caffe_root + 'python')  
  • import caffe  
  •   
  •   
  •   
  •   
  • #加载均值文件  
  • mean_filename='./imagenet_mean.binaryproto'  
  • proto_data = open(mean_filename, "rb").read()  
  • a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)  
  • mean  = caffe.io.blobproto_to_array(a)[0]  
  •   
  • #创建网络,并加载已经训练好的模型文件  
  • gender_net_pretrained='./caffenet_train_iter_1500.caffemodel'  
  • gender_net_model_file='./deploy_gender.prototxt'  
  • gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,mean=mean,  
  •                        channel_swap=(2,1,0),#RGB通道与BGR  
  •                        raw_scale=255,#把图片归一化到0~1之间  
  •                        image_dims=(256256))#设置输入图片的大小  
  •   
  •   
  • #预测分类及其可特征视化  
  • gender_list=['Male','Female']  
  • input_image = caffe.io.load_image('1.jpg')#读取图片  
  •   
  • prediction_gender=gender_net.predict([input_image])#预测图片性别  
  • #打印我们训练每一层的参数形状  
  • print 'params:'  
  • for k, v in gender_net.params.items():  
  •     print 'weight:'  
  •     print (k, v[0].data.shape)#在每一层的参数blob中,caffe用vector存储了两个blob变量,用v[0]表示weight  
  •     print 'b:'  
  •     print (k, v[1].data.shape)#用v[1]表示偏置参数  
  • #conv1滤波器可视化  
  • filters = gender_net.params['conv1'][0].data  
  • vis_square(filters.transpose(0231))  
  • #conv2滤波器可视化  
  • '''''filters = gender_net.params['conv2'][0].data 
  • vis_square(filters[:48].reshape(48**2, 5, 5))'''  
  • #特征图  
  • print 'feature maps:'  
  • for k, v in gender_net.blobs.items():  
  •     print (k, v.data.shape);  
  •     feat = gender_net.blobs[k].data[0,0:4]#显示名字为k的网络层,第一张图片所生成的4张feature maps  
  •     vis_square(feat, padval=1)  
  •   
  •   
  •   
  •   
  •   
  • #显示原图片,以及分类预测结果  
  • str_gender=gender_list[prediction_gender[0].argmax()]  
  • print str_gender  
  •   
  • plt.imshow(input_image)  
  • plt.title(str_gender)  
  • plt.show()  



  • 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

    总结

    以上是生活随笔为你收集整理的caffe预测、特征可视化python接口调用的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。