Web Analytics

no-time-to-train

⭐ 292 stars Vietnamese by miquel-espinosa

🌐 Ngôn ngữ

🚀 Không Thời Gian Để Huấn Luyện!

Phân Đoạn Tham Chiếu Theo Đối Tượng Không Cần Huấn Luyện

GitHub Website arXiv

Trạng thái tiên tiến nhất (Papers with Code) _SOTA 1-shot_ | PWC-21CBCE?style=flat&logo=paperswithcode)

_SOTA 10-shot_ | PWC-21CBCE?style=flat&logo=paperswithcode)

_SOTA 30-shot_ | PWC-21CBCE?style=flat&logo=paperswithcode)


🚨 Cập nhật (5 tháng 2 năm 2026): Bản thảo bài báo đã được cập nhật với các nghiên cứu loại bỏ sâu rộng, hình ảnh hóa và các thí nghiệm bổ sung.
🚨 Cập nhật (22 tháng 7 năm 2025): Đã thêm hướng dẫn cho bộ dữ liệu tùy chỉnh!
🔔 Cập nhật (16 tháng 7 năm 2025): Đã cập nhật mã nguồn kèm hướng dẫn!


📋 Mục Lục

🎯 Nổi bật

Liên kết:

📜 Tóm tắt

The performance of image segmentation models has historically been constrained by the high cost of collecting large-scale annotated data. The Segment Anything Model (SAM) alleviates this original problem through a promptable, semantics-agnostic, segmentation paradigm and yet still requires manual visual-prompts or complex domain-dependent prompt-generation rules to process a new image. Towards reducing this new burden, our work investigates the task of object segmentation when provided with, alternatively, only a small set of reference images. Our key insight is to leverage strong semantic priors, as learned by foundation models, to identify corresponding regions between a reference and a target image. We find that correspondences enable automatic generation of instance-level segmentation masks for downstream tasks and instantiate our ideas via a multi-stage, training-free method incorporating (1) memory bank construction; (2) representation aggregation and (3) semantic-aware feature matching. Our experiments show significant improvements on segmentation metrics, leading to state-of-the-art performance on COCO FSOD (36.8% nAP), PASCAL VOC Few-Shot (71.2% nAP50) and outperforming existing training-free approaches on the Cross-Domain FSOD benchmark (22.4% nAP).

cdfsod-results-final-comic-sans-min

🧠 Architecture

training-free-architecture-comic-sans-min

🛠️ Installation instructions

1. Clone the repository

git clone https://github.com/miquel-espinosa/no-time-to-train.git
cd no-time-to-train

2. Tạo môi trường conda

Chúng ta sẽ tạo một môi trường conda với các gói cần thiết.

conda env create -f environment.yml
conda activate no-time-to-train

3. Cài đặt SAM2 và DINOv2

Chúng ta sẽ cài đặt SAM2 và DINOv2 từ mã nguồn.

pip install -e .
cd dinov2
pip install -e .
cd ..

4. Tải xuống bộ dữ liệu

Vui lòng tải bộ dữ liệu COCO và đặt vào navy data/coco

5. Tải xuống các checkpoint SAM2 và DINOv2

Chúng ta sẽ tải xuống chính xác các checkpoint SAM2 được sử dụng trong bài báo. (Tuy nhiên, lưu ý rằng các checkpoint SAM2.1 đã có sẵn và có thể cho hiệu suất tốt hơn.)

mkdir -p checkpoints/dinov2
cd checkpoints
wget https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt
cd dinov2
wget https://dl.fbaipublicfiles.com/dinov2/dinov2_vitl14/dinov2_vitl14_pretrain.pth
cd ../..

📊 Mã suy luận

⚠️ Lưu ý: Đây là mã nghiên cứu — có thể sẽ hơi lộn xộn!

Tái tạo kết quả SOTA 30-shot trong Few-shot COCO

Định nghĩa các biến hữu ích và tạo một thư mục cho kết quả:

CONFIG=./no_time_to_train/new_exps/coco_fewshot_10shot_Sam2L.yaml
CLASS_SPLIT="few_shot_classes"
RESULTS_DIR=work_dirs/few_shot_results
SHOTS=30
SEED=33
GPUS=4

mkdir -p $RESULTS_DIR FILENAME=few_shot_${SHOTS}shot_seed${SEED}.pkl

