mmdetection特征图可视化!

本文详细介绍了如何在MMDetection框架中实现特征图的可视化,包括创建工具文件夹中的脚本,替换配置文件中的代码,以及训练模型后查看生成的feature_map文件夹。
摘要由CSDN通过智能技术生成

1、第一步

在tools文件夹中创建feature_visualization.py文件,并把一下内容复制进来

import cv2
import mmcv
import numpy as np
import os
import torch
import matplotlib.pyplot as plt


def featuremap_2_heatmap(feature_map):
    assert isinstance(feature_map, torch.Tensor)
    feature_map = feature_map.detach()
    heatmap = feature_map[:,0,:,:]*0
    heatmaps = []
    for c in range(feature_map.shape[1]):
        heatmap+=feature_map[:,c,:,:]
    heatmap = heatmap.cpu().numpy()
    heatmap = np.mean(heatmap, axis=0)

    heatmap = np.maximum(heatmap, 0)
    heatmap /= np.max(heatmap)
    heatmaps.append(heatmap)

    return heatmaps


def draw_feature_map(features,save_dir = 'feature_map',name = None,i=0):
    img = mmcv.imread("../demo/IP00400004900270.jpg")
    if isinstance(features,torch.Tensor):
        for heat_maps in features:
            heat_maps=heat_maps.unsqueeze(0)
            heatmaps = featuremap_2_heatmap(heat_maps)
            # 这里的h,w指的是你想要把特征图resize成多大的尺寸
            heatmap = cv2.resize(heatmap, (256, 256))
            for heatmap in heatmaps:
                heatmap = np.uint8(255 * heatmap)
                # 下面这行将热力图转换为RGB格式 ,如果注释掉就是灰度图
                heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)
                superimposed_img = heatmap
                plt.imshow(superimposed_img,cmap='gray')
                plt.show()
    else:
        for featuremap in features:
            heatmaps = featuremap_2_heatmap(featuremap)
            i=i+1
            for heatmap in heatmaps:
                heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0]))  # 将热力图的大小调整为与原始图像相同
                heatmap = np.uint8(255 * heatmap)  # 将热力图转换为RGB格式
                heatmap = cv2.applyColorMap(heatmap,cv2.COLORMAP_JET)
                superimposed_img = heatmap * 0.5 + img*0.3 # 这里的0.4是热力图强度因子
                # superimposed_img=heatmap
                plt.imshow(superimposed_img)
                plt.show()
                #plt.savefig(superimposed_img)
                #下面这些是对特征图进行保存,使用时取消注释
                # cv2.imshow("1",superimposed_img)
                # cv2.waitKey(0)
                if not os.path.exists(save_dir):
                    os.makedirs(save_dir)
                print(os.path.join(save_dir,"tood+pafpn" +str(i)+'.png'))
                cv2.imwrite(os.path.join(save_dir,"tood+pafpn" +str(i)+'.png'), superimposed_img)
                # cv2.destroyAllWindows()

2、第二步:找到你的配置文件,所用到的模型

在这里插入图片描述
比如VFnet,进入SingleStageDetector文件中,找到extract_feat()函数,直接搜extract_feat
在这里插入图片描述

3、将代码注释掉,替换成下面这个代码

    def extract_feat(self, img):
        """Directly extract features from the backbone+neck."""
        x = self.backbone(img)
        # 可视化resnet产生的特征
        from tools.feature_visualization import draw_feature_map
        draw_feature_map(x)
        if self.with_neck:
            x = self.neck(x)
            # 可视化FPN产生的特征
            from tools.feature_visualization import draw_feature_map
            draw_feature_map(x)
        return x

在这里插入图片描述

4、训练你的模型,就能看到tools文件夹多出来feature_map文件夹,此文件夹就包含了你的可视化的特征图

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
mmdetection是一个基于PyTorch的目标检测工具包,它提供了丰富的数据增强方式来增加训练数据的多样性。要可视化mmdetection中的数据增强效果,你可以按照以下步骤进行操作: 1. 在mmdetection的配置文件中找到数据增强的部分。通常在`configs`文件夹下的对应任务的配置文件中可以找到,比如`configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py`。 2. 在配置文件中找到`train_pipeline`,这是用于训练时的数据增强操作序列。其中包含了一系列的数据增强操作,比如随机裁剪、随机翻转、颜色变换等。 3. 在训练代码中找到数据加载部分,一般在`tools/train.py`文件中。在数据加载部分,你可以找到用于加载训练数据的代码。 4. 在数据加载代码中,找到`transforms.Compose`函数,这是用于将一系列数据增强操作组合成一个可执行的函数。 5. 你可以在加载数据之前,将数据增强操作传入`transforms.Compose`函数中。然后,在训练过程中,你可以使用`imshow`等函数来将经过数据增强后的可视化出来。 下面是一个示例代码片段,展示了如何在mmdetection可视化数据增强效果: ```python from mmdet.datasets.pipelines import Compose from mmdet.datasets.builder import build_dataset # 加载配置文件 cfg = mmcv.Config.fromfile('configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py') # 构建数据集对象 dataset = build_dataset(cfg.data.train) # 获取训练数据增强操作序列 transforms = dataset.pipeline.transforms # 创建Compose对象 transform = Compose(transforms) # 随机选择一张片进行可视化 img, _ = dataset[0] transformed_img = transform(img, None) # 使用imshow函数可视化原始像和经过数据增强后的像 import matplotlib.pyplot as plt plt.subplot(1, 2, 1) plt.imshow(img) plt.title('Original Image') plt.subplot(1, 2, 2) plt.imshow(transformed_img) plt.title('Transformed Image') plt.show() ``` 你可以根据自己的需求修改代码中的路径和参数,以适应你的数据集和配置文件。这样,你就可以在mmdetection可视化数据增强效果了。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹万1w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值