博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Caffe 抽取CNN网络特征 Python
阅读量:4964 次
发布时间:2019-06-12

本文共 3194 字,大约阅读时间需要 10 分钟。

Caffe Python特征抽取

转载请注明出处,楼燚(yì)航的blog,

Caffe大家一般用到的深度学习平台都是这个,关于Caffe的训练通常一般都可以通过一些命令来执行,但是在deploy阶段,如果是做实际的工程,那么C++接口用得会相对比较多。但是Caffe是支持Python和Matlab接口的,所以用Python来做一些相关的特征的处理以及额外的任务比较方便

这里我主要是结合了Caffe官网的例程,当然它给的例程是参照的Ipython,然后以命令的形式,我主要做了一些相关的整合。当时也不知道怎么提取一些相关特征,上网一搜也基本上没有干净、好的代码。因此我在这里介绍如何使用Python做特征的抽取。

Python 接口

首先你要确保你已经在安装Caffe时,编译了Python接口,我记得对应着的命令是 make pycaffe,相关的接口是在在Caffe_Root\python目录下,这个目录里面还是有一个caffe模块,提供了一些使用python的基本类

抽取的代码

这里我把其例程中,以及一部分我添加的代码都合到了一起,并且加了注释,希望能对大家有帮助,这里主要是三个函数

  • initialize () 初始化网络的相关
  • readlist() 读取抽取图像列表
  • extractFeatre() 抽取图像的特征,保存为指定的格式

其中在transformer那里需要根据自己的需求设定

import numpy as npimport matplotlib.pyplot as pltimport osimport caffeimport sysimport pickleimport structimport sys,cv2caffe_root = '../'  # 运行模型的prototxtdeployPrototxt =  '/home/chenjie/baiyan/caffe/models/compcar_model_C_all/deploy_louyihang.prototxt'# 相应载入的modelfilemodelFile = '/home/chenjie/baiyan/caffe/models/compcar_model_C_all/caffenet_carmodel_baiyan_iter_50000.caffemodel'# meanfile 也可以用自己生成的meanFile = 'python/caffe/imagenet/ilsvrc_2012_mean.npy'# 需要提取的图像列表imageListFile = '/home/chenjie/DataSet/500CarCNNRetrieve/500CarFaceOrig/images_total.txt'imageBasePath = '/home/chenjie/DataSet/500CarCNNRetrieve/500CarFaceOrig'gpuID = 4postfix = '.classify_allCar1716_fc6'# 初始化函数的相关操作def initilize():    print 'initilize ... '    sys.path.insert(0, caffe_root + 'python')    caffe.set_mode_gpu()    caffe.set_device(gpuID)    net = caffe.Net(deployPrototxt, modelFile,caffe.TEST)    return net  # 提取特征并保存为相应地文件def extractFeature(imageList, net):    # 对输入数据做相应地调整如通道、尺寸等等    transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})    transformer.set_transpose('data', (2,0,1))    transformer.set_mean('data', np.load(caffe_root + meanFile).mean(1).mean(1)) # mean pixel    transformer.set_raw_scale('data', 255)      transformer.set_channel_swap('data', (2,1,0))      # set net to batch size of 1 如果图片较多就设置合适的batchsize     net.blobs['data'].reshape(1,3,227,227)      #这里根据需要设定,如果网络中不一致,需要调整    num=0    for imagefile in imageList:        imagefile_abs = os.path.join(imageBasePath, imagefile)        print imagefile_abs        net.blobs['data'].data[...] = transformer.preprocess('data', caffe.io.load_image(imagefile_abs))        out = net.forward()        fea_file = imagefile_abs.replace('.jpg',postfix)        num +=1        print 'Num ',num,' extract feature ',fea_file        with  open(fea_file,'wb') as f:            for x in xrange(0, net.blobs['fc6'].data.shape[0]):                for y in xrange(0, net.blobs['fc6'].data.shape[1]):                    f.write(struct.pack('f', net.blobs['fc6'].data[x,y]))# 读取文件列表def readImageList(imageListFile):    imageList = []    with open(imageListFile,'r') as fi:        while(True):            line = fi.readline().strip().split()# every line is a image file name            if not line:                break            imageList.append(line[0])     print 'read imageList done image num ', len(imageList)    return imageListif __name__ == "__main__":    net = initilize()    imageList = readImageList(imageListFile)     extractFeature(imageList, net)

转载于:https://www.cnblogs.com/louyihang-loves-baiyan/p/5078746.html

你可能感兴趣的文章
awk根据指定的字符串分割字符串
查看>>
ubuntu下apt-get的配置文件是哪个
查看>>
[九省联考2018]一双木棋chess
查看>>
6.循环
查看>>
tp3.2 自带的文件上传及生成缩略图功能
查看>>
Angular 入门学习
查看>>
[单选题]条件语句的时候不应该使用哪一种控制结构
查看>>
1049 I Think I Need a Houseboat ACM题答案 java版
查看>>
socket tcp
查看>>
Vuex状态管理
查看>>
[LeetCode] The Maze III 迷宫之三
查看>>
rest_framework-02-权限-内置权限源码流程
查看>>
JavaWeb学习总结第五篇--认识Cookie机制
查看>>
网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default...
查看>>
git 删除目录
查看>>
swiper 最后一页继续滑动跳转问题
查看>>
带有停止按钮的计时程序
查看>>
Tomcat: Connector中HTTP与AJP差别与整合
查看>>
使用Pelican在Github(国外线路访问)和Coding(国内线路访问)同步托管博客
查看>>
iOS | Runtime应用
查看>>