#### 0. Tạo bộ tham chiếu

python no_time_to_train/dataset/few_shot_sampling.py \
        --n-shot $SHOTS \
        --out-path ${RESULTS_DIR}/${FILENAME} \
        --seed $SEED \
        --dataset $CLASS_SPLIT
#### 1. Lấp đầy bộ nhớ bằng các tham chiếu

python run_lightening.py test --config $CONFIG \
                              --model.test_mode fill_memory \
                              --out_path ${RESULTS_DIR}/memory.ckpt \
                              --model.init_args.model_cfg.memory_bank_cfg.length $SHOTS \
                              --model.init_args.dataset_cfgs.fill_memory.memory_pkl ${RESULTS_DIR}/${FILENAME} \
                              --model.init_args.dataset_cfgs.fill_memory.memory_length $SHOTS \
                              --model.init_args.dataset_cfgs.fill_memory.class_split $CLASS_SPLIT \
                              --trainer.logger.save_dir ${RESULTS_DIR}/ \
                              --trainer.devices $GPUS
#### 2. Xử lý hậu kỳ bộ nhớ ngân hàng

python run_lightening.py test --config $CONFIG \
                              --model.test_mode postprocess_memory \
                              --model.init_args.model_cfg.memory_bank_cfg.length $SHOTS \
                              --ckpt_path ${RESULTS_DIR}/memory.ckpt \
                              --out_path ${RESULTS_DIR}/memory_postprocessed.ckpt \
                              --trainer.devices 1
#### 3. Suy luận trên các hình ảnh mục tiêu

python run_lightening.py test --config $CONFIG  \
                              --ckpt_path ${RESULTS_DIR}/memory_postprocessed.ckpt \
                              --model.init_args.test_mode test \
                              --model.init_args.model_cfg.memory_bank_cfg.length $SHOTS \
                              --model.init_args.model_cfg.dataset_name $CLASS_SPLIT \
                              --model.init_args.dataset_cfgs.test.class_split $CLASS_SPLIT \
                              --trainer.logger.save_dir ${RESULTS_DIR}/ \
                              --trainer.devices $GPUS
Nếu bạn muốn xem kết quả suy luận trực tuyến (ngay khi chúng được tính toán), hãy thêm đối số:

    --model.init_args.model_cfg.test.online_vis True
Để điều chỉnh tham số ngưỡng điểm số score_thr, hãy thêm đối số (ví dụ, trực quan hóa tất cả các trường hợp có điểm số cao hơn 0.4):
    --model.init_args.model_cfg.test.vis_thr 0.4
Các hình ảnh bây giờ sẽ được lưu trong results_analysis/few_shot_classes/. Hình ảnh bên trái hiển thị dữ liệu thực tế, hình ảnh bên phải hiển thị các vùng phân đoạn do phương pháp không cần huấn luyện của chúng tôi tìm được.

Lưu ý rằng trong ví dụ này chúng tôi đang sử dụng bộ chia few_shot_classes, do đó, chúng ta chỉ nên mong đợi thấy các vùng phân đoạn của các lớp trong bộ chia này (không phải tất cả các lớp trong COCO).

#### Kết quả

Sau khi chạy tất cả các hình ảnh trong tập kiểm định, bạn sẽ thu được:

BBOX RESULTS:
  Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.368

SEGM RESULTS: Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.342


🔍 Bộ dữ liệu tùy chỉnh

Chúng tôi cung cấp hướng dẫn để chạy pipeline của mình trên một bộ dữ liệu tùy chỉnh. Định dạng chú thích luôn ở định dạng COCO.

TLDR; Để xem trực tiếp cách chạy toàn bộ pipeline trên bộ dữ liệu tùy chỉnh, hãy xem scripts/matching_cdfsod_pipeline.sh cùng với các script ví dụ của bộ dữ liệu CD-FSOD (ví dụ: scripts/dior_fish.sh)

0. Chuẩn bị bộ dữ liệu tùy chỉnh ⛵🐦

Hãy tưởng tượng chúng ta muốn phát hiện thuyền⛵ và chim🐦 trong một bộ dữ liệu tùy chỉnh. Để sử dụng phương pháp của chúng tôi, bạn sẽ cần:

