当前位置:网站首页>教你自己训练的pytorch模型转caffe(三)

教你自己训练的pytorch模型转caffe(三)

2022-07-05 20:41:00 FeboReigns

这一节是用caffe推理得到pytorh一样的结果

参考:使用Caffe的Python接口进行推理 - 简书 (jianshu.com)

#coding = utf-8
import numpy as np
import sys, os


sys.path.insert(0, caffe_root + 'python')

import caffe

os.chdir(caffe_root)

#caffe.set_device(0)
#caffe.set_mode_gpu()
####下面三行根据自己的路径修改
net_file = './dock_googlenet_dog.prototxt'
caffe_model = './dock_googlenet_dog.caffemodel'
imagenet_labels_filename = './class_names.txt'


# load model
net = caffe.Net(net_file, caffe_model, caffe.TEST)
#resize
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
#通道数拿到前面来 变为【1,3 224,224】
transformer.set_transpose('data', (2, 0, 1))
# # 调用均值文件
# # transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
#python中将图片存储为[0, 1],而caffe中将图片存储为[0, 255],所以需要一个转换
# transformer.set_raw_scale('data', 255)
#caffe中图片是RGB格式,而网络格式BGR,要转化
# transformer.set_channel_swap('data', (2, 1, 0))
###根据自己的路径更改
im = caffe.io.load_image('./cat.2.jpg')
net.blobs['data'].data[...] = transformer.preprocess('data',im)
# net.blobs['data'].data[...] = 

out = net.forward()

print (net.blobs['data'].data.shape)
print (net.blobs['data'].data.dtype)
print (net.blobs[net.blobs.keys()[-1]].data.shape)
print (net.blobs[net.blobs.keys()[-1]].data.dtype)


labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')

top_k = net.blobs[net.blobs.keys()[-1]].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
    print (top_k[i], labels[top_k[i]])
#打印最后得分
print (net.blobs[net.blobs.keys()[-1]].data[0])

 ./class_names.txt就是

0 dog
1 cat

注意我训练是没有使用normlize,

 而且我的格式是RGB的,所以预处理我有几个没用

caffe的caffe.io.load_image('./cat.2.jpg')是RGB的

我的也是RBG的

 如果你用老哥的docker环境跑我的代码会报三个错

###got an unexpected keyword argument ‘as_grey‘
https://blog.csdn.net/hjxu2016/article/details/113541609
###TypeError: 'float' object cannot be interpreted as an integer
https://blog.csdn.net/qq_28634403/article/details/81224291
###dict_keys‘ object is not subscriptable
https://blog.csdn.net/le___le/article/details/103617431

 我用的自己配置的caffe,我的caffe没有ceil mode参数,用round_mode代替的,如果ceil mode为true 则round_mode为0,否则反之。准确度基本不会影响Pytorch maxpool的ceil_mode及与caffe中maxpool的比较_zl3090的博客-CSDN博客

如何自己配caffe看我另一个博客:

终于ubuntu编译完CPU版caffe了_FeboReigns的博客-CSDN博客

原网站

版权声明
本文为[FeboReigns]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_40709711/article/details/125580092