Caffe:使用 classify.py 批量对图片分类

简介: 一般使用 Caffe 训练完网络后,会用 `test.bin` 来测试一下网络的精度,然后还能用 `classification.bin` 来用网络对图片进行单张的分类,但是一张一张的分,效率很低,所以我改写了 `classify.py` 文件,使其读取 test.txt 文件批量分类,输出具体哪一张图片分错了。

一般使用 Caffe 训练完网络后,会用 test.bin 来测试一下网络的精度,然后还能用 classification.bin 来用网络对图片进行单张的分类,但是一张一张的分,效率很低,所以我改写了 classify.py 文件,使其读取 test.txt 文件批量分类,输出具体哪一张图片分错了。

代码如下:

# copyright (c) strongnine

import caffe
import sys
import os
import numpy as np
 
caffe_root = '/path/to/your/caffe/' # 指定 caffe 的路径
sys.path.insert(0,caffe_root+'python')
 
caffe.set_mode_gpu()
 
deploy = caffe_root+'models/bvlc_alexnet/deploy.prototxt' ##
caffe_model = caffe_root+'model/outputs/caffe_alexnet_train_iter_450000.caffemodel' ## 

labels_name = caffe_root+'data/alexnet/synset_words.txt'
labels = np.loadtxt(labels_name, str, delimiter='\t')
for i in range(len(labels)):
    exec(labels[i] + "=0")
right = 0
false = 0
mean_file = caffe_root+'data/alexnet/train_mean.npy' # 由 imagenet_mean.binaryproto 转换来
net = caffe.Net(deploy, 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_channel_swap('data',(2,1,0))


test_file = open(caffe_root+'data/alexnet/test.txt', 'r')
test_data = test_file.readlines()

log = open(caffe_root+'data/alexnet/log/classify_log.log', 'w')
image_road = '/your/image/path/'

for line in test_data:
    split = line.split(' ')
    image = caffe.io.load_image(image_road + split[0])
    net.blobs['data'].data[...]=transformer.preprocess('data',image)
 
    out = net.forward()
 
    prob = net.blobs['prob'].data[0].flatten()
    top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
    
    log.write(split[0] + ' ' + split[1][0] + ' ' + str(top_k[0]))

    if str(top_k[0]) == split[1][0]:
        right += 1
        log.write(' right\n')
    else:
        false += 1
        log.write(' false\n')

print(right)
print(false)
print(right/float(right + false))

运行完成后会输出分类正确的图片数量,和分类错误的图片数量,以及所有的正确率。

生成完查看 log 文件:

...
cat_01.jpg 0 0 right
cat_02.jpg 0 0 right
person_04.jpg 1 1 right
person_05.jpg 1 0 false
...

第一个数字为标签类别,第二个数字为分类类别。

目录
相关文章
|
存储 C# C语言
字符串终止符
字符串终止符
1967 2
|
编解码
如何让开源鸿蒙系统适配其它机型?
如何让开源鸿蒙系统适配其它机型?
863 0
|
缓存 Linux Apache
网络IO和磁盘IO详解
1. 缓存IO          缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。
5848 0
|
1月前
|
人工智能 安全 Unix
Claude Code 必知的 14 个高效工作流,让你的开发效率提升 300%
掌握 Claude Code 的 14 个高效工作流,覆盖代码理解、开发调试、安全重构、计划模式、自动化测试、PR 创建、文档生成等全流程。从陌生项目快速上手的探索技巧,到子代理委派、思考模式、图像辅助开发等进阶玩法,一文带你解锁 Claude Code 的真正实力,让 AI 从聊天工具变成真正的开发伙伴。
760 2
|
7月前
|
存储 缓存 运维
Windows设备停止错误代码43 怎么解决
Windows错误代码43表示系统检测到设备(如显卡、蓝牙或USB设备)报告问题,是 Windows 操作系统中常见的设备管理器错误,当系统检测到某个硬件设备无法正常工作时,便会显示错误信息‌通常由硬件故障或驱动程序损坏引起‌。
1655 0
|
7月前
|
数据采集 缓存 监控
小红书 item_search - 关键词取商品列表接口对接全攻略:从入门到精通
小红书商品关键词搜索接口(item_search)为第三方合规封装工具,支持通过关键词批量获取平台内美妆、穿搭、家居等类目商品信息,涵盖价格、销量、评分、店铺及关联笔记数据,适用于选品分析、竞品监测、市场调研等场景。本攻略详解接口核心功能、参数配置、签名生成、Python调用示例及调试优化技巧,结合分页处理、异步请求与缓存策略,助力开发者高效稳定对接,规避合规风险,实现生产级应用。
|
7月前
|
人工智能 运维 安全
2025年远程控制软件排行榜:安全性能哪家强?ToDesk/TeamViewer/向日葵等对比
2025年远程控制软件排行榜:安全性能哪家强?ToDesk/TeamViewer/向日葵等对比
988 11
2025年远程控制软件排行榜:安全性能哪家强?ToDesk/TeamViewer/向日葵等对比
|
7月前
|
缓存 并行计算 Shell
毅硕HPC | 在HPC集群上优雅地使用conda
通过本教程,你将掌握在HPC集群中从零开始部署并高效利用Conda的核心技能。为你的课题创建一个干净的environment.yml文件,让你的科研计算之旅更加规范、高效和可复现。
777 0
|
7月前
|
数据采集 大数据 测试技术
Python列表推导式实战:1-100偶数生成全解析
列表推导式是Python中简洁高效的语法糖,可一行代码替代传统循环,用于生成、筛选和转换列表。相比常规写法更优雅且性能更优,适用于逻辑清晰的场景,但复杂嵌套时需注意可读性。
348 0
|
存储 前端开发 Java
在线学习|基于SpringBoot的在线学习系统的设计与实现
在线学习|基于SpringBoot的在线学习系统的设计与实现
1292 0