You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保ResNet50生成的图像嵌入可长期复现?

解决方案:固定ResNet50模型版本并本地存储权重

要确保图像嵌入的长期复现,核心是锁定模型架构版本、本地固化权重文件、统一依赖环境,以下是具体可行的实现方式:

一、手动下载指定版本的ResNet50权重并本地加载

1. 确定固定的模型版本

选择timm库中带明确版本标识的ResNet50(避免模糊的"resnet50"自动拉取最新版本),比如resnet50.a1_in1k(对应ImageNet-1K预训练的v1稳定版本)。

2. 下载权重到本地

通过timm工具下载对应权重并保存到本地路径(如./models/resnet50_a1_in1k.pth):

import timm
import torch

# 创建模型架构(关闭自动下载权重)
model = timm.create_model('resnet50.a1_in1k', pretrained=False)
# 从官方地址下载对应版本权重(URL可从timm模型文档获取)
state_dict = timm.models.load_state_dict_from_url(
    'https://download.pytorch.org/models/resnet50-0676ba61.pth',
    map_location='cpu'
)
model.load_state_dict(state_dict)
# 保存权重到本地目录
torch.save(model.state_dict(), './models/resnet50_a1_in1k.pth')

3. 在Towhee中使用本地模型

通过自定义算子封装本地模型,完全掌控推理逻辑:

import towhee
import timm
import torch
from PIL import Image

# 加载本地固定权重的模型
model = timm.create_model('resnet50.a1_in1k', pretrained=False)
model.load_state_dict(torch.load('./models/resnet50_a1_in1k.pth'))
model.eval()
# 复用预训练模型匹配的预处理逻辑
transform = timm.data.create_transform(**timm.data.resolve_data_config(model.pretrained_cfg))

# 注册自定义Towhee嵌入算子
@towhee.register
def local_resnet_embedding(img: Image.Image):
    tensor = transform(img).unsqueeze(0)
    with torch.no_grad():
        # 提取2048维特征嵌入
        embedding = model.forward_features(tensor).flatten(1)
    return embedding.numpy()

# 构建推理Pipeline
towhee_vectors = towhee.glob(*all_frame_paths).exception_safe() \
                        .image_decode() \
                        .local_resnet_embedding() \
                        .drop_empty() \
                        .tensor_normalize() \
                        .to_list()

二、直接通过Towhee算子指定本地权重(简洁版)

如果使用的Towhee版本支持pretrained_path参数,可直接跳过自定义算子,通过官方算子加载本地权重:

towhee_vectors = towhee.glob(*all_frame_paths).exception_safe() \
                        .image_decode() \
                        .image_embedding.timm(
                            model_name="resnet50.a1_in1k",
                            pretrained=False,
                            pretrained_path="./models/resnet50_a1_in1k.pth"
                        ) \
                        .drop_empty() \
                        .tensor_normalize() \
                        .to_list()

三、固化环境确保长期复现

除了模型权重,必须固定所有依赖库版本,避免因库更新导致的推理差异:

  1. 生成requirements.txt文件,明确指定版本:
towhee==0.8.0
timm==0.9.8
torch==2.0.1
torchvision==0.15.2
pillow==9.5.0
  1. 将本地模型权重、requirements.txt一起纳入版本控制(大文件建议用Git LFS管理),确保部署环境完全一致。

内容的提问来源于stack exchange,提问作者Dominik Sajovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:11:54