Chúng tôi đã chuẩn bị một script ví dụ để tạo bộ dữ liệu tùy chỉnh với ảnh coco, cho trường hợp 1-shot.
mkdir -p data/my_custom_dataset
python scripts/make_custom_dataset.py
Điều này sẽ tạo ra một bộ dữ liệu tùy chỉnh với cấu trúc thư mục như sau:
data/my_custom_dataset/
    ├── annotations/
    │   ├── custom_references.json
    │   ├── custom_targets.json
    │   └── references_visualisations/
    │       ├── bird_1.jpg
    │       └── boat_1.jpg
    └── images/
        ├── 429819.jpg
        ├── 101435.jpg
        └── (all target and reference images)
Trực quan hóa hình ảnh tham chiếu (1-shot):

| Hình ảnh tham chiếu 1-shot cho CHIM 🐦 | Hình ảnh tham chiếu 1-shot cho THUYỀN ⛵ | |:--------------------------------------:|:---------------------------------------:| | bird_1 | boat_1 |

0.1 Nếu chỉ có chú thích bbox

Chúng tôi cũng cung cấp một script để tạo mặt nạ phân đoạn cấp đối tượng bằng cách sử dụng SAM2. Điều này hữu ích nếu bạn chỉ có các chú thích bounding box cho hình ảnh tham chiếu.

# Download sam_h checkpoint. Feel free to use more recent checkpoints (note: code might need to be adapted)
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth -O checkpoints/sam_vit_h_4b8939.pth

Run automatic instance segmentation from ground truth bounding boxes.

python no_time_to_train/dataset/sam_bbox_to_segm_batch.py \ --input_json data/my_custom_dataset/annotations/custom_references.json \ --image_dir data/my_custom_dataset/images \ --sam_checkpoint checkpoints/sam_vit_h_4b8939.pth \ --model_type vit_h \ --device cuda \ --batch_size 8 \ --visualize
Hình ảnh tham chiếu với mặt nạ phân đoạn cấp độ đối tượng (được tạo bởi SAM2 từ các hộp chứa gt, 1-shot):

Hình ảnh trực quan hóa của các mặt nạ phân đoạn đã được lưu tại data/my_custom_dataset/annotations/custom_references_with_SAM_segm/references_visualisations/.

| Hình ảnh tham chiếu 1-shot cho CHIM 🐦 (tự động phân đoạn bằng SAM) | Hình ảnh tham chiếu 1-shot cho THUYỀN ⛵ (tự động phân đoạn bằng SAM) | |:---------------------------------:|:----------------------------------:| | bird_1_with_SAM_segm | boat_1_with_SAM_segm |

0.2 Chuyển đổi chú thích coco sang tập tin pickle

python no_time_to_train/dataset/coco_to_pkl.py \
    data/my_custom_dataset/annotations/custom_references_with_segm.json \
    data/my_custom_dataset/annotations/custom_references_with_segm.pkl \
    1

1. Đổ đầy bộ nhớ với các tham chiếu

Đầu tiên, định nghĩa các biến hữu ích và tạo một thư mục để lưu kết quả. Để hiển thị nhãn đúng cách, tên các lớp phải được sắp xếp theo id danh mục như trong tệp json. Ví dụ, bird có id danh mục là 16, boat có id danh mục là 9. Do đó, CAT_NAMES=boat,bird.

DATASET_NAME=my_custom_dataset
DATASET_PATH=data/my_custom_dataset
CAT_NAMES=boat,bird
CATEGORY_NUM=2
SHOT=1
YAML_PATH=no_time_to_train/pl_configs/matching_cdfsod_template.yaml
PATH_TO_SAVE_CKPTS=./tmp_ckpts/my_custom_dataset
mkdir -p $PATH_TO_SAVE_CKPTS
Chạy bước 1:

python run_lightening.py test --config $YAML_PATH \
    --model.test_mode fill_memory \
    --out_path $PATH_TO_SAVE_CKPTS/$DATASET_NAME\_$SHOT\_refs_memory.pth \
    --model.init_args.dataset_cfgs.fill_memory.root $DATASET_PATH/images \
    --model.init_args.dataset_cfgs.fill_memory.json_file $DATASET_PATH/annotations/custom_references_with_segm.json \
    --model.init_args.dataset_cfgs.fill_memory.memory_pkl $DATASET_PATH/annotations/custom_references_with_segm.pkl \
    --model.init_args.dataset_cfgs.fill_memory.memory_length $SHOT \
    --model.init_args.dataset_cfgs.fill_memory.cat_names $CAT_NAMES \
    --model.init_args.model_cfg.dataset_name $DATASET_NAME \
    --model.init_args.model_cfg.memory_bank_cfg.length $SHOT \
    --model.init_args.model_cfg.memory_bank_cfg.category_num $CATEGORY_NUM \
    --trainer.devices 1

