1、VGG16网络结构图

VGG16结构为:卷积层 + 全连接层=13 + 3 = 16
1、卷积层:由上图可知分为5个部分共13层,即conv1~conv5
2、三个全连接层,即fc6、fc7、fc8
这个VGG16网络就是基于ImageNet数据集来的;它的数据集的类数为1000类;对应fc8层的输出1000
fc6和fc7的输出维数都为4096;因此如果要训练自己的数据集;fc8层的输出维数要根据数据集的类数进行修改
3、对于网络的参数,我们最好还是使用原始的网络参数;毕竟还是很靠谱的;而且还可以节约训练时间

2、使用VGG16提取特征

这里就要选择使用那一层网络提取特征了;但是如何获取对应层的所提取的特征呢?
就要用到activations()

features = activations(net,X,layer)
features = activations(net,X,layer,Name,Value)

1、features = activations(net,X,layer) 使用受过训练的网络net和X中的数据返回特定层的网络激活。此功能仅支持具有图像输入层的网络。返回某个网络的某一层的某一张图片的激活)只支持一张输入图片!!!

2、features = activations(net,X,layer,Name,Value) 返回特定层的网络激活,以及由一个或多个名称-值对参数指定的其他选项。 例如,``OutputAs'',``rows''将激活输出格式指定为``rows''。 在所有其他输入参数之后指定名称/值对参数。

名称-值对参数:

指定可选的以逗号分隔的Name,Value参数对。 Name是参数名称,Value是相应的值。 名称必须出现在引号中。可以按任意顺序指定多个名称和值对参数,例如Name1,Value1,...,NameN,ValueN。

Example: activations(net,X,layer,'OutputAs','rows')

输入参数

'OutputAs' — Format of output activations
'channels' (default) | 'rows' | 'columns'

'MiniBatchSize' — Size of mini-batches
128 (default) | positive integer

'ExecutionEnvironment' — Hardware resource
'auto' (default) | 'gpu' | 'cpu'

输出参数:

features — Activations from a network layer
n-by-m matrix | m-by-n matrix | h-by-w-by-c-by-n array

根据“ OutputAs”名称-值对参数的值,从网络层进行的激活作为以下之一返回。

trainedFeatures 'OutputAs' value
n-by-m matrix 'rows'
m-by-n matrix 'columns'
h-by-w-by-c-by-n array 'channels'

3、使用VGG16提取特征

% 加载数据集
unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...'IncludeSubfolders',true, ...'LabelSource','foldernames');
% 切分训练集和测试集合
[imdsTrain,imdsTest] = splitEachLabel(imds,0.8,'randomized');% 计算训练集的数目
numTrainImages = numel(imdsTrain.Labels)
% 随机置换操作;将图像的序号打乱
idx = randperm(numTrainImages,16)
% 绘制数据集中的图像
figure
for i = 1:16% 4行4列,然后序号从1开始subplot(4,4,i)I = readimage(imdsTrain,idx(i));imshow(I)
endnet = vgg16;
net.Layers;
inputSize = net.Layers(1).InputSize
% 进行修改图像尺寸的操作
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);
% 获取fc7层的特征
layer = 'fc7';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');
% 训练集和测试集的标签
YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;
% svm分类器,使用训练数据训练的SVM
classifier = fitcecoc(featuresTrain,YTrain);
% 预测类别
YPred = predict(classifier,featuresTest);
% 指定查询图像的标签
idx = [1 5 11 15];
figure
for i = 1:numel(idx)subplot(2,2,i)I = readimage(imdsTest,idx(i));label = YPred(idx(i));imshow(I)title(char(label))
end
% 精确度为几个测试结果的平均值
% mean数组的均值
accuracy = mean(YPred == YTest)

最后accuracy=1

4、如何对提取的特征进行进一步处理

这里就有很多操作了;比如PCA;就是对特征进行降维处理;减少计算量的同时提升速度!!!同样也会提高识别的准确率等等!

我们这里先说一个;

PCA:主成分分析

% reduce demension by PCA, recomend to reduce it to 128 dimension.
[coeff, score, latent] = pca(feat);
feat = feat*coeff(:, 1:128);

假设feat就是你上一步操作获取的特征;fc7层的维度为4096;我们可以降维到128等;根据实际需求来!

