yeetmq's picture
Add proper model card: metadata, metrics, usage, citation
47f62d7 verified
|
Raw
History Blame Contribute Delete
5.54 kB
---
license: mit
library_name: pytorch
pipeline_tag: image-segmentation
tags:
- semantic-segmentation
- retrieval-augmentation
- pascal-voc
- cross-attention
- unet
- mobilenet-v3
- pytorch-lightning
datasets:
- pascal_voc
- sbd
metrics:
- mean_iou
- accuracy
model-index:
- name: retrieval-augmented-unet-pascal-voc
results:
- task:
type: image-segmentation
name: Semantic Segmentation
dataset:
name: Pascal VOC 2012 + SBD
type: pascal_voc
metrics:
- type: mean_iou
value: 0.5648
name: mIoU (fp32 re-eval, 21 classes)
- type: accuracy
value: 0.8894
name: Pixel accuracy
---
# Retrieval-augmented semantic segmentation with a mask-similarity-trained retriever
Weights bundle for the preprint
**"Retrieval-augmented semantic segmentation with a mask-similarity-trained retriever"**
by Jianan Ren, D. A. Payunen, Ya. Matyushenko, T. M. Tatarnikova.
Code, training scripts, and paper source:
[github.com/Yeetmq/retrieval-augmented-segmentation](https://github.com/Yeetmq/retrieval-augmented-segmentation).
## Headline result
On the Pascal VOC 2012 official val split (1449 images, 21 classes),
fp32 re-evaluation on the same `best.ckpt`:
| Model | mIoU | pixel-acc |
|------------------|:-----------:|:-----------:|
| UNet baseline | 0.4655 | 0.8672 |
| UNet + retrieval | **0.5648** | **0.8894** |
| Δ | **+0.0993** | **+0.0222** |
Improvement observed on **all 21 classes simultaneously**. Largest
per-class gains: `bird` +0.25, `bottle` +0.19, `dog` +0.16, `cow`
+0.16, `cat` +0.15.
## What's in this repo
```
baseline/
best.ckpt # 390 MB — UNet baseline, best epoch 48
hparams.yaml
training_metrics.csv # per-epoch CSVLogger log (50 epochs)
retrieval/
best.ckpt # 510 MB — UNet + cross-attention fusion, epoch 49
hparams.yaml
training_metrics.csv
retriever/
best.ckpt # 39 MB — MobileNet-v3-Large + SupCon head
memory_bank.pt # 1.3 GB — 1587 L2-normalized support embeddings + masks
hparams.yaml
training_metrics.csv
eval/
comparison.csv # fp32 re-eval baseline vs retrieval on VOC val
per_class_iou.csv # per-class IoU for both models
```
Total: ~2.1 GB.
## Method (one paragraph)
Segmentation models systematically underperform on rare or atypical
cases. This project augments a plain UNet with an inference-time
**retrieval path**: a MobileNet-v3 retriever encodes the query image
into a 256-D L2-normalized embedding, the top-k nearest labeled
examples are fetched from a **memory bank** built from a held-out
support split, their masks are re-encoded by a small **MaskEncoder**,
and the resulting multi-scale features are fused into the UNet decoder
via **cross-attention** at scales /16, /8, /4. The main technical
contribution is a **mask-similarity retriever loss**
`L_ret = 0.8·L_Boundary-IoU + 0.2·L_CS-Jaccard` — a soft-target SupCon
in which pair relevance is defined by mask geometry rather than class
labels, aligning retrieval with what cross-attention actually consumes.
## Usage
```bash
# 1. Get the code
git clone https://github.com/Yeetmq/retrieval-augmented-segmentation.git
cd retrieval-augmented-segmentation
pip install -e .
# 2. Download this bundle
pip install huggingface_hub
huggingface-cli download yeetmq/retrieval-augmented-segmentation \
--local-dir weights_release
# 3. Rebuild the runs/ layout the scripts expect
mkdir -p runs/baseline runs/retrieval runs/retriever
cp weights_release/baseline/best.ckpt runs/baseline/best.ckpt
cp weights_release/retrieval/best.ckpt runs/retrieval/best.ckpt
cp weights_release/retriever/best.ckpt runs/retriever/best.ckpt
cp weights_release/retriever/memory_bank.pt runs/retriever/memory_bank.pt
# 4. Re-evaluate on Pascal VOC val (needs the dataset — see prepare_data.py)
python Experiments/pascal_voc/prepare_data.py
python Experiments/pascal_voc/build_h5.py
python Experiments/pascal_voc/build_splits.py
python Experiments/pascal_voc/compare_results.py
```
## Precision note
`training_metrics.csv` values were logged live under
`precision="16-mixed"`. The headline numbers above and in
`eval/comparison.csv` are an **fp32 re-evaluation** of the same
`best.ckpt` on the same val split. The gap is small (e.g. retrieval
mIoU 0.5648 fp32 vs 0.5634 fp16-mixed live) but non-zero due to the
precision regime.
## Training setup (short)
- **Data:** Pascal VOC 2012 + SBD (trainaug 10 582 images).
Stratified 15 % split → support (1587) for the memory bank; the
remaining 8995 → query_train. Official VOC val (1449) held out.
- **Baseline UNet:** 50 epochs, batch 16, AdamW (lr 3e-4, wd 1e-4),
CosineAnnealingLR, Dice + Focal (0.5/0.5). No ImageNet pretrain.
- **Retriever:** 80 epochs on the support split, batch 32,
MobileNet-v3-Large (ImageNet-pretrained), embedding 256-D,
mask-similarity SupCon (τ=0.1, α=0.2, boundary erosion d=2).
- **Retrieval segmenter:** same optimization as baseline, batch 12
(fusion memory), fusion at scales {20, 40, 80}, 4 attention heads.
Retriever frozen; UNet + MaskEncoder + 3 fusion modules trained.
- **Hardware:** one NVIDIA RTX 5090 (32 GB). End-to-end ~24 h.
## Citation
```bibtex
@misc{ren2026retrievalseg,
title = {Retrieval-augmented semantic segmentation with a mask-similarity-trained retriever},
author = {Ren, Jianan and Payunen, D. A. and Matyushenko, Ya. and Tatarnikova, T. M.},
year = {2026},
note = {Preprint},
}
```
## License
MIT.