zoukankan      html  css  js  c++  java
  • Caffe---Pycaffe转换均值文件:xxx_mean.binaryproto成为xxx_mean.npy

    Pycaffe转换均值文件:xxx_mean.binaryproto成为xxx_mean.npy

    为什么需要mean.binaryproto转mean.npy

    使用Caffe的C++接口进行操作时,需要的图像均值文件是pb格式,例如常见的均值文件名为mean.binaryproto。但在使用python接口进行操作时,需要的图像均值文件是numpy格式,例如mean.npy。所以在跨语言进行操作时,需要将mean.binaryproto转换成mean.npy。

    首先是生成binaryproto的sh文件,这里不介绍。这里提供转mean.npy两个程序,bin_2_npy001.py如下:

    #!/usr/bin/env python
    #binaryproto_2_npy
    
    import numpy as np
    c=np.fromfile("road_mean.binaryproto", dtype=np.float)
    print c
    np.save("road_mean.npy", c)
    b=np.load('road_mean001.npy')
    print b
    

    bin_2_npy002.py如下:

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #mean.binaryproto_2_mean.npy

    #import sys #导入Python的sys模块                                             
    #sys.path.append("/usr/lib/python2.7/dist-packages")            
    import caffe                                       # 导入caffe模块 
    import numpy as np                                 #导入矩阵数值运算程序库 
    
    MEAN_PROTO_PATH = 'road_mean.binaryproto'          # 待转换的pb格式图像均值文件路径
    MEAN_NPY_PATH = 'road_mean002.npy'                 # 转换后的numpy格式图像均值文件路径
    
    blob = caffe.proto.caffe_pb2.BlobProto()           # 创建protobuf blob
    data = open(MEAN_PROTO_PATH, 'rb' ).read()         # 读入mean.binaryproto文件内容
    blob.ParseFromString(data)                         # 解析文件内容到blob
    
    array = np.array(caffe.io.blobproto_to_array(blob))# 将blob中的均值转换成numpy格式,array的shape (mean_number,channel, hight, width)
    mean_npy = array[0]                                # 一个array中可以有多组均值存在,故需要通过下标选择其中一组均值
    np.save(MEAN_NPY_PATH ,mean_npy)
    

     说明:本文件夹下的bin_2_npy001.py与bin_2_npy002.py都可以生成均值,但是road_mean002.npy在后续程序中好用。原因尚不明确,待思考解决。

    参考 https://blog.csdn.net/hyman_yx/article/details/51732656,补充:

    已知图像均值,构造mean.npy

    如果已知图像中每个通道的均值,例如3通道图像每个通道的均值分别为104,117,123,我们也可以通过其构造mean.npy。代码如下:

    import numpy as np
    
    MEAN_NPY_PATH = 'mean.npy'
    
    mean = np.ones([3,256, 256], dtype=np.float)
    mean[0,:,:] = 104
    mean[1,:,:] = 117
    mean[2,:,:] = 123
    
    np.save(MEAN_NPY, mean)

    载入mean.npy

    上面我们用两种方式构造了均值文件mean.npy,在使用时载入mean.npy的代码如下:

    import numpy as np
    
    mean_npy = np.load(MEAN_NPY_PATH)
    mean = mean_npy.mean(1).mean(1)
  • 相关阅读:
    单例模式
    HashSet、LinkedHashSet、SortedSet、TreeSet
    ArrayList、LinkedList、CopyOnWriteArrayList
    HashMap、Hashtable、LinkedHashMap
    andrew ng machine learning week8 非监督学习
    andrew ng machine learning week7 支持向量机
    andrew ng machine learning week6 机器学习算法理论
    andrew ng machine learning week5 神经网络
    andrew ng machine learning week4 神经网络
    vue组件监听属性变化watch方法报[Vue warn]: Method "watch" has type "object" in the component definition. Did you reference the function correctly?
  • 原文地址:https://www.cnblogs.com/carle-09/p/9087687.html
Copyright © 2011-2022 走看看