import torch
import torchvision
import torchvision.transforms as transforms
from PIL import Image
from torch import Tensor
import torch.nn as nn
# 加载ResNet-50模型
model = torchvision.models.resnet50(weights='ResNet50_Weights.DEFAULT')
model.fc = nn.Linear(2048, 512)
# 设置模型为评估模式
model.eval()
# 图像预处理
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 加载并预处理图像
image = Image.open('std.jpg')
image = transform(image).unsqueeze(0) # 添加批次维度
# 使用模型进行推理
with torch.no_grad():
features: Tensor = model(image)
features_list = features.squeeze(0).tolist()
# 输出特征向量
print(features_list[:10])
每次运行都不一样,而且区别很大很大。像是随机的,不固定
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[-0.29179805517196655, 0.2904847264289856, 0.12426053732633591, 0.02481590211391449, 0.329562783241272, 0.22396402060985565, -0.06559790670871735, -0.20587551593780518, 0.25109758973121643, -0.023244917392730713]
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[0.11942902207374573, 0.1826518476009369, -0.2526671588420868, -0.004894621670246124, -0.17024371027946472, -0.08633725345134735, 0.5060751438140869, 0.07067155838012695, 0.14896635711193085, 0.061379216611385345]
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[0.20133033394813538, -0.4602600336074829, 0.13579875230789185, 0.02763177454471588, 0.05834684893488884, 0.006434973329305649, 0.030948840081691742, -0.2761097848415375, 0.04298316687345505, 0.034981779754161835]
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[0.15419462323188782, -0.057300686836242676, 0.153386652469635, 0.19760870933532715, 0.2271871566772461, -0.15803731977939606, 0.14448338747024536, -0.0767395868897438, -0.01838969811797142, -0.033301010727882385]
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[0.18995943665504456, 0.16650597751140594, -0.1821695864200592, -0.13390550017356873, -0.3528384268283844, -0.10662798583507538, -0.06500241160392761, -0.32258665561676025, 0.22184018790721893, -0.1533258706331253]
(image2vector) ╭─ponponon@MBP13ARM ~/Desktop/code/me/resnet_example ‹master*›
╰─➤ python -u "/Users/ponponon/Desktop/code/me/resnet_example/resnet50_handle_image_into_vector.py"
[-0.3856864273548126, 0.11389009654521942, 0.11823548376560211, -0.1116785854101181, 0.24777428805828094, 0.45221805572509766, -0.1880977898836136, 0.07203484326601028, 0.29017287492752075, 0.05842892453074455]
毫无规律可言?
我明明已经预训练权重了 weights='ResNet50_Weights.DEFAULT'
已解决:https://github.com/pytorch/vision/issues/7937
把下面那行删掉就好了
还可以参考:https://discuss.pytorch.org/t/how-to-modify-the-final-fc-laye...