前言 本文给大家分享一份我用的特征图可视化代码。
欢迎关注公众号
写在前面的话
特征图可视化是很多论文所需要做的一份工作,其作用可以是用于证明方法的有效性,也可以是用来增加工作量,给论文凑字数。
具体来说就是可视化两个图,使用了新方法的和使用之前的,对比有什么区别,然后看图写论文说明新方法体现的作用。
吐槽一句,有时候这个图 论文作者自己都不一定能看不懂,虽然确实可视化的图有些改变,但并不懂这个改变说明了什么,反正就吹牛,强行往自己新方法编的故事上扯,就像小学一年级的作文题--看图写作文。
之前知乎上有一个很热门的话题,如果我在baseline上做了一点小小的改进,却有很大的效果,这能写论文吗?
这种情况最大的问题就在于要如何写七页以上,那一点点的改进可能写完思路,公式推理,画图等内容才花了不到一页,剩下的内容如何搞?可视化特征图!!!
这一点可以在我看过的甚多论文上有所体现,反正我是没看明白论文给的可视化图,作者却能扯那么多道道。这应该就是用来增加论文字数和增加工作量的。
总之一句话,可视化特征图是很重要的工作,最好要会。
初始化配置
这部分先完成加载数据,修改网络,定义网络,加载预训练模型。
加载数据并预处理
这里只加载一张图片,就不用通过classdataset了,因为classdataset是针对大量数据的,生成一个迭代器一批一批地将图片送给网络。但我们仍然要完成classdataset中数据预处理的部分。
数据预处理所必须要有的操作是调整大小,转化为Tensor格式,归一化。至于其它数据增强或预处理的操作,自己按需添加。
这里由于只加载一张图片,因此后面要使用torch.unsqueeze将三维张量变成四维。
修改网络
假如你要可视化某一层的特征图,则需要将该层的特征图返回出来,因此需要先修改网络中的forward函数。具体修改方式如下所示。
定义网络并加载预训练模型
这部分需要说明的是最后一行,要将网络设置为推理模式。
可视化特征图
这部分主要是将特征图的某一通道转化为一张图来可视化。
这里一行一行来解释。
1. 参数img_batch是从网络中的某一层传回来的特征图,BI是双线性插值的函数,自定义的,下面会讲。
2. 由于只可视化了一张图片,因此img_batch是四维的,且batchsize维为1。第三行将它从GPU上弄到CPU上,并变成numpy格式。
3. 剩下部分主要完成将每个通道变成一张图,以及将所有通道每个元素对应位置相加,并保存。
双线性插值
由于经过多次网络降采样,后面层的特征图往往变得只有7x7,16x16大小。可视化后特别小,因此需要将它上采样,这里采样的方式是双线性插值。因此,这里给一份双线性插值的代码。
main函数流程
上面介绍了各个部分的代码,下面就是整体流程。比较简单。
可视化效果图
欢迎关注公众号
在公众号中回复关键字“入门指南”可获取计算机视觉入门资料。
CV技术指南创建了一个交流氛围很不错的群,除了太偏僻的问题,几乎有问必答。关注公众号添加编辑的微信号可邀请加交流群。
其它文章