2. Xử lý hậu kỳ bộ nhớ ngân hàng

python run_lightening.py test --config $YAML_PATH \
    --model.test_mode postprocess_memory \
    --ckpt_path $PATH_TO_SAVE_CKPTS/$DATASET_NAME\_$SHOT\_refs_memory.pth \
    --out_path $PATH_TO_SAVE_CKPTS/$DATASET_NAME\_$SHOT\_refs_memory_postprocessed.pth \
    --model.init_args.model_cfg.dataset_name $DATASET_NAME \
    --model.init_args.model_cfg.memory_bank_cfg.length $SHOT \
    --model.init_args.model_cfg.memory_bank_cfg.category_num $CATEGORY_NUM \
    --trainer.devices 1

#### 2.1 Trực quan hóa bộ nhớ đã xử lý hậu kỳ

python run_lightening.py test --config $YAML_PATH \
    --model.test_mode vis_memory \
    --ckpt_path $PATH_TO_SAVE_CKPTS/$DATASET_NAME\_$SHOT\_refs_memory_postprocessed.pth \
    --model.init_args.dataset_cfgs.fill_memory.root $DATASET_PATH/images \
    --model.init_args.dataset_cfgs.fill_memory.json_file $DATASET_PATH/annotations/custom_references_with_segm.json \
    --model.init_args.dataset_cfgs.fill_memory.memory_pkl $DATASET_PATH/annotations/custom_references_with_segm.pkl \
    --model.init_args.dataset_cfgs.fill_memory.memory_length $SHOT \
    --model.init_args.dataset_cfgs.fill_memory.cat_names $CAT_NAMES \
    --model.init_args.model_cfg.dataset_name $DATASET_NAME \
    --model.init_args.model_cfg.memory_bank_cfg.length $SHOT \
    --model.init_args.model_cfg.memory_bank_cfg.category_num $CATEGORY_NUM \
    --trainer.devices 1
Các hình ảnh trực quan hóa PCA và K-means cho bộ nhớ ảnh được lưu tại results_analysis/memory_vis/my_custom_dataset.

3. Suy luận trên các ảnh mục tiêu

Nếu ONLINE_VIS được đặt thành True, kết quả dự đoán sẽ được lưu tại results_analysis/my_custom_dataset/ và hiển thị ngay khi được tính toán. LƯU Ý rằng việc chạy với trực quan hóa trực tuyến sẽ chậm hơn nhiều.

Bạn có thể thay đổi ngưỡng điểm số VIS_THR để xem nhiều hoặc ít các đối tượng đã được phân đoạn hơn.

ONLINE_VIS=True
VIS_THR=0.4
python run_lightening.py test --config $YAML_PATH \
    --model.test_mode test \
    --ckpt_path $PATH_TO_SAVE_CKPTS/$DATASET_NAME\_$SHOT\_refs_memory_postprocessed.pth \
    --model.init_args.model_cfg.dataset_name $DATASET_NAME \
    --model.init_args.model_cfg.memory_bank_cfg.length $SHOT \
    --model.init_args.model_cfg.memory_bank_cfg.category_num $CATEGORY_NUM \
    --model.init_args.model_cfg.test.imgs_path $DATASET_PATH/images \
    --model.init_args.model_cfg.test.online_vis $ONLINE_VIS \
    --model.init_args.model_cfg.test.vis_thr $VIS_THR \
    --model.init_args.dataset_cfgs.test.root $DATASET_PATH/images \
    --model.init_args.dataset_cfgs.test.json_file $DATASET_PATH/annotations/custom_targets.json \
    --model.init_args.dataset_cfgs.test.cat_names $CAT_NAMES \
    --trainer.devices 1

Kết quả

Các chỉ số hiệu suất (với đúng các tham số như các lệnh trên) nên là:

BBOX RESULTS:
  Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.478

SEGM RESULTS: Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.458