未完待续。。。欢迎一起学习!

如何使用VGG16提取某层的特征?相关推荐

  1. 基于pytorch开发CNN提取全连接层作为特征

    场景:利用CNN网络的全连接层作为图像的特征. 代码: import sys import os import math import random import heapq import time ...

  2. open cv提取图片特征值_基于VGG16网络提取Flicker8K数据集图像特征

    # !/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : ${20200326} ${18:00} # @Author : ZicoZhou ...

  3. Caffe提取任意层特征并进行可视化

    原图 conv1层可视化结果 (96个filter得到的结果) 数据模型与准备 安装好Caffe后,在examples/images文件夹下有两张示例图像,本文即在这两张图像上,用Caffe提供的预训 ...

  4. 层与特征融合_【计算机系统应用】(第122期)感受野特征增强的 SSD 目标检测算法...

    点击上方"蓝字",关注我们吧! 目标检测是计算机视觉领域的一项重要任务, 是 生活中如实例分割[1] , 面部分析[2] , 汽车自动驾驶[3].视 频分析[4] 等各种视觉应用的 ...

  5. 抽取CNN网络任意层的特征,VGG模型fine-tuning实践

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 作为迁移学习的一种,finetune能够将general的特征转变为special的特征,从而 ...

  6. RDKit | 基于RDKit从分子中提取3D药效团特征

    从分子中提取3D药效团特征 导入库 import os from rdkit import Geometry from rdkit import RDConfig from rdkit.Chem im ...

  7. 影像组学视频学习笔记(34)-使用3D Slicer软件提取影像组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/afcd06221ea4 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

  8. pandas 提取数字_经验轻松提取Meta原始文献特征

    经验|轻松提取Meta原始文献特征 Python 办公小助手:读取 PDF 中表格并重命名 日常工作中,我们或多或少都会接触到 Excel 表格.Word 文档和 PDF 文件.偶尔来个处理文件的任务 ...

  9. 运用CS-LBP提取裂纹的梯度特征

    目前对CS-LBP 的理解是CS-LBP只能描述电池片裂纹的梯度特征:CS-LBP值的大小代表的是方向,每一个值出现的频率代表的大小.CS-LBP作为一种特征描述的方法,所提取的特征向量维数小,并且对 ...

最新文章

  1. 2019年《计算机应用基础》,2019年自考《计算机应用基础》模拟练习及答案一
  2. 谈谈CListCtrl如何调整行高
  3. swift UI专项训练4 场景过渡-转场
  4. jupyter notebook
  5. Linux入门学习(六)
  6. (04)VTK移动模型,判断是否相交
  7. 宽字节UTF-8、多字节互转
  8. 使用 django middleware 和 celery 隔离业务系统和积分系统的尝试
  9. 毕向东_JavaScript视频教程_javascript编程
  10. ×××全功能邮件系统(3)
  11. Android TimePicker
  12. 外地人在上海浦东 身份证到期续办
  13. 计算机网络 | 划分子网
  14. 怎么将小程序添加到我的小程序?
  15. google的视频下载插件
  16. 第7章 事务管理技术
  17. 计算机二级office高级应用试题,2014计算机二级office高级应用模拟题
  18. 什么是BBR加速,Centos7如何开启BBR加速,优化服务器的传输速度,避免堵塞
  19. matlab三电平statcom无功检测双闭环svpwm调制两电平/三电平逆变器拓扑
  20. 几种媒体文件(MediaPlayer,Realplay,QuickTime)的代码

热门文章

  1. 2021斯坦福CS224N课程笔记~7
  2. 8.5 一个文件切割系统的实现
  3. 电脑光标出现黑色方块怎么办?(超详细解答)
  4. POLYCOM音频处理器|数字音频矩阵|多媒体处理中心
  5. 单片机数据区传送程序设计
  6. 程序员的精神家园——码农餐厅(一)
  7. 如何在本地电脑搭建asp(php)网站环境
  8. 如何使用计算机微信看小程序,新版微信pc版怎么打开小程序 pc版打开小程序方法...
  9. 德纳:震撼来袭:去中心化的 Gamefi 项目正在构建一个充满机械的 Metaverse
  10. 空气质量数据网页爬虫加数据处理