caffe模型的python前向测试

当我们训练好一个网络模型后必不可少的就是对模型跑前向,看模型的实际性能如何。python绝对是最简单的环境,所以本文写一个python版本的前向测试。

import os
import cv2
import sys
import caffe
import glob
import argparse
from PIL import Image
import numpy as npdef parse_args():parser = argparse.ArgumentParser(description='deblur arguments')parser.add_argument('--image_root_dir', type=str, default='/.../data',  # 存放数据集目录的路径help='test image root dir')parser.add_argument('--test_txt', type=str, default='/.../test.txt',  # 生成的txt的相对路径help='test txt path')parser.add_argument('--caffe_model', type=str,default='/.../xxx.caffemodel',help='caffemodel path')parser.add_argument('--deploy', type=str, default='/.../deploy.prototxt',help='deploy path')parser.add_argument('--num_cls', type=int, default='3', help='class number')parser.add_argument('--input_size', type=int, default='96', help='net input size')parser.add_argument('--save_dir', type=str, default='./results', help='test result dir')parser.add_argument('--roc_name', type=str, default='roc.txt', help='test roc name')parser.add_argument('--saveimg_flag', type=int, default='1', help='if 0, do not save img, else save img')args = parser.parse_args()return argsdef main():args = parse_args()order = Test(args)def Test(args):if os.path.exists(args.save_dir) == False:os.mkdir(args.save_dir)roc_file = open(args.save_dir + '/' + args.roc_name, 'w+')net = caffe.Net(args.deploy, args.caffe_model, caffe.TEST)transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})transformer.set_transpose('data', (2, 0, 1))# transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))transformer.set_raw_scale('data', 255)# transformer.set_mean('data', np.array([104, 117, 123]))transformer.set_channel_swap('data', (2, 1, 0))f1 = open(args.test_txt, 'r')datas = f1.readlines()wrong = np.zeros(args.num_cls)right = np.zeros(args.num_cls)for data in datas:tmp = data.split(' ')imgname = tmp[0]for i in range(1, len(tmp) - 1):imgname += ' ' + tmp[i]label = int(tmp[-1][0])print(tmp, imgname, label)im = caffe.io.load_image(args.image_root_dir + '/' + imgname)im = cv2.resize(im, (args.input_size, args.input_size))net.blobs['data'].data[...] = transformer.preprocess('data', im)out = net.forward()prob = net.blobs['prob'].data[0].flatten()print(prob)order = prob.argsort()[-1]  # small-bigprint(order, label)if args.saveimg_flag != 0:if os.path.exists(os.path.join(args.save_dir, str(label) + "-" + str(order))) == False:os.mkdir(os.path.join(args.save_dir, str(label) + "-" + str(order)))im = Image.open(args.image_root_dir + '/' + imgname).convert('RGB')smallname = imgname.split('/')[-1]if prob[order] >= 0.6:im.save(os.path.join(args.save_dir, str(label) + "-" + str(order), str(prob[order]) + smallname))for p in prob:roc_file.write('%s ' % p)roc_file.write('%s\n' % label)if order != label:wrong[label] += 1else:right[label] += 1print(wrong, right)roc_file.close()if __name__ == '__main__':main()print("done") 

生成的roc.txt可用于在下一篇画roc曲线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StringBuilder和StringBuffer区别是什么?

想象一下,你在写信,但是你需要不断地添加新的内容或者修改一些词句。在编程中,当你需要这样操作字符串时,就可以用StringBuffer或StringBuilder。 StringBuffer StringBuffer就像是一个多人协作写作的工具。如果你和你的朋友们一…

Linux内核模块文件组成介绍

Linux驱动开发主要的工作就是编写模块,一个典型的Linux内核模块文件.ko 主要由以下几个部分组成。 模块加载函数(必须) 当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 Linux内核模…

Spark Machine Learning进行数据挖掘的简单应用(兴趣预测问题)

数据挖掘的过程 数据挖掘任务主要分为以下六个步骤: 1.数据预处理2.特征转换3.特征选择4.训练模型5.模型预测6.评估预测结果 数据准备 这里准备了20条关于不同地区、不同性别、不同身高、体重…的人的兴趣数据集(命名为hobby.csv): id,h…

MyBatis关联查询(二、一对多查询)

MyBatis关联查询(二、一对多查询) 需求:查询所有用户信息及用户关联的账户信息。 分析:用户信息和他的账户信息为一对多关系,并且查询过程中如果用户没有账户信息,此时也要将用户信息查询出来&#xff0c…

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

msyql 24day 数据库主从 主从复制 读写分离 master slave 有数据如何增加

目录 环境介绍读写分离纵向扩展横向扩展 数据库主从准备环境主库环境(master)从库配置(slave)状态分析重新配置问题分析 报错解决从库验证 有数据的情况下 去做主从清理环境环境准备数据库中的锁的机制主库配置从库配置最后给主库解锁常见错误 环境介绍 将一个数据库的数据 复…

服务器raid中磁盘损坏或下线造成阵列降级更换新硬盘重建方法

可能引起磁盘阵列硬盘下线或故障的情况: 硬件故障: 硬盘物理损坏:包括但不限于坏道、电路板故障、磁头损坏、盘片划伤、电机故障等。连接问题:如接口损坏、数据线或电源线故障、SATA/SAS控制器问题等。热插拔错误:在不…

****Linux下Mysql的安装和配置

1、安装mysql 1.1、安装mysql sudo aptitude search mysql sudo apt-get install mysql-server mysql-client1.2、启动停止mysql: service mysql stop service mysql restart mysql -u debian-sys-maint -p mysql命令详细解释如下: 一、 启动方式 1、使用 service 启动…

20Exchange第一轮空投延续铭文热-Meme热潮褪去后的选择

“凌晨1点打iotx铭文,凌晨2点打Tia铭文,凌晨3点打inj铭文,凌晨4点 打op铭文……”这个在社交网络上广为转发的贴文,浓缩了Web3用户对铭文市场的狂热。 从12月开始,铭文这种比特币等区块链网络铸造加密资产&#xff08…

从0到1部署gitlab自动打包部署项目

本文重点在于配置ci/cd打包 使用的是docker desktop 第一步安装docker desktop Docker简介 Docker 就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,而不需要从该盒子中一件一件的取。Docker中文社区、…

npm run dev 与npm run serve的区别

npm run serve 和 npm run dev 是在开发阶段使用 npm 运行脚本的两种常见命令,它们的区别主要在于脚本的配置和执行方式。 npm run serve:通常与 Vue.js 相关的项目中使用。这个命令是在 package.json 文件中定义的一个脚本命令,用来启动开发…

零基础制作宠物用品小程序

随着人们对宠物用品的需求不断增长,越来越多的人开始探索如何制作一个专业的宠物用品小程序。而乔拓云作为一款功能强大的在线商城制作工具,成为了许多商家的首选。本文将详细介绍如何使用乔拓云制作宠物用品小程序,让你轻松上手,…

集合论:二元关系(1)

集合论这一章内容很多,重点是二元关系中关系矩阵,关系图和关系性质:自反、反自反、对称、反对称、传递以及关系闭包的运算,等价关系,偏序关系,哈斯图,真吓人! 1.笛卡儿积 由两个元素x和y按照一…

MongoDB聚合管道的限制

MongoDB聚合管道功能非常丰富且强大,能够实现各种复杂的聚合查询和数据处理,我们在利用强大功能的同时,也需要了解其限制和约束,这样才能在系统设计时做到用其长避其短。聚合管道的限制主要有几个方面,分别是结果结果、…

伽马校正:FPGA

参考资料: Tone Mapping 与 Gamma Correction - 知乎 (zhihu.com) Book_VIP: 《基于MATLAB与FPGA的图像处理教程》此书是业内第一本基于MATLAB与FPGA的图像处理教程,第一本真正结合理论及算法加速方案,在Matlab验证,以及在FPGA上…

Debezium发布历史21

原文地址: https://debezium.io/blog/2017/10/26/debezium-0-6-1-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 0.6.1 发布 2017 年 10 月 26 日 作者: Gunnar Morl…

为实例方法创建错误的引用(js的问题)

考虑下面代码: var MyObject function() {}MyObject.prototype.whoAmI function() {console.log(this window ? "window" : "MyObj"); };var obj new MyObject(); 现在,为了操作方便,我们创建一个对whoAmI方法的引…

【开源工程及源码】超级经典开源项目实景三维数字孪生智慧机场

智慧机场可视化平台通过可视化手段,将复杂的机场运营数据以图形、图表等形式展现,使管理者能够更直观、实时地了解机场的各个方面。飞渡科技通过整合物联网IOT、人工智能、大数据分析等技术,围绕机场管理、运控、安防、服务、监测等业务领域&…

Java设计模式-原型模式

目录 一、克隆羊问题 二、传统方式解决 三、基本介绍 四、浅拷贝和深拷贝 (一)浅拷贝介绍 (二)深拷贝 五、原型模式深拷贝 (一)重写clone方法 (二)对象序列化 六、注意事项…

理解计算机中的中断与中断处理

计算机系统是一个高度并发的环境,处理各种任务和事件。为了有效地响应硬件和软件引起的特殊事件,计算机引入了一种叫做中断的机制。 什么是中断? 中断是一种通知机制,用于向计算机处理器表示发生了特殊事件,需要处理器…