Imagenet VGG-19网络加载和特征可视化
这篇文章主要阐述加载已经训练好的Imagenet VGG-19网络对图像猫进行识别,并且可视化VGG网络卷积层的特征图像。
下载Imagenet VGG-19
http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat
加载Imagenet VGG-19
完整代码如下:
import scipy.io
import numpy as np
import os
import scipy.misc
import matplotlib.pyplot as plt
import tensorflow as tfdef _conv_layer(input, weights, bias):conv = tf.nn.conv2d(input, tf.constant(weights), strides=(1,1,1,1), padding='SAME')return tf.nn.bias_add(conv, bias)def _pool_layer(input):return tf.nn.max_pool(input, ksize=(1,2,2,1), strides=(1,2,2,1), padding='SAME')def preprocess(image, mean_pixel):return image - mean_pixeldef unprocess(image, mean_piexl):return image + mean_piexldef imread(path):return scipy.misc.imread(path).astype(np.float)def imsave(path, img):img = np.clip(img, 0, 255).astype(np.int8)scipy.misc.imsave(path, img)print('functions for vgg ready')def net(data_path, input_image):layers = ('conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1','conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2','conv3_1', 'relu3_1', 'conv3_2', 'relu3_2','conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3','conv4_1', 'relu4_1', 'conv4_2', 'relu4_2','conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4','conv5_1', 'relu5_1', 'conv5_2', 'relu5_2','conv5_3', 'relu5_3', 'conv5_4', 'relu5_4')data = scipy.io.loadmat(data_path)mean = data['normalization'][0][0][0]mean_pixel = np.mean(mean, axis=(0,1))weights = data['layers'][0]net = {}current = input_imagefor i, name in enumerate(layers):kind = name[:4]if kind == 'conv':kernels, bias = weights[i][0][0][0][0]kernels = np.transpose(kernels, (1, 0, 2, 3))bias = bias.reshape(-1)current = _conv_layer(current, kernels, bias)elif kind == 'relu':current = tf.nn.relu(current)elif kind == 'pool':current = _pool_layer(current)net[name] = currentassert len(net) == len(layers)return net, mean_pixel, layersprint('network for vgg ready')cwd = os.getcwd()
vgg_path = cwd + '/data/imagenet-vgg-verydeep-19.mat'
img_path = cwd + '/data/cat.jpeg'
input_image = imread(img_path)
shape = (1, input_image.shape[0], input_image.shape[1], input_image.shape[2])with tf.Session() as sess:image = tf.placeholder('float', shape=shape)nets, mean_pixel, all_layers = net(vgg_path, image)input_image_pre = np.array([preprocess(input_image, mean_pixel)])layers = all_layersfor i, layer in enumerate(layers):print('[%d/%d] %s' % (i+1, len(layers), layer))features = nets[layer].eval(feed_dict={image: input_image_pre})print('Type of ‘features’ is ', type(features))print('Shape of ‘features’ is ', (features.shape,))if 1:plt.figure(i+1, figsize=(10, 5))plt.matshow(features[0, :, :, 0], cmap=plt.cm.gray, fignum=i+1)plt.title(''+layer)plt.colorbar()plt.show()
卷积层特征图像显示
vgg-19网络的输入图片如下
各卷积层的特征图像
Imagenet VGG-19网络加载和特征可视化相关推荐
- android快捷开发之Retrofit网络加载框架的简单使用
大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...
- java加载自己写的类_java 自定义类加载器从磁盘或网络加载类
一.编写自定义类加载器类 package com.mybatis.entity; import java.io.ByteArrayOutputStream; import java.io.File; ...
- iOS网络加载图片缓存策略之ASIDownloadCache缓存优化
iOS网络加载图片缓存策略之ASIDownloadCache缓存优化 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体 ...
- android 自定义域名,Android基于Retrofit2改造的可设置多域名的网络加载框架
Android基于Retrofit2改造的可设置多域名的网络加载框架 1.使用说明 添加仓库 ``` allprojects { repositories { google() jcenter() m ...
- Flutter Image从网络加载图片刷新、强制重新渲染
Flutter自带的Image.network()从网络加载图片后,如果服务器上的图片改变了,但是url没变,就算使用setState进行rebuild,图片也不会跟着更新.这是因为Image自带了c ...
- Android:ViewPager详解(异步网络加载图片,带图片缓存,并带导航小圆点)
android 应用中,如欢迎指引页面, 和图片轮播功能, 或者更多的内容在一页显示不了,要分成多个页面,这时候viewpager是很好用的. 首先看下效果: 下面是一个例子,带异步网络加载图片,并带 ...
- 网络加载框架 - Retrofit
Retrofit是什么? Retrofit其实我们可以理解为OkHttp的加强版,它也是一个网络加载框架.底层是使用OKHttp封装的.准确来说,网络请求的工作本质上是OkHttp完成,而 Retro ...
- jnlp(Java网络加载协议)原来很简单
jnlp(Java网络加载协议)原来很简单 Java Network Launching Protocol (JNLP,java网络加载协议). jnlp是什么?是java提供的一种让你可以通过浏览器 ...
- java网络加载协议JNLP的应用
JAVA WEB Start技术我们在网络上很多地方看到过,包括一些自动更新功能也是用这项技术. jnlp是什么?是java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可 ...
最新文章
- AI寒冬将至?这10大突破点至关重要
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)(转载)
- jquery-$()函数的用法及一些常用的选择器
- Python中用dict统计列表中元素出现的次数
- NODE_PATH的疑难杂症(转)
- 今天整理了一些老作品
- 机器学习两种距离——欧式距离和马氏距离
- 模板:树上启发式合并(dsu on tree)
- 基础笔试编程题(jz)
- php unset函数_PHP | 使用unset()函数从数组中删除元素
- MariaDB 10 Slave Crash-Safe需转为GTID复制模式
- 2008安装完了找不到_【专业性】关于铸铝热水锅炉安装使用的思考
- Linux 制作系统镜像
- 日志管理系统rsyslogd
- 显著性检测(一)Saliency Detection: A Spectral Residual Approach
- opencv读取颜色通道
- arduino UNO利用74hc595级联控制16个LED状态
- 2021年一战南大AI上岸经验贴
- [kubernetes]-通过initcontainer监控job是否完成
- XTU—OJ 1258矩阵
热门文章
- asio 异步demo
- Eigen教程1 - 基础
- windows 关闭端口被占用脚本
- java单例模式-有用的模式
- 华为使用网线通过浏览器登录AC6005的Web网管
- java十四章带参方法课后_java14带参的方法
- 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...
- Java 中 PO 与 VO 的区别
- 某同学使用计算机求30,概率论与数理统计习题集及答案
- 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...