PyTorch模型训练特征图可视化(TensorboardX)

栏目: Python · 发布时间: 5年前

内容简介:同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流

加入极市 专业CV交流群,与 6000+来自腾讯,华为,百度,北大,清华,中科院 等名企名校视觉开发者互动交流!更有机会与 李开复老师 等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流 点击文末“ 阅读原文 ”立刻申请入群~

极市导读】 Tensorflow有一款非常优秀的可视化工具Tensorboard,而PyTorch自身没有可视化功能,但是我们可以寻找替代品,即TensorBoardX。 本文对TensorBoardX的使用与效果进行了简单的介绍

本文转载自知乎专栏:Keep Learning CV

来源:https://zhuanlan.zhihu.com/p/60753993

已获作者授权,请勿二次转载

0 、前言

  • 本文所有代码解读均基于PyTroch 1.0,Python3;

  • 本文为原创文章,初次完成于2019.03,最后更新于2019.03;

最近复现的一篇论文一直都难以work,上了特征图可视化后一下子就找到了问题所在,所以今天想梳理一下PyTorch里面的特征图可视化。

大家都知道Tensorflow有一款非常优秀的可视化工具Tensorboard,而PyTorch自身没有可视化功能,但是我们可以寻找替代品,即TensorBoardX。安装过程不多介绍,详见下面的参考链接,里面相应有比较丰富的介绍。

https://github.com/tensor-yu/PyTorch_Tutorial

1、Loss可视化

最常见的可视化就是loss曲线作图,这个实现相对比较简单,不多做介绍了

tb_logger.add_scalar('loss_train', loss, curr_step)
PyTorch模型训练特征图可视化(TensorboardX)

2、输入图片和标签的可视化

模型不work,第一个应该检查的就是输入输出有没有没给对,因此我们需要将传递给model的 input 和 label 可视化一下。

传递给网络的图片格式往往是 [B,C,H,W] ,范围[0, 1],数据类型tensor.FloatTensor,但是add_iamge() 能够接受的格式是[C,H,W], 范围[0,1],数据类型tensor.FloatTensor。

一个是三维的,一个是四维的,这很好解决,我们把每个batch的第一张图拿出来就行了:inptu[0]的形状就是[C,H,W],符合输入要求。

tb_logger.add_image('image', input[0].cpu(), curr_step)

tensoroard里面如果出现了猫咪本尊的正确可视化结果,就说明输入图片没问题

PyTorch模型训练特征图可视化(TensorboardX)

如果你在Dataloader里对输入图片做了Normalize,显示会出现问题,出现如下所示的乱码,此时需要通过make_grid()函数做一些处理,函数用法具体可见后面的描述。

PyTorch模型训练特征图可视化(TensorboardX)

3、单通道特征图的可视化

有时候我们需要把网络内部分节点的特征图可视化出来,这时候上面的方法就不能用了,因为特征图的每个像素点上的数值范围不是[0,1],而是可正可负,可大可小,因此需要做一些特殊处理。这里就要用到 torchvision.utils.make_grid( )函数,把输入的特征图做一个归一化,把参数normalize设置为True即可,它能帮我们把数据的输入范围调整至[0, 1]之间

def make_grid(tensor, nrow=8, padding=2,
normalize=False, range=None, scale_each=False, pad_value=0):

更多其他参数的用法参见源码:

https://github.com/pytorch/vision/blob/master/torchvision/utils.py

这里我把三个中间特征图拼在了一块显示:

from torchvision.utils import make_grid

tb_logger.add_image('feature_map', make_grid([feature_map1, feature_map2, fetare_map3], padding=20, normalize=True, scale_each=True, pad_value=1), curr_step)
PyTorch模型训练特征图可视化(TensorboardX)

需要注意的是:

  • make_grid() 输入的是Tensor,而不是numpy.ndarray

  • torchvision.utils.make_grid() 将一组图片绘制到一个窗口,其本质是将一组图片拼接成一张图片

4、多通道特征图的可视化

多通道的特征图的显示和上面的单通道存在一些区别,假设我们从batsh_size=16,channel=20的一个tensor想取出一个多通道特征图可视化,只需要如下操作

feature_map[0].deatch().cpu().unsqueeze(dim=1)

这样就能把一个形状为 [16,20, H, W] 的tesnor取出并转换为 [20, 1, H ,W] 的形状,这与为什么要这么转换,详解第五章节。

完整代码和效果图如下:

tb_logger.add_image('channels', make_grid(feature_map[0].detach().cpu().unsqueeze(dim=1), nrow=5, padding=20, normalize=False, pad_value=1), curr_step)
PyTorch模型训练特征图可视化(TensorboardX)

这里我贴一下原图

PyTorch模型训练特征图可视化(TensorboardX)

可以看到,在多通道特征图中不同的通道对于不同的类别的响应是存在差异的,有的通道对chair响应比较强烈,有的通道对person或者tv响应比较强烈,符合预期。

类似的,table和person也会有差异

PyTorch模型训练特征图可视化(TensorboardX)
PyTorch模型训练特征图可视化(TensorboardX)

5、make_grid()通道数的问题

测试发现,输入 [1, H, W] 的数据没问题,但是[20, H, W] 就不行,[20, 1, H, W] 就可以

这是因为单通道 [1, H, W] 不存在歧义,但是多通道就不行,比如说[3, H, W] 到底是一张三通道的图还是三张单通道的图,存在歧义

因此想要显示一张多通道的特征图可以这么转换:[1, C, H, W] --> [C, 1, H, W],显性地指明tensor形状。

6、总结

特征图可视化在模型复现过程中十分有用,可用于定位模型错误所在,但是在tensor的数据格式、尺寸、维度上存在许多讲究,使用时需要额外小心。

附录一: 相关函数源码

其实想要熟练使用,还是多看看make_grid的源码和样例吧:

https://github.com/pytorch/vision/blob/master/torchvision/utils.py

https://gist.github.com/anonymous/bf16430f7750c023141c562f3e9f2a91

附录二: 网络结构可视化工具

Caffe网络可视化工具:

http://ethereon.github.io/netscope/#/editor

PyTorch等网络的可视化工具:

https://github.com/waleedka/hiddenlayer

大概是这么个效果,相对清晰一些

PyTorch模型训练特征图可视化(TensorboardX)
(完)

点击左下角 阅读原文 ”, 即可申请加入极市 目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群, 更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流, 一起来让思想之光照的更远吧~

PyTorch模型训练特征图可视化(TensorboardX)

△长按关注极市平台

觉得有用麻烦给个在看啦~    PyTorch模型训练特征图可视化(TensorboardX)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Web Designer's Idea Book

The Web Designer's Idea Book

Patrick Mcneil / How / 2008-10-6 / USD 25.00

The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码