Downloads · 30 days
15
26% of all-time downloads
VerboVision/dpo_CapRL-Qwen3VL-4B-apo_zero-sft1.0-iter2-merged
dpo_CapRL-Qwen3VL-4B-apo_zero-sft1.0-iter2-merged is a image-text-to-text model from VerboVision. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers.
Modelo de captioning em português do Brasil, voltado a descrições longas e detalhadas para acessibilidade (linha do PraCegoVer / VerboVision).
Downloads · 30 days
15
26% of all-time downloads
All-time downloads
58
Public
Parameters
4.4B
8.9 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors8.9 GB · 100%
From the Hugging Face model README
Modelo de captioning em português do Brasil, voltado a descrições longas e detalhadas para acessibilidade (linha do PraCegoVer / VerboVision).
Foi obtido por DPO iterativo a partir do
internlm/CapRL-Qwen3VL-4B,
usando como sinal de preferência a correção factual das próprias descrições do
modelo, feita pelo openai/gpt-5.6-luna (via OpenRouter) olhando a imagem.
Para cada imagem do VerboVision/PraCegoVer-Filtrado-FSB:
rejected;gpt-5.6-luna recebe a imagem e essa descrição e devolve a mesma descrição
com o que era falso removido e o que faltava acrescentado → vira o chosen.Os dois lados saem do mesmo texto, então o par carrega sinal de veracidade, e não de comprimento — o que evita o modo de falha clássico em que o DPO só aprende a escrever mais. Filtros de qualidade descartam pares com sobreposição léxica fora da faixa (reescritas totais ou correções nulas) e razões de tamanho extremas.
| iteração | modelo de partida | dataset de preferência | pares |
|---|---|---|---|
| 1 | internlm/CapRL-Qwen3VL-4B | VerboVision/CapRL-DPO-ptbr | 2.976 |
| 2 | o merge da iteração 1 | VerboVision/CapRL-DPO-ptbr-iter2 | 2.994 |
É iterativo no sentido estrito: os rejected da segunda rodada foram gerados pelo
modelo já treinado na primeira, sobre imagens que ele nunca tinha visto, de modo que
a correção ataca os erros que sobreviveram à primeira rodada.
apo_zero + sft combinados (multi-loss do TRL, no estilo do MPO),
pesos 1.0 / 1.0. O apo_zero sobe o chosen e desce o rejected — apropriado
quando o modelo é pior que o vencedor; o termo de SFT ancora o modelo em produzir
a descrição corrigida, não só em se afastar da rejeitada.all-linear, depois mesclada nos pesos publicados aqui.learning_rate 1e-5, 2 épocas, batch efetivo 16, max_length 4096,
orçamento de ~1,2 M pixels por imagem (o mesmo da geração, para o modelo não treinar
vendo menos do que vê na inferência).DPOTrainer).O modelo foi treinado com um prompt fixo; usar outro tira a saída da distribuição.
from transformers import AutoModelForImageTextToText, AutoProcessor
from PIL import Image
import torch
repo = "VerboVision/dpo_CapRL-Qwen3VL-4B-apo_zero-sft1.0-iter2-merged"
model = AutoModelForImageTextToText.from_pretrained(repo, dtype=torch.bfloat16, device_map="auto")
processor = AutoProcessor.from_pretrained(repo)
PROMPT = (
"Descreva esta imagem e os elementos visuais/textuais presentes nela, em "
"português do Brasil, de forma detalhada. Forneça apenas e diretamente a "
"descrição detalhada da imagem em formato de parágrafos contínuos, sem "
"formatações adicionais"
)
image = Image.open("imagem.jpg").convert("RGB")
messages = [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": PROMPT}]}]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], images=[image], return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
print(processor.decode(out[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))