神经网络可视化有3D版本了,美到沦陷!(已开源)

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

做计算机视觉,离不开CNN。

可是,卷积、池化、Softmax……究竟长啥样,是怎样相互连接在一起的?

对着代码凭空想象,多少让人有点头皮微凉。于是,有人干脆用Unity给它完整3D可视化了出来。

a9635c1d7da403a4d7afcc2361c50515.gif

还不光是有个架子,训练过程也都呈现得明明白白。

比如随着epoch(迭代次数)的变化,训练过程中各层出现的实时变化。

7b48b245dfe6a11b3aa197ccaf3e3d20.gif b38e9a7bb0f7dd5f09dbfc84d63bc2aa.gif

为了能更清楚地展示网络细节,用户还可以在其中自由地折叠、扩展每个层。

比如将特征图在线性布局和网格布局之间转换。

7bf70f70c89c3398e11fe4ca95370fea.gif

折叠卷积层的特征图输出。

d262208f8dc83a5e8708cb33153f8aca.gif

对全连接层进行边绑定(edge bunding)等等。

c6cfa82b02455cc227193debf05f246b.gif

这样的可视化图像,可以通过加载TensorFlow的检查点来构建。

e20201cff2c27c6d40ed1a12e52e81cf.png

也可以在Unity编辑器中设计。

3fbd4e51da7558985285a9c81b938ca1.png

是不是有点鹅妹子嘤那感觉了?

最近,这个项目又在社交媒体上火了起来。

448c565837f3b201827b44873a160476.png

网友们纷纷表示:

“要是能在训练的时候看到这个过程,再长时间我也能忍啊。”

“求开源。”

cad7cb12fdf38721eff155472b2a1bf9.png

该项目的作者,是一位来自维也纳的3D特效师。

据他介绍,之所以创建这样一个CNN可视化工具,是因为他自己初学神经网络时,经常觉得很难理解卷积层之间是如何相互连接,又如何与不同类型的层连接的。

而该工具的主要功能包括,卷积、最大池化和完全连接层的可视化表示,以及各种能实现更清晰可视化的简化机制等等。

总而言之,就是想让初学者通过最直观的方式,来get到CNN的重点。 

如何用Unity搞出一个3D网络


在正式上手Unity前,作者先在Houdini软件中,搭建了一个可视化的3D网络原型。

ed369c228ba17c84a0ef2b884a97c425.png

也就是说,先给Unity版3D网络提供一个搭建思路,提前准备好实现展示卷积计算的方法、特征图的形状、边绑定的效果等问题。

它的节点编辑器长这样:

97129b12870f18e52d7310a4ad81ce8d.png

然后,就可以在Unity上搭建3D神经网络了。

首先,需要预设好神经网络的“形状”。

由于之前并没有用过Unity,作者先学习了着色器和过程式几何相关的知识。

这里面,作者发现了一些局限性,他采用的是Unity为着色器开发的语言Shaderlab,这个语言无法使用着色变化,只有对语义进行预定义的变量,才能让它在顶点、几何和像素着色器之间传递。

而且,它无法任意分配顶点属性,只有位置、颜色、UV等预定义属性。(可能这也是3D网络无法实时改变颜色的原因之一)

a91ea39cc061a0a2c45e7852b5a29700.png

在研究了一些实例化(instancing)相关的概念后,作者计划采用几何着色器的方法生成神经网络的连线。其中起点和终点被传递到顶点着色器,并直接转发到几何着色器。

这些线,最多可以由120个顶点组成,因为Unity允许的几何着色器能创建的变量的标量浮点数为1024。

设计后的网络形状,大致长这样:

4964814decd5113a17f4fb36cc0d9adf.png

然后,就是从模型的TensorFlow代码中,生成对应的3D神经网络图像。

其中,Tensorflow-native.ckpt格式的文件,需要存储重构模型图所需的数据、二进制的权重读取和激活值,以及特定层的名字。

以Cifar10-greyscale数据集为例,需要编写一个检查点(checkpoint)文件,以及设置随即初始化的权重。

256c708af66bc8db228bf1545862504f.png

在那之后,需要加载这些检查点文件、启动TensorFlow会话,输入训练示例,以便查询每一层的激活函数。

然后编写一个json文件,存储每一层的形状、名称、权重和激活函数,便于读取。然后使用权重值,将颜色数据分配给各层的Unity Mesh。

0d0ac1951343fcee5a57f4cff60271e3.png

最终搞出来的效果,还是不错的:

eec4805615341c4efb61a225915b9f69.gif

作者还录了个开发视频,在文末可以找到地址。

相关研究还不少

事实上,此前已经有不少学者,进行过神经网络可视化的研究。

例如,去年5月,一位中国博士就可视化了卷积神经网络,将每一层的变化都展示得非常清楚,只需要点击对应的神经元,就能看见它的“操作”。

551cb2f6db25f4a3bcd23b2f47d06856.gif

