Introdução geral
O Describe Anything é um projeto de código aberto desenvolvido pela NVIDIA e por várias universidades, com o Describe Anything Model (DAM) em seu núcleo. Essa ferramenta gera descrições detalhadas com base em áreas (como pontos, caixas, grafites ou máscaras) que o usuário marca em uma imagem ou vídeo. Ela não apenas descreve os detalhes de uma imagem estática, mas também captura a mudança de regiões em um vídeo ao longo do tempo.
Lista de funções
- Suporte a vários métodos de rotulagem de regiões: os usuários podem especificar a região de descrição de uma imagem ou vídeo por meio de pontos, caixas, rabiscos ou máscaras.
- Descrição de imagens e vídeos: gere descrições detalhadas para imagens estáticas ou analise alterações dinâmicas em áreas específicas de um vídeo.
- Modelos e conjuntos de dados de código aberto: os modelos DAM-3B e DAM-3B-Video estão disponíveis para dar suporte ao processamento conjunto de imagens e vídeos.
- Interface interativa: uma interface da Web é fornecida pelo Gradio, permitindo que os usuários desenhem máscaras e obtenham descrições em tempo real.
- Suporte à API: forneça interfaces de servidor compatíveis com a OpenAI para facilitar a integração com outros aplicativos.
- DLC-Bench Evaluation: contém ferramentas especializadas de benchmarking para avaliar o desempenho dos modelos descritos na área.
- Integração SAM: modelo integrado opcional de Segment Anything (SAM) com geração automática de máscaras para aumentar a eficiência operacional.
Usando a Ajuda
Processo de instalação
O Describe Anything pode ser instalado em um ambiente Python, e é recomendável usar um ambiente virtual para evitar conflitos de dependência. Aqui estão as etapas detalhadas da instalação:
- Criando um ambiente Python::
Usando o Python 3.8 ou posterior, crie um novo ambiente virtual:python -m venv dam_env source dam_env/bin/activate # Linux/Mac dam_env\Scripts\activate # Windows
- Instalar o Describe Anything::
Há duas opções de montagem:- Instale diretamente via pip:
pip install git+https://github.com/NVlabs/describe-anything
- Clone o repositório e instale-o localmente:
git clone https://github.com/NVlabs/describe-anything cd describe-anything pip install -v .
- Instale diretamente via pip:
- Instalar o Segment Anything (opcional)::
Se você precisar gerar máscaras automaticamente, precisará instalar a dependência do SAM:cd demo pip install -r requirements.txt
- Verificar a instalação::
Após a conclusão da instalação, execute o seguinte comando para verificar se a instalação foi bem-sucedida:python -c "from dam import DescribeAnythingModel; print('Installation successful')"
Uso
O Describe Anything pode ser usado de várias maneiras, incluindo scripts de linha de comando, interfaces interativas e chamadas de API. Veja abaixo um passo a passo detalhado dos principais recursos:
1. interface interativa do Gradio
A interface do Gradio é adequada para iniciantes e permite que os usuários carreguem imagens e desenhem máscaras manualmente para obter descrições.
- Interface de lançamento::
Execute o seguinte comando para iniciar o servidor Gradio:python demo_simple.py
Quando o comando é executado, o navegador abre uma página da Web local (geralmente a página
http://localhost:7860
). - procedimento::
- Upload Image (Carregar imagem): Clique no botão Upload para selecionar um arquivo de imagem local.
- Desenhar máscara: use a ferramenta pincel para circundar a área de interesse na imagem.
- Get Description (Obter descrição): Clique em Submit (Enviar) e o sistema gerará uma descrição detalhada da área, por exemplo, "A dog with red hair, wearing a silver tag collar, running" (Um cachorro com cabelo vermelho, usando uma coleira de prata, correndo).
- Integração opcional do SAM: Quando o SAM está ativado, o sistema gera automaticamente uma máscara ao clicar nos pontos da imagem.
- advertência::
- Verifique se a imagem está no formato RGBA e se a máscara é processada por meio do canal alfa.
- O nível de detalhe da descrição pode ser ajustado por meio do ajuste de parâmetros (por exemplo
max_new_tokens
) Controle.
2. scripts de linha de comando
Os scripts de linha de comando são adequados para processamento em lote ou uso pelo desenvolvedor, proporcionando maior flexibilidade.
- Descrição da imagem::
Execute o seguinte comando para gerar uma descrição para a imagem:python examples/dam_with_sam.py --image_path <image_file> --input_points "[[x1,y1],[x2,y2]]"
Exemplo:
python examples/dam_with_sam.py --image_path dog.jpg --input_points "[[500,300]]"
O sistema gera uma máscara e gera uma descrição com base nos pontos especificados.
- Descrição do vídeo::
Processamento de vídeo usando modelos federados:python examples/query_dam_server_video.py --model describe_anything_model --server_url http://localhost:8000 --video_path <video_file>
Basta especificar a área em um quadro e o sistema rastreará e descreverá automaticamente as alterações na área.
- parametrização::
--temperature
Descrição: Controla a criatividade da descrição, com um valor recomendado de 0,2.--top_p
Controle de diversidade: controla a geração de diversidade, com um valor recomendado de 0,9.--max_new_tokens
Comprimento máximo da descrição: defina o comprimento máximo da descrição, o padrão é 512.
3. chamadas de API
O Describe Anything fornece uma API compatível com OpenAI adequada para integração em outros aplicativos.
- Iniciar o servidor::
Execute o seguinte comando para iniciar o servidor DAM:python dam_server.py --model-path nvidia/DAM-3B --conv-mode v1 --prompt-mode focal_prompt
Por padrão, o servidor é executado no
http://localhost:8000
. - Enviar solicitação::
Envie solicitações usando Python e o SDK da OpenAI:from openai import OpenAI client = OpenAI(base_url="http://localhost:8000", api_key="not-needed") response = client.chat.completions.create( model="describe_anything_model", messages=[ {"role": "user", "content": [ {"type": "image_url", "image_url": {"url": "data:image/png;base64,<base64_image>"}}, {"type": "text", "text": "Describe the region in the mask"} ]} ] ) print(response.choices[0].message.content)
intercambialidade
<base64_image>
Codificação Base64 para a imagem.
4. avaliação do DLC-Bench
O DLC-Bench é uma ferramenta de benchmarking para avaliar modelos de descrição de áreas.
- Baixar conjunto de dados::
git lfs install git clone https://huggingface.co/datasets/nvidia/DLC-Bench
- Avaliação operacional::
Use os seguintes comandos para gerar a saída do modelo e avaliá-la:python get_model_outputs.py --model_type dam --model_path nvidia/DAM-3B
Os resultados são armazenados em cache no
model_outputs_cache/
Pasta.
Operação da função em destaque
- Prompting FocalO DAM usa a tecnologia Focal Prompting para combinar o contexto global da imagem e os detalhes da área local para gerar descrições mais precisas. Os usuários não precisam ajustar manualmente os prompts, pois o sistema os otimiza automaticamente.
- Portão de retenção cruzadaO modelo é capaz de se concentrar em uma região específica em uma cena complexa, evitando a interferência de informações irrelevantes.
- Descrição do movimento do vídeoBasta marcar uma área em um quadro para que o DAM rastreie e descreva automaticamente como a área muda no vídeo, por exemplo, "os músculos da perna da vaca se movem vigorosamente com seu passo".
cenário do aplicativo
- Análise de imagens médicas
Os médicos podem usar o Describe Anything para anotar áreas específicas em uma imagem médica, como uma tomografia computadorizada ou ressonância magnética, para gerar uma descrição detalhada que auxilie no diagnóstico. Por exemplo, ao rotular uma área anormal nos pulmões, o sistema poderia descrever "uma área irregularmente sombreada com bordas borradas, possivelmente uma inflamação". - planejamento urbano
Os planejadores podem fazer upload de um vídeo aéreo, rotulando áreas de edifícios ou estradas e obtendo descrições como "uma ampla rodovia de quatro pistas cercada por densos edifícios comerciais". Isso ajuda a analisar o layout da cidade. - criação de conteúdo
Os criadores de vídeo podem usar o Describe Anything para gerar descrições de objetos específicos em um videoclipe, como "uma águia voando com as asas abertas e montanhas nevadas ao fundo". Essas descrições podem ser usadas para legendas ou scripts. - anotação de dados
Os cientistas de dados podem usar o DAM para gerar automaticamente descrições de objetos em uma imagem ou vídeo, reduzindo a necessidade de rotulagem manual. Por exemplo, a rotulagem de um veículo em um conjunto de dados gera a frase "carro vermelho, faróis acesos".
QA
- Quais formatos de entrada são compatíveis com o Describe Anything?
Há suporte para formatos de imagem comuns, como PNG, JPEG, e formatos de vídeo, como MP4. A imagem deve estar no modo RGBA, com a máscara especificada pelo canal alfa. - Como posso melhorar a precisão de minhas descrições?
Use uma máscara mais precisa (por exemplo, gerada automaticamente pelo SAM) e ajuste otemperature
responder cantandotop_p
parâmetros para controlar a criatividade e a diversidade das descrições. - Ele requer uma GPU para ser executado?
As GPUs NVIDIA (por exemplo, RTX 3090) são recomendadas para inferência acelerada, mas as CPUs também podem ser executadas, em velocidades mais lentas. - Como lidar com descrições de vários quadros em vídeos?
Basta marcar a região em um quadro e o DAM automaticamente rastreia e descreve como a região muda nos quadros subsequentes.