1. #参考1:https://blog.csdn.net/sushiqian/article/details/78614133
    #参考2:https://blog.csdn.net/thy_2014/article/details/51659300
    # coding=utf-8
  2.  
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import os
  6. import sys
  7. sys.path.append("/home/wit/caffe/python")
  8. sys.path.append("/home/wit/caffe/python/caffe")
  9. import caffe
  10.  
  11. deploy_file_name = '/home/wit/wjx/MobileNetSSD_deploy.prototxt'
  12. model_file_name = '/home/wit/wjx/mobilenet_iter_25000.caffemodel'
  13. test_img = "/home/wit/wjx/src.jpg"
  14. #编写一个函数,用于显示各层的参数,padsize用于设置图片间隔空隙,padval用于调整亮度
  15. def show_data(data, padsize=1, padval=0, name = 'conv0'):
  16. #归一化
  17. data -= data.min()
  18. data /= data.max()
  19.  
  20. #根据data中图片数量data.shape[0],计算最后输出时每行每列图片数n
  21. n = int(np.ceil(np.sqrt(data.shape[0])))
  22. # padding = ((图片个数维度的padding),(图片高的padding), (图片宽的padding), ....)
  23. padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
  24. data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
  25.  
  26. # 先将padding后的data分成n*n张图像
  27. data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
  28. # 再将(n, W, n, H)变换成(n*w, n*H)
  29. data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
  30. plt.set_cmap('gray')
  31. plt.imshow(data)
  32. plt.imsave(name+'.jpg',data)
  33.  
  34. if __name__ == '__main__':
  35.  
  36. deploy_file = deploy_file_name
  37. model_file = model_file_name
  38. #如果是用了GPU
  39. #caffe.set_mode_gpu()
  40.  
  41. #初始化caffe
  42. net = caffe.Net(deploy_file, model_file, caffe.TEST)
  43.  
  44. #数据输入预处理
  45. # 'data'对应于deploy文件:
  46. # input: "data"
  47. transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
  48.  
  49. # python读取的图片文件格式为H×W×K,需转化为K×H×W
  50. transformer.set_transpose('data', (2, 0, 1))
  51.  
  52. # python中将图片存储为[0, 1]
  53. # 如果模型输入用的是0~255的原始格式,则需要做以下转换
  54. transformer.set_raw_scale('data', 255)
  55.  
  56. # caffe中图片是BGR格式,而原始格式是RGB,所以要转化
  57. transformer.set_channel_swap('data', (2, 1, 0))
  58.  
  59. # 将输入图片格式转化为合适格式(与deploy文件相同)
  60. net.blobs['data'].reshape(1, 3, 300, 300)
  61.  
  62. #读取图片
  63. #参数color: True(default)是彩色图,False是灰度图
  64. img = caffe.io.load_image(test_img,color=True)
  65.  
  66. # 数据输入、预处理
  67. net.blobs['data'].data[...] = transformer.preprocess('data', img)
  68.  
  69. # 前向迭代,即分类
  70. out = net.forward()
  71.  
  72. # 输出结果为各个可能分类的概率分布(deploy中最后一层)
  73. predicts = out['detection_out']
  74. print "Prob:"
  75. print predicts
  76.  
  77. #最可能分类
  78. predict = predicts.argmax()
  79. print "Result:"
  80. print predict
  81.  
  82. for layer_name, blob in net.blobs.iteritems():
  83. print layer_name + '\t' + str(blob.data.shape)
  84.  
  85. #---------------------------- 显示特征图 -------------------------------
  86. feature = net.blobs['conv1'].data
  87. print(feature.shape)
  88. feature = feature.reshape(64,150,150)
  89. show_data(feature, padsize=2, padval=0, name='conv1')

