Web Analytics

no-time-to-train

⭐ 228 stars Assamese by miquel-espinosa

🌐 ভাষা

🚀 প্ৰশিক্ষণৰ সময় নাই!

প্ৰশিক্ষণ-মুক্ত ৰেফাৰেঞ্চ-ভিত্তিক ইনষ্টেন্স ছেগমেণ্টেচন

GitHub Website arXiv

অত্যাধুনিক (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)


🚨 আপডেট (২২ জুলাই ২০২৫): কাষ্টম ডেটাসেটৰ নিৰ্দেশনা যোগ কৰা হৈছে!
🔔 আপডেট (১৬ জুলাই ২০২৫): কোডটো নিৰ্দেশনাসহ আপডেট কৰা হৈছে!


📋 সূচীপত্ৰ

🎯 মূল বিষয়বস্তু

লিংকসমূহ:

📜 প্ৰবন্ধৰ সংক্ষিপ্তসাৰ

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. কন্ডা পৰিবেশ সৃষ্টি কৰক

আমিহঁতে প্ৰয়োজনীয় পেকেজসমূহৰ সৈতে এটা কন্ডা পৰিবেশ সৃষ্টি কৰিম।

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

৩. SAM2 আৰু DinoV2 ইনষ্টল কৰক

আমি উৎসৰ পৰা SAM2 আৰু DinoV2 ইনষ্টল কৰিম।

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

৪. ডেটাছেটসমূহ ডাউনলোড কৰক

অনুগ্ৰহ কৰি COCO ডেটাছেট ডাউনলোড কৰি data/coco ত ৰাখক

৫. SAM2 আৰু DinoV2 চেকপইণ্টসমূহ ডাউনলোড কৰক

