使用resnet34及其预训练模型对一个文件夹内的图片进行特征提取的pytorch代码
时间: 2024-10-14 17:18:13 浏览: 38
在PyTorch中,你可以使用ResNet34预训练模型进行图像特征提取。以下是基本步骤的代码示例:
```python
import torch
from torchvision import models, transforms
from PIL import Image
# 加载预训练的ResNet34模型,将最后的全连接层设置为不训练
model = models.resnet34(pretrained=True)
for param in model.parameters():
param.requires_grad = False
# 设置模型为评估模式
model.eval()
# 定义数据加载和转换
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224), # 图片尺寸调整为224x224
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化
])
# 遍历文件夹中的图片
image_folder_path = 'your_image_folder_path'
features_list = []
for img_name in os.listdir(image_folder_path):
img_path = os.path.join(image_folder_path, img_name)
with open(img_path, 'rb') as f:
img = Image.open(f)
tensor_img = transform(img)
# 将张量图像转为单个批次
tensor_img.unsqueeze_(0)
# 通过模型提取特征
with torch.no_grad():
features = model(tensor_img).squeeze() # 特征向量
features_list.append(features.cpu().numpy()) # 添加到列表中
# 提取完毕后的features_list是一个包含所有图片特征的列表
```
在这个例子中,`features_list`将存储每个图片对应的ResNet34提取的特征向量。
阅读全文