caffe特征层可视化的更多相关文章

  1. 神经网络:caffe特征可视化的代码例子

    caffe特征可视化的代码例子 不少读者看了我前面两篇文章 总结一下用caffe跑图片数据的研究流程 deep learning实践经验总结2--准确率再次提升,到达0.8.再来总结一下 之后.想知道 ...

  2. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  3. Keras中间层输出的两种方式,即特征图可视化

    训练好的模型,想要输入中间层的特征图,有两种方式: 1. 通过model.get_layer的方式.创建新的模型,输出为你要的层的名字. 创建模型,debug状态可以看到模型中,base_model/ ...

  4. CNN可视化技术总结(一)--特征图可视化

    导言: 在CV很多方向所谓改进模型,改进网络,都是在按照人的主观思想在改进,常常在说CNN的本质是提取特征,但并不知道它提取了什么特征,哪些区域对于识别真正起作用,也不知道网络是根据什么得出了分类结果 ...

  5. 1、Caffe数据层及参数

    要运行Caffe,需要先创建一个模型(model),每个模型由许多个层(layer)组成,每个层又都有自己的参数, 而网络模型和参数配置的文件分别是:caffe.prototxt,caffe.solv ...

  6. Caffe 激励层(Activation)分析

    Caffe_Activation 一般来说,激励层的输入输出尺寸一致,为非线性函数,完成非线性映射,从而能够拟合更为复杂的函数表达式激励层都派生于NeuronLayer: class XXXlayer ...

  7. Caffe FCN:可视化featureMaps和Weights(C++)、获取FCN结果

    为何不使用C++版本FCN获取最后的分割掩模,何必要使用python呢!因此需要获取网络最后层的featureMaps,featureMaps的结果直接对应了segmentation的最终结果,可以直 ...

  8. caffe︱ImageData层、DummyData层作为原始数据导入的应用

    Part1:caffe的ImageData层 ImageData是一个图像输入层,该层的好处是,直接输入原始图像信息就可以导入分析. 在案例中利用ImageData层进行数据转化,得到了一批数据. 但 ...

  9. 卷积神经网络特征图可视化(自定义网络和VGG网络)

    借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...

随机推荐

  1. windows下创建.gitignore

    网上搜索 .gitignore 的创建,很多linux上的,而且还一样,... 尝试了几次,windows可以这样写 .svn/ .settings/ .buildpath .project

  2. python 配置文件返回的两种方式,写法不一样而已

    配置文件如下: [MODE]mode:{ "register":"all"} 或者 mode = {"register":"all ...

  3. Mybatis异常--There is no getter for property named 'XXX' in 'class java.lang.String'

    第一种 在service层加@Param(value="ip") void deleteIpsetup(@Param(value="ip")String ip) ...

  4. hibernate学习(缓存)

    缓存,介于应用程序和永久数据存储源之间,作用是为了降低应用程序对物理数据源访问的频率,从而提高应用的运行性能. 例如我们cpu执行效率每秒处理的数据高达上千兆,而我们的硬盘读取速度却没那么高,读取几百 ...

  5. ADB——命令大全

    基本语法 基本语法 adb [-d|-e|-s <serialNumber>] <command> # serialNumber表示设备序列号,也可以是ip地址 # 如果只有一 ...

  6. [vue]vue基础复习项案例stepbystep

    看本篇第二次复习内容即可. 还有一些 文档了这个如 https://www.cnblogs.com/iiiiiher/p/9508733.html https://www.cnblogs.com/ii ...

  7. 干了这杯java之ThreadLocal

    ThreadLocal Java篇 是什么 怎么用 源码 缺点 总结 是什么 ThreadLocal是一个关于创建线程局部变量的类,这个变量只能当前线程使用,其他线程不可用. ThreadLocal提 ...

  8. Oracle安装和配置Oracle数据库快速指南

    Oracle安装12C要求参考文档 汇总 中文版:在 Unix AIX,HP-UX,Linux,Solaris 和 MS Windows 操作系统上安装和配置 Oracle 数据库(RDBMS)的要求 ...

  9. HTMLTESTRunner自动化测试报告增加截图功能

    我们都知道HTMLTESTRunner自动化测试报告,是Unittest单元测试框架报告,那么在做ui测试的时候就有点不适用了. 我们需要出错截图功能. 以下是我改的,增加了截图功能,先展示界面,再展 ...

  10. JS中将json字符串转为json对象的三种方式

    第一种:利用JSON的parse方法,即jsonObj=JSON.parse(jsonStr); 第二种:jsonObj = eval('(' + jsonStr+ ')'); 第三种:比较难理解:j ...