Tensorboard、TensorboardX保存多通道图像(1或3通道除外)

注意,Tensorboard、TensorboardX本身可以直接存储1通道和3通道的图像,如果不是1或3通道才需要本方法把所有的通道分成1通道

Python环境安装Tensorboard、TensorboardX

通过以下命令安装

pip install tensorboard
pip install tensorboardX

基础使用方法可以查看下面的链接

我之前写过的基础教程:如何利用Tensorboard以可视化的方式查看训练的“过程资产”(目标函数、结果、AUC等等)

具体步骤:将多通道图像存入Events(日志文件)

1 引入第三方库

from tensorboardX import SummaryWriter
import datetime # 是为了让保存结果按照日期时间命名,方便区分每次运行的结果

2 设置保存路径

也就是结果保存的路径,就是那个结果文件。

# 路径你可以写个现在不存在的,summary会自己创建的。
save_path = './logdir/' + datetime.datetime.now().strftime("%Y%m%dT%H%M%S") + '/' #注意,时间部分不要改成用“:”相连的方式,因为格式不合适。
writer = SummaryWriter(save_path);

3 处理 Batch 和 Channel

以下代码只是个样例,只保留了重要的部分。

while iteration<total_iteration:
        # ****************
        # 这里省略一些代码。
        # ****************
        for i, images in enumerate(train_loader):
            # ****************
        	# 这里省略一些代码。
        	# ****************
            output = model(images)
            # output的size:[batch, channel, height, width]如下所示
            # torch.Size([20, 60, 128, 128])
            # 
            iteration = iteration+1
            if iteration % 20 == 0:
                writer.add_scalar('Loss/train_loss', losses.avg, iteration);
            # ****************
        	# 这里省略一些代码。
        	# ****************
        	
            # 考虑到图片的话,文件比较大的,可以多几个迭代保存一次,只是查看结果用,不在意的话也没有关系。
            if iteration % 5000 == 0 or iteration == 1000:
                batch_size, channels, height, width = output.shape
                # 先按照Batch进行循环,batch=0,batch=1.....一直循环。
                for batch_idx in range(batch_size):
                	# 再对每个通道进行循环,把该batch的所有通道保存。
                    for channel_idx in range(channels):
                        output_view = output[batch_idx, channel_idx, :, :]
                        output_view = output_view.unsqueeze(0)
                        writer.add_image(f'OUTPUT_Batch_{batch_idx}/Channel_{channel_idx}', output_view, iteration)
                # 下面的代码可以对比该图像不同通道之间的差异
                for batch_idx in range(batch_size):
                    for channel_idx in range(channels - 1):
                        img1 = output[batch_idx, channel_idx, :, :]
                        img2 = output[batch_idx, channel_idx + 1, :, :]
                        error_img = torch.abs(img1 - img2)
                        error_img = error_img.unsqueeze(0)
                        writer.add_image(f'OUTPUT_Batch_{batch_idx}/Error_Channel_{channel_idx}_{channel_idx + 1}', error_img, iteration)
                
            
    # 不再存入的时候,也就是整个代码文件的最后一行,可以关闭了。
    writer.close()

结果展示

最终结果就会像下图一样,每个Batch都会保存图像的所有通道。
整体结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值