接触pytorch一天,发现pytorch上手的确比TensorFlow更快。可以更方便地实现用预训练的网络提特征。
以下是提取一张jpg图像的特征的程序:
# - * -编码:utf - 8 - * 进口os.path 进口火炬 进口火炬。神经网络是神经网络 从torchvision导入模型,变换 从火炬。autograd导入变量 进口numpy np 从公益诉讼导入图像 features_dir='。/特性的 img_path=" hymenoptera_data/火车/蚂蚁/0013035. jpg” file_name=img_path.split (“/? [1] feature_path=os.path。加入(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=模型。resnet18 (pretrained=True) resnet50_feature_extractor=模型。resnet50 (pretrained=True) resnet50_feature_extractor。fc=nn。线性(2048、2048) torch.nn.init.eye (resnet50_feature_extractor.fc.weight) 在resnet50_feature_extractor.parameters参数(): 参数。requires_grad=False # resnet152=模型。resnet152 (pretrained=True) # densenet201=models.densenet201 (pretrained=True) x=变量(火炬。unsqueeze (img1昏暗=0).float (), requires_grad=False) #日元=resnet18 (x) y=resnet50_feature_extractor (x) y=y.data.numpy () np。savetxt (feature_path, y,分隔符=" ") # y3=resnet152 (x) # y4=densenet201 (x) y_=np。loadtxt (feature_path分隔符=" ")。重塑(2048)
以下是提取一个文件夹下所有jpg, jpeg图像的程序:
# - * -编码:utf - 8 - * 进口操作系统、火炬、水珠 进口numpy np 从火炬。autograd导入变量 从公益诉讼导入图像 从torchvision导入模型,变换 进口火炬。神经网络是神经网络 进口shutil data_dir='/hymenoptera_data’。 features_dir='。/特性的 shutil。copytree (data_dir os.path。加入(features_dir data_dir [2])) 净,def器(img_path saved_path use_gpu): 变换=transforms.Compose ([ transforms.Scale (256), transforms.CenterCrop (224), transforms.ToTensor ()) ) img=Image.open (img_path) img=变换(img) x=变量(火炬。unsqueeze (img,昏暗的=0).float (), requires_grad=False) 如果use_gpu: x=x.cuda () 网=net.cuda () y=净(x) .cpu () y=y.data.numpy () np。savetxt (saved_path, y,分隔符=" ") if __name__==癬_main__”: 扩展=(jpg, jpeg, jpg, jpeg的) files_list=[] sub_dirs=[x [0] x os.walk (data_dir)] sub_dirs=sub_dirs [1:] 在sub_dirs sub_dir: 在扩展延伸: file_glob=os.path。加入(sub_dir”*。' +延伸) files_list.extend (glob.glob (file_glob)) resnet50_feature_extractor=模型。resnet50 (pretrained=True) resnet50_feature_extractor。fc=nn。线性(2048、2048) torch.nn.init.eye (resnet50_feature_extractor.fc.weight) 在resnet50_feature_extractor.parameters参数(): 参数。requires_grad=False use_gpu=torch.cuda.is_available () 在files_list x_path: 打印(x_path) fx_path=os.path。加入(features_dir x_path [2] + ' . txt ') 器(x_path fx_path、resnet50_feature_extractor use_gpu)
另外最近发现一个很简单的提取不含FC层的网络的方法:
resnet=models.resnet152 (pretrained=True) 模块=列表(resnet.children())(: 1) #删除最后一个fc层。 之前事先=nn.Sequential(*模块)>另一种更简单的方法:
resnet=models.resnet152 (pretrained=True) 德尔resnet.fc以上这篇pytorch实现用Resnet提取特征并保存为txt文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
pytorch实现用Resnet提取特征并保存为txt文件的方法