jea*_*ean 6 python neural-network deep-learning caffe pycaffe
是否有一种相对简单的方法可以从没有 CAFFE(也没有 pyCaffe)的Caffe Zoo 中的众多预训练模型之一中提取 Python 中的权重?即解析.caffemodel为 hdf5/numpy 或 Python 可以读取的任何格式?
我找到的所有答案都使用带有 caffe 类或 Pycaffe 的 C++ 代码。我看过pycaffe的代码,看起来你真的需要caffe来理解二进制文件是唯一的解决方案吗?
我刚才必须解决那个确切的问题。假设您有一个 .caffemodel(二进制 proto 格式),结果证明它非常简单。
下载最新的caffe.proto
编译成python库:protoc --python_out=。caffe.proto
导入和解析
下面的示例代码
import numpy as np
import sys, os
import argparse
import caffe_pb2 as cq
f = open('VGG_ILSVRC_16_layers.caffemodel', 'r')
cq2 = cq.NetParameter()
cq2.ParseFromString(f.read())
f.close()
print "name 1st layer: " + cq2.layers[0].name
Run Code Online (Sandbox Code Playgroud)
为我生产:
name 1st layer: conv1_1
Run Code Online (Sandbox Code Playgroud)
显然,您可以从对象中提取任何您想要的内容。我只是打印了我的第一层的名称作为示例。此外,您的模型可能会在图层数组(已弃用)或图层(无“s”)数组中表达图层,但您已了解要点。
碰巧的是,ethereon 制作了一个名为caffe-tensorflow 的出色库,用于将 caffe 模型转换为 Tensorflow 代码,但这还不是全部!它还允许用户将.caffemodel文件转换为.npy文件,而无需构建 pycaffe!它测试 caffe 是否已构建,如果没有构建,则返回到纯粹的 google protobuf 实现。