Introdução geral
O SegAnyMo é um projeto de código aberto desenvolvido por uma equipe de pesquisadores da UC Berkeley e da Universidade de Pequim, incluindo membros como Nan Huang. A ferramenta se concentra no processamento de vídeo e pode identificar e segmentar automaticamente objetos móveis arbitrários em um vídeo, como pessoas, animais ou veículos. Ela combina tecnologias como TAPNet, DINOv2 e SAM2, e planeja apresentar os resultados na CVPR 2025. O código do projeto é totalmente público e gratuito para download, uso ou modificação pelos usuários, e é adequado para desenvolvedores, pesquisadores e entusiastas do processamento de vídeo. O objetivo do SegAnyMo é simplificar a análise de vídeos em movimento e fornecer soluções eficientes de segmentação.
Lista de funções
- Detecta automaticamente objetos em movimento no vídeo e gera máscaras de segmentação precisas.
- Suporte para formatos de vídeo (por exemplo, MP4, AVI) ou entrada de sequência de imagens.
- Fornece modelos pré-treinados para dar suporte à implantação e aos testes rápidos.
- A integração com o TAPNet gera traços de rastreamento 2D para capturar informações de movimento.
- Usando o DINOv2 para extrair recursos semânticos para melhorar a precisão da segmentação.
- Segmentação em nível de pixel usando a máscara de refinamento SAM2.
- Suporte ao treinamento de conjuntos de dados personalizados para se adaptar a diferentes cenários.
- Emite resultados visualizados para facilitar a verificação e o ajuste.
Usando a Ajuda
O SegAnyMo requer uma certa base técnica e é destinado principalmente a usuários com experiência em programação. Veja abaixo um guia detalhado de instalação e uso.
Processo de instalação
- Preparar hardware e software
O projeto está sendo desenvolvido no Ubuntu 22.04, e recomenda-se uma placa de vídeo NVIDIA RTX A6000 ou similar habilitada para CUDA. Requer Git e Anaconda pré-instalados.- Clonar o repositório de código:
git clone --recurse-submodules https://github.com/nnanhuang/SegAnyMo
- Vá para o catálogo de projetos:
cd SegAnyMo
- Clonar o repositório de código:
- Criação de um ambiente virtual
Crie um ambiente Python separado com o Anaconda para evitar conflitos de dependência.- Criar um ambiente:
conda create -n seg python=3.12.4
- Ativar o ambiente:
conda activate seg
- Criar um ambiente:
- Instalação das dependências do núcleo
Instale o PyTorch e outras bibliotecas necessárias.- Instale o PyTorch (compatível com CUDA 12.1):
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia
- Instalar outras dependências:
pip install -r requirements.txt
- Instale o xformers (raciocínio acelerado):
pip install -U xformers --index-url https://download.pytorch.org/whl/cu121
- Instale o PyTorch (compatível com CUDA 12.1):
- Instalação do DINOv2
O DINOv2 é usado para extração de recursos.- Vá para o catálogo de pré-processamento e clone:
cd preproc && git clone https://github.com/facebookresearch/dinov2
- Vá para o catálogo de pré-processamento e clone:
- Instalação do SAM2
SAM2 é o núcleo de refinamento da máscara.- Acesse o catálogo SAM2:
cd sam2
- Instalação:
pip install -e .
- Faça o download do modelo pré-treinado:
cd checkpoints && ./download_ckpts.sh && cd ../..
- Acesse o catálogo SAM2:
- Instalação do TAPNet
O TAPNet é usado para gerar traços de rastreamento 2D.- Acesse o catálogo TAPNet:
cd preproc/tapnet
- Instalação:
pip install .
- Faça o download do modelo:
cd ../checkpoints && wget https://storage.googleapis.com/dm-tapnet/bootstap/bootstapir_checkpoint_v2.pt
- Acesse o catálogo TAPNet:
- Verificar a instalação
Verifique se o ambiente está normal:
python -c "import torch; print(torch.cuda.is_available())"
exportações True
Indica sucesso.
Uso
Preparação de dados
O SegAnyMo suporta a entrada de sequências de vídeo ou imagem. Os dados precisam ser organizados na seguinte estrutura:
data
├── images
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── bootstapir
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── dinos
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
├── depth_anything_v2
│ ├── scene_name
│ │ ├── image_name
│ │ ├── ...
- Se a entrada for um vídeo, use uma ferramenta (como o FFmpeg) para extrair quadros para o
images
Pasta. - Se for uma sequência de imagens, coloque-a diretamente no diretório correspondente.
Pré-processamento operacional
- Gerar mapas de profundidade, recursos e trajetórias
Use os seguintes comandos para processar os dados (cerca de 10 minutos, dependendo da quantidade de dados):- Para sequências de imagens:
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --depths --tracks --dinos --e
- Para o vídeo:
python core/utils/run_inference.py --video_path $VIDEO_PATH --gpus 0 --depths --tracks --dinos --e
Descrição do parâmetro:
--e
Ative o Modo Eficiente para reduzir a taxa de quadros e a resolução e acelerar o processamento.--step 10
Indica que 1 quadro de cada 10 quadros é usado como quadro de consulta, que pode ser ajustado para baixo para melhorar a precisão.
- Para sequências de imagens:
Previsão de trajetórias de movimento
- Download dos pesos do modelo
através de (uma lacuna) Cara de abraço talvez Google Drive Faça o download do modelo pré-treinado. Escreva o caminho para o arquivoconfigs/example_train.yaml
(usado em uma expressão nominal)resume_path
Campos.- Previsão de trajetória de corrida:
python core/utils/run_inference.py --data_dir $DATA_DIR --motin_seg_dir $OUTPUT_DIR --config_file configs/example_train.yaml --gpus 0 --motion_seg_infer --e
A saída é salva no arquivo
$OUTPUT_DIR
. - Previsão de trajetória de corrida:
Gerar máscara de segmentação
- Usando a máscara de refinamento SAM2
- Geração de máscara de execução:
python core/utils/run_inference.py --data_dir $DATA_DIR --sam2dir $RESULT_DIR --motin_seg_dir $OUTPUT_DIR --gpus 0 --sam2 --e
Descrição do parâmetro:
$DATA_DIR
é o caminho da imagem original.$RESULT_DIR
é o caminho de salvamento da máscara.$OUTPUT_DIR
é o caminho do resultado da previsão da trajetória.
Observação: O SAM2 suporta, por padrão.jpg
talvez.jpeg
o nome do arquivo precisa ser um número simples. Se esse não for o caso, altere o código ou renomeie o arquivo.
- Geração de máscara de execução:
Resultados da avaliação
- Download de resultados pré-calculados
entidade transferidora Google Drive Faça o download da máscara oficial para comparação.- Avaliação do conjunto de dados DAVIS:
CUDA_VISIBLE_DEVICES=0 python core/eval/eval_mask.py --res_dir $RES_DIR --eval_dir $GT_DIR --eval_seq_list core/utils/moving_val_sequences.txt
- Avaliação refinada:
cd core/eval/davis2017-evaluation && CUDA_VISIBLE_DEVICES=0 python evaluation_method.py --task unsupervised --results_path $MASK_PATH
- Avaliação do conjunto de dados DAVIS:
Treinamento personalizado
- Pré-processamento de dados
O conjunto de dados HOI4D é usado como exemplo:
python core/utils/process_HOI.py
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --tracks --depths --dinos
Imagens RGB e máscaras dinâmicas são necessárias para conjuntos de dados personalizados.
- Verifique a integridade dos dados:
python current-data-dir/dynamic_stereo/dynamic_replica_data/check_process.py
- A limpeza de dados economiza espaço:
python core/utils/run_inference.py --data_dir $DATA_DIR --gpus 0 --clean
- treinamento de modelos
modificaçõesconfigs/$CONFIG.yaml
treinado com conjuntos de dados como Kubric, HOI4D, etc:
CUDA_VISIBLE_DEVICES=0 python train_seq.py ./configs/$CONFIG.yaml
cenário do aplicativo
- Pós-produção de vídeo
Separe objetos em movimento (por exemplo, pessoas correndo) do vídeo, gere máscaras e use-as para composição de efeitos. - Pesquisa de análise comportamental
Rastreamento de trajetórias de movimento de animais ou pessoas e análise de padrões de comportamento. - Desenvolvimento de direção autônoma
Segmentação de objetos em movimento (por exemplo, veículos, pedestres) em vídeos de direção para otimizar o sistema de percepção. - Otimização do sistema de monitoramento
Extraia movimentos anormais de vídeos de vigilância para aumentar a eficiência da segurança.
QA
- Precisa de uma GPU?
Sim, é recomendável que as placas NVIDIA suportem CUDA, caso contrário, elas serão executadas de forma ineficiente. - Ele oferece suporte ao processamento em tempo real?
A versão atual é adequada para processamento off-line; os aplicativos em tempo real precisam ser otimizados por conta própria. - Quanto espaço você precisa para o treinamento?
Dependendo do conjunto de dados, um conjunto de dados pequeno tem alguns gigabytes e um conjunto de dados grande pode ter centenas de gigabytes. - Como melhorar a precisão da segmentação?
diminuir--step
ou treinar o modelo com mais dados rotulados.