写在前面:
知识来源
yolov5-GradCam可视化
https://github.com/z1069614715/objectdetection_script/tree/master/yolo-gradcam
步骤:
- 安装对应的库
pip install grad-cam
-
下载对应版本的py文件,放在yolov5的目录下
yolov5_heatmap -
参数的解释
def get_params():
params = {
# 这两个改的是权重和对应的参数文件
'weight': 'runs/train/exp/weights/best.pt',
'cfg': 'models/yolov5m.yaml',
# 使用的设备
'device': 'cuda:0',
# 这下面三个可以酌情试一试
'method': 'XGradCAM', # GradCAMPlusPlus, GradCAM, XGradCAM 都能试
'layer': 'model.model[-2]', # 倒数第二层的效果会比较好,倒数第一次也可以试一下
'backward_type': 'class', # class or conf,如果是多类别的话,用class,单类别的用conf
# 下面两个可以不用改变了。
'conf_threshold': 0.6, # 0.6 可以调低一点,太大没有意义
'ratio': 0.02 # 0.02-0.1 选前多少的输出热力图
}
return params
在运行以后这两个数值差一才是正确的。
然后 那个运行的进度条并不需要走到100才是正确的,虽然数值越大,输出的特征热力图就越大
具体的图的示例【这里使用的是yolov5-7.0版本的yolov5s对应的权重】还是挺有效果的。
如果不想要对应的标签框的话,可以注释掉第98行
# cam_image = self.draw_detections(post_boxes[i], self.colors[int(post_result[i, 1:].argmax())], f'{self.model_names[int(post_result[i, 1:].argmax())]} {post_result[i][0]:.2f}', cam_image)
其他的话
个人感觉
总体上讲究一个玄学把,多试几张图片,然后把自己需要的最好的结果贴上去就行了。