[ ICLR 24 ] AnomalyCLIP: Aprendizado de prompt independente de objeto para detecção de anomalia de disparo zero
por Qihang Zhou*, Guansong Pang*, Yu Tian, Shibo He, Jiming Chen.
19.03.2024 : Código foi lançado!!!
08.08.2024 : Atualize o código para testar uma imagem.
A detecção de anomalias zero-shot (ZSAD) requer modelos de detecção treinados usando dados auxiliares para detectar anomalias sem qualquer amostra de treinamento em um conjunto de dados de destino. É uma tarefa crucial quando os dados de treinamento não estão acessíveis devido a várias preocupações, por exemplo, privacidade dos dados, mas é um desafio, uma vez que os modelos precisam generalizar para anomalias em diferentes domínios onde a aparência de objetos de primeiro plano, regiões anormais e características de fundo, como defeitos/tumores em diferentes produtos/órgãos, podem variar significativamente. Recentemente, grandes modelos de linguagem de visão pré-treinados (VLMs), como o CLIP, demonstraram forte capacidade de reconhecimento de tiro zero em várias tarefas de visão, incluindo detecção de anomalias. No entanto, seu desempenho no ZSAD é fraco, uma vez que os VLMs se concentram mais na modelagem da semântica de classe dos objetos de primeiro plano do que na anormalidade/normalidade nas imagens. Neste artigo, apresentamos uma nova abordagem, nomeadamente AnomalyCLIP, para adaptar o CLIP para ZSAD preciso em diferentes domínios. O principal insight do AnomalyCLIP é aprender prompts de texto independentes de objeto que capturam normalidade e anormalidade genéricas em uma imagem, independentemente de seus objetos em primeiro plano. Isso permite que nosso modelo se concentre nas regiões anormais da imagem, e não na semântica do objeto, permitindo a normalidade generalizada e o reconhecimento de anormalidades em diversos tipos de objetos. Experimentos em grande escala em 17 conjuntos de dados de detecção de anomalias do mundo real mostram que o AnomalyCLIP alcança desempenho superior de disparo zero na detecção e segmentação de anomalias em conjuntos de dados de semântica de classe altamente diversificada de vários domínios de inspeção de defeitos e imagens médicas. Todos os experimentos são conduzidos em PyTorch-2.0.0 com um único NVIDIA RTX 3090 24GB.
Baixe o conjunto de dados abaixo:
Domínio Industrial: MVTec, VisA, MPDD, BTAD, SDD, DAGM, DTD-Sintético
Domínio Médico: HeadCT, BrainMRI, Br35H, COVID-19, ISIC, CVC-ColonDB, CVC-ClinicDB, Kvasir, Endo, TN3K.
Link do Google Drive (conjunto de dados solicitado com frequência): SDD, Br35H, COVID-19
Veja o MVTec AD, por exemplo (com múltiplas categorias de anomalias)
Estrutura da pasta MVTec:
mvtec/ │ ├── meta.json │ ├── bottle/ │ ├── ground_truth/ │ │ ├── broken_large/ │ │ │ └── 000_mask.png | | | └── ... │ │ └── ... │ └── test/ │ ├── broken_large/ │ │ └── 000.png | | └── ... │ └── ... │ └── ...
cd gerar_dataset_json python mvtec.py
Veja o SDD, por exemplo (com categoria de anomalia única)
Estrutura da pasta SDD:
SDD/ │ ├── electrical_commutators/ │ └── test/ │ ├── defect/ │ │ └── kos01_Part5_0.png | | └── ... │ └── good/ │ └── kos01_Part0_0.png │ └── ... │ └── meta.json
cd gerar_dataset_json python SDD.py
Selecione o script correspondente e execute-o (fornecemos todos os scripts para conjuntos de dados relatados pelo AnomalyCLIP). O JSON gerado armazena todas as informações que o AnomalyCLIP precisa.
Crie um novo script JSON em fold generate_dataset_json de acordo com a estrutura de dobra de seus próprios conjuntos de dados.
Adicione as informações relacionadas ao seu conjunto de dados (ou seja, nome do conjunto de dados e nomes de classe) no script dataset.py
Início rápido (use os pesos pré-treinados)
teste bash.sh
Treine seus próprios pesos
bash trem.sh
Agradecemos pelo repositório de código: open_clip, DualCoOp, CLIP_Surgery e VAND.
Se você achar este artigo e repositório úteis, cite nosso artigo.
@inproceedings{zhou2023anomalyclip, title={AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection}, author={Zhou, Qihang and Pang, Guansong and Tian, Yu and He, Shibo and Chen, Jiming}, booktitle={The Twelfth International Conference on Learning Representations}, year={2023} }