热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

caffeforpython(官方翻译)

导言本教程中,我们将会利用Caffe官方提供的深度模型——CaffeNet(该模型是基于Krizhevsky等人的模型的)来演示图像识别与分类。我们将分别用CPU和GPU来进行演

导言

       本教程中,我们将会利用Caffe官方提供的深度模型——CaffeNet(该模型是基于Krizhevsky等人的模型的)来演示图像识别与分类。我们将分别用CPU和GPU来进行演示,并对比其性能。然后深入探讨该模型的一些其它特征。

1、准备工作

       1.1 首先,安装Python,numpy以及matplotlib。

#安装Python环境、numpy、matplotlib
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline

    #设置默认显示参数
    plt.rcParams[\'figure.figsize\'] = (10, 10)        # 图像显示大小
    plt.rcParams[\'image.interpolation\'] = \'nearest\'  # 最近邻差值: 像素为正方形
    plt.rcParams[\'image.cmap\'] = \'gray\'  # 使用灰度输出而不是彩色输出

       1.2 然后,加载Load caffe。

# caffe模块要在Python的路径下;
# 这里我们将把caffe 模块添加到Python路径下.
import sys
caffe_root = \'../\'  #该文件要从路径{caffe_root}/examples下运行,否则要调整这一行。
sys.path.insert(0, caffe_root + \'python\')

import caffe
# 如果你看到"No module named _caffe",那么要么就是你没有正确编译pycaffe;要么就是你的路径有错误。

说明:该步骤,本人是将编译好的pycaffe文件下的全部东西复制到Python的“site-packages”下的。所以不知道按上述做法具体会出现什么问题。

       1.3 必要的话,需要事先下载“CaffeNet”模型,该模型是AlexNet的变形。

import os
    if os.path.isfile(caffe_root + \'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel\'):
        print \'CaffeNet found.\'
    else:
        print \'Downloading pre-trained CaffeNet model...\'
        !../scripts/download_model_binary.py ../models/bvlc_reference_caffenet

说明:该步骤,本人是事先下载好”bvlc_reference_caffenet.caffemodel”,然后将其放在”caffe_root + ‘models/bvlc_reference_caffenet/”目录下面,因为用代码下载太慢了。

2、加载网络并设置输入预处理

       2.1 将Caffe设置为CPU模式,并从硬盘加载网络。

caffe.set_mode_cpu()

    model_def = caffe_root + \'models/bvlc_reference_caffenet/deploy.prototxt\'
    model_weights = caffe_root + \'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel\'

    net = caffe.Net(model_def,      # 定义模型结构
                    model_weights,  # 包含了模型的训练权值
                    caffe.TEST)     # 使用测试模式(不执行dropout)

       2.2 设置输入预处理(我们将用Caffe’s caffe.io.Transformer来进行预处理。不过该步骤与caffe的其它模块是相互独立的,所以任何预处理代码应该都是可行的)。我们使用的CaffeNet模型默认的输入图像格式是BGR格式的,其像素值位于[0,255]之间,同时每个像素值都减去了ImageNet图像的平均值。除此之外,通道的维数等于第一维(outermost)的大小。另外,因为matplotlib加载的图像的值位于[0,1]之间,并且格式是RGB格式,通道的维数等于innermost的维数,所以我们需要做一些变换(感觉这一段翻译的太烂),如下:

# 加载ImageNet图像均值 (随着Caffe一起发布的)
    mu = np.load(caffe_root + \'python/caffe/imagenet/ilsvrc_2012_mean.npy\')
    mu = mu.mean(1).mean(1)  #对所有像素值取平均以此获取BGR的均值像素值
    print \'mean-subtracted values:\', zip(\'BGR\', mu)

    # 对输入数据进行变换
    transformer = caffe.io.Transformer({\'data\': net.blobs[\'data\'].data.shape})

    transformer.set_transpose(\'data\', (2,0,1))  #将图像的通道数设置为outermost的维数
    transformer.set_mean(\'data\', mu)            #对于每个通道,都减去BGR的均值像素值
    transformer.set_raw_scale(\'data\', 255)      #将像素值从[0,255]变换到[0,1]之间
    transformer.set_channel_swap(\'data\', (2,1,0))  #交换通道,从RGB变换到BGR

3、用CPU分类

       3.1 现在我们开始进行分类。尽管我们只对一张图像进行分类,不过我们将batch的大小设置为50以此来演示batching。

# 设置输入图像大小
    net.blobs[\'data\'].reshape(50,        # batch 大小
                              3,         # 3-channel (BGR) images
                              227, 227)  # 图像大小为:227x227

       3.2 加载图像(caffe自带的)并进行预处理。

image = caffe.io.load_image(caffe_root + \'examples/images/cat.jpg\')
    transformed_image = transformer.preprocess(\'data\', image)
    plt.imshow(image)
    plt.show()

这里写图片描述O image.jpg $my_image_url # 变换图像并将其拷贝到网络 image = caffe.io.load_image(\'image.jpg\') net.blobs[\'data\'].data[...] = transformer.preprocess(\'data\', image) # 预测分类结果 net.forward() # 获取输出概率值 output_prob = net.blobs[\'prob\'].data[0] # 将softmax的输出结果按照从大到小排序,并提取前5名 top_inds = output_prob.argsort()[::-1][:5] plt.imshow(image) plt.show() print \'probabilities and labels:\' zip(output_prob[top_inds], labels[top_inds])


推荐阅读
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ... [详细]
  • Window10+anaconda+python3.5.4+ tensorflow1.5+ keras(GPU版本)安装教程 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
黄秋华1219
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有