这是用TensorFlow.js加载的一个10层预训练模型,相当于在浏览器上就能跑CNN模型,也可以实时交互,显示神经元的变化。

不过,这还是个2D的项目。

目前,也已经有人像上面那个神经网络模型一样,做出了3D的可视化神经网络:

7528883a020bb7383b58f9c45445910f.gif

这个项目,同样用到了边绑定、光线追踪等技术,与特征提取、微调和归一化相结合,将神经网络可视化。

这项项目希望能借由这些技术,来估计神经网络中不同部分的重要性。

为此,作者将神经网络的每一部分都用不同的颜色来表示,根据节点和节点在网络中的重要性,来预测它们之间的关联性。

4449967322ec382f8ed2aea65a3be987.png

大致的处理过程是这样的:

1a537109a2a1dd589ffb5d18e810f1b9.png

如果对于这类3D神经网络可视化感兴趣,可以在文末找到对应的开源项目地址。

作者介绍


88dcbaa6099180402ab73fef1b74b31a.png

Stefan Sietzen,现居维也纳,此前曾是个3D视觉方向的自由职业者。

目前,他在维也纳工业大学读硕,对视觉计算(visual computing)非常感兴趣,这个3D神经网络,就是他在硕士期间做的项目之一。

开发过程:
https://vimeo.com/stefsietz

已开源的3D神经网络项目:
https://github.com/julrog/nn_vis

 
 

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

2a9575dc0974ba87dc8288cac52b2ea3.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

02ec32be79f4ff46a33447d9cfe98279.jpeg

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。特色混搭ECharts 里的混搭功能很强大,作为 ECharts 的扩展,ECharts-X 自然也需要支持。ECharts-X 能跟 ECharts 中的折柱饼地图等图表混搭,可以有更丰富的可视化效果,同时 ECharts-X 也能够直接使用 ECharts 中的 legend, dataRange 等组件。3D大规模标注ECharts-X 中的标注在效果和使用上都跟 ECharts 中的标注(markPoint)类似,但是由于WebGL的强大能力,对于几万甚至几十万的markPoint也能进行实时的动画和交互3D大规模标柱标柱(markBar)是 ECharts-X 中新定义的一个概念,它是标注(markPoint)的衍生,在三维空间扩展了高度维度表达更丰富的数据信息。3D大规模标线同样 ECharts-X 中的标线在使用上和 ECharts 类似,但是展现效果从 2D 变成 3D 的曲线,支持几万条 markLine 的实时展现,动画以及交互风场,洋流等向量场的可视化NASA之前发布过全球洋流图,用梵高风格的表现使得可视化也充满了艺术感,ECharts-X 也提供了对洋流,风场这种向量场可视化的便捷配置。同样的,也是实时的展现和交互。自定义底图这个功能比较简单但是非常实用,能够配置地球的底图纹理图片,使得展现更有质感,以后也会在 ECharts 的 map 中加入。下面截图是将地图换成木星纹理的效果。 标签:ECharts
引用[1]:CSPNet: A New Backbone that can Enhance Learning Capability of CNN[^1]。引用:yolox在backbone部分引入的focus网络,类似于pooling的策略,但是他没有像maxpooling一样把小的feature丢掉,而是隔一个位置取一个值后堆叠到channel中,因为我们知道通道数越高,表征能力越强。再次我们看一下作者用silu替换了relu,silu的优势在于它是全局可导的,不存在不可导的0点。另外,在backbone部分,我们可以得到的启示就是,怎样将小的conv+bn+silu组成的基本卷积结构构造成不同类型的残差结构。另外,在head部分,作者认为yolov3中的类别和坐标放到一个1∗1卷积得到,会相互影响。因此把它分成两个分支[^2]。 有许多卷积神经网络可视化工具可用于可视化网络结构和特征图。以下是一些常用的工具: 1. TensorBoard:TensorBoard是TensorFlow的官方可视化工具,它可以用于可视化网络结构、训练过程和特征图。通过使用TensorBoard的`tf.summary.FileWriter`和`tf.summary.histogram`等函数,可以将网络结构和特征图保存为TensorBoard可读取的格式,并在浏览器中进行可视化展示。 2. Netron:Netron是一个开源神经网络模型可视化工具,支持多种深度学习框架的模型可视化,包括TensorFlow、PyTorch、Caffe等。它可以直接加载模型文件,并以图形方式显示网络结构,方便用户进行可视化分析。 3. PyTorch的torchsummary和torchviz:PyTorch提供了torchsummary和torchviz两个库,可以用于可视化PyTorch模型的网络结构。torchsummary可以打印出模型的层次结构和参数数量,而torchviz可以生成模型的计算图。 4. Keras的plot_model:Keras提供了plot_model函数,可以将Keras模型保存为图像文件,以可视化网络结构。该函数可以将模型的层次结构、输入和输出形状等信息绘制成图形,方便用户进行可视化分析。 这些工具可以帮助您更好地理解和分析卷积神经网络的结构和特征图。您可以根据自己的需求选择适合的工具进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值