- Na Meta, usamos marcas d’água invisíveis para uma variedade de casos de uso de proveniência de conteúdo em nossas plataformas.
- A marca d’água invisível atende a vários casos de uso, incluindo detecção de vídeos gerados por IA, verificação de quem postou um vídeo primeiro e identificação da fonte e das ferramentas usadas para criar um vídeo.
- Estamos compartilhando como superamos os desafios de dimensionar marcas d’água invisíveis, incluindo como construímos uma solução baseada em CPU que oferece desempenho comparável ao de GPUs, mas com melhor eficiência operacional.
A marca d’água invisível é uma poderosa técnica de processamento de mídia que nos permite incorporar um sinal na mídia de uma forma imperceptível para os humanos, mas detectável pelo software. Esta tecnologia oferece uma solução robusta para marcação de proveniência de conteúdo (uma indicação de onde o conteúdo veio), permitindo a identificação e rastreamento de conteúdo para apoiar vários casos de uso. Basicamente, a marca d’água invisível funciona modificando sutilmente os valores de pixel em imagens, formas de onda em áudio ou tokens de texto gerados por grandes modelos de linguagem (LLMs) para incorporar uma pequena quantidade de dados. O projeto de sistemas de marca d’água acrescenta a redundância necessária; isso garante que a identificação incorporada permaneça persistente por meio de transcodificações e edição, diferentemente das tags de metadados que podem ser perdidas.
Trazer uma solução de marca d’água invisível para produção em escala apresenta muitos desafios. Nesta postagem do blog, discutiremos como superamos desafios com ambientes de implantação, aumentos de taxa de bits e regressões de qualidade visual para nos adaptarmos a casos de uso do mundo real.
Algumas definições úteis
Marca d’água digital, esteganografia e marca d’água invisível são conceitos relacionados, mas é importante entender suas diferenças:
| Recurso | Marca d’água digital | Esteganografia | Marca d’água invisível |
| Propósito | Atribuição de conteúdo, proteção, proveniência | Comunicação secreta | Atribuição de conteúdo, proteção, proveniência |
| Visibilidade | Visível ou invisível | Invisível | Invisível |
| Robustez
contra modificações de conteúdo |
Médio a alto | Geralmente baixo | Alto (sobrevive às edições) |
| Capacidade de carga/mensagem | Médio (varia) | Varia | Médio (por exemplo, >64 bits) |
| Custo Computacional | Baixo (visível) a alto (invisível) | Varia | Alto (modelos de ML avançados) |
A necessidade de marcação de conteúdo robusta
No cenário digital atual, onde o conteúdo é constantemente compartilhado, remixado e até mesmo gerado por IA, surgem questões importantes:
Quem publicou o vídeo primeiro?
Nas fotos da Figura 1, você pode ver dois nomes de usuários diferentes, mas não há nenhum indicador visual de quem carregou esta imagem primeiro. Marca d’água invisível pode ajudar a identificar a primeira vez que um vídeo foi carregado.
É EUt Emesmo um Real EUmago?
Com vídeos de IA generativa (GenAI) cada vez mais realistas, distinguir entre conteúdo real e conteúdo gerado por IA é cada vez mais desafiador. Marca d’água invisível pode ser usada para inferir se conteúdo como o da Figura 2 é gerado por IA.

Qual câmera foi usada?
Ao encontrar uma imagem ou vídeo atraente como o da Figura 3, as pessoas muitas vezes se perguntam sobre a fonte e as ferramentas usadas para a criação. Marcas d’água invisíveis podem inferir essas informações diretamente.

