pytorch实现用Resnet提取特征并保存为txt文件的方法


Posted in Python onAugust 20, 2019

接触pytorch一天,发现pytorch上手的确比TensorFlow更快。可以更方便地实现用预训练的网络提特征。

以下是提取一张jpg图像的特征的程序:

# -*- coding: utf-8 -*-
 
import os.path
 
import torch
import torch.nn as nn
from torchvision import models, transforms
from torch.autograd import Variable 
 
import numpy as np
from PIL import Image 
 
features_dir = './features'
 
img_path = "hymenoptera_data/train/ants/0013035.jpg"
file_name = img_path.split('/')[-1]
feature_path = os.path.join(features_dir, file_name + '.txt')
 
 
transform1 = transforms.Compose([
    transforms.Scale(256),
    transforms.CenterCrop(224),
    transforms.ToTensor()  ]
)
 
img = Image.open(img_path)
img1 = transform1(img)
 
#resnet18 = models.resnet18(pretrained = True)
resnet50_feature_extractor = models.resnet50(pretrained = True)
resnet50_feature_extractor.fc = nn.Linear(2048, 2048)
torch.nn.init.eye(resnet50_feature_extractor.fc.weight)
 
for param in resnet50_feature_extractor.parameters():
  param.requires_grad = False
#resnet152 = models.resnet152(pretrained = True)
#densenet201 = models.densenet201(pretrained = True) 
x = Variable(torch.unsqueeze(img1, dim=0).float(), requires_grad=False)
#y1 = resnet18(x)
y = resnet50_feature_extractor(x)
y = y.data.numpy()
np.savetxt(feature_path, y, delimiter=',')
#y3 = resnet152(x)
#y4 = densenet201(x)
 
y_ = np.loadtxt(feature_path, delimiter=',').reshape(1, 2048)

以下是提取一个文件夹下所有jpg、jpeg图像的程序:

# -*- coding: utf-8 -*-
import os, torch, glob
import numpy as np
from torch.autograd import Variable
from PIL import Image 
from torchvision import models, transforms
import torch.nn as nn
import shutil
data_dir = './hymenoptera_data'
features_dir = './features'
shutil.copytree(data_dir, os.path.join(features_dir, data_dir[2:]))
 
 
def extractor(img_path, saved_path, net, use_gpu):
  transform = transforms.Compose([
      transforms.Scale(256),
      transforms.CenterCrop(224),
      transforms.ToTensor()  ]
  )
  
  img = Image.open(img_path)
  img = transform(img)
  
 
 
  x = Variable(torch.unsqueeze(img, dim=0).float(), requires_grad=False)
  if use_gpu:
    x = x.cuda()
    net = net.cuda()
  y = net(x).cpu()
  y = y.data.numpy()
  np.savetxt(saved_path, y, delimiter=',')
  
if __name__ == '__main__':
  extensions = ['jpg', 'jpeg', 'JPG', 'JPEG']
    
  files_list = []
  sub_dirs = [x[0] for x in os.walk(data_dir) ]
  sub_dirs = sub_dirs[1:]
  for sub_dir in sub_dirs:
    for extention in extensions:
      file_glob = os.path.join(sub_dir, '*.' + extention)
      files_list.extend(glob.glob(file_glob))
    
  resnet50_feature_extractor = models.resnet50(pretrained = True)
  resnet50_feature_extractor.fc = nn.Linear(2048, 2048)
  torch.nn.init.eye(resnet50_feature_extractor.fc.weight)
  for param in resnet50_feature_extractor.parameters():
    param.requires_grad = False  
    
  use_gpu = torch.cuda.is_available()
 
  for x_path in files_list:
    print(x_path)
    fx_path = os.path.join(features_dir, x_path[2:] + '.txt')
    extractor(x_path, fx_path, resnet50_feature_extractor, use_gpu)

另外最近发现一个很简单的提取不含FC层的网络的方法:

resnet = models.resnet152(pretrained=True)
    modules = list(resnet.children())[:-1]   # delete the last fc layer.
    convnet = nn.Sequential(*modules)

另一种更简单的方法:

resnet = models.resnet152(pretrained=True)
del resnet.fc

以上这篇pytorch实现用Resnet提取特征并保存为txt文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
python基于递归解决背包问题详解
Jul 03 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
pyspark 随机森林的实现
Apr 24 Python
python使用多线程+socket实现端口扫描
May 28 Python
基于tensorflow权重文件的解读
May 26 Python
python web框架 django wsgi原理解析
Aug 20 #Python
opencv转换颜色空间更改图片背景
Aug 20 #Python
pytorch 预训练层的使用方法
Aug 20 #Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 #Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 #Python
python实现抠图给证件照换背景源码
Aug 20 #Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 #Python
You might like
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php通过字符串调用函数示例
2014/03/02 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript实现yield的方法
2013/11/06 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python实现ID3决策树算法
2017/12/20 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
学前教育毕业生自荐信范文
2013/12/24 职场文书
体操比赛口号
2014/06/10 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
事业单位个人总结
2015/02/12 职场文书
党员个人自我评价
2015/03/03 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
Golang 链表的学习和使用
2022/04/19 Golang
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL