tommya5526's picture
merge with remote, LFS install
92e2227
|
Raw
History Blame Contribute Delete
13.8 kB
---
license: mit
tags:
- medical-imaging
- chest-x-ray
- insurance-prediction
- fairness
- bias-detection
- mimic-cxr
datasets:
- mimic-cxr
---
# Insurance Paper — Pretrained Weights
Pretrained checkpoints for **"The Unawareness of AI Looking for Health Insurance Type from Normal Chest X-ray Images"**.
All models were trained on [MIMIC-CXR-JPG v2.0.0](https://physionet.org/content/mimic-cxr-jpg/2.0.0/) with seed=123. MedGemma experiments use the MedGemma-refined subset (`mimic-cxr-gemma`), containing only normal CXRs filtered by MedGemma.
## Models
| Model | Architecture | Params | File size |
|-------|-------------|--------|-----------|
| MedMamba | VSSM_DoubleLinear / VSSM_Double_addDemothen2 | ~29M | ~115 MB |
| DenseNet121 | DenseNetWithDoubleLinear / _addDemothen2 | ~8M | ~59 MB |
| Swin Transformer V2 | SwinTDoubleLinear / _addDemothen2 | ~50M | ~218 MB |
## Repository Structure
```
insurance_paper_weights/
├── exp0/ # Baselines (CheXpert / MIMIC)
│ ├── CheXpert/
│ │ └── densenet.pt, mamba.pt, swinTF.pt
│ └── MIMIC/
│ └── densenet.pt, mamba.pt, swinTF.pt
├── exp0-2/ # Random Initialization
│ └── swinTF_random.pt
├── exp1/ # Patch keep/remove — DenseNet
│ ├── densenet_keep/
│ │ └── patch1.pt ... patch9.pt
│ └── densenet_remove/
│ └── patch1.pt ... patch9.pt
├── exp1-1/ # Patch keep/remove — MedMamba
│ ├── mamba_keep/
│ │ └── patch1.pt ... patch9.pt
│ └── mamba_remove/
│ └── patch1.pt ... patch9.pt
├── exp1-2/ # Patch keep/remove — DenseNet + Swin Transformer
│ ├── densenet_keep/
│ │ └── patch1.pt ... patch9.pt
│ ├── densenet_remove/
│ │ └── patch1.pt ... patch9.pt
│ ├── swinTF_keep/
│ │ └── patch1.pt ... patch9.pt
│ └── swinTF_remove/
│ └── patch1.pt ... patch9.pt
├── exp2/ # Resolution — MedMamba
│ └── mamba_2.pt ... mamba_224.pt (8 files)
├── exp2-1/ # Resolution — DenseNet
│ └── densenet_2.pt ... densenet_224.pt (8 files)
├── exp2-2/ # Resolution — Swin Transformer
│ └── swinTF_4.pt ... swinTF_224.pt (7 files)
├── exp3/ # Demographics — MedMamba
│ ├── sex.pt, age.pt, race.pt
│ ├── sexage.pt, sexrace.pt, agerace.pt
│ └── sexagerace.pt
├── exp3-1/ # Demographics — DenseNet
│ └── (same 7 files)
├── exp3-2/ # Demographics — Swin Transformer
│ └── (same 7 files)
├── exp4/ # Frequency filtering — MedMamba
│ ├── highpass/
│ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt
│ └── lowpass/
│ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt
├── exp4-1/ # Frequency filtering — Swin Transformer
│ ├── highpass/ └── lowpass/
├── exp4-2/ # Frequency filtering — DenseNet
│ ├── highpass/ └── lowpass/
├── exp2_medgemma/ # MedGemma Resolution — MedMamba
│ └── mamba_2.pt ... mamba_224.pt (8 files)
├── exp2-1_medgemma/ # MedGemma Resolution — DenseNet
│ └── densenet_2.pt ... densenet_224.pt (8 files)
├── exp2-2_medgemma/ # MedGemma Resolution — Swin Transformer
│ └── swinTF_4.pt ... swinTF_224.pt (7 files)
├── exp3_medgemma/ # MedGemma Demographics — MedMamba
│ ├── sex.pt, age.pt, race.pt
│ ├── sexage.pt, sexrace.pt, agerace.pt
│ └── sexagerace.pt
├── exp3-1_medgemma/ # MedGemma Demographics — DenseNet
│ └── (same 7 files)
├── exp3-2_medgemma/ # MedGemma Demographics — Swin Transformer
│ └── (same 7 files)
├── exp4_medgemma/ # MedGemma Frequency filtering — MedMamba
│ ├── highpass/
│ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt
│ └── lowpass/
│ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt
├── exp4-1_medgemma/ # MedGemma Frequency filtering — Swin Transformer
│ ├── highpass/ └── lowpass/
└── exp4-2_medgemma/ # MedGemma Frequency filtering — DenseNet
├── highpass/ └── lowpass/
```
## Checkpoint Table
> **Note:** All experiments are trained and available.
| Experiment | Description | Model | Config | # Checkpoints | HF path | Available? |
|------------|-------------|-------|--------|---------------|---------|------------|
| **exp0** | Baselines (CheXpert/MIMIC) | All 3 | — | 6 | `exp0/{dataset}/{model}.pt` | Yes |
| **exp0-2** | Random Initialisation | SwinT | — | 1 | `exp0-2/swinTF_random.pt` | Yes |
| **exp1** | Patch keep/remove | DenseNet | 9 patches x 2 | 18 | `exp1/densenet_{keep/remove}/patch{N}.pt` | Yes |
| **exp1-1** | Patch keep/remove | MedMamba | 9 patches x 2 | 18 | `exp1-1/mamba_{keep/remove}/patch{N}.pt` | Yes |
| **exp1-2** | Patch keep/remove | SwinT | 9 patches x 2 | 18 | `exp1-2/swinTF_{keep/remove}/patch{N}.pt` | Yes |
| **exp2** | Resolution | MedMamba | 8 resolutions | 8 | `exp2/mamba_{N}.pt` | Yes |
| **exp2-1** | Resolution | DenseNet | 8 resolutions | 8 | `exp2-1/densenet_{N}.pt` | Yes |
| **exp2-2** | Resolution | SwinT | 7 resolutions | 7 | `exp2-2/swinTF_{N}.pt` | Yes |
| **exp3** | Demographics (addDemo) | MedMamba | 7 demo combos | 7 | `exp3/{combo}.pt` | Yes |
| **exp3-1** | Demographics (addDemo) | DenseNet | 7 demo combos | 7 | `exp3-1/{combo}.pt` | Yes |
| **exp3-2** | Demographics (addDemo) | SwinT | 7 demo combos | 7 | `exp3-2/{combo}.pt` | Yes |
| **exp4** | Freq filtering (HP+LP) | MedMamba | 8 freq x 2 | 16 | `exp4/{highpass,lowpass}/{F}Hz.pt` | Yes |
| **exp4-1** | Freq filtering (HP+LP) | SwinT | 8 freq x 2 | 16 | `exp4-1/{highpass,lowpass}/{F}Hz.pt` | Yes |
| **exp4-2** | Freq filtering (HP+LP) | DenseNet | 8 freq x 2 | 16 | `exp4-2/{highpass,lowpass}/{F}Hz.pt` | Yes |
**Original: 153 checkpoints**
### MedGemma Experiments (mimic-cxr-gemma dataset)
| Experiment | Description | Model | Config | # Checkpoints | HF path | Available? |
|------------|-------------|-------|--------|---------------|---------|------------|
| **exp2** | Resolution | MedMamba | 8 resolutions | 8 | `exp2_medgemma/mamba_{N}.pt` | Yes |
| **exp2-1** | Resolution | DenseNet | 8 resolutions | 8 | `exp2-1_medgemma/densenet_{N}.pt` | Yes |
| **exp2-2** | Resolution | SwinT | 7 resolutions | 7 | `exp2-2_medgemma/swinTF_{N}.pt` | Yes |
| **exp3** | Demographics (addDemo) | MedMamba | 7 demo combos | 7 | `exp3_medgemma/{combo}.pt` | Yes |
| **exp3-1** | Demographics (addDemo) | DenseNet | 7 demo combos | 7 | `exp3-1_medgemma/{combo}.pt` | Yes |
| **exp3-2** | Demographics (addDemo) | SwinT | 7 demo combos | 7 | `exp3-2_medgemma/{combo}.pt` | Yes |
| **exp4** | Freq filtering (HP+LP) | MedMamba | 8 freq x 2 | 16 | `exp4_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes |
| **exp4-1** | Freq filtering (HP+LP) | SwinT | 8 freq x 2 | 16 | `exp4-1_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes |
| **exp4-2** | Freq filtering (HP+LP) | DenseNet | 8 freq x 2 | 16 | `exp4-2_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes |
**MedGemma: 92 checkpoints**
**Total: 153 original + 92 MedGemma = 245 unique checkpoints**
- **Demo combos** (exp3): `sex`, `age`, `race`, `sexage`, `sexrace`, `agerace`, `sexagerace`
- **Frequencies** (exp4): 1, 5, 10, 25, 50, 100, 200, 400 Hz
- **Resolutions** (exp2): 2, 4, 7, 14, 28, 56, 112, 224
- **Patches** (exp1): 1-9, corresponding to a 3x3 grid on 448x448 images (left-to-right, top-to-bottom)
## Usage
### Download all weights
```bash
git lfs install
git clone https://huggingface.co/InsurancePrediction/insurance_paper_weights
```
### Download a single experiment
```bash
# Using huggingface_hub
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="InsurancePrediction/insurance_paper_weights",
allow_patterns="exp3-1/*",
local_dir="./weights"
)
```
### Load a checkpoint
```python
import torch
# Base model (exp1, exp4)
from model import DenseNetWithDoubleLinear
model = DenseNetWithDoubleLinear(num_classes=2, dropout_prob=0)
ckpt = torch.load("exp1-2/densenet_keep/patch1.pt", map_location="cpu")
model.load_state_dict(ckpt["model_state_dict"])
# Demographics model (exp3)
from MedMamba.MedMamba import VSSM_Double_addDemothen2
model = VSSM_Double_addDemothen2(num_classes=2, demo_size=5) # e.g. sexage -> 2+3=5
ckpt = torch.load("exp3/sexage.pt", map_location="cpu")
model.load_state_dict(ckpt["model_state_dict"])
```
### Mapping from HF paths to original training paths
Weights in JAMA_codes were trained on ORCD. Weights marked with (*) were trained by Chi-Yu and uploaded directly — no JAMA_codes equivalent.
| HF path | Original training path |
|---------|----------------------|
| `exp0/{dataset}/{model}.pt` | Trained by Chi-Yu |
| `exp0-2/swinTF_random.pt` | Trained by Chi-Yu |
| `exp1-1/mamba_keep/patch{N}.pt` | Trained by Chi-Yu |
| `exp1-1/mamba_remove/patch{N}.pt` | `JAMA_codes/exp1-1/Rand123/Rand123_patchidx{N}_exp1-1_model_aucbest.pt` |
| `exp1-2/densenet_keep/patch{N}.pt` | `JAMA_codes/densenet_keep/Rand123/Rand123_patchidx{N}_densenet_keep_model_aucbest.pt` |
| `exp1-2/densenet_remove/patch{N}.pt` | Trained by Chi-Yu |
| `exp1-2/swinTF_keep/patch{N}.pt` | `JAMA_codes/swinTF_keep/Rand123/Rand123_patchidx{N}_swinTF_keep_model_aucbest.pt` |
| `exp1-2/swinTF_remove/patch{N}.pt` | `JAMA_codes/swinTF_remove/Rand123/Rand123_patchidx{N}_swinTF_remove_model_aucbest.pt` |
| `exp2/mamba_{N}.pt` | Trained by Chi-Yu |
| `exp2-1/densenet_{N}.pt` | Trained by Chi-Yu |
| `exp2-2/swinTF_{N}.pt` | Trained by Chi-Yu |
| `exp3/{combo}.pt` | `JAMA_codes/{combo}_weights/mamba/sunday/Rand123/Rand123_{combo}_mamba_sunday_model_aucbest.pt` |
| `exp3-1/{combo}.pt` | `JAMA_codes/{combo}_weights/densenet/sunday/Rand123/Rand123_{combo}_densenet_sunday_model_aucbest.pt` |
| `exp3-2/{combo}.pt` | `JAMA_codes/{combo}_weights/swin/sunday/Rand123/Rand123_{combo}_swin_sunday_model_aucbest.pt` |
| `exp4/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_weights/mamba/{direction}/Rand123/...` |
| `exp4-1/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_swin_freq/Rand123/...` |
| `exp4-2/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_densenet_freq/Rand123/...` |
| `exp2_medgemma/mamba_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/mamba/Rand123/...` |
| `exp2-1_medgemma/densenet_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/densenet/Rand123/...` |
| `exp2-2_medgemma/swinTF_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/swinTF/Rand123/...` |
| `exp3_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3/mamba/Rand123/...` |
| `exp3-1_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3-1/densenet/Rand123/...` |
| `exp3-2_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3-2/swinTF/Rand123/...` |
| `exp4_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4/mamba/Rand123/...` |
| `exp4-1_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4-1/swinTF/Rand123/...` |
| `exp4-2_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4-2/densenet/Rand123/...` |
## Bootstrap Evaluation Status
All 153 original bootstrap evaluations complete (n_bootstrap=20, sample_size=1000, seed=42).
| Experiment | Evaluations | Status |
|-----------|-------------|--------|
| **exp0** | 6 (3 models x 2 datasets) | Done |
| **exp0-2** | 1 | Done |
| **exp1-1** | 18 (mamba keep + remove x 9 patches) | Done |
| **exp1-2** | 36 (densenet keep/remove + swinTF keep/remove x 9 patches) | Done |
| **exp2/2-1/2-2** | 23 (8+8+7 resolutions) | Done |
| **exp3/3-1/3-2** | 21 (3 models x 7 combos) | Done |
| **exp4/4-1/4-2** | 48 (3 models x 2 directions x 8 freqs) | Done |
### MedGemma Bootstrap Status
| Experiment | Evaluations | Status |
|-----------|-------------|--------|
| **MedGemma exp2/2-1/2-2** | 23 (8+8+7 resolutions) | Done |
| **MedGemma exp3/3-1/3-2** | 21 (3 models x 7 combos) | Done |
| **MedGemma exp4/4-1/4-2** | 48 (3 models x 2 directions x 8 freqs) | Done |
Results: `bootstrap_results/` in the [code repository](https://github.com/altis5526/Insurance-Project-Journal-version-).
## Training Details
- **Dataset (original)**: MIMIC-CXR-JPG v2.0.0 (normal frontal chest X-rays)
- **Dataset (MedGemma)**: mimic-cxr-gemma (MedGemma-refined, normal CXRs only)
- **Task**: Binary classification — Private vs. Public/Government insurance
- **Image size**: 448 x 448
- **Seed**: 123
- **Selection**: Best validation AUC checkpoint
## Citation
```bibtex
@inproceedings{chen2025unawareness,
title={The Unawareness of AI Looking for Health Insurance Type from Normal Chest X-ray Images},
author={Chen, Chi-Yu and others},
year={2025}
}
```
## Code
[Code Repository](https://github.com/altis5526/Insurance-Project-Journal-version-) <!-- Update with actual repo URL -->