Kết quả trực quan được lưu tại results_analysis/my_custom_dataset/. Lưu ý rằng phương pháp của chúng tôi hoạt động cho các trường hợp âm tính giả, tức là các hình ảnh không chứa bất kỳ đối tượng nào thuộc các lớp mong muốn.

Nhấp vào hình ảnh để phóng to ⬇️

| Hình ảnh mục tiêu với thuyền ⛵ (bên trái GT, bên phải dự đoán) | Hình ảnh mục tiêu với chim 🐦 (bên trái GT, bên phải dự đoán) | |:----------------------:|:----------------------:| | 000000459673 | 000000407180 |

| Hình ảnh mục tiêu với thuyền và chim ⛵🐦 (bên trái GT, bên phải dự đoán) | Hình ảnh mục tiêu không có thuyền hoặc chim 🚫 (bên trái GT, bên phải dự đoán) | |:---------------------------------:|:----------------------------------:| | 000000517410 | 000000460598 |

🔬 Phân tích tách biệt

Phân tích tách biệt Backbone

Để đánh giá khả năng chuyển giao của phương pháp chúng tôi giữa các mô hình nền tảng, chúng tôi thay thế cả bộ mã hóa ngữ nghĩa (DINOv2) và bộ phân đoạn dựa trên SAM bằng một số lựa chọn thay thế.

Phân tích tách biệt bộ mã hóa ngữ nghĩa:

# CLIP (Sizes: b16, b32, l14, l14@336px)
bash scripts/clip/clipl14@336px.sh
bash scripts/clip/clipl14.sh
bash scripts/clip/clipb16.sh
bash scripts/clip/clipb32.sh

DINOV3 (Sizes: b, l, h)

bash scripts/dinov3/dinov3b.sh bash scripts/dinov3/dinov3l.sh bash scripts/dinov3/dinov3h.sh

PE (Sizes: g14, l14)

bash scripts/pe/PEg14.sh bash scripts/pe/PEl14.sh

Loại bỏ bộ phân đoạn:

# SAM2 (Sizes: tiny, small, base+, large)
bash scripts/sam2/sam2_tiny.sh
bash scripts/sam2/sam2_small.sh
bash scripts/sam2/sam2_base_plus.sh
bash scripts/baseline/dinov2_sam_baseline.sh # SAM2 Large

Đánh giá VLM trên bộ dữ liệu COCO few-shot

Chúng tôi đánh giá QWEN VLM trên bộ dữ liệu COCO few-shot.

bash scripts/vl-qwen/ablation-vl-qwen.sh

Heuristics hình ảnh tham chiếu

Để hiểu tại sao các hình ảnh tham chiếu khác nhau lại dẫn đến sự biến thiên về hiệu suất, chúng tôi phân tích các thuộc tính thống kê của các chú thích lớp mới trong COCO.

#### PHÂN TÍCH

Chúng tôi nghiên cứu ba đặc điểm chú thích: (1) diện tích mặt nạ (kích thước đối tượng), (2) vị trí trung tâm mặt nạ, và (3) khoảng cách đến các cạnh của hình ảnh.

Hướng dẫn:

# Mask area distribution
python no_time_to_train/make_plots/mask_area_distribution.py \
  --input data/coco/annotations/instances_val2017.json \
  --output no_time_to_train/make_plots/mask_area_distribution/mask_area_distribution.png \
  --edges-output no_time_to_train/make_plots/mask_area_distribution/bbox_edge_distance_histograms.png \
  --center-output no_time_to_train/make_plots/mask_area_distribution/bbox_center_density.png \
  --bins 80 \
  --distance-bins 80 \
  --disable-center-density

Bbox center positions

python no_time_to_train/make_plots/bbox_positions.py \ --per-class-root data/coco/annotations/per_class_instances \ --filename centeredness_2d_hist_plain.png \ --max-cols 6 \ --output-dir ./no_time_to_train/make_plots/bbox_positions \ --outfile grid_bbox_positions.png

[OUTPUT] Phân phối diện tích mặt nạ mask_area_distribution

[OUTPUT] Mật độ tâm bbox grid_bbox_positions

[OUTPUT] Biểu đồ khoảng cách cạnh bbox bbox_edge_distance_histograms

#### LỰA CHỌN

