caffe 抽取特征例子.doc_第1页
caffe 抽取特征例子.doc_第2页
caffe 抽取特征例子.doc_第3页
caffe 抽取特征例子.doc_第4页
caffe 抽取特征例子.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/guoyilin/article/details/42886483 caffe c+ 抽取图片特征 /platero/p/3967208.html 本文作者参考这个例子,抽取自己数据特征数据模型与准备安装好Caffe后,在examples/images文件夹下有两张示例图像,本文即在这两张图像上,用Caffe提供的预训练模型,进行特征提取,并进行可视化。1. 进入caffe根目录,创建临时文件夹,用于存放所需要的临时文件mkdir examples/_temp2. 根据examples/images文件夹中的图片,创建包含图像列表的txt文件,并添加标签(0)find pwd/examples/images -type f -exec echo ; examples/_temp/temp.txtsed s/$/ 0/ examples/_temp/temp.txt examples/_temp/file_list.txt3. 执行下列脚本,下载imagenet12图像均值文件,在后面的网络结构定义prototxt文件中,需要用到该文件 (data/ilsvrc212/imagenet_mean.binaryproto)data/ilsvrc12/get_ilsvrc_aux.sh4. 将网络定义prototxt文件复制到_temp文件夹下cp examples/feature_extraction/imagenet_totxt examples/_temp提取特征1. 创建 src/youname/ 文件夹, 存放我们自己的脚本mkdir src/yournamecaffe c+ 抽取图片特征 分类: 机器学习 2015-01-19 22:47 1599人阅读 评论(8) 收藏 举报 featurecaffec+caffe c+批量抽取特征的方法在1,但是该方法使用中有几个疑问:1. 如何转换levelDB 格式为libsvm格式。2. ./build/tools/extract_features mini-batch 是代表什么意思,和imagenet_totxt中的batch_size的关系是什么?本文主要解决如上两个问题,具体extract_features源代码还需要进一步分析。第一个问题,plain view plaincopyprint?1. ./build/tools/extract_featuresmodels/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodelexamples/_temp/imagenet_totxtfc7examples/_temp/features10./build/tools/extract_features models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_totxt fc7 examples/_temp/features 10其中,10 是mini-batch, 假设imagenet_totxt的batches size是128, 那么程序将抽取128 * 10个图片的特征。如果你有100张图片, 你可以设置mini-batch = 1, batches size = 100.如果你的image个数是1283, 那么如上数值的设置会是的leveldb多出3个无用的feature,这个需要注意, 我测试过好像是会重复之前的图片,具体需要研究源代码。第二个问题, 特征保存的格式为leveldb,如果需要用libsvm的格式访问特征,可以用python 进行转换, 程序如下, 这里感谢bean的程序1: python view plaincopyprint?1. importnumpyasnp2. importcaffe3. importsys4. toimportcaffe_pb25. 6. #parseargument 7. dbName=sys.argv18. featureFile=sys.argv29. output=open(featureFile,w)import numpy as npimport caffeimport sysfrom to import caffe_pb2#parse argumentdbName = sys.argv1featureFile = sys.argv2output = open(featureFile, w)python view plaincopyprint?1. #openleveldbfiles 2. db=leveldb.LevelDB(dbName)3. 4. #getdbiterator 5. it=db.RangeIter()6. count=07. forkey,valueinit:8. #convertstringtodatum 9. 10. datum=caffe_pb2.Datum.FromString(db.Get(key)11. 12. #convertdatumtonumpystring 13. 14. arr=caffe.io.datum_to_array(datum)015. 16. i=017. tmpS=18. 19. #converttosvmformat 20. 21. foriinrange(0,len(arr):22. tmpS+=str(i+1)+:+str(arri.tolist()0)+23. #printtmpS 24. output.write(tmpS.strip()+n)25. count+=126. printcount27. output.close()# open leveldb filesdb = leveldb.LevelDB(dbName)# get db iteratorit = db.RangeIter()count = 0for key,value in it: # convert string to datum datum = caffe_pb2.Datum.FromString(db.Get(key) # convert datum to numpy string arr = caffe.io.datum_to_array(datum)0 i = 0 tmpS = # convert to svm format for i in range(0, len(arr): tmpS += str(i+1) + : + str(arri.tolist()0) + #print tmpS output.write(tmpS.strip() + n) count+=1 print countoutput.close()但是这个程序有个巨大的bug,db.RangeIter()返回的key 顺序是按照 字母 进行排序的,和levelDB的排序方式是不一样的。具体参见3:The problem is most likely caused by re-ordering of training/test examples since thedb.RangeIter()iterates over keys in alphabetical order whileextract_featurescreates keys from index values without leading zeros (unlikeconvert_imageset). Hence, you get an order like0, 1, 10, 100, .Parse the key value in python and put the extracted feature vector at that position.在这里,我们也只能说fuck了。修改后代码如下 : python view plaincopyprint?1. #getdbiterator 2. it=db.RangeIter()3. features=4. forkey,valueinit:5. #convertstringtodatum 6. datum=caffe_pb2.Datum.FromString(value)7. #convertdatumtonumpystring 8. arr=caffe.io.datum_to_array(datum)09. featuresint(key)=arr10. 11. #writetofile,sincethekeyinitissortedbyalpha_numberdefault,whileleveldbissortedbynumber,wemustsortthekeyagain. 12. sort_features=collections.OrderedDict(sorted(features.items()13. fork,arrinsort_features.iteritems():14. if(kimageCount-1):15. break16. line=17. foriinrange(0,len(arr):18. line+=str(i+1)+:+str(arri.tolist()0)+19. output.write(line.strip()+n)20. output.close()# get db iteratorit = db.RangeIter()features = for key,value in it: # convert string to datum datum = caffe_pb2.Datum.FromString(value) # convert datum to numpy string arr = caffe.io.datum_to_array(datum)0 featuresint(key) = arr#write to file, since the key in it is sorted by alpha_number default, while leveldb is sorted by number, we must sort the key again.sort_features = collections.OrderedDict(sorted(features.items()for k, arr in sort_features.iteritems(): if(k imageCount - 1): break line = for i in range(0, len(arr): line += str(i+1) + : + str(arri.tolist()0) + output.write(line.strip() + n)output.close()通过对比c+和python提取的feature, 大部分是一致的,但是还是有会细微的差别,可能是浮点数的精度问题吧。 参考文章:1. /gathered/examples/feature_extraction.html2.2./posts/211192-caffe-use-caffe-to-extract-features-of-each-layer3. /BVLC/caffe/issues/1158Caffe Use Caffe to extract features of each layer 在使用caffe的過程中,不管是做visualization或是將某層的feature拿出來用SVM做training,常常會需要將我們的CNN中的某層Layer的activation拿出來看看,所以如何將model中的某層feature取出來便是十分的重要了。要將某層的feature萃取出來,必須要用到caffe中幫我們寫好的一個tool,就放在$CAFFE_DIR/build/tools裡。$CAFFE_DIR/build/tools/extract_features.bin要怎麼用這個executable呢,可參照caffe官方網站的教學: /gathered/examples/feature_extraction.html其中要注意的是,教學中的下面這行build/tools/extract_features.bin examples/imagenet/caffe_reference_imagenet_model examples/_temp/imagenet_totxt fc7 examples/_temp/features 10其中的fc7是我們要抽的那層layer的名字,10這邊是代表mini batch的數字,mini batch的意義是,每次會extract batch_szie(在imagenet_totxt中定義的)乘上mini bat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论