caffe+python 使用训练好的VGG16模型 对 单张图片进行分类,输出置信度

本文主要是介绍caffe+python 使用训练好的VGG16模型 对 单张图片进行分类,输出置信度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上看了一堆都是图片转lmdb格式,然后测试总的准确率,我想测试每张图片的top1,top2以及对应置信度是多少,摸索了一下午+一晚上终于搞定,期间遇到不少坑!!!同时感谢实验室博士师兄一块帮我找bug
说明:数据集是上海BOT大赛的(12种动物),网上下载的vgg16权重文件,并且修改输出类别为12,对最后三层全连接网络训练了8个小时,top1准确率为80%,top5准确率95%

使用的测试图片是一个长颈鹿,类别编号是8,结果如下:
这里写图片描述
这里写图片描述

预测源码

#coding:utf-8
import numpy as np
import caffebot_data_root = 'F:/bot_data'# 设置网络结构
net_file = bot_data_root + '/myVGG16/VGG_ILSVRC_16_layers_deploy.prototxt'
# 添加训练之后的网络权重参数
caffe_model = bot_data_root + '/myVGG16/myvggmodel__iter_80000.caffemodel'
# 均值文件
mean_file = bot_data_root + '/myVGG16/mean.npy'
# 设置使用gpu
caffe.set_mode_gpu()# 构造一个Net
net = caffe.Net(net_file, caffe_model, caffe.TEST)
# 得到data的形状,这里的图片是默认matplotlib底层加载的
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
# matplotlib加载的image是像素[0-1],图片的数据格式[weight,high,channels],RGB
# caffe加载的图片需要的是[0-255]像素,数据格式[channels,weight,high],BGR,那么就需要转换# channel 放到前面
transformer.set_transpose('data', (2, 0, 1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
# 图片像素放大到[0-255]
transformer.set_raw_scale('data', 255)
# RGB-->BGR 转换
transformer.set_channel_swap('data', (2, 1, 0))
#设置输入的图片shape,1张,3通道,长宽都是224
net.blobs['data'].reshape(1, 3, 224, 224)
# 加载图片
im = caffe.io.load_image(bot_data_root + '/test_min/Testset 1/0a3e66aea7f64597ad851bfffb929c5a.png')# 用上面的transformer.preprocess来处理刚刚加载图片
net.blobs['data'].data[...] = transformer.preprocess('data', im)#输出每层网络的name和shape
for layer_name, blob in net.blobs.iteritems():print layer_name + '\t' + str(blob.data.shape)# 网络开始向前传播啦
output = net.forward()# 找出最大的那个概率
output_prob = output['out'][0]
print '预测的类别是:', output_prob.argmax()# 找出最可能的前俩名的类别和概率
top_inds = output_prob.argsort()[::-1][:2]
print "预测最可能的前两名的编号: ",top_inds
print "对应类别的概率是: ", output_prob[top_inds[0]], output_prob[top_inds[1]]

网络结构代码

name: "VGG_ILSVRC_16_layers"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 224
input_dim: 224
layers {bottom: "data"top: "conv1_1"name: "conv1_1"type: CONVOLUTIONconvolution_param {num_output: 64pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv1_1"top: "conv1_1"name: "relu1_1"type: RELU
}
layers {bottom: "conv1_1"top: "conv1_2"name: "conv1_2"type: CONVOLUTIONconvolution_param {num_output: 64pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv1_2"top: "conv1_2"name: "relu1_2"type: RELU
}
layers {bottom: "conv1_2"top: "pool1"name: "pool1"type: POOLINGpooling_param {pool: MAXkernel_size: 2stride: 2}
}
layers {bottom: "pool1"top: "conv2_1"name: "conv2_1"type: CONVOLUTIONconvolution_param {num_output: 128pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv2_1"top: "conv2_1"name: "relu2_1"type: RELU
}
layers {bottom: "conv2_1"top: "conv2_2"name: "conv2_2"type: CONVOLUTIONconvolution_param {num_output: 128pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv2_2"top: "conv2_2"name: "relu2_2"type: RELU
}
layers {bottom: "conv2_2"top: "pool2"name: "pool2"type: POOLINGpooling_param {pool: MAXkernel_size: 2stride: 2}
}
layers {bottom: "pool2"top: "conv3_1"name: "conv3_1"type: CONVOLUTIONconvolution_param {num_output: 256pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv3_1"top: "conv3_1"name: "relu3_1"type: RELU
}
layers {bottom: "conv3_1"top: "conv3_2"name: "conv3_2"type: CONVOLUTIONconvolution_param {num_output: 256pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv3_2"top: "conv3_2"name: "relu3_2"type: RELU
}
layers {bottom: "conv3_2"top: "conv3_3"name: "conv3_3"type: CONVOLUTIONconvolution_param {num_output: 256pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv3_3"top: "conv3_3"name: "relu3_3"type: RELU
}
layers {bottom: "conv3_3"top: "pool3"name: "pool3"type: POOLINGpooling_param {pool: MAXkernel_size: 2stride: 2}
}
layers {bottom: "pool3"top: "conv4_1"name: "conv4_1"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv4_1"top: "conv4_1"name: "relu4_1"type: RELU
}
layers {bottom: "conv4_1"top: "conv4_2"name: "conv4_2"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv4_2"top: "conv4_2"name: "relu4_2"type: RELU
}
layers {bottom: "conv4_2"top: "conv4_3"name: "conv4_3"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv4_3"top: "conv4_3"name: "relu4_3"type: RELU
}
layers {bottom: "conv4_3"top: "pool4"name: "pool4"type: POOLINGpooling_param {pool: MAXkernel_size: 2stride: 2}
}
layers {bottom: "pool4"top: "conv5_1"name: "conv5_1"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv5_1"top: "conv5_1"name: "relu5_1"type: RELU
}
layers {bottom: "conv5_1"top: "conv5_2"name: "conv5_2"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv5_2"top: "conv5_2"name: "relu5_2"type: RELU
}
layers {bottom: "conv5_2"top: "conv5_3"name: "conv5_3"type: CONVOLUTIONconvolution_param {num_output: 512pad: 1kernel_size: 3}blobs_lr: 0blobs_lr: 0
}
layers {bottom: "conv5_3"top: "conv5_3"name: "relu5_3"type: RELU
}
layers {bottom: "conv5_3"top: "pool5"name: "pool5"type: POOLINGpooling_param {pool: MAXkernel_size: 2stride: 2}
}
layers {bottom: "pool5"top: "fc6"name: "fc6"type: INNER_PRODUCTinner_product_param {num_output: 4096}blobs_lr: 1blobs_lr: 2
}
layers {bottom: "fc6"top: "fc6"name: "relu6"type: RELU
}
layers {bottom: "fc6"top: "fc6"name: "drop6"type: DROPOUTdropout_param {dropout_ratio: 0.5}
}
layers {bottom: "fc6"top: "fc7"name: "fc7"type: INNER_PRODUCTinner_product_param {num_output: 4096}blobs_lr: 1blobs_lr: 2
}
layers {bottom: "fc7"top: "fc7"name: "relu7"type: RELU
}
layers {bottom: "fc7"top: "fc7"name: "drop7"type: DROPOUTdropout_param {dropout_ratio: 0.5}
}
layers {name: "myfc8"bottom: "fc7"top: "myfc8"type: INNER_PRODUCTinner_product_param {num_output: 12weight_filler {  type: "gaussian"  std: 0.01  }  bias_filler {  type: "constant"  value: 0  }  }blobs_lr: 10blobs_lr: 20
}
layers {bottom: "myfc8"top: "out"name: "out"type: SOFTMAX
}

这篇关于caffe+python 使用训练好的VGG16模型 对 单张图片进行分类,输出置信度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808823

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do