Os métodos tradicionais, como marcas d’água visuais (que podem distrair) ou tags de metadados (que podem ser perdidas se um vídeo for editado ou recodificado) não abordam esses desafios de forma adequada e robusta. Devido à sua persistência e imperceptibilidade, a marca d’água invisível apresenta uma alternativa superior.
A jornada de escalabilidade: de GPUs a CPUs
Pesquisas anteriores sobre marcas d’água digitais (começando na década de 1990) empregaram técnicas de processamento de sinal digital (como DCT e DWT) para modificar as propriedades espectrais de uma imagem para ocultar informações imperceptíveis. Embora esses métodos tenham se mostrado altamente eficazes para imagens estáticas e tenham sido considerados um “problema resolvido”, eles não são adequadamente robustos contra os vários tipos de transformações geométricas e filtros que vemos nas mídias sociais e em outras aplicações do mundo real.
As soluções de última geração de hoje (como VideoSeal) usam técnicas de aprendizado de máquina (ML), proporcionando robustez significativamente melhorada em relação ao tipo de edições vistas nas mídias sociais. No entanto, a aplicação de soluções ao domínio do problema de vídeo (isto é, marca d’água quadro a quadro) pode ser proibitivamente dispendiosa em termos computacionais sem as otimizações de inferência necessárias.
As GPUs podem parecer uma solução óbvia para a implantação de soluções de marca d’água de vídeo baseadas em ML. No entanto, a maioria dos tipos de hardware GPU são especializados para o treinamento e inferência de modelos de grande escala (como LLMs e modelos de difusão). Eles têm suporte parcial ou nenhum suporte para transcodificação de vídeo (compressão e descompressão). Habilitar marcas d’água invisíveis para vídeos, portanto, apresentou desafios únicos para nosso software de processamento de vídeo (FFmpeg) e pilha de hardware existentes (GPUs sem recursos de transcodificação de vídeo ou outros aceleradores personalizados para processamento de vídeo sem recursos eficientes de inferência de modelo de ML).
Tentativas de otimização de GPU e a mudança para CPUs
Nossa arquitetura de incorporação usa FFmpeg com um filtro personalizado para calcular e aplicar máscaras de marca d’água invisíveis aos vídeos. O filtro atua como um bloco reutilizável que pode ser facilmente adicionado aos pipelines de processamento de vídeo existentes. Migrar para um serviço de inferência mais ideal para modelos aquecidos significaria sacrificar a flexibilidade do nosso filtro FFmpeg, portanto, para nossa aplicação, isso não era uma opção.
A criação de perfil de nosso filtro de marca d’água invisível revelou baixa utilização da GPU. Implementamos lote de quadros e threading no filtro, mas esses esforços não produziram melhorias significativas na latência ou utilização. GPUs com codificadores e decodificadores de vídeo de hardware podem atingir mais facilmente alto rendimento, mas as GPUs disponíveis para nosso serviço não possuem codificadores de vídeo, exigindo que os quadros sejam enviados de volta à CPU para codificação. Aqui, um codificador de vídeo de software pode acabar sendo um grande gargalo para pipelines que usam modelos de ML de baixa complexidade em uma GPU.
Especificamente, encontramos três gargalos principais:
- Sobrecarga de transferência de dados: A transferência de quadros de vídeo de entrada de alta resolução entre CPUs e múltiplas GPUs representava desafios para otimizações de thread e memória, gerando uma utilização abaixo do ideal da GPU.
- Latência de inferência: O processamento de diversas solicitações de marcas d’água invisíveis em diversas GPUs em paralelo no mesmo host levou a um aumento dramático na latência de inferência.
- Tempo de carregamento do modelo: Apesar do tamanho pequeno do modelo, o carregamento do modelo consumiu uma parcela significativa do tempo total de processamento. Depender do FFmpeg nos impediu de usar modelos aquecidos e pré-carregados nas GPUs.
Reconhecendo essas limitações, começamos a investigar a inferência somente da CPU. A arquitetura de rede neural do incorporador é mais favorável às GPUs, e os benchmarks iniciais mostraram que o desempenho ponta a ponta (E2E) era mais de duas vezes mais lento nas CPUs. Ao ajustar os parâmetros de threading para o codificador, decodificador e PyTorch e otimizar os parâmetros de amostragem usados pelo filtro de marca d’água invisível, vimos melhorias significativas.
Em última análise, com parâmetros de threading e incorporação devidamente ajustados, a latência E2E para executar marca d’água invisível em uma CPU em um único processo ficou dentro de 5% do desempenho da GPU. Crucialmente, poderíamos executar vários processos FFmpeg em paralelo em CPUs sem aumentar a latência. Esta inovação permitiu-nos calcular a capacidade necessária e alcançar uma solução operacionalmente mais eficiente em comparação com uma solução baseada em GPU.
Para validar a escalabilidade da nossa solução de CPU em um sistema distribuído, realizamos testes de carga abrangentes. Dado um conjunto de trabalhadores de CPU, geramos tráfego de teste com taxas de solicitação crescentes para identificar o ponto de pico de desempenho antes que a latência por solicitação começasse a aumentar. Para comparação, usamos os mesmos parâmetros com inferência de GPU em um conjunto de trabalhadores de GPU com capacidades semelhantes. Os resultados confirmaram que nossa solução de CPU poderia funcionar em escala, comparável aos resultados de nossos testes locais. Essa conquista nos permitiu fornecer a capacidade necessária com maior eficiência operacional em comparação com uma abordagem baseada em GPU.
Considerações e compensações sobre otimização
A implantação de marcas d’água invisíveis em escala apresentou vários desafios de otimização, envolvendo principalmente compensações entre quatro métricas:
- Latência: A velocidade com que ocorre o processo de marca d’água
- Precisão de bits de detecção de marca d’água: A precisão da detecção de marcas d’água incorporadas
- Qualidade visual: Garantir que a marca d’água incorporada seja imperceptível ao olho humano
- Eficiência de compressão (medida por Taxa BD): Garantir que a marca d’água incorporada não aumente significativamente a taxa de bits
A otimização para uma métrica pode impactar negativamente outras. Por exemplo, uma marca d’água mais forte para maior precisão de bits pode levar a artefatos visíveis e aumento da taxa de bits. Não podemos criar uma solução perfeitamente ideal para todas as quatro métricas.
Gerenciando o impacto da taxa BD
A marca d’água invisível, embora imperceptível, introduz maior entropia, o que pode levar a uma taxa de bits mais alta para codificadores de vídeo. Nossa implementação inicial mostrou uma regressão da taxa BD de cerca de 20%, o que significa que os usuários precisariam de mais largura de banda para assistir a um vídeo com marca d’água. Para mitigar isso, desenvolvemos um novo método de seleção de quadros para marca d’água, de modo que o impacto da taxa BD seja amplamente reduzido, aumentando a qualidade visual e impactando minimamente a precisão da detecção de bits da marca d’água.
Lidando com regressões na qualidade visual
Precisamos garantir que a marca d’água “invisível” permaneça verdadeiramente invisível. Inicialmente observamos artefatos visuais perceptíveis, apesar das pontuações métricas de alta qualidade (VMAF e SSIM).
Abordamos as avaliações de qualidade visual implementando uma técnica de pós-processamento personalizada e iterando através de diferentes configurações de incorporação por meio de inspeções manuais de crowdsourcing. Esta avaliação subjetiva foi crucial para nos desbloquear, uma vez que as métricas tradicionais de qualidade visual se mostraram insuficientes para detectar o tipo de artefato que uma marca d’água invisível às vezes pode introduzir. À medida que ajustamos o algoritmo para a invisibilidade humana, monitoramos de perto o impacto na precisão dos bits para alcançar um equilíbrio ideal entre qualidade visual e precisão de detecção.
Aprendizados e o caminho a seguir
Nossa jornada para implantar uma solução escalonável e invisível de marca d’água forneceu insights valiosos:
Com otimizações adequadas, os pipelines somente de CPU podem atingir desempenhos comparáveis aos pipelines de GPU para casos de uso específicos a um custo muito menor. Contrariamente às nossas suposições iniciais, com as otimizações corretas, as CPUs nos ofereceram uma solução operacionalmente mais eficiente e escalável para nosso sistema de marca d’água invisível. Embora as GPUs ainda sejam mais rápidas para a inferência do modelo de marca d’água invisível, conseguimos usar otimizações para reduzir a computação geral e a latência da frota de CPU.
As pontuações de qualidade de vídeo tradicionais são insuficientes para marcas d’água invisíveis: Aprendemos que métricas como VMAF e SSIM não capturam totalmente os problemas de qualidade perceptual introduzidos pela marca d’água invisível, necessitando de inspeção manual. Mais pesquisas são necessárias para desenvolver uma métrica para detectar programaticamente a perda de qualidade visual incorrida pela marca d’água invisível.
O padrão de qualidade para uso em produção é alto: As técnicas de marca d’água podem não se aplicar diretamente a casos de uso do mundo real devido ao impacto na taxa BD e na compactação de vídeo downstream. Precisávamos expandir a literatura para manter baixos os impactos da taxa BD e, ao mesmo tempo, manter excelente precisão de bits para detecção.
Fornecemos com sucesso uma solução escalonável de marca d’água com excelente latência, qualidade visual, precisão de bits de detecção e impacto mínimo na taxa de BD.
Como nosso objetivo North Star, pretendemos continuar a melhorar a precisão e a recuperação da detecção de cópias com detecção de marca d’água invisível. Isso envolverá ajustes adicionais dos parâmetros do modelo, etapas de pré e pós-processamento e configurações do codificador de vídeo. Em última análise, imaginamos a marca d’água invisível como um “bloco de filtro” leve que pode ser perfeitamente integrado em uma ampla gama de casos de uso de vídeo sem ajustes específicos do produto, proporcionando impacto mínimo na experiência do usuário e ao mesmo tempo oferecendo proveniência robusta de conteúdo.

Café Codificado é um portal dinâmico e confiável criado especialmente para desenvolvedores. Nosso foco é entregar:
Dicas práticas para programação, produtividade, frameworks, testes, DevOps e muito mais;
Notícias atualizadas, acompanhando tendências e lançamentos do mundo da tecnologia, compiladas com relevância e sem jargões desnecessários.
O que você encontra aqui:
Artigos objetivos e comandáveis — Tutoriais, tutoriais passo-a-passo e dicas que vão direto ao ponto.
Cobertura das tecnologias que estão em alta — do universo da IA, computação em nuvem e segurança à engenharia de software e criatividade em código.
Conteúdo para todos os níveis — de iniciantes buscando praticidade, a profissionais em busca de insights estratégicos e aperfeiçoamento.
Comunidade ativa — textos humanizados, perguntinhas instigantes e espaço para você contribuir com reflexões e comentários.
