이 저장소는 INTR: 세분화된 이미지 분류 및 분석을 위한 단순 해석 가능한 변환기의 공식 구현입니다. 현재 여기에는 세분화된 데이터 해석을 위한 코드와 모델이 포함되어 있습니다. 이 논문이 온라인으로 공개되면 다가오는 ICLR 2024 절차에 대한 링크를 제공할 것입니다.
INTR은 이미지 분류를 해석 가능하게 만드는 Transformer의 새로운 사용법입니다. INTR에서는 분류에 대한 사전 예방적 접근 방식을 조사하여 각 클래스가 이미지에서 자신을 찾도록 요청합니다. 우리는 디코더에 대한 입력으로 클래스별 쿼리(각 클래스에 하나씩)를 학습하여 교차 주의를 통해 이미지에서 자신의 존재를 찾을 수 있도록 합니다. 우리는 INTR이 본질적으로 각 수업에 참석하도록 장려한다는 것을 보여줍니다. 따라서 교차 주의 가중치는 모델 예측에 대한 의미 있는 해석을 제공합니다. 흥미롭게도 INTR은 다중 헤드 교차 주의를 통해 클래스의 다양한 속성을 지역화하는 방법을 학습할 수 있어 특히 세부적인 분류 및 분석에 적합합니다.
INTR 모델에서 디코더의 각 쿼리는 클래스 예측을 담당합니다. 따라서 쿼리는 기능 맵에서 클래스별 기능을 찾기 위해 자체를 살펴봅니다. 먼저, 이미지에서 객체의 중요한 부분을 보기 위해 변환기 아키텍처의 값 매트릭스인 특징 맵을 시각화합니다. 모델이 값 매트릭스에서 주의를 기울이는 특정 기능을 찾기 위해 모델 주의 히트맵을 표시합니다. 분류에서 외부 간섭을 피하기 위해 분류에 공유 가중치 벡터를 사용하므로 주의 가중치가 모델의 예측을 설명합니다.
DETR-R50 백본의 INTR, 분류 성능 및 다양한 데이터 세트에 대한 미세 조정 모델.
데이터세트 | acc@1 | acc@5 | 모델 |
---|---|---|---|
견습생 | 71.8 | 89.3 | 체크포인트 다운로드 |
새 | 97.4 | 99.2 | 체크포인트 다운로드 |
나비 | 95.0 | 98.3 | 체크포인트 다운로드 |
Python 환경 만들기(선택 사항)
conda create -n intr python=3.8 -y
conda activate intr
저장소 복제
git clone https://github.com/dipanjyoti/INTR.git
cd INTR
Python 종속성 설치
pip install -r requirements.txt
데이터는 아래 형식을 따르세요.
datasets
├── dataset_name
│ ├── train
│ │ ├── class1
│ │ │ ├── img1.jpeg
│ │ │ ├── img2.jpeg
│ │ │ └── ...
│ │ ├── class2
│ │ │ ├── img3.jpeg
│ │ │ └── ...
│ │ └── ...
│ └── val
│ ├── class1
│ │ ├── img4.jpeg
│ │ ├── img5.jpeg
│ │ └── ...
│ ├── class2
│ │ ├── img6.jpeg
│ │ └── ...
│ └── ...
다중 GPU(예: GPU 4개) 설정에서 CUB 데이터 세트에 대한 INTR의 성능을 평가하려면 아래 명령을 실행하십시오. INTR 체크포인트는 모델 및 결과 미세 조정에서 사용할 수 있습니다.
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 --master_port 12345 --use_env main.py --eval --resume < path/to/intr_checkpoint_cub_detr_r50.pth > --dataset_path < path/to/datasets > --dataset_name < dataset_name >
INTR 해석의 시각적 표현을 생성하려면 아래 제공된 명령을 실행하십시오. 이 명령은
python -m tools.visualization --eval --resume < path/to/intr_checkpoint_cub_detr_r50.pth > --dataset_path < path/to/datasets > --dataset_name < dataset_name > --class_index < class_number >
추론 시간 단일 이미지 예측 및 시각화: 추론 프로세스 중 단일 이미지 예측 및 시각화를 위해 설계된 Jupyter Notebook인 데모.ipynb도 제공했습니다. 데모는 CUB 데이터 세트에 중점을 두고 있습니다.
훈련을 위해 INTR을 준비하려면 사전 훈련된 모델 DETR-R50을 사용하십시오. 특정 데이터세트에 대해 훈련하려면 '--num_queries'를 데이터세트의 클래스 수로 설정하여 수정하세요. INTR 아키텍처 내에서 디코더의 각 쿼리에는 클래스별 기능을 캡처하는 작업이 할당됩니다. 이는 모든 쿼리가 학습 프로세스를 통해 조정될 수 있음을 의미합니다. 결과적으로 모델 매개변수의 총 개수는 데이터 세트의 클래스 수에 비례하여 증가합니다. 다중 GPU 시스템(예: GPU 4개)에서 INTR을 훈련하려면 아래 명령을 실행하십시오.
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 --master_port 12345 --use_env main.py --finetune < path/to/detr-r50-e632da11.pth > --dataset_path < path/to/datasets > --dataset_name < dataset_name > --num_queries < num_of_classes >
우리 모델은 DETR(DEtection TRansformer) 방법에서 영감을 받았습니다.
훌륭한 작업을 수행한 DETR 작성자에게 감사드립니다.
우리 작업이 귀하의 연구에 도움이 된다면 BibTeX 항목을 인용하는 것을 고려해 보십시오.
@inproceedings{paul2024simple,
title={A Simple Interpretable Transformer for Fine-Grained Image Classification and Analysis},
author={Paul, Dipanjyoti and Chowdhury, Arpita and Xiong, Xinqi and Chang, Feng-Ju and Carlyn, David and Stevens, Samuel and Provost, Kaiya and Karpatne, Anuj and Carstens, Bryan and Rubenstein, Daniel and Stewart, Charles and Berger-Wolf, Tanya and Su, Yu and Chao, Wei-Lun},
booktitle={International Conference on Learning Representations},
year={2024}
}