9.6.3 運行測試代碼
9.6.3運行測試代碼
測試代碼主要包含三個目錄,分別為:
sample_attacks,包含無定向攻擊演算法FGSM和隨機添加雜訊。
sample_targeted_attacks,包含基於單步和基於迭代優化的定向攻擊演算法。
sample_defenses,包含防禦演算法,有原始的Inception模型base_inception_model、基於FGSM對抗訓練過的Inception模型adv_inception_v3以及通過集成對抗訓練的ens_adv_inception_resnet_v2。
運行腳本針對DEV生成對抗樣本,並執行防禦演算法。
shrun_attacks_and_defenses.sh
運行測試腳本后,會創建臨時目錄,並從sample_attacks目錄下載入無定向攻擊演算法,從sample_targeted_attacks載入定向攻擊演算法,從sample_defenses載入防禦演算法。
Preparingworkingdirectory:/tmp/tmp.S2wNSF5gpj
Runningattacksanddefenses
Foundattacks:['fgsm','noop','random_noise']
Foundtagetedattacks:['iter_target_class','step_target_class']
Founddefenses:['base_inception_model','ens_adv_inception_resnet_v2',
'adv_inception_v3']
之後會通過Docker環境載入對應的攻擊演算法和防禦演算法以及DEV數據集。默認情況下僅使用CPU資源,如果需要使用GPU資源,需要修改run_attacks_and_defenses.sh文件,增加gpu參數。
python"${SCRIPT_DIR}/run_attacks_and_defenses.py"
--attacks_dir="${WORKING_DIR}/attacks"
--targeted_attacks_dir="${WORKING_DIR}/targeted_attacks"
--defenses_dir="${WORKING_DIR}/defenses"
--dataset_dir="${WORKING_DIR}/dataset"
--intermediate_results_dir="${WORKING_DIR}/intermediate_results"
--dataset_metadata="${WORKING_DIR}/dataset.csv"
--output_dir="${WORKING_DIR}/output_dir"
--epsilon="${MAX_EPSILON}"
--save_all_classification
--gpu
需要特別指出的是,該環境使用metadata.json文件描述需要使用的Docker鏡像,以adv_inception_v3防禦演算法對應的metadata.json文件為例。
cleverhans/examples/nips17_adversarial_competition/dev_toolkit/sample_
defenses/adv_inception_v3/metadata.json
文件指定了CPU和GPU環境使用的Docker鏡像。
{
"type":"defense",
"container":"gcr.io/tensorflow/tensorflow:1.1.0",
"container_gpu":"gcr.io/tensorflow/tensorflow:1.1.0-gpu",
"entry_point":"run_defense.sh"
}
在國內下載「gcr.io」域名下的鏡像經常失敗,可以修改為:
{
"type":"defense",
"container":"tensorflow/tensorflow:1.1.0",
"container_gpu":"tensorflow/tensorflow:1.1.0-gpu",
"entry_point":"run_defense.sh"
}
運行完測試代碼后,結果保存在臨時目錄下,每次運行的臨時目錄都會變化。
Outputissavedindirectory'/tmp/tmp.S2wNSF5gpj/output_dir'
查看該目錄,結果保存為若干CSV文件。
accuracy_on_attacks.csv
all_classification.csv
defense_ranking.csv
targeted_attack_ranking.csv
accuracy_on_targeted_attacks.csv
attack_ranking.csv
hit_target_class.csv
其中比較重要的幾個文件內容如下:
all_classification.csv,記錄各個模型對各個攻擊演算法生成的對抗樣本的識別結果(見圖9-15)。
圖9-15all_classification.csv內容示例
accuracy_on_attacks.csv,記錄各個無定向攻擊演算法生成的對抗樣本被各個模型正確識別的個數(見圖9-16)。
圖9-16accuracy_on_attacks.csv內容示例
attack_ranking.csv,記錄各個無定向攻擊演算法的得分(見圖9-17)。
圖9-17attack_ranking.csv內容示例
defense_ranking.csv,記錄各個對抗演算法的得分(見圖9-18)。
圖9-18defense_ranking.csv內容示例
如圖9-19所示,在Kaggle上也可以直接下載對應的測試數據。下載網址為:
https://www.kaggle.com/google-brain/nips-2017-adversarial-learning-development-set
圖9-19Kaggle上的對抗樣本測試數據集
其中images.zip包含原始圖像,如圖9-20所示,images.csv包含一系列圖片相關數據,其中比較重要的幾個欄位含義如下:
ImageId,圖像的id。
TrueLabel,真實的分類標籤值。
TargetClass,定向攻擊對應的目標標籤值
OriginalLandingURL,下載該圖片對應的URL。
圖9-20images.csv各欄位含義