Como Baixar Modelos DINO-YOLO Modo Offline

Por que utilizar o modo offline?

Ao seguir as instruções do autor do código DINO-YOLO para instalar o ambiente e executar o projeto em um servidor, observei que o sistema continuamente tentava se conectar ao site https://huggingface.co/facebook/dinov3-vitb16-pretrain-lvd1689m para baixar o modelo DINOv3. No entanto, meu servidor não conseguia estabelecer conexão com este site, resultando em múltiplas tentativas seguidas por erros.

Portanto, a solução foi baixar completamente o repositório do modelo DINOv3 do Hugging Face localmente, copiar os arquivos para o servidor offline, posicioná-los no diretório de cache do Hugging Face, e então executar o projeto com o transformers em modo offline.

Passos de Implementação e Desafios Encontrados

1. Download Completo do Repositorio do Modelo DINOv3

  1. Registre-se e faça login no site https://huggingface.co/facebook/dinov3-vitb16-pretrain-lvd1689m
  2. É necessário preencher um formulário para obter permissão de acesso ao modelo. É recomendável evitar fornecer endereços ou instituições da China ou Rússia, pois isso pode resultar na recusa do pedido.
  3. Após a aprovação, clique na seção "Arquivos e versões" para baixar todos os arquivos necessários e envie-os para seu servidor.

2. Modificação do Código para Carregamento Local do Modelo DINO

  1. Organize os modelos no caminho correto, garantindo que o diretório /data/models/dinov3-vitb16 contenha todos os arquivos do repositório baixado.
  2. Antes de iniciar o treinamento, defina as variáveis de ambiente:
export TRANSFORMERS_OFFLINE=1
export HF_HUB_OFFLINE=1
# Opcional: Defina o diretório de cache do HF (se os snapshots estiverem aqui, não é necessário alterar o código)
export HF_HOME=/data/hf_cache
# Se você configurou HUGGINGFACE_HUB_TOKEN, é recomendável removê-lo temporariamente
unset HUGGINGFACE_HUB_TOKEN

  1. No arquivo ultralytics/nn/modules/block.py (onde está o código principal de carregamento), altere todas as chamadas from_pretrained para o modelo DINO para usar o caminho local com local_files_only=True.

O script abaixo fará um backup do arquivo original e substituirá chamadas como AutoModel.from_pretrained(...), AutoConfig.from_pretrained(...) e AutoProcessor.from_pretrained(...) (apenas nas chamadas que contenham dinov3 ou dinov3_vitb16). Execute-o no diretório raiz do repositório:

# Execute no diretório raiz do repositório
FILE=ultralytics/nn/modules/block.py
cp "$FILE" "${FILE}.bak" || { echo "Falha no backup, verifique o caminho"; exit 1; }

python3 - <<'PY'
import re,sys,os
p = "ultralytics/nn/modules/block.py"
s = open(p, "r", encoding="utf-8").read()

# Caminho local do modelo (ajuste conforme seu diretório real)
local_path = "/data/models/dinov3-vitb16"

# Substitui chamadas AutoModel.from_pretrained / AutoConfig.from_pretrained / AutoProcessor.from_pretrained
# Apenas quando os parâmetros contiverem dinov3 ou dinov3_vitb16
s = re.sub(r"AutoModel\.from_pretrained\(\s*([^)'\"]*dinov3[^)]*)\)",
           f"AutoModel.from_pretrained('{local_path}', local_files_only=True)",
           s, flags=re.IGNORECASE)
s = re.sub(r"AutoConfig\.from_pretrained\(\s*([^)'\"]*dinov3[^)]*)\)",
           f"AutoConfig.from_pretrained('{local_path}', local_files_only=True)",
           s, flags=re.IGNORECASE)
s = re.sub(r"AutoProcessor\.from_pretrained\(\s*([^)'\"]*dinov3[^)]*)\)",
           f"AutoProcessor.from_pretrained('{local_path}', local_files_only=True)",
           s, flags=re.IGNORECASE)
s = re.sub(r"AutoFeatureExtractor\.from_pretrained\(\s*([^)'\"]*dinov3[^)]*)\)",
           f"AutoFeatureExtractor.from_pretrained('{local_path}', local_files_only=True)",
           s, flags=re.IGNORECASE)

# Substitui o uso direto de variáveis como modelo_id/dino_id (cobrindo mais casos)
s = s.replace("dino_model_id", f"'{local_path}'")
s = s.replace("hf_model_id", f"'{local_path}'")

open(p, "w", encoding="utf-8").write(s)
print("Arquivo modificado:", p)
PY

Pode ocorrer que outras partes não relacionadas sejam modificadas, causando erros. Nesses casos, analise as mensagens de erro e ajuste manualmente as alterações necessárias.

Após a modificação, o sistema carregará os modelos de /data/models/dinov3-vitb16 em vez de tentar acessar huggingface.co.

Links do Artigo e Código

Tags: Transformers modelos offline DINO-YOLO deep learning Pytorch

Publicado em 6-29 03:18