MCPcopy Index your code
hub / github.com/Lans1ng/OSSOD

github.com/Lans1ng/OSSOD @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
161 symbols 539 edges 62 files 29 documented · 18%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Semi-Supervised Object Detection with Uncurated Unlabeled Data for Remote Sensing Images

💥 News

The paper is accepted by International Journal of Applied Earth Observation and Geoinformation (JAG) and is accessible here.

📖 Introduction

Semi-supervised object detection (SSOD) assumes that both labeled and unlabeled data originate from the same label space, constituting in-distribution (ID) samples. Open-set semi-supervised object detection (OSSOD) accommodates the existence of substantial out-of-distribution (OOD) samples, mirroring the complexities of real-world scenarios.

🎨 Overview

Overview of the proposed open-set semi-supersvised object detection (OSSOD) framework.

🎮 Getting Started

1. Install Environment

conda create --name ossod python=3.8
conda activate ossod

pip install torch===1.7.1+cu110 torchvision===0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html --no-cache

git clone https://github.com/Lans1ng/OSSOD.git
cd OSSOD
pip install -r requirements.txt

2. Prepare Dataset

shell dataset/ ├──DIOR/ │ ├── annotations_json_split1 │ ├── annotations_json_split2 │ ├── JPEGImages │ │ ├── 00001.jpg │ │ ├── 00002.jpg │ │ ├── ... │ │ ├── 23463.jpg - JPEGImages represents all images in DIOR dataset - Annotations for split1 and split2 are already included in the repo.

3. Download Checkpoints

Before training,please download the pretrained backbone (ResNet-50) to pretrained_model/backbone.

4. Training

Take split1 of the DIOR dataset as examples: - Use in-distribution (ID) labeled data to train a baseline

python train.py --config configs/baseline/baseline_ssod_split1.py --work-dir work_dirs/split1/baseline_ssod --base_stage True
  • Use unlabeled data to train semi-supervised detector:

  • Train detectors with ID unlabeled data

```bash #unbiased teacher python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_id.py --work-dir work_dirs/split1/unbiased_teacher_ID

#our proposed ossod python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_ossod_id.py --work-dir work_dirs/split1/unbiased_teacher_ossod_ID ```

  • Train detectors with ID and mixed unlabeled data ```bash #unbiased teacher python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_id_mix.py --work-dir work_dirs/split1/unbiased_teacher_ID_MIX

#our proposed ossod python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_ossod_id_mix.py --work-dir work_dirs/split1/unbiased_teacher_ossod_ID_MIX ```

  • Train detectors with ID, mixed and out-of-distribution (OOD) unlabeled data ```bash #unbiased teacher python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_id_mix_ood.py --work-dir work_dirs/split1/unbiased_teacher_ID_MIX_OOD

#our proposed ossod python train.py --config configs/unbiased_teacher/split1/unbiased_teacher_ossod_id_mix_ood.py --work-dir work_dirs/split1/unbiased_teacher_ossod_ID_MIX_OOD ```

5. Testing

Take split1 of the DIOR dataset as examples:

python eval.py --config configs/unbiased_teacher/split1/unbiased_teacher_ossod_id_mix_ood.py --checkpoint work_dirs/split1/unbiased_teacher_ossod_ID_MIX_OODlatest.pth --eval bbox  --show-dir results

💡 Acknowledgement

🖊️ Citation

If you find this project useful in your research, please consider cite:

@article{liu2024semi,
  title={Semi-Supervised Object Detection with Uncurated Unlabeled Data for Remote Sensing Images},
  author={Liu, Nanqing and Xu, Xun and Gao, Yingjie and Zhao, Yitao and Li, Heng-Chao},
  journal={International Journal of Applied Earth Observation and Geoinformation},
  year={2024}
}

Core symbols most depended-on inside this repo

update
called by 9
mmdet_extension/models/detectors/unbiased_teacher_ossod.py
_bbox_forward
called by 6
mmdet_extension/models/roi_head/standard_roi_head_mb.py
cuda
called by 5
mmdet_extension/models/detectors/semi_base.py
forward_train
called by 5
mmdet_extension/models/detectors/unbiased_teacher_ossod.py
parse_loss
called by 4
mmdet_extension/models/detectors/semi_base.py
imshow_det_bboxes
called by 3
mmdet_extension/core/visualization/image.py
get_palette
called by 3
mmdet_extension/core/visualization/palette.py
_parse_data_info
called by 3
mmdet_extension/datasets/txt_style.py

Shape

Method 105
Class 33
Function 23

Languages

Python100%

Modules by API surface

mmdet_extension/models/detectors/unbiased_teacher_ossod.py21 symbols
mmdet_extension/datasets/pipelines/transforms_box.py17 symbols
mmdet_extension/datasets/txt_style.py12 symbols
mmdet_extension/datasets/pipelines/semi_augment.py12 symbols
mmdet_extension/models/detectors/semi_base.py11 symbols
mmdet_extension/core/hooks/semi_eval_hooks.py9 symbols
mmdet_extension/core/visualization/image.py8 symbols
mmdet_extension/apis/test.py7 symbols
mmdet_extension/models/detectors/unbiased_teacher.py6 symbols
mmdet_extension/models/roi_head/standard_roi_head_mb.py5 symbols
mmdet_extension/models/roi_head/bbox_heads/convfc_bbox_head_base.py5 symbols
mmdet_extension/datasets/semi_dataset.py5 symbols

For agents

$ claude mcp add OSSOD \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact