DINOv3 demo

本文将介绍如何使用 ModelScope(魔搭) 平台提供的 DINOv3 预训练模型,在本地进行批量图像特征提取,并输出可用于后续融合或蒸馏的特征向量。全程无需 Hugging Face 账号验证,直接加载本地或魔搭模型即可。

一、🛠️ 环境依赖

确保已安装以下库:

复制代码
bash
pip install torch modelscope pillow
注意:本文使用的是 ModelScope(魔搭) 的 AutoModel 和 AutoImageProcessor,不依赖 Hugging Face Transformers 的模型下载权限。

二、📦 代码实现:批量特征提取器

python 复制代码
# huggingface还要验证,先使用魔塔的模型

import torch
from modelscope import AutoImageProcessor, AutoModel
from transformers.image_utils import load_image
from PIL import Image
from typing import List, Union

class DINOv3FeatureExtractor:
    def __init__(self, pretrained_model_name: str):
        """
        初始化DINOv3模型和处理器。
        
        参数:
            pretrained_model_name (str): 预训练模型的路径或名称。
        """
        # 加载预处理工具和模型
        self.processor = AutoImageProcessor.from_pretrained(pretrained_model_name)
        self.model = AutoModel.from_pretrained(pretrained_model_name, device_map="auto")
        self.model.eval()  # 设置为评估模式
        
    def infer_batch_features(self, image_inputs: List[Union[str, Image.Image]]) -> torch.Tensor:
        """
        对给定的一批图像进行推理,返回提取的特征。
        
        参数:
            image_inputs (List[Union[str, Image.Image]]): 包含图像的本地路径、URL 或已加载的 PIL 图像列表。
            
        返回:
            torch.Tensor: 模型输出的 pooled 特征,形状为 [batch_size, hidden_size]。
        """
        images = []
        for image_input in image_inputs:
            if isinstance(image_input, str):
                image = load_image(image_input)
            else:
                image = image_input  # 假设已经是 PIL.Image.Image
            images.append(image)

        # 预处理所有图像并移至模型设备
        inputs = self.processor(images=images, return_tensors="pt").to(self.model.device)

        # 推理
        with torch.inference_mode():
            outputs = self.model(**inputs)

        # 返回 pooled 输出
        return outputs.pooler_output
    
# 示例用法
if __name__ == "__main__":
    model_path = "G:/code/Project_FM_Distill/RTdetrv2_FM_Distill/dinov3-vits16-pretrain-lvd1689m"
    extractor = DINOv3FeatureExtractor(model_path)
    
    urls = [
        "http://images.cocodataset.org/val2017/000000039769.jpg",
        "http://images.cocodataset.org/val2017/000000039769.jpg"
    ]
    features = extractor.infer_batch_features(urls)
    print("Pooled output shape:", features.shape)

"""

后面不多说了,主要是给一个demo作为参考。

我放了一个完整包,包含权重文件:https://download.csdn.net/download/weixin_38252409/92493650

你也可以快速在魔塔社区下载:https://www.modelscope.cn/models/facebook/dinov3-vits16-pretrain-lvd1689m/files

相关推荐
VidDown30 分钟前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频2 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林3 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook4 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺5 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
用户080775907855 小时前
昇腾 NPU 从零部署推理模型 · 完整决策与操作指南
深度学习
十方空烬5 小时前
我的 LoRA 更会选路由了,JSON 却更不可靠了
机器学习
AliCloudROS5 小时前
5~7 分钟跑通第一个 Agentic RL 训练:我们把 verl 全链路做成了计算巢一键服务
深度学习·强化学习