Chúng tôi lấy mẫu 100 hình ảnh tham chiếu đa dạng cho mỗi lớp, rõ ràng bao phủ một dải kích thước mặt nạ, tâm, và khoảng cách cạnh. Mỗi hình tham chiếu được đánh giá trên một tập con xác thực cố định đã rút gọn.

Hướng dẫn:

Tập lệnh cài đặt: scripts/1shot_ref_ablation/setup.sh:

  • Tạo file json cho mỗi lớp
  • Phân tích lớp cụ thể
  • Tạo tập tham chiếu với các phương pháp suy luận khác nhau
bash scripts/1shot_ref_ablation/setup.sh

Chạy script: scripts/1shot_ref_ablation/gpu*.sh:

  • Chạy pipeline cho từng tập hợp tham chiếu
# Example launch script that calls template script for each reference set
bash scripts/1shot_ref_ablation/gpu0.sh

#### KẾT QUẢ

Chúng tôi phân tích cách các điểm số phát hiện tương quan với các đặc điểm của ảnh tham chiếu (kích thước mặt nạ, vị trí trung tâm, khoảng cách tới cạnh).

Hướng dẫn:

python no_time_to_train/make_plots/heuristics_analysis.py

Outputs:

- no_time_to_train/make_plots/heuristics_analysis/heatmap_bbox_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/heatmap_segm_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/heatmap_center_bbox_norm_scores_kde_smooth.png

- no_time_to_train/make_plots/heuristics_analysis/heatmap_center_bbox_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/heatmap_center_segm_norm_scores_kde_smooth.png

- no_time_to_train/make_plots/heuristics_analysis/heatmap_center_segm_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/per_class_area_vs_raw_scores.png

- no_time_to_train/make_plots/heuristics_analysis/all_classes_area_vs_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/edge_distance_vs_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/bars_area_category_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/bars_centered_norm_scores.png

- no_time_to_train/make_plots/heuristics_analysis/bars_avoid_sides_norm_scores.png

[OUTPUT] Biểu đồ cột. Ảnh hưởng của diện tích mặt nạ (bên trái) và độ tập trung vào giữa (bên phải) lên hiệu suất barplot

[OUTPUT] Biểu đồ nhiệt. Bản đồ điểm 2D về hiệu suất như một hàm của vị trí tâm mặt nạ heatmap

[OUTPUT] Hiệu suất hình ảnh tham chiếu so với diện tích mặt nạ cho Fed các lớp mới COCO class_performance

Suy giảm hình ảnh tham chiếu

Chúng tôi đánh giá phương pháp của mình dưới các hình ảnh tham chiếu bị suy giảm dần bằng cách áp dụng mức độ mờ Gaussian tăng dần. ablation-blur

Hướng dẫn:

# Run different blur levels
bash scripts/blur_ablation/blur_ablation.sh

Plot grid of blur ablation results

python no_time_to_train/make_plots/plot_blur_results.py \ --results-root ./work_dirs/blur_ablation \ --class-id 0 \ --max-cols 4 \ --output-dir ./no_time_to_train/make_plots/blur_ablation \ --outfile grid_blur_ablation_class_0.png

Tương đồng đặc trưng

Script để trực quan hóa sự tương đồng đặc trưng giữa ảnh tham chiếu và ảnh mục tiêu.

Nó tạo ra sự tương đồng từng đặc trưng đơn lẻ (đặc trưng đường dẫn), và sự tương đồng dựa trên nguyên mẫu (đặc trưng tổng hợp). feature_similarity_small

Hướng dẫn:

python no_time_to_train/make_plots/feature_similarity.py \
  --classes orange \  
  --num-images 20 \
  --min-area 12 \
  --max-area 25000 \
  --min-instances 2 \
  --seed 123 \
  --max-per-class 12

Biểu đồ T-SNE (khả năng phân tách đặc trưng DINOv2)

T-SNE của các đặc trưng DINOv2 cho thấy sự phân tách rõ ràng đối với các lớp không giống nhau, nhưng có sự chồng lấp lớn đối với các lớp giống nhau, gợi ý rằng sự nhầm lẫn xuất phát từ hình học đặc trưng của backbone thay vì lựa chọn nguyên mẫu. tsne

Hướng dẫn:

Trích xuất đặc trưng

python no_time_to_train/make_plots/tsne-coco.py --extract
Vẽ đồ thị T-SNE

