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

  

接触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文件的方法