আমি কাকতত ব্যৱহৃত ঠিক SAM2 চেকপইণ্টসমূহ ডাউনলোড কৰিম। (তথাপিও মনত ৰাখিব, SAM2.1 চেকপইণ্টসমূহ ইতিমধ্যে উপলব্ধ আৰু সম্ভৱত বেছি ভালদৰে কাৰ্যকৰী হ'ব পাৰে।)

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 ../..

📊 অনুমান কোড

⚠️ সতর্কীকৰণ: এইটো গৱেষণা কোড — অলপ বিশৃঙ্খলা আশা কৰক!

Few-shot COCO-ত ৩০-শ্বট SOTA ফলাফল পুনৰুত্পাদন কৰা

প্ৰয়োজনীয় ভেৰিয়েবলসমূহ সংজ্ঞা কৰক আৰু ফলাফলৰ বাবে এটা ফোল্ডাৰ সৃষ্টি কৰক:

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

#### ০. উদ্বৃত্ত ছেট সৃষ্টি কৰক

python no_time_to_train/dataset/few_shot_sampling.py \
        --n-shot $SHOTS \
        --out-path ${RESULTS_DIR}/${FILENAME} \
        --seed $SEED \
        --dataset $CLASS_SPLIT

#### ১. স্মৃতি ৰেফাৰেঞ্চেৰে পূৰণ কৰক

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. পোস্ট-প্ৰসেছ মেম'ৰি বেংক

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

#### ৩. লক্ষ্য চিত্ৰসমূহত অনুমান

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
যদি আপুনি অনলাইনত অনুমান ফলাফলসমূহ (তেওঁলোক গণনা হোৱা সময়ত) চাব বিচাৰে, তেন্তে যুক্তি যোগ কৰক:

    --model.init_args.model_cfg.test.online_vis True
স্ক'ৰ থ্ৰেশহ'ল্ড score_thr পৰামিতি সমন্বয় কৰিবলৈ, যুক্তি যোগ কৰক (উদাহৰণস্বৰূপে, সকলো ইনষ্টেন্সৰ ভিজুৱেলাইজেশ্যন যাৰ স্ক'ৰ 0.4তকৈ বেছি):
    --model.init_args.model_cfg.test.vis_thr 0.4
এতিয়া ছবিসমূহ results_analysis/few_shot_classes/-ত সংৰক্ষণ কৰা হ'ব। বাওঁফালে থকা ছবিখনে গ্ৰাউণ্ড ট্ৰুথ দেখুৱায়, সোঁফালে থকা ছবিখনে আমাৰ প্ৰশিক্ষণ-মুক্ত পদ্ধতিয়ে বিচ্ছিন্ন কৰা ইনষ্টেন্সসমূহ দেখুৱায়।

মনত ৰাখিব যে, এই উদাহৰণত আমি few_shot_classes বিভাজন ব্যৱহাৰ কৰি আছোঁ, সেইবাবে, আমি কেৱল এই বিভাজনৰ শ্ৰেণীসমূহৰ বিচ্ছিন্ন ইনষ্টেন্সসমূহহে আশা কৰিব লাগিব (COCO-ৰ সকলো শ্ৰেণী নহয়)।

#### ফলাফলসমূহ

ভেলিডেশ্যন ছেটৰ সকলো ছবি চলোৱাৰ পাছত, আপোনাৰ লাভ হ'ব:

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


🔍 কাষ্টম ডেটাচেট

আমাৰ পাইপলাইনটো কাষ্টম ডেটাচেটত কেনেদৰে চলাব পাৰি তাৰ নিৰ্দেশনা আমি দিয়া হৈছে। এনোটেশ্বন ফৰ্মেট সদায় COCO ফৰ্মেটত হ'ব লাগে।

TLDR; কাষ্টম ডেটাচেট ত সম্পূৰ্ণ পাইপলাইন কেনেদৰে চলাব পাৰি সেয়া সোজাকৈ চাবলৈ scripts/matching_cdfsod_pipeline.sh আৰু CD-FSOD ডেটাচেটৰ উদাহৰণ স্ক্ৰিপ্ট (যেনে scripts/dior_fish.sh) চাওক

0. এটা কাষ্টম ডেটাচেট প্ৰস্তুত কৰক ⛵🐦

চাওঁ আহক আমি কল্পনা কৰোঁ যে আমি এটা কাষ্টম ডেটাচেটত নাও⛵ আৰু চৰাই🐦 চিনাক্ত কৰিব বিচাৰিছো। আমাৰ পদ্ধতি ব্যৱহাৰ কৰিবলৈ আপোনাৰ প্ৰয়োজন হ'ব:

আমি coco images ব্যৱহাৰ কৰি কাষ্টম ডেটাচেট তৈয়াৰ কৰিবলৈ এটা সাধাৰণ স্ক্ৰিপ্ট প্ৰস্তুত কৰিছো, 1-shot ছেটিংৰ বাবে।
mkdir -p data/my_custom_dataset
python scripts/make_custom_dataset.py
এইটো তলত দিয়া ফোল্ডাৰ গঠনটোসহ এটা কাষ্টম ডেটাচেট সৃষ্টি কৰিব:
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)
ৰেফাৰেঞ্চ চিত্ৰৰ ভিজুৱেলাইজেচন (১-শ্বট):

| চৰাইৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ 🐦 | নাওৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ ⛵ | |:----------------------------------:|:-----------------------------------:| | bird_1 | boat_1 |

০.১ কেৱল bbox এন'টেশ্যন উপলব্ধ থাকিলে

আমিয়ে SAM2 ব্যৱহাৰ কৰি ইনষ্টেন্স-লেভেল ছেগমেণ্টেশ্যন মাস্ক সৃষ্টি কৰাৰ বাবে এটা স্ক্ৰিপ্টো প্ৰদান কৰোঁ। এইটো উপযোগী, যদি আপুনি ৰেফাৰেঞ্চ চিত্ৰসমূহৰ বাবে কেৱল বাউণ্ডিং বক্স এন'টেশ্যনহে উপলব্ধ ৰাখে।

# 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
ইনষ্টেন্স-স্তৰৰ ছেগমেন্টেশ্বন মাক্স থকা ৰেফাৰেঞ্চ চিত্ৰসমূহ (gt বাউণ্ডিং বক্সৰ পৰা SAM2 দ্বাৰা উৎপন্ন, ১-শ্বট):

উৎপন্ন কৰা ছেগমেন্টেশ্বন মাক্সৰ ভিজুৱালাইজেচন data/my_custom_dataset/annotations/custom_references_with_SAM_segm/references_visualisations/ ত সংৰক্ষণ কৰা হৈছে।

| চৰাইৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ 🐦 (স্বয়ংক্ৰিয়ভাৱে SAM দ্বাৰা ছেগমেন্ট কৰা) | নাওৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ ⛵ (স্বয়ংক্ৰিয়ভাৱে SAM দ্বাৰা ছেগমেন্ট কৰা) | |:---------------------------------:|:----------------------------------:| | bird_1_with_SAM_segm | boat_1_with_SAM_segm |

০.২ কোকো এনোটেশ্বনসমূহ পিকল ফাইললৈ ৰূপান্তৰ কৰা

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

১. ৰেফাৰেন্সৰ সৈতে মেম'ৰি পূৰণ কৰক

প্ৰথমে, উপযোগী ভেৰিয়েবল সংজ্ঞা কৰক আৰু ফলাফলসমূহৰ বাবে এটা ফ'ল্ডাৰ সৃষ্টি কৰক। লেবেলসমূহ সঠিকভাৱে দৃশ্যায়িত হোৱাৰ বাবে, শ্ৰেণী নামসমূহ কেটেগৰি আই.ডি. অনুসৰি json ফাইলত যি অনুসৰি থাকে সেই অনুসাৰে সজ্জিত হ'ব লাগিব। যেনে, bird-ৰ কেটেগৰি আই.ডি. হৈছে 16, boat-ৰ কেটেগৰি আই.ডি. হৈছে 9। সেইবাবে, 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

ধাপ ১ চলাও:

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. পোষ্ট-প্ৰসেছ মেমৰি বেংক

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

৩. লক্ষ্য চিত্ৰসমূহত অনুমান

যদি ONLINE_VIS True হিচাপে ছেট কৰা হয়, তেন্তে পূৰ্বানুমান ফলাফলসমূহ results_analysis/my_custom_dataset/ ত সংৰক্ষণ কৰা হ'ব আৰু গননা কৰাৰ লগে লগে প্ৰদৰ্শন কৰা হ'ব। লক্ষ্য কৰক যে অনলাইন ভিজুৱালাইজেশ্যনৰ সৈতে চলালে ইয়াৰ গতি বহু মন্থৰ হয়।

আপুনি ইচ্ছা কৰিলে স্ক'ৰ থ্ৰেশহ’ল্ড VIS_THR পৰিবৰ্তন কৰি অধিক বা কম ছেগমেণ্ট কৰা ইনষ্টেন্স দেখিব পাৰে।

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

ফলাফল

কাৰ্যসম্পাদন মেট্ৰিক্স (ওপৰৰ নিৰ্দেশনাসমূহৰ একে একে পৰামিত্ৰৰে) হ'ব লাগিব:

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

দৃশ্যমান ফলাফলসমূহ results_analysis/my_custom_dataset/-ত সংৰক্ষিত হয়। লক্ষ্য কৰক যে, আমাৰ পদ্ধতিটো মিছা ঋণাত্মকসমূহৰ বাবে কাম কৰে, অৰ্থাৎ, সেইসকল চিত্ৰ য’ত প্ৰয়োজনীয় শ্ৰেণীসমূহৰ কোনো উদাহৰণ নাথাকে।

চিত্ৰসমূহ ডাঙৰ কৰিবলৈ ক্লিক কৰক ⬇️

| নৌকা থকা লক্ষ্য চিত্ৰ ⛵ (বাওঁফালে GT, সোঁফালে অনুমান) | চৰাই থকা লক্ষ্য চিত্ৰ 🐦 (বাওঁফালে GT, সোঁফালে অনুমান) | |:----------------------:|:----------------------:| | 000000459673 | 000000407180 |

| নৌকা আৰু চৰাই থকা লক্ষ্য চিত্ৰ ⛵🐦 (বাওঁফালে GT, সোঁফালে অনুমান) | নৌকা বা চৰাই নথকা লক্ষ্য চিত্ৰ 🚫 (বাওঁফালে GT, সোঁফালে অনুমান) | |:---------------------------------:|:----------------------------------:| | 000000517410 | 000000460598 |

📚 উদ্ধৃতি

আপুনি এই কাম ব্যৱহাৰ কৰিলে, অনুগ্ৰহ কৰি আমাক উদ্ধৃতি দিয়ক:

@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: 2025-09-06 ---