DWTNet的数据预处理

预处理思路

如上图所示:

该网络的输入部分为:原始图像(RGB,3个channel) + 语义分割的结果(1个channel,事实上DWTNet对语义分割的结果进行了预处理,下面会详细说明);

网络分为两个部分:前半部分DN,和后半部分WTN。
DN的输出为两个channel的矩阵,即下图所示的dir_map
WTN的输出为一个channel的矩阵,即下图所示的depth_map
网络输出depth_map后,即可以调用watershed_cut函数,生成最终的结果。
最终结果为一个一维矩阵,矩阵中的每个值代表了该像素点所属的类别。

在数据预处理的部分,作者同时生成了一张weight_map,该图表示了每一个类别的权重(与面积有关)。

值得注意的是:作者对语义分割的结果进行了预处理,对每一个类别生成一张Mask,如下图展示的Mask1,mask2,等等;有多少类别就生成多少Mask。所以,其维度为:1024×2048×n,其中,n为图中类别个数。源代码中作者只识别了8个物体类别,所以,Mask维度为1024×2048×8

对语义分割结果进行处理

主要处理代码(代码地址:matlab/batch_generate_cityscapes_PSP_ss.m):


# ...... keys = [13, 11, 12, 17, 18, 14, 15, 16]; # ...... raw_mask = imread(fullfile(input_dir,city, [id, '_gtFine_labelTrainIds.png'])); [height, width] = size(raw_mask); mask = uint8(zeros(height/2, width/2, 8)); for i=1:length(keys) raw_mask_downsampled = uint8(raw_mask == keys(i)); raw_mask_downsampled = downsample(downsample(raw_mask_downsampled,2)', 2)'; mask(:,:,i) = uint8(raw_mask_downsampled); end save(output_file, 'mask'); # ...... ......

作者先进行降采样,将图像缩小(为原来的0.5倍),然后为每一个类别生成一个一维二值矩阵(0表示background;1表示该类别)。

对原始数据集进行处理

主要处理代码:
代码地址:
matlab/batch_generate_cityscapes.m
matlab/generate_GT_cityscapes_unified.m

共生成了以下几个矩阵:
dir_map :1024×2048×2;用于DN训练;
depth_map : 1024×2048×1;用于WTN训练;
weight_map : 1024×2048×1;用于DN训练,损失函数的权重;