# Example spoon vs fork
python no_time_to_train/make_plots/tsne-coco.py --classes cat dog

🛠️ Trợ giúp

Hình dung bộ nhớ

thêm hình ảnh feature_comparison_small.png tại đây

Hướng dẫn

Để hình dung bộ nhớ (trực quan hóa PCA và K-means) cho một thí nghiệm nhất định, hãy điều chỉnh lệnh sau.

Thiết lập DO_NOT_CROP thành True/False (trong no_time_to_train/models/Sam2MatchingBaseline_noAMG.py) để hiển thị hình ảnh tham chiếu với/không với mặt nạ đã cắt.

python run_lightening.py test --config $CONFIG \
    --model.test_mode vis_memory \
    --ckpt_path $RESULTS_DIR/memory_postprocessed.ckpt \
    --model.init_args.dataset_cfgs.fill_memory.memory_pkl $RESULTS_DIR/$FILENAME \
    --model.init_args.dataset_cfgs.fill_memory.memory_length $SHOT \
    --model.init_args.dataset_cfgs.fill_memory.class_split $CLASS_SPLIT \
    --model.init_args.model_cfg.dataset_name $CLASS_SPLIT \
    --model.init_args.model_cfg.memory_bank_cfg.length $SHOT \
    --model.init_args.model_cfg.memory_bank_cfg.category_num $CATEGORY_NUM \
    --trainer.devices 1

Thay đổi kích thước hình ảnh thành 512x512 (làm cho hình ảnh vuông)

Để thay đổi kích thước hình ảnh thành 512x512 và lưu chúng vào một thư mục mới, hãy chạy lệnh sau. Đây là cho các hình trong bài báo.

Hướng dẫn:

python no_time_to_train/make_plots/paper_fig_square_imgs.py

Kích thước mô hình và bộ nhớ

Để tính kích thước mô hình và bộ nhớ, hãy chạy lệnh sau.

Hướng dẫn:

  • Xem no_time_to_train/models/Sam2MatchingBaseline_noAMG_model_and_memory.py để tính toán kích thước mô hình và bộ nhớ.
(Dễ nhất: tạm thời thay thế bằng Sam2MatchingBaseline_noAMG.py, sau đó đổi tên lại.)

🌍 Bộ dữ liệu EO

Script đánh giá (bộ dữ liệu EO)

Các script đánh giá có thể tìm thấy trong thư mục scripts/EO. Các bộ dữ liệu EO sử dụng script ./scripts/EO/EO_template.sh để chạy đánh giá.

Mỗi lần chạy thử nghiệm EO đều được lưu trong thư mục ./EO_results. Trong thư mục thử nghiệm, chúng tôi lưu trữ:

Hình ảnh và bảng

Các script bổ sung để tạo hình ảnh và bảng.

Bảng latex tổng hợp bộ dữ liệu EO:

python scripts/convert_datasets/summary_table_datasets.py

Tạo bảng LaTeX của các bộ dữ liệu EO:

python scripts/paper_figures/table_EO_results.py ./EO_results_no_heuristics

Biểu đồ độ chính xác của các tập dữ liệu EO:

python scripts/paper_figures/plot_EO_accuracy.py \
  --input-root ./EO_results \
  --output-root ./EO_results

Tóm tắt tác động của heuristic lên các tập dữ liệu EO:
python scripts/paper_figures/plot_EO_heuristic.py \
  --no-heuristics ./EO_results_no_heuristics \
  --heuristics ./EO_results
Biểu đồ thời gian chạy của các bộ dữ liệu EO:

python scripts/paper_figures/plot_EO_runtime.py \
  --input-root ./EO_results \
  --output-root ./EO_results

Tạo hình ảnh lưới EO cho minh họa trong bài báo:

python scripts/paper_figures/plot_EO_grid.py \
  --root ./EO_results_no_heuristics \
  --dataset ISAID \
  --shots 1

📚 Citation

If you use this work, please cite us:

@article{espinosa2025notimetotrain,
  title={No time to train! Training-Free Reference-Based Instance Segmentation},
  author={Miguel Espinosa and Chenhongyi Yang and Linus Ericsson and Steven McDonagh and Elliot J. Crowley},
  journal={arXiv preprint arXiv:2507.02798},
  year={2025},
  primaryclass={cs.CV}
}

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-13 ---