caffe生成lenet-5的deploy.prototxt文件

本文介绍了如何使用Caffe训练的lenet_iter_10000.caffemodel测试MNIST数据集外的单张图片。通过修改并生成deploy.prototxt文件,调整input_param的shape参数以适应单张图片输入,并解决在生成过程中遇到的模块导入及库文件路径问题。

接前面博客:http://blog.csdn.net/lanxuecc/article/details/52329708 我学会了用caffe训练自己的测试自己的图片,但是这里测试的是测试数据集,那么如何用训练好的caffemodel测试自己的单张图片呢。下面记录下我用训练好的lenet_iter_10000.caffemodelg来测试mnist图片的整个摸索过程::::

生成deploy.prototxt文件:

用训练好的caffemodel来测试单张图片需要一个deploy.prototxt文件来指定网络的模型构造。
事实上deploy.prototxt文件与lenet_train_test.prototxt文件类似,只是首尾有些差别。仿照博客http://www.cnblogs.com/denny402/p/5685818.html 中的教程用deploy.py文件来生成deploy.prototxt文件。

# -*- coding: utf-8 -*-
caffe_root = '/home/schao/sc_tmp/caffe/caffe-master/'  
import sys  
sys.path.insert(0, caffe_root + 'python')  
from caffe  import layers as L,params as P,to_proto
root='/home/schao/sc_tmp/caffe/caffe-master/'
deploy='/home/schao/sc_tmp/caffe/caffe-master/examples/mnist/deploy.prototxt'    #文件保存路径

def create_deploy():
    #少了第一层,data层
    conv1=L.Convolution(name='conv1',bottom='data', kernel_size=5, stride=1,num_output=20, pad=0,weight_filler=dict(type='xavier'))
    pool1=L.Pooling(conv1,name='pool1',pool=P.Pooling.MAX, kernel_size=2, stride=2)
    conv2=L.Convolution(pool1, name='conv2',kernel_size=5, stride=1,num_output=50, pad=0,weight_filler=dict(type='xavier'))
    pool2=L.Pooling(conv2, name='pool2',top='pool2', pool=P.Pooling.MAX, kernel_size=2, stride=2)
    fc3=L.InnerProduct(pool2, name=
Caffe模型量化过程中,`deploy.prototxt` 文件中的 `Normalize` 层是否必须配置 `normalize_param` 参数,取决于该层在推理阶段是否需要执行归一化操作。通常情况下,`Normalize` 层用于对输入数据或特征图进行归一化处理,以匹配模型训练时的数据预处理方式。在量化过程中,保持与训练阶段一致的归一化策略对于模型精度至关重要。 如果 `Normalize` 层的参数 `normalize_param` 已经在训练阶段的 `train.prototxt` 中定义,并且该层在推理阶段仍然需要执行归一化操作,则应在 `deploy.prototxt` 中保留并正确配置 `normalize_param`。否则,如果归一化操作仅在训练时使用(例如,某些归一化方法如 BatchNorm 在推理时会转换为简单的缩放和平移操作),则可能不需要在 `deploy.prototxt` 中保留 `normalize_param`。 在模型量化工具链中,部分框架会自动处理 `Normalize` 层的转换,例如将其合并到前面的卷积层中,或者在量化过程中自动推导归一化参数。因此,在量化过程中是否需要显式配置 `normalize_param`,应根据所使用的量化工具链和部署平台的要求来决定。 ### 示例代码:检查并修改 `deploy.prototxt` 可以使用 Python 脚本加载 `deploy.prototxt` 并检查 `Normalize` 层的配置情况: ```python import caffe # 加载 deploy.prototxt net = caffe.Net('deploy.prototxt', caffe.TEST) # 遍历网络中的每一层 for layer in net.layers: if layer.type == 'Normalize': # 获取该层的参数 param = layer.blobs print(f"Layer {layer.name} is a Normalize layer.") if len(param) > 0: print("normalize_param is present.") else: print("normalize_param is not present.") ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值