VGG16提取图像特征 (torch7)
VGG16提取图像特征 (torch7)
下载pretrained model,保存到当前目录下
- th> caffemodel_url = 'http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel'
- th> proto_url='https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-vgg_ilsvrc_16_layers_deploy-prototxt'
- th> os.execute('wget VGG_ILSVRC_16_layers.caffemodel' .. caffemodel_url)
- th> os.execute('wget VGG_ILSVRC_16_layers_deploy.prototxt' .. proto_url)
使用loadcaffe提取图像特征
- require 'torch' -- 使用th命令,可忽略
- require 'nn' -- 修改model用到nn包
- require 'loadcaffe' -- 加在caffe训练的包
- require 'image' -- 加载图像,处理图像,可以使用cv中函数替代
- local loadSize = {3,256,256} -- 加载图像scale尺寸
- local sampleSize = {3,224,224} -- 样本尺寸,其实就是选取scale后图像的中间一块
- local function loadImage(input)
- -- 将图像缩放到loadSize尺寸,为了保证aspect ratio不变,将短边缩放后,长边按比例缩放
- if input:size(3) < input:size(2) then
- input = image.scale(input,loadSize[2],loadSize[3]*input:size(2)/input:size(3))
- -- 注意image.scale(src,width,height),width对应的是input:size[3],height对应的是input:size[2]
- else
- input = image.scale(input,loadSize[2]*input:size(3)/input:size(2),loadSize[3])
- end
- return input
- end
- local bgr_means = {103.939,116.779,123.68} --VGG预训练中的均值
- local function vggPreProcessing(img)
- local img2=img:clone()
- img2[{{1}}] =img2[{{3}}] -- image.load 加载图像是rgb格式,需转化维bgr
- img2[{{3}}] = img[{{1}}]
- img2:mul(255) -- image.load()加载的图像 pixel value \in [0,1]
- for i=1,3 do
- img2[i]:add(-bgr_means[i]) -- 中心化
- end
- return img2
- end
- local function centerCrop(input)
- local oH = sampleSize[2]
- local oW = sampleSize[3]
- local iW = input:size(3)
- local iH = input:size(2)
- local w1 = math.ceil((iW-oW)/2)
- local h1 = math.ceil((iH-oH)/2)
- local out = image.crop(input,w1,h1,w1+oW,h1+oH)
- return out
- end
- local function getPretrainedModel()
- local proto = 'VGG_ILSVRC_16_layers_deploy.prototxt'
- local caffemodel = '/home/zwzhou/modelZoo/VGG_ILSVRC_16_layers.caffemodel'
- local model = loadcaffe.load(proto,caffemodel,'nn') -- 加载pretrained model
- for i=1,3 do -- 将最后3层舍掉
- model.modules[#model.modules]=nil
- end
- -- 删除pretrained model的一些层官方方法
- -- ==========================
- -- for i= 40,38,-1 do
- -- model:remove(i)
- -- end
- -- ==========================
- model:add(nn.Normalize(2)) -- 添加一层正则化层,将输出向量归一化
- model:evaluate() -- self.training=false ,非训练,让网络参数不变
- return model
- end
- torch.setdefaulttensortype('torch.FloatTensor')
- model = getPretrainedModel()
- filepath = '/home/zwzhou/MOT16/train/MOT16-02/img1/000001.jpg'
- local img1=image.load(filepath) -- rgb图像
- local input = image.crop(img1,910,480,910+97,480+110) -- 里面参数时选择原图像的一个区域,boundingbox
- input = loadImage(input)
- local vggPreProcessed = vggPreProcessing(input)
- local out = centerCrop(vggPreProcessed)
- local outputs = model:forward(out)
- print(outputs)
- print(#outputs)
VGG16提取图像特征 (torch7)的更多相关文章
- CNN基础二:使用预训练网络提取图像特征
上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...
- 原来CNN是这样提取图像特征的。。。
对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...
- 深度学习tensorflow实战笔记 用预训练好的VGG-16模型提取图像特征
1.首先就要下载模型结构 首先要做的就是下载训练好的模型结构和预训练好的模型,结构地址是:点击打开链接 模型结构如下: 文件test_vgg16.py可以用于提取特征.其中vgg16.npy是需要单独 ...
- Pytorch如何用预训练模型提取图像特征
方法很简单,你只需要将模型最后的全连接层改成Dropout即可. import torch from torchvision import models # load data x, y = get_ ...
- opencv批处理提取图像的特征
____________________________________________________________________________________________________ ...
- paper 131:【图像算法】图像特征:GLCM【转载】
转载地址:http://www.cnblogs.com/skyseraph/archive/2011/08/27/2155776.html 一 原理 1 概念:GLCM,即灰度共生矩阵,GLCM是一个 ...
- 【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征
[图像算法]图像特征:GLCM SkySeraph Aug 27th 2011 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modifie ...
- python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码
参考博客:https://blog.csdn.net/xue_wenyuan/article/details/51533953 https://blog.csdn.net/jinshengtao/ar ...
- MATLAB·提取图像中多个目标
基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...
随机推荐
- Java中的文件和流相关知识
1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出 ...
- SQL的子查询操作
对于表中的每一个记录,我们有时候需要提取特殊的或者你需要的记录,要提前做一个表的筛选,之后再对你选出的记录做一个修改,此时你必须使用SQL的子查询操作.如:修改id=5的记录的strContent字段 ...
- linux内核cdev_init系列函数(字符设备的注册)
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject ...
- Python3、Unicode、UTF-8、编码
text = u'你好,今天天气不错' text print(text) text = '\u4f60\u597d\uff0c\u4eca\u5929\u5929\u6c14\u4e0d\u9519' ...
- 【接口测试】接口概念及Json相关
一.接口相关概念 1.什么是接口? 接口:接口就是系统A程序中留的其他系统B访问系统A的接口(实际上是系统某个代码文件下某一个可访问的方法.).其他系统B可以调用这个方法a对系统A中的方法a进行访问从 ...
- 【调研与分析】标杆学习、知识管理和竞争情报的关系——From Team
注: 1)红色实线箭头表示可以直接使用:例如竞争情报业务输出产品之一的标杆文档可以直接作为公司标杆学习中外部标杆的资料: 2)蓝色虚线箭头表示转化后使用或者间接利用的关系:例如专题调研可以帮助建立内部 ...
- Openstack(七)keystone
官方安装文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/index.html 7.1 keystone简介 Keystone 中 ...
- hadoop2.x Federation
单Active NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NN进程使用的内存可能会达到上百G,NN成为了性能的瓶颈 常用的估算公式为1G对应1百万个块,按缺省块大 ...
- Python第二弹--------类和对象
Python中的任何一条数据都是对象.每个对象都由3部分组成:标识.类型和值.对象的标识代表该对象在内存中的存储位置(因此是不可更改的),对象的类型表明它可以拥有数据和值的类型. 创建 Dog 类根据 ...
- Android ActionBar自定义
关于自定义的ActionBar的实现过程,这里做下笔记以供之后查看. 1.默认状态 使用Android Studio新建一个名为“ActionBar”的应用,默认actionbar如图(1)所示. 图 ...