Skill issue: pare de implantar modelos de visão e linguagem, use-os com Skills — Merve Noyan, Hugging Face
AAI Engineer
Computing/SoftwareSmall Business/Startups
Transcript
00:00:00Olá e bem-vindos a esta palestra sobre falta de habilidade. Na verdade, não é mais uma falta de habilidade. Ao final
00:00:22desta palestra, você será capaz de construir muita coisa com os modelos de visão, se é que já não está fazendo isso.
00:00:27Resumidamente sobre mim, eu sou a Merve. Trabalho com visão computacional desde o LLaVA, lá atrás, e ultimamente tenho trabalhado mais com agentes e processamento local, porque fico fascinada e amo tanto os modelos de linguagem e visão que até escrevi um livro sobre isso. Mas não quero mais que os desenvolvedores usem modelos de linguagem e visão diretamente; quero que cada desenvolvedor comece
00:00:54a criar aplicações de visão ponta a ponta, e esta palestra vai te dar uma boa base para isso. O comportamento comum que observo nos desenvolvedores é tentar usar modelos de linguagem e visão para tudo, mas você nunca terá tempo real. E quando digo tempo real, refiro-me a ter uma torradeira
00:01:18e obter 30 ou 40 FPS nela, não importa se você está construindo classificação de imagem, segmentação de instâncias ou o que quer que seja.
00:01:28E eles não são super robustos no sentido de que, se você treinasse algo como um RT-DETR, sobre o qual o Joseph falou na primeira palestra,
00:01:39ele sempre superará o seu modelo de linguagem e visão, e eu vou provar isso hoje.
00:01:47E do lado direito, vocês podem me ver fazendo algumas coisas com o RT-DETR.
00:01:52Outro ponto é que eles não leem as licenças. Sempre que posto algo sobre detecção de objetos, todos me perguntam sobre o YOLO. O YOLO é um bom modelo, mas tem uma licença GPL 3.0, eu acho,
00:02:07e posso jurar pela minha vida que existem desenvolvedores que o implantam sem saber
00:02:12que precisam pagar por ele. Então, sim, quero que vocês migrem para modelos Apache 2.0 hoje.
00:02:23E para isso, construí algo chamado Vibe Vision, meio inspirado nesta publicação do Maziar.
00:02:30Basicamente, o que ele faz é fornecer o modelo SAM 3.1 como uma ferramenta para o Gemma 4 chamar, e achei isso super
00:02:39impressionante. Hoje eu criei um conjunto de ferramentas onde você pode fazer isso com ainda mais recursos.
00:02:49Então, estou meio que resumindo a minha própria experiência. Primeiro, esse conjunto de ferramentas tem meus modelos favoritos como ferramentas,
00:02:57para que você possa entregá-los ao seu agente, porque seu agente de programação é meio leigo em engenharia de visão computacional.
00:03:03E ao aplicar meus critérios, basicamente, sempre que escolho um modelo, eu verifico
00:03:09o seguinte: em primeiro lugar, a licença é a maior prioridade para mim, precisa ser Apache 2.0, MIT ou
00:03:16algo não comercial; em segundo lugar, o desempenho tem que estar à altura, dependendo do tamanho ou
00:03:24das escolhas arquitetônicas, então eu confiro os testes comparativos sempre que sai um modelo de uma conferência de visão computacional;
00:03:31e em terceiro lugar, a intuição e praticidade, obviamente. Esse conjunto tem uma segunda parte, que é meio que uma etapa de treinamento prático,
00:03:41que é a parte mais empolgante, então vou passar por ela primeiro. Eu me coloquei no lugar
00:03:47dos desenvolvedores para criar uma aplicação de visão. Se eu tiver imagens rotuladas, é fácil, posso simplesmente treinar um modelo
00:03:55ou posso dar alguns tutoriais ao meu agente de visão computacional para fazer isso, pois tudo já está disponível,
00:04:02afinal construímos Transformers para isso. Mas se eu tiver apenas imagens, preciso anotá-las, depois avaliar
00:04:11as anotações e só então treinar um modelo. Mas como fazer isso em escala? Você pode usar um modelo
00:04:17de linguagem e visão como rotulador e outro como avaliador, e depois treinar o que quiser. Mas como
00:04:24é essa estrutura de trabalho? Basicamente, eu construí isto e conta com VLM para rotulagem, VLM como
00:04:35avaliador e depois treinamento. É uma tarefa de longo alcance para agentes de programação e tem suporte a várias
00:04:42infraestruturas. Você pode rodar isso localmente ou remotamente; roda na infraestrutura do Hugging
00:04:48Face, onde temos tarefas que permitem processamento em lote pontual ou treinamento.
00:04:54Também temos um sistema de roteamento sem servidor chamado provedores de inferência, onde você pode usar múltiplos
00:05:00provedores, e também temos repositórios de armazenamento para despejar dados intermediários sobre os repositórios de conjuntos de dados,
00:05:07repositórios de modelos e assim por diante. Mas o que viabiliza esse trabalho? Primeiro, meu modelo favorito: RT-DETR.
00:05:17Segmentação RT-DETR: estou trabalhando em segmentação no momento. Temos agentes melhores para tarefas de longo horizonte,
00:05:24já que você precisa acompanhar de perto o processo de rotulagem, de treinamento, etc.
00:05:32E modelos de visão menores, porém mais capazes, permitem rotular dados com um custo muito baixo, e também com
00:05:40Transformers, fizemos reestruturações para a versão 5 e outras melhorias, então o desempenho para modelos de visão está melhor no momento.
00:05:47E é assim que o fluxo realmente funciona: primeiro, eu rotulo o conjunto de dados. Pego um conjunto
00:05:54de imagens qualquer, rotulo esse conjunto de dados com o Qwen 3.5 9B e depois passo o conjunto
00:06:02de dados rotulado para dois avaliadores. O primeiro é o Gemma 4 E4B, que é um avaliador de 8B, e o segundo é o
00:06:10LFM 2.5 VL, de quase 2B, sendo relativamente menor. Basicamente, analisei as pesquisas e é melhor
00:06:18ter um conjunto de avaliadores menores. Além disso, mesclei as avaliações; também consultei a
00:06:26literatura sobre isso e a maioria das pessoas pede ao VLM ou LLM para atribuir uma pontuação, mas essas pontuações
00:06:34absolutamente não funcionam, especialmente se os modelos avaliadores forem de tamanhos diferentes. Depois envio
00:06:40para treinar o RT-DETR médio ou grande. Conversei com o pessoal da Roboflow e eles incentivaram o uso
00:06:47disso, e realmente funciona. Vou mostrar em breve, mas como isso funciona? Você
00:06:55pega o repositório e simplesmente pergunta: “Pode treinar isso? Pode fazer o treinamento com este conjunto de dados
00:07:04no Hub?” E ele começará. Se o conjunto de dados já tiver rótulos, você pode simplesmente ir direto
00:07:11para o treinamento, mas se não tiver, pode começar a anotar. O truque que utilizei
00:07:19foi passar as caixas delimitadoras sobrepostas nas imagens para o avaliador. O Qwen gera tecnicamente
00:07:27caixas delimitadoras como tokens, mas não as envio diretamente; apenas sobreponho as caixas e passo essa imagem
00:07:33junto de alguns rótulos e descrições, e pergunto: “Se esta descrição de rótulo tem uma caixa delimitadora
00:07:40nela, diga-me se aprova ou não”. Quanto ao avaliador, mesclo os vereditos
00:07:49com base na concordância mínima e não no consenso absoluto — e já vou explicar por que fiz dessa forma.
00:07:56Essas descrições de rótulos também são geradas por agentes de programação e você só precisa aprová-las como ser humano.
00:08:03E os modelos que usei neste fluxo possuem todos licenças Apache 2.0, exceto
00:08:10o modelo LFM, que tem um tipo de licença na qual você paga se ultrapassar uma certa quantia de receita,
00:08:19mas dá para usar tranquilamente, é amplo. E para os agentes de programação que estão
00:08:26gerenciando esse fluxo, eu inicialmente o construí com o Opus 4.8 e depois rodei o processo com o GLM 5.2,
00:08:35que faz um bom trabalho em tarefas de longo alcance, para ser franca. Quanto à infraestrutura, trabalho no Hugging
00:08:42Face, tenho muitos créditos de computação e sou super impaciente na vida, então usei uma boa quantidade
00:08:50de hardware para os experimentos, mas fiz os testes e, no geral, custa de três a quatro dólares se você
00:08:58quiser rodar todo esse fluxo para treinar modelos, o que acho incrível. Inicialmente, para o Qwen 3.5, usei
00:09:05servidores sem servidor porque pensei ser conveniente e super barato. Usei o DeepInfra, que é
00:09:12muito barato; se for usar em conjunto, é melhor fazer processamento em lote via tarefas. E
00:09:19para a avaliação, usei as tarefas do Hugging Face, que custam menos. Para o treinamento, usei uma L4,
00:09:27mas o modelo é super pequeno — o RT-DETR é muito leve e você pode usar qualquer outra coisa, até rodar
00:09:33localmente se quiser. Eu só sou impaciente e queria um tamanho de lote grande. Testei isso em dois problemas:
00:09:42primeiro, detecção de placas de trânsito; segundo, análise de documentos. Para a detecção de placas,
00:09:48eu já tinha os rótulos, então comparei com as anotações reais para ver se o fluxo
00:09:54funcionava ou não. Para a análise de documentos, não pude fazer isso porque usei um conjunto
00:10:02de dados de DocVQA e o objetivo era extrair imagens, tabelas, assinaturas e coisas assim,
00:10:08então é uma tarefa nova e eu queria ver se o RT-DETR conseguiria aprender. Primeiro resultado: funcionou, eba!
00:10:19Temos uma precisão média média acima de 50. Para comparar, peguei um conjunto de teste
00:10:29e o passei pelo Qwen, comparando em seguida com as pseudoanotações
00:10:35e com as anotações reais desse conjunto de teste. Há uma pequena diferença, mas era de se esperar,
00:10:42pois o aprendizado veio do Qwen. Além disso, a curva ROC-AUC apresentou um valor muito bom para esse tipo
00:10:50de caso de uso. E para a análise de documentos, ele realmente generalizou, o que acho incrível.
00:10:58Aqui, no resultado do modelo treinado, dá para ver que ele detectou a assinatura, enquanto a anotação do Qwen
00:11:06nesse conjunto de teste a deixou passar. Então, posso dizer que ele generalizou muito bem também.
00:11:12Mas devemos isso ao quão bom o RT-DETR é como arquitetura base, de certa forma. Aqui vocês também podem ver como
00:11:21ele captura as imagens de forma precisa, perfeita. E enquanto construía isso, percebi
00:11:30que eu não sabia muito sobre criar projetos com agentes de visão, então tive várias descobertas sobre o assunto.
00:11:37Em primeiro lugar, há um enorme desequilíbrio na avaliação. Dependendo do problema, o LFM tende a rejeitar
00:11:44muita coisa. Por isso não pude adotar o consenso, porque se eu eliminasse tudo aquilo em que
00:11:50tanto o LFM quanto o Gemma concordassem em remover, ficaria com pouquíssimos exemplos, resultando
00:11:58em uma generalização muito fraca. O que fiz foi: se um deles disser sim, eu aproveito
00:12:04aquele exemplo. E mesmo assim funcionou bem! Mas se você tem um conjunto grande e se importa
00:12:09com a taxa de recuperação, sugiro buscar o consenso ou observar. Na análise de documentos, a diferença
00:12:17não é tão grande. Em segundo lugar, a geração de instruções é um pouco difícil, sendo a única parte em que você,
00:12:28como humano, precisa aprovar. O modelo gera as instruções para o avaliador e então
00:12:35você diz: “Certo, eu aprovo isto”, porque você ainda precisa dar uma olhada no seu
00:12:42conjunto de dados. Não há como escapar disso. Em terceiro lugar — e isso é super interessante —, por mais que o seu
00:12:52agente de programação seja bom — como o Opus 4.8, que é um excelente
00:12:59agente de programação —, ele é leigo como engenheiro de visão computacional e peca no senso comum.
00:13:06Por exemplo, ele aplicava espelhamento horizontal em placas de trânsito ou alterações de cor
00:13:14em semáforos, o que definitivamente corrompe e estraga os conjuntos de dados. Corrigi isso mais tarde,
00:13:21para que você possa dizer se quer ou não aplicar aumento de dados, e seu agente ajudará com isso.
00:13:30E, por fim, a segunda parte deste conjunto de ferramentas são os meus modelos preferidos como ferramentas.
00:13:35Portanto, este repositório cobre os meus modelos favoritos, desde estimativa de profundidade a segmentação zero-shot.
00:13:42E isto é parcialmente alimentado pelos benchmarks do Hugging Face, que lançámos recentemente, talvez há
00:13:48alguns meses. Basicamente, temos uma tabela de classificação de benchmarks e lá
00:13:55você encontra os modelos abertos e os seus resultados de avaliação, podendo comparar diferentes modelos de diferentes
00:14:02tamanhos. Mantenho tudo atualizado, mas também é parcialmente alimentado por mim, que gosto de ler
00:14:13artigos de conferências de visão computacional. Gostaria de dar um destaque a este modelo porque
00:14:20pouca gente o conhece. Basicamente, alguns não conseguem fazer segmentação por referência aberta,
00:14:26como pedir: “Ok, segmenta este carro vermelho”, e ele faz. Mas se disser: “Ok, o carro vermelho ao lado
00:14:33do carro laranja que está ao lado do carro azul”, ele não consegue. Já o Falcon Perception, que é um
00:14:39modelo da TII, consegue fazê-lo e tem apenas 600 milhões de parâmetros com licença Apache 2.0.
00:14:47Por isso, este é o que faz a segmentação zero-shot para mim.
00:14:51E esta é uma lista não exaustiva. Para estimativa de pose, temos a família Sapiens
00:14:58para tarefas centradas no ser humano, onde precisa de fazer deteção de pontos-chave humanos,
00:15:04estimativa de profundidade humana e por aí fora. Para deteção zero-shot, tenho o Moondream 3 e o MM-Grounding-DINO,
00:15:13que é um modelo com licença Apache 2.0 muito bom. É muito pequeno comparado com o Moondream. Disponibilizo
00:15:20múltiplos modelos em vários tamanhos para poder escolher dependendo do seu hardware; se quiser
00:15:25rapidez, escolha a alternativa minuscula. Para OCR, recolhi-os do benchmark de OCR
00:15:34em diferentes tamanhos. E para estimativa de profundidade, descobri que o modelo grande não
00:15:40tem uma licença não comercial, mas os restantes têm, por isso pode usá-los à vontade. Aquele tem
00:15:45licença Apache 2.0 e também vem com suporte para supervision e tracker. Ambos são
00:15:51bibliotecas da Roboflow que permitem fazer rastreio de instâncias, caixas delimitadoras e assim por diante.
00:16:00Planos futuros: primeiro, consigo ouvir-vos a dizer: “Ok, isto não vai funcionar para casos de uso
00:16:06industriais”, porque esses casos têm características diferentes, com peças difíceis de descrever,
00:16:13onde a linguagem natural não é a melhor forma de acesso. Por isso, acho que a deteção guiada por imagem
00:16:21pode ajudar. Se não conhecem a deteção guiada por imagem, basicamente temos uma instância de uma
00:16:27imagem, como um Huggy aqui como exemplo, e depois pede-se ao modelo: “Ok, deteta este objeto nesta imagem
00:16:36em todas as imagens”. Sinto que isso pode ajudar de certa forma em casos de uso industriais onde
00:16:41não se consegue descrever por linguagem natural. Além disso, quero experimentar a fusão por Interseção sobre
00:16:52União (IoU). Basicamente temos caixas anotadas e caixas do juiz, pedimos ao juiz para
00:17:00gerar uma caixa e depois calculamos a Interseção sobre União em vez de pedir ao juiz para rejeitar ou
00:17:06aceitar. De momento, estou a trabalhar no suporte para segmentação. Obrigada por ouvirem. Se
00:17:14quiserem saber mais, tenho um pequeno repositório de visão computacional com tudo sobre
00:17:20fine-tuning, quantização de modelos, modelos multimodais e tudo relacionado com visão, bem como
00:17:27guias de tarefas de transformers. Mantemo-los atualizados e têm muitos tutoriais. Também temos as Hugging Face Skills,
00:17:36que contêm competências específicas para visão computacional, bem como competências de infraestrutura para fazer
00:17:43treino com apenas um prompt. Este é o meu perfil no Twitter e o repositório está no GitHub em
00:17:51mervenoyan/vision-intern. Acho que tenho tempo para uma pergunta. Muito obrigada.
00:18:04Sim, ele está a perguntar se tenho planos para treinar VLMs diretamente, numa espécie de auto-melhoria.
00:18:16Isso seria fantástico, mas primeiro quero resolver a questão de permitir que os programadores treinem
00:18:22modelos específicos para tarefas e os implementem em edge. Depois disso, talvez. Mais alguma pergunta? Sim.
00:18:34Não propriamente, acho que não. Apenas usei porque queria... como o agente de código tem
00:18:44o contexto, queria que ele gerasse o prompt. Talvez mais uma? Ok, muito obrigada.
00:19:04Então...
Community Posts
No posts yet. Be the first to write about this video!
Write about this video