CAM cam_example.py

发布时间 2023-10-08 09:30:36作者: emanlee

Good :

https://blog.csdn.net/qq_46378251/article/details/128773539

https://blog.csdn.net/m0_59286668/article/details/128768117

https://www.jianshu.com/p/87661307c5b2

https://zhuanlan.zhihu.com/p/371296750

https://blog.csdn.net/m0_59286668/article/details/128768117

 

CAM

https://github.com/jacobgil/pytorch-grad-cam

 

Chosing the Target Layer

You need to choose the target layer to compute CAM for. Some common choices are:

  • FasterRCNN: model.backbone
  • Resnet18 and 50: model.layer4[-1]
  • VGG and densenet161: model.features[-1]
  • mnasnet1_0: model.layers[-1]
  • ViT: model.blocks[-1].norm1
  • SwinT: model.layers[-1].blocks[-1].norm1

If you pass a list with several layers, the CAM will be averaged accross them. This can be useful if you're not sure what layer will perform best.

 

 

!git clone https://github.com/frgfm/torch-cam.git
!pip install -e torch-cam/.

 

pip install torchcam

 

os.chdir("/data/pincer/other/Train_Custom_Dataset-main/")
!python torch-cam/scripts/cam_example.py --help

usage: cam_example.py [-h] [--arch ARCH] [--img IMG] [--class-idx CLASS_IDX]
                      [--device DEVICE] [--savefig SAVEFIG] [--method METHOD]
                      [--target TARGET] [--alpha ALPHA] [--rows ROWS]
                      [--noblock]

Saliency Map comparison

optional arguments:
  -h, --help            show this help message and exit
  --arch ARCH           Name of the architecture (default: resnet18)
  --img IMG             The image to extract CAM from (default:
                        https://www.woopets.fr/assets/races/000/066/big-
                        portrait/border-collie.jpg)
  --class-idx CLASS_IDX
                        Index of the class to inspect (default: 232)
  --device DEVICE       Default device to perform computation on (default:
                        None)
  --savefig SAVEFIG     Path to save figure (default: None)
  --method METHOD       CAM method to use (default: None)
  --target TARGET       the target layer (default: None)
  --alpha ALPHA         Transparency of the heatmap (default: 0.5)
  --rows ROWS           Number of rows for the layout (default: 1)
  --noblock             Disables blocking visualization (default: False)

 

 

# 类别-边牧犬
!python torch-cam/scripts/cam_example.py \
        --img test_img/border-collie.jpg \
        --savefig output/B1_border_collie.jpg \
        --arch resnet18 \
        --class-idx 232 \
        --rows 2

/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:209: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
  f"The parameter '{pretrained_param}' is deprecated since 0.13 and may be removed in the future, "
/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.
  warnings.warn(msg)
Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /root/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
100%|██████████████████████████████████████| 44.7M/44.7M [00:02<00:00, 15.6MB/s]
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `fc_layer`, thus set to 'fc'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
Figure(600x400)

 

# 类别-虎斑猫
!python torch-cam/scripts/cam_example.py \
        --img test_img/cat_dog.jpg \
        --savefig output/B2_cat_dog.jpg \
        --arch resnet18 \
        --class-idx 282 \
        --rows 2

/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:209: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
  f"The parameter '{pretrained_param}' is deprecated since 0.13 and may be removed in the future, "
/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.
  warnings.warn(msg)
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `fc_layer`, thus set to 'fc'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.

 

# 类别-边牧犬
!python torch-cam/scripts/cam_example.py \
        --img test_img/cat_dog.jpg \
        --savefig output/B3_cat_dog.jpg \
        --arch resnet18 \
        --class-idx 232 \
        --rows 2

 

/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:209: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
  f"The parameter '{pretrained_param}' is deprecated since 0.13 and may be removed in the future, "
/home/software/anaconda3/envs/tf115/lib/python3.7/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.
  warnings.warn(msg)
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `fc_layer`, thus set to 'fc'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.
WARNING:root:no value was provided for `target_layer`, thus set to 'layer4'.