
Codebase di ricerca per la valutazione della privacy delle reti neurali quantizzate: addestra modelli target/shadow con PTQ/QAT ed esegue attacchi di inferenza di appartenenza (MIA, RMIA, white-box) con difese DP.
Questo repository contiene una codebase di ricerca per la valutazione della privacy di reti neurali profonde quantizzate. Supporta l'addestramento di modelli target/shadow in comuni configurazioni di quantizzazione post-addestramento (PTQ) e quantizzazione consapevole dell'addestramento (QAT), il salvataggio su disco delle feature intermedie per gli attacchi e l'esecuzione di una suite di attacchi e metriche correlati all'inferenza di appartenenza (ad es. MIA, RMIA, WhiteBoxMIA, WhiteBoxMIA_Partial). La codebase integra inoltre percorsi di addestramento per la privacy differenziale basati su Opacus per modelli difesi (ad es. varianti dropout / DP / avversariali negli script di esempio forniti).
Il flusso di valutazione è suddiviso in due fasi: (1) addestramento (--training target|shadow|both) per materializzare gli artefatti in save/<attack_method>/..., e (2) valutazione solo-attacco (--training None) che carica posteriori/modelli salvati e riporta le metriche in result/<attack_method>/....
È necessaria una macchina con supporto GPU NVIDIA per gli esperimenti tipici. Consigliamo i wheel CUDA 12.1 per PyTorch (vedi i comandi sotto). Usa Python 3.10 per allinearti alle versioni fissate in requirements.txt.
Puoi installare la maggior parte dei requisiti con:
conda create --name priv-qdnn python=3.10
conda activate priv-qdnn
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121
Note:
pip install -r requirements.txt senza --extra-index-url (wheel CPU di PyPI se disponibili per la tua piattaforma).aimet-torch (vedi quantization/PTQ/adaround.py). Se pip non riesce a risolvere aimet-torch sulla tua piattaforma, segui prima le istruzioni di installazione di Qualcomm AIMET, poi installa le dipendenze rimanenti.I dataset non sono inclusi in questo repository. Ne sono supportati quattro, e differiscono per la quantità di configurazione necessaria.
Entrambi vengono scaricati al primo utilizzo in data/, quindi non è richiesto alcun passaggio manuale — assicurati solo che la macchina abbia accesso alla rete la prima volta che esegui un esperimento.
torchvision.datasets.CIFAR100(..., download=True) in data/load_data.py.fetch_cinic10() in data/cinic10.py dal mirror Edinburgh DataShare. È un archivio di grandi dimensioni, quindi prevedi tempo e spazio su disco per la prima esecuzione.Questi due non hanno un downloader automatico. Scarica gli archivi grezzi, estraili in data/<dataset>/raw/, quindi convertili nei file .npy che i loader si aspettano.
| Dataset | Archivio grezzo |
|---|---|
| Texas100 | https://www.comp.nus.edu.sg/~reza/files/dataset_texas.tgz |
| Location | https://github.com/privacytrustlab/datasets (il set location) |
Struttura prevista dopo l'estrazione:
data/texas/raw/texas/100/feats
data/texas/raw/texas/100/labels
data/location/raw/bangkok
Poi costruisci le suddivisioni train/test:
python data/prepare_tabular.py --dataset both
--dataset accetta texas, location o both. Usa --raw_root per puntare a una posizione diversa (predefinita data/<dataset>/raw), e --test_size / --seed per modificare la suddivisione (valori predefiniti 0.2 e 41).
Questo scrive i file che data/tabular_datasets.py carica:
data/<dataset>/{train_feats,train_labels,test_feats,test_labels}.npy
Se questi file .npy mancano, qualsiasi esecuzione che utilizzi --dataset_name texas o --dataset_name location fallisce con un FileNotFoundError che indica il percorso mancante.
attack: implementazioni degli attacchi e punti di ingresso per la valutazione (MIA, RMIA, WhiteBox_MIA, ecc.).training: cicli di addestramento target/shadow e varianti di addestramento difeso (rami DP / avversariali, utilità).model: definizioni dei modelli e wrapper utilizzati da addestramento e attacchi.quantization: pipeline e helper di quantizzazione PTQ/QAT (inclusa l'integrazione di AIMET AdaRound).data: helper per il download dei dataset, script di preparazione e wrapper Dataset di PyTorch.dp: utilità per la privacy differenziale utilizzate dai percorsi di addestramento DP.example: script shell per esperimenti end-to-end (raccolta dati MIA + valutazione solo-attacco / difese).experiment: studi meccanicistici alla base dell'analisi del paper — punteggi di memorizzazione in stile LOOD (memorization.py) e le tabelle di quantizzazione della norma del gradiente (grad_norm_quantization_table.py, grad_norm_range_normalized_table.py).plot: generazione di figure e tabelle per il paper; i PDF e i CSV di output finiscono in plot/figures/.main.py: punto di ingresso CLI unificato (--training alterna tra modalità di addestramento e solo-attacco).parameter_parser.py: tutti gli argomenti della riga di comando e i valori predefiniti.extract_last_layer_grad_norm.py: norme L2 per campione del gradiente del classificatore dell'ultimo layer per i sottoinsiemi member e non-member, riutilizzate dalle tabelle in experiment/.Il seguente schema corrisponde al flusso di lavoro previsto dal repository: addestrare con MIA per popolare save/MIA/..., quindi eseguire MIA con --training None.
# Stage 1: train target + shadow and save MIA artifacts
python main.py \
--dataset_name cifar100 \
--net_name resnet18 \
--quantization hawq --a_bit 8 --w_bit 8 \
--attack_method MIA \
--training both \
--num_epochs 50 --trials 3 \
--device cuda:0
# Stage 2: attack-only MIA evaluation (confidence threshold attack only)
python main.py \
--dataset_name cifar100 \
--net_name resnet18 \
--quantization hawq --a_bit 8 --w_bit 8 \
--attack_method MIA \
--compleaknr_attacks confidence \
--training None \
--trials 3 \
--device cuda:0
Per ogni esecuzione dell'attacco, la console stamperà l'avanzamento dalla corrispondente implementazione dell'attacco (ad es., metriche per singolo trial per MIA; le esecuzioni solo-attacco vengono salvate in result/MIA/...).
--compleaknr_attacks controlla la voce MIA solo-attacco:
confidence — esegue solo l'attacco a soglia di confidenza. Consuma solo le posteriori salvate, quindi è veloce e non richiede file del modello.all (il valore predefinito dell'argomento) — esegue tutte e sei le varianti black-box: soglia di confidenza, soglia di entropia, entropia modificata, due attacchi basati sull'addestramento (LR/RF sulle posteriori, e sulle posteriori più l'etichetta), e SAMIA.Nota che le due modalità hanno requisiti diversi. Le prime cinque varianti leggono solo le posteriori salvate, ma SAMIA carica inoltre i modelli target e shadow salvati da save/MIA/.../target/<trial>/model.pth e save/MIA/.../shadow/0/model.pth e li interroga su input perturbati per stimare la sensibilità dell'output. Questo è comunque black-box nel senso che vengono utilizzati solo gli output del modello — nessun gradiente o attivazione interna — ma richiede che tali checkpoint siano presenti, ed è considerevolmente più lento.
Se ometti --compleaknr_attacks, vengono eseguiti tutti e sei. Passa confidence esplicitamente, come sopra, quando vuoi solo il percorso veloce o quando i checkpoint del modello non sono disponibili.