- Explain(GradCAM, GradCAM++, EigenCAM, LRP, YOLOLRP)
- Train(ResNet50, VGG19)
- Default, ABN, DomainGeneralization
-
Dtrain ์ค์น ๋ฐฉ๋ฒ
- git clone http://10.10.16.165:6272/vision-ai-lab/kai2021.git
- cd kai2021
- git checkout releases_xai
- visual studio 2019๋ฅผ ํตํ ๋น๋ ํน์ ๋น๋๋ ์์ถํ์ผ์ kai2021/out/ ๊ฒฝ๋ก์ ์์ถํด์ ํ์ฌ ์๋์ ๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ๋ง์ถค(ex: C:\Users\user\kai2021\out\Release)
- C:\Users\user\kai2021\source\python ๊ฒฝ๋ก๋ก ์ด๋ํ์ฌ pip install . ๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ ์์ํฌ ๋ฐ API ์ค์น
-
DarkNet ์ค์น ๋ฐฉ๋ฒ
- git clone http://10.10.18.132:6118/vision-recognition-team/xai_darknet.git
- cd xai_darknet
- cuda 11ํ๊ฒฝ์ ๊ฒฝ์ฐ: git checkout dev_cuda_11x_wt
- cuda 12ํ๊ฒฝ์ ๊ฒฝ์ฐ: git checkout dev_cuda_12x_wt
- pip install . ๋ช ๋ น์ด๋ฅผ ํตํด Darknet ํ๋ ์์ํฌ ๋ฐ API ์ค์น
- project ํ์ผ์ ์ฌ์ฉํ yamlํ์ผ ์์ฑ
- main.py์ ์์ฑํ yaml ํ์ผ ๊ฒฝ๋ก ์ง์
- ์ต์๋จ ๋ฃจํธ์์ main.py ์คํ
-
-
-
- ํ์ต์ ์ํ ๊ฒฝ์ฐ train, attribution์ ์ํ ๊ฒฝ์ฐ explain์ ์ง์ ํฉ๋๋ค.
- ex) "train"
-
- ์ ์ฅ๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) "./heatmap/"
-
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๋ชจ๋ธ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) "./yolov5s.pt"
-
- yolo๋ชจ๋ธ์ ์ ํํ ๊ฒฝ์ฐ yamlํ์ผ ํน์ cfgํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) "./yolov5s.yaml"
-
- ๋ชจ๋ธ์ ๋ง๊ฒ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ฌ์ค์ ํฉ๋๋ค. tuple ํน์ list ํ์ ์ผ๋ก ์ง์ ํฉ๋๋ค.
- ex) [224,224] or (224,224)
-
- ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) "D:/Datasets/ai_fire/train"
-
- ์ฌ์ฉํ ๋ชจ๋ธ์ ์ ํํฉ๋๋ค. (torchvision์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ๋ค์์ ์์ฑํด์ผ ํฉ๋๋ค)
- ex) vgg19, resnet50, efficientnet_b0, yolov5s
-
- ์ด๋ค ํ๋ ์ ์ํฌ๋ฅผ ์ฌ์ฉํ ์ง ์ง์ ํฉ๋๋ค.
- ex) torch, darknet
-
- ํ๋ ์์ํฌ๋ฅผ ๋ค์ด๋ก๋ ํ ์ง ์ ํํฉ๋๋ค.
- ex) torchvision, github, local
- torchvision์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ํด๋์ .cacheํด๋์ ๋ค์ด๋ก๋ ๋ฉ๋๋ค.
- github์ ์ ํํ๊ฒ ๋๋ค๋ฉด ํด๋น ํ๋ ์์ํฌ๋ฅผ .cache ํด๋์ ๋ค์ด๋ก๋ ๋ฉ๋๋ค.
- local์ ์ ํํ๊ฒ ๋ ๊ฒฝ์ฐ repo_or_dir ํ๋ผ๋ฏธํฐ์ ๊ฒฝ๋ก๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ชจ๋ธ์ load ํฉ๋๋ค.
-
- repo ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ง local ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ง ์ ํฉ๋๋ค.
- ๋ด์ฉ ์ถ๊ฐ ํ์
-
- .cache ๊ฒฝ๋ก์ ์ ์ฅํ ์ง, ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก์ ์ ์ฅํ ์ง ์ ํํฉ๋๋ค.
- ex) cache, "์ ์ฅ๋ ๊ฒฝ๋ก"
-
- datasets์ ์์๋ฐ์ ๊ตฌํ๋ dataloader๋ฅผ ์ง์ ํฉ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์์ ์ ๋ฐ์ดํฐ์ ์ ๋ง๊ฒ ์ปค์คํ ํด์ ์ฌ์ฉํฉ๋๋ค.
- ex) CUSTOM, AI_FIRE ๋ฑ
-
-
-
- ์๊ณ ๋ฆฌ์ฆ์ ์ ํํฉ๋๋ค.
- ex) gradcam, eigencam, gradcampp, lrp, lrpyolo ๋ฑ
-
- cam๋ฐฉ์์ผ ๊ฒฝ์ฐ hook์ ๋์์ ์ง์ ํฉ๋๋ค.
- ex) [layer4,'2',relu]
-
- lrp์ ๊ฒฝ์ฐ ์ด๋ค rule์ ์ฌ์ฉํ ์ง ์ง์ ํฉ๋๋ค.
- ex) Epsilon
-
-
-
- ํ์ตํ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) 50
-
- ํ์ต๋ฅ ์ ๋ํ ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) 0.0001
-
- ํ๋ฒ์ ๋ช์ฅ์ฉ ์ฒ๋ฆฌํ ์ง ์ง์ ํฉ๋๋ค.
- ex) 128
-
- optimizer๋ฅผ ์ ํํฉ๋๋ค.
- ex) adam
-
- ์์คํจ์๋ฅผ ์ ํํฉ๋๋ค.
- ex) crossentropyloss
-
- ํ์ต๋ ๋ชจ๋ธ์ n๋ฒ ๊ฐ๊ฒฉ์ผ๋ก ์ ์ฅํฉ๋๋ค.
- ex) 10
-
- ABN, DG ๋ฑ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ํ์ํ ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํฉ๋๋ค.
- ํ์ ๋ชจ๋์๋ algorithm, transefer_weights, gpu_count ๊ฐ ์์ต๋๋ค.
- algorithm์ abn, default, domaingeneralization ์ ํํฉ๋๋ค.
- ex) abn
- trainsfer_weights๋ ์ ์ดํ์ต ์ํฌ ๋ชจ๋ธ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) "./checkpoint/default_resnet50_10ep.pt"
- gpu_count ๋ ํ์ต์ ์ฌ์ฉ๋ gpu์ ์ซ์๋ฅผ ์ง์ ํฉ๋๋ค.
- ํ์ฌ๋ 0๋ฒ๋ถํฐ n๋ฒ๊น์ง ์ซ์๋ฅผ ์ง์ ํฉ๋๋ค.
- ex) 3์ผ ๊ฒฝ์ฐ 0,1,2 gpu ์ฌ์ฉ
-
- yaml ํ์ผ์ ๊ฒฝ์ฐ main.py ์คํ
- json์ ๊ฒฝ์ฐ main_multi.py ์คํ
-
head: project_type: 'explain' save_path: "./heatmap/" weight_path: "./resnet50-0676ba61.pth" cfg_path: ~ data_path: "./data" data_resize: [224,224] model_name: resnet50 framework: torch source: torchvision repo_or_dir: ~ cache_or_local: cache data_type: CUSTOM explain: algorithm: GradCAM model_algorithm: Default target_layer: [layer4,'2',relu] -
head: project_type: 'train' save_path: "./checkpoint" weight_path: ~ # weight_path: "./resnet50-0676ba61.pth" cfg_path: ~ data_resize: [224,224] data_path: "D:/Datasets/ai_fire/train_lite" model_name: resnet50 framework: torch source: torchvision repo_or_dir: ~ cache_or_local: cache data_type: AI_FIRE train: epoch: 10 learning_rate: 0.0001 batch_size: 128 optimizer: 'adam' loss_function: 'CrossEntropyLoss' save_step: 1 improvement_algorithm: { algorithm: Default, transfer_weights: ~, gpu_count: 1 } -
- explain: gradcam, lime, guidedgradcam
- evaluation: AbPC, Sensitivity
{ "job_infos": [ { "job_type": "evaluation", "model_type": "xai", "inputs": [ { "model_info": { "framework": "torch", "weight_path": "D:/xai_refactoring/resnet50-0676ba61.pth", "cfg_path": null, "num_classes": 1000, "repo_or_dir": "C:/Users/jaehyeok/.cache/torch/hub/pytorch_vision_v0.11.0", "model_algorithm": "default", "model_name": "resnet50" }, "data_info": { "data_path": "D:/xai_refactoring/data", "data_type": "CUSTOM", "resize": [224,224] }, "type_config": { "algorithm_name": ["gradcam","lime","guidedgradcam"], "metric": ["ABPC", "sensitivity"], "gradcam": {"model_algorithm": "Default", "target_layer": ["layer4","2","relu"]}, "lime": {"model_algorithm": "Default", "segments": {"algo_type": "slic", "n_segments": 40, "compactnes": 2, "sigma": 3}, "seed": 415, "num_samples": 40, "num_features": 10, "positive_only": true, "hide_rest": true}, "guidedgradcam": {"model_algorithm": "Default", "target_layer": ["layer4","2","relu"]} } } ], "outputs": [ { "volume": "D:/", "file_path": "save_test" } ] } ] }