🚀 প্ৰশিক্ষণৰ সময় নাই!
প্ৰশিক্ষণ-মুক্ত ৰেফাৰেঞ্চ-ভিত্তিক ইনষ্টেন্স ছেগমেণ্টেচন
অত্যাধুনিক (Papers with Code)
_SOTA 1-shot_ | -21CBCE?style=flat&logo=paperswithcode)
🚨 আপডেট (২২ জুলাই ২০২৫): কাষ্টম ডেটাসেটৰ নিৰ্দেশনা যোগ কৰা হৈছে!
🔔 আপডেট (১৬ জুলাই ২০২৫): কোডটো নিৰ্দেশনাসহ আপডেট কৰা হৈছে!
📋 সূচীপত্ৰ
- 🎯 মূল বৈশিষ্ট্য
- 📜 সংক্ষেপ
- 🧠 স্থাপত্য
- 🛠️ ইনষ্টলেশ্যন নিৰ্দেশনা
- 1. ৰিপ'জিট'ৰী ক্লোন কৰক
- 2. কণ্ডা পৰিৱেশ সৃষ্টি কৰক
- 3. SAM2 আৰু DinoV2 ইনষ্টল কৰক
- 4. ডেটাসেটসমূহ ডাউনলোড কৰক
- 5. SAM2 আৰু DinoV2 চেকপইণ্ট ডাউনলোড কৰক
- 📊 ইনফাৰেন্স কোড: Few-shot COCO-ত ৩০-shot SOTA ফলাফল পুনৰুৎপাদন কৰক
- 0. ৰেফাৰেন্স ছেট সৃষ্টি কৰক
- 1. ৰেফাৰেন্সেৰে মেম'ৰি পূৰ্ণ কৰক
- 2. মেম'ৰি বেংক প'ষ্ট-প্ৰচেছ কৰক
- 3. লক্ষ্য চিত্ৰসমূহত ইনফাৰেন্স কৰক
- ফলাফল
- 🔍 কাষ্টম ডেটাসেট
- 0. কাষ্টম ডেটাসেট প্ৰস্তুত কৰক ⛵🐦
- 0.1 কেৱল bbox এনোটেশ্বন উপলব্ধ থাকিলে
- 0.2 coco এনোটেশ্বন pickle ফাইললৈ ৰূপান্তৰ কৰক
- 1. মেম'ৰীত references ভৰ্তি কৰক
- 2. মেম'ৰি বেংক post-process কৰক
- 📚 উদ্ধৃতি
🎯 মূল বিষয়বস্তু
- 💡 প্ৰশিক্ষণ-ৰহিত: পুনঃ-প্ৰশিক্ষণ নাই, prompt engineering নাই—কেৱল এটা reference image।
- 🖼️ Reference-Based: কেইটামান উদাহৰণ ব্যৱহাৰ কৰি নতুন বস্তু চেগমেণ্ট কৰক।
- 🔥 SOTA Performance: Training-free পদ্ধতি সমূহতকৈ COCO, PASCAL VOC, আৰু Cross-Domain FSOD-ত উৎকৃষ্ট ফলাফল।
📜 প্ৰবন্ধৰ সংক্ষিপ্তসাৰ
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).
🧠 Architecture
🛠️ Installation instructions
1. Clone the repository
git clone https://github.com/miquel-espinosa/no-time-to-train.git
cd no-time-to-train2. কন্ডা পৰিবেশ সৃষ্টি কৰক
আমিহঁতে প্ৰয়োজনীয় পেকেজসমূহৰ সৈতে এটা কন্ডা পৰিবেশ সৃষ্টি কৰিম।
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=4mkdir -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.368SEGM 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. এটা কাষ্টম ডেটাচেট প্ৰস্তুত কৰক ⛵🐦
চাওঁ আহক আমি কল্পনা কৰোঁ যে আমি এটা কাষ্টম ডেটাচেটত নাও⛵ আৰু চৰাই🐦 চিনাক্ত কৰিব বিচাৰিছো। আমাৰ পদ্ধতি ব্যৱহাৰ কৰিবলৈ আপোনাৰ প্ৰয়োজন হ'ব:
- প্ৰতিটো শ্ৰেণীৰ বাবে কমেও ১ টা এনোটেটেড ৰেফাৰেন্স চিত্ৰ (অৰ্থাৎ নাওৰ বাবে ১ টা আৰু চৰাইৰ বাবে ১ টা ৰেফাৰেন্স চিত্ৰ)
- আমাৰ ইচ্ছা কৰা শ্ৰেণীৰ উদাহৰণ বিচাৰি উলিয়াবলৈ বহুতো লক্ষ্য চিত্ৰ।
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)
ৰেফাৰেঞ্চ চিত্ৰৰ ভিজুৱেলাইজেচন (১-শ্বট):| চৰাইৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ 🐦 | নাওৰ বাবে ১-শ্বট ৰেফাৰেঞ্চ চিত্ৰ ⛵ |
|:----------------------------------:|:-----------------------------------:|
| |
|
০.১ কেৱল 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 দ্বাৰা ছেগমেন্ট কৰা) |
|:---------------------------------:|:----------------------------------:|
| |
|
০.২ কোকো এনোটেশ্বনসমূহ পিকল ফাইললৈ ৰূপান্তৰ কৰা
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 12. পোষ্ট-প্ৰসেছ মেমৰি বেংক
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.478SEGM RESULTS:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.458
দৃশ্যমান ফলাফলসমূহ results_analysis/my_custom_dataset/-ত সংৰক্ষিত হয়। লক্ষ্য কৰক যে, আমাৰ পদ্ধতিটো মিছা ঋণাত্মকসমূহৰ বাবে কাম কৰে, অৰ্থাৎ, সেইসকল চিত্ৰ য’ত প্ৰয়োজনীয় শ্ৰেণীসমূহৰ কোনো উদাহৰণ নাথাকে।
চিত্ৰসমূহ ডাঙৰ কৰিবলৈ ক্লিক কৰক ⬇️
| নৌকা থকা লক্ষ্য চিত্ৰ ⛵ (বাওঁফালে GT, সোঁফালে অনুমান) | চৰাই থকা লক্ষ্য চিত্ৰ 🐦 (বাওঁফালে GT, সোঁফালে অনুমান) |
|:----------------------:|:----------------------:|
| |
|
| নৌকা আৰু চৰাই থকা লক্ষ্য চিত্ৰ ⛵🐦 (বাওঁফালে GT, সোঁফালে অনুমান) | নৌকা বা চৰাই নথকা লক্ষ্য চিত্ৰ 🚫 (বাওঁফালে GT, সোঁফালে অনুমান) |
|:---------------------------------:|:----------------------------------:|
| |
|
📚 উদ্ধৃতি
আপুনি এই কাম ব্যৱহাৰ কৰিলে, অনুগ্ৰহ কৰি আমাক উদ্ধৃতি দিয়ক:
@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 ---