天天看點

多模态模型中關于雷達特征圖與融合特征圖的可視化(基于CRFNet)效果圖特征輸出模型注冊提取資料提取中間特征并批量可視化池化與卷積對雷達濾波的影響

效果圖

  • 資料根據我寫的腳本,預設儲存在主路徑下的image_featuremap\radar_featuremap檔案夾下:
    多模态模型中關于雷達特征圖與融合特征圖的可視化(基于CRFNet)效果圖特征輸出模型注冊提取資料提取中間特征并批量可視化池化與卷積對雷達濾波的影響
    多模态模型中關于雷達特征圖與融合特征圖的可視化(基于CRFNet)效果圖特征輸出模型注冊提取資料提取中間特征并批量可視化池化與卷積對雷達濾波的影響

融合特征圖

多模态模型中關于雷達特征圖與融合特征圖的可視化(基于CRFNet)效果圖特征輸出模型注冊提取資料提取中間特征并批量可視化池化與卷積對雷達濾波的影響

雷達特征圖

特征輸出模型注冊

  • 在主檔案夾下建立data_visualization.py檔案:
#!/usr/bin/env python3
import argparse
import os
import sys
import keras
import keras.preprocessing.image
import tensorflow.compat.v1 as tf 
tf.disable_v2_behavior()
from keras.models import Model
import keras.preprocessing.image
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import cv2
import progressbar

def main():
    FILE_DIRECTORY = os.path.dirname(os.path.abspath(__file__))
    parser = argparse.ArgumentParser()
    parser.add_argument('--config', type=str, default=os.path.join(FILE_DIRECTORY, "configs/temp.cfg"))
    parser.add_argument('--model', type=str, default="./saved_models/convwith10epochs.h5")  # convwith10epochs.h5
    parser.add_argument('--st', type=float, default=0.3)
    parser.add_argument('--render', default=False, action='store_true')
    parser.add_argument('--eval_from_detection_pickle', default=False, action='store_true')
    parser.add_argument('--gpu', type=str, default='0')
    args = parser.parse_args()
    cfg = get_config(args.config)
    
    model_name = args.config.split('/')[-1]
    model_name = model_name.split('.')[0]
    cfg.model_name = model_name
	# 傳回backbone,也就是預設的VGG網絡
    backbone = architectures.backbone(cfg.network)
    # 加載訓練好的模型參數
    model = keras.models.load_model(args.model, custom_objects=backbone.custom_objects)
    # 定義需要可視化的模型層
    radar_layers = [model.get_layer(name).output for name in ['rad_block1_pool', 'rad_block2_pool', 'rad_block3_pool','rad_block4_pool','rad_block5_pool','rad_block6_pool','rad_block7_pool']]
    vision_layers = [model.get_layer(name).output for name in ['block1_conv2', 'block2_conv2', 'block3_conv2', 'block4_conv2', 'block5_conv2']]
           
  • 定義特征輸出模型:我定義了新的model,把原來的資料作為輸入,将模型需要可視化的層作為輸出,友善後面可視化
# 定義雷達特征模型
    layer_model = Model(inputs=model.input, outputs=radar_layers)
    # 圖像特征模型
    image_layer_model = Model(inputs = model.input, outputs = vision_layers)
           

提取資料

  • 這裡根據generator這個資料加載器,周遊并提取所有的資料到inputs清單中,友善後面輸入
generators = create_generators(cfg, backbone)
    test_generator = generators[2]
    inputs = []
    # load radar data
    for i in progressbar.progressbar(range(test_generator.size())):
        input, _ = test_generator.compute_input_output([i])
        inputs.append(input)
    print(len(inputs), inputs[0].shape)
           

提取中間特征并批量可視化

  • 融合特征層的可視化函數
for i in range(len(inputs)):
        img_idx = i
        data = inputs[img_idx]
        # r為模型傳回的某張圖檔的中間特征圖,r.shape = [bs,h,w,c]
        feature_map = image_layer_model.predict(data) 
        # 特征圖的channel數
        source_img = np.mean(np.squeeze(data)[:,:,:3],axis=2)
        plt.subplot(3,3,1)
        plt.imshow(source_img)
        for i in progressbar.progressbar(range(len(feature_map))):
            layer_map = np.squeeze(feature_map[i])
            plt.subplot(3,3,i+2)
            plt.imshow(np.mean(layer_map, axis=2))
        plt.title('{}'.format(img_idx))
        if not os.path.exists(os.path.join(FILE_DIRECTORY, 'image_featuremap')):
            os.mkdir(os.path.join(FILE_DIRECTORY, 'image_featuremap'))
        plt.savefig(os.path.join(FILE_DIRECTORY, 'image_featuremap\\{}'.format(img_idx)))
           
  • 雷達特征層的可視化函數
for i in range(len(inputs)):
        img_idx = i
        data = inputs[img_idx]
        # r為模型傳回的某張圖檔的中間特征圖,r.shape = [bs,h,w,c]
        feature_map = layer_model.predict(data) 
        # 特征圖的channel數
        source_img = np.mean(np.squeeze(data)[:,:,:3],axis=2)
        plt.subplot(3,3,1)
        plt.imshow(source_img)
        for i in progressbar.progressbar(range(len(feature_map))):
            layer_map = np.squeeze(feature_map[i])
            plt.subplot(3,3,i+2)
            plt.imshow(np.mean(layer_map, axis=2))
        plt.title('{}'.format(img_idx))
        if not os.path.exists(os.path.join(FILE_DIRECTORY, 'radar_featuremap')):
            os.mkdir(os.path.join(FILE_DIRECTORY, 'radar_featuremap'))
        plt.savefig(os.path.join(FILE_DIRECTORY, 'radar_featuremap\\{}'.format(img_idx)))
           

池化與卷積對雷達濾波的影響

多模态模型中關于雷達特征圖與融合特征圖的可視化(基于CRFNet)效果圖特征輸出模型注冊提取資料提取中間特征并批量可視化池化與卷積對雷達濾波的影響
  • 可以看出,我将雷達的pooling對雷達處理的方式改編為卷積,在特征圖可視化中,卷積(左邊)能夠對圖中的雜點進行濾波,集中在車輛這種前景物體上。

繼續閱讀