1.配置相关环境,这里就不过赘述了
2.导入以下代码
3.主要参数修改如下:
weight: 'xxxxxx', 训练出来的权重文件路径 cfg: 'xxxxxx', 训练权重对应的yaml配置文件 device: 'cuda:0', 代表使用一张显卡 method: 'GradCAM', GradCAMPlusPlus, GradCAM, XGradCAM , 使用的热力图库文件不同的效果不一样可以多尝试 layer: 'model.model[9]', 对应网络结构中的某某层 backward_type': 'all', class, box, all conf_threshold': 0.0000001, (我这里设置的很低,可以自行修改) # 0.6 # 置信度阈值,有的时候你的进度条到一半就停止了就是因为没有高于此值的了 ratio: 0.02 # 0.02-0.1
最底下切换检测图片的路径 和保存文件夹的位置
4.单击运行即可
目前应该只适用于YOLOv8 其他系列运行此代码可能会报错
import warnings
warnings.filterwarnings('ignore')
warnings.simplefilter('ignore')
import torch, yaml, cv2, os, shutil
import numpy as np
np.random.seed(0)
import matplotlib.pyplot as plt
from tqdm import trange
from PIL import Image
from ultralytics.nn.tasks import DetectionModel as Model
from ultralytics.utils.torch_utils import intersect_dicts
from ultralytics.utils.ops import xywh2xyxy
from pytorch_grad_cam import GradCAMPlusPlus, GradCAM, XGradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image
from pytorch_grad_cam.activations_and_gradients import ActivationsAndGradients
def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
# Resize and pad image while meeting stride-multiple constraints
shape = im.shape[:2] # current shape [height, width]
if isinstance(new_shape, int):
new_shape = (new_shape, new_shape)
# Scale ratio (new / old)
r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
if not scaleup: # only scale down, do not scale up (for better val mAP)
r = min(r, 1.0)