1. Invocação via API: Testes Instantâneos sem Infraestrutura
Para validações rápidas de capacidades do modelo, a invocação de endpoints REST é a abordagem mais direta. Não requer provisionamento de GPU local nem instalação de dependências — apenas requisições HTTP com imagens e descrições textuais.
O conceito funciona como um serviço de aálise visual sob demanda: você envia uma fotografia junto com categorias de interesse em chinês, e recebe probabilidades de correspondência e coordenadas de localização.
Exemplo de Requisição em Python
import base64
import httpx
caminho_imagem = "exemplo.jpg"
with open(caminho_imagem, "rb") as arquivo:
bytes_imagem = arquivo.read()
payload = {
"arquivo": ("imagem.jpg", bytes_imagem, "image/jpeg"),
"consultas": '["pessoa", "veículo", "animal doméstico", "alimento"]',
"limiar": 0.6
}
async with httpx.AsyncClient() as cliente:
resposta = await cliente.post(
"https://api.exemplo.ai/v1/analisar",
files={"imagem": payload["arquivo"]},
data={"consultas": payload["consultas"], "limiar": payload["limiar"]}
)
dados = resposta.json()
for deteccao in dados["resultados"]:
print(f"{deteccao['classe']}: {deteccao['confianca']:.1%}")
Retorno típico:
{
"resultados": [
{"classe": "pessoa", "confianca": 0.947, "caixa": [120, 340, 280, 580]},
{"classe": "alimento", "confianca": 0.823, "caixa": [400, 420, 560, 510]}
]
}
Parâmetros ajustáveis incluem idioma (zh/pt/en), max_detecoes para limitar resultados, e incluir_mascara para segmentação de instâncias.
2. Ambiente Interativo com Jupyter: Exploração Profunda
Quando a aálise requer inspeção de ativações intermediárias, comparação de arquiteturas ou prototipagem de pipelines, um ambiente Notebook completo é indispensável.
Estrutura de um Notebook Típico
# Célula 1: Inicialização
from vision_kit import ModeloVisaoLinguagem
from utilitarios import carregar_imagem, visualizar_atencao
modelo = ModeloVisaoLinguagem("cn-clip-vit-l-14")
modelo.ativar_aceleracao()
# Célula 2: Carregamento de dados
imagem = carregar_imagem("cena_urbana.jpg")
descricoes = [
"interseção movimentada",
"construção em andamento",
"área residencial tranquila",
"centro comercial"
]
# Célula 3: Inferência com explicação
predicoes, mapas_atencao = modelo.analisar_com_explicacao(imagem, descricoes)
for rotulo, probabilidade in predicoes:
print(f"{rotulo}: {probabilidade:.3f}")
# Célula 4: Visualização de atenção cruzada
visualizar_atencao(imagem, mapas_atencao, descricoes[0])
Essa abordagem permite inspecionar tensores em qualquer camada, modificar prompts dinamicamente, e exportar visualizações para documentação técnica.
3. Adaptação para Domínio Específico: Fine-tuning Guiado
Modelos fundacionais generalistas frequentemente subperformam em nichos técnicos. A estratégia de adaptação leve (parameter-efficient fine-tuning) preserva pesos pré-treinados enquanto ajusta camadas de projeção.
Preparação de Dados de Treino
from datasets import Dataset
import json
def carregar_anotacoes(caminho_jsonl):
amostras = []
with open(caminho_jsonl) as f:
for linha in f:
registro = json.loads(linha)
amostras.append({
"imagem": registro["caminho"],
"legenda": registro["descricao_chines"],
"rotulos": registro["categorias"]
})
return Dataset.from_list(amostras)
dados_treino = carregar_anotacoes("dados/especialidade_medica.jsonl")
Configuração de Treinamento com LoRA
from peft import LoraConfig, get_peft_model
from transformers import TrainingArguments
config_lora = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["projetor_visual", "projetor_texto"],
lora_dropout=0.05,
bias="none"
)
modelo_adaptado = get_peft_model(modelo_base, config_lora)
args_treino = TrainingArguments(
diretorio_saida="modelos/adaptado",
epocas=10,
tamanho_lote=4,
gradiente_acumulacao=4,
precisao_mista="fp16",
avaliacao_strategy="epoch",
salvar_strategy="epoch",
carregar_melhor=True
)
O treinamento tipicamente converge em 3-5 épocas para domínios especializados, exigindo menos de 10% dos dados que um treinamento from-scratch demandaria.
Exportação para Produção
from onnx import export as exportar_onnx
modelo_adaptado.merge_and_unload() # Fundir adaptadores
exportar_onnx(
modelo_adaptado,
args_exemplo=(tensor_imagem, tensor_texto),
caminho_saida="modelo_producao.onnx",
opset=14,
dinamico={"entrada_imagem": {0: "lote", 2: "altura", 3: "largura"}}
)
O modelo resultante é compatível com TensorRT para inferência otimizada em servidores de GPU e ONNX Runtime para implantação em CPU.