360度无死角、近距离看「CNN」训练,是种什么体验?网友:美得不真实
萧箫 鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI
做计算机视觉,离不开CNN。
可是,卷积、池化、Softmax……究竟长啥样,是怎样相互连接在一起的?
对着代码凭空想象,多少让人有点头皮微凉。于是,有人干脆用Unity给它完整3D可视化了出来。
还不光是有个架子,训练过程也都呈现得明明白白。
比如随着epoch(迭代次数)的变化,训练过程中各层出现的实时变化。
为了能更清楚地展示网络细节,用户还可以在其中自由地折叠、扩展每个层。
比如将特征图在线性布局和网格布局之间转换。
折叠卷积层的特征图输出。
对全连接层进行边绑定(edge bunding)等等。
这样的可视化图像,可以通过加载TensorFlow的检查点来构建。
也可以在Unity编辑器中设计。
是不是有点鹅妹子嘤那感觉了?
最近,这个项目又在社交媒体上火了起来。
网友们纷纷表示:
“要是能在训练的时候看到这个过程,再长时间我也能忍啊。”
“求开源。”
该项目的作者,是一位来自维也纳的3D特效师。
据他介绍,之所以创建这样一个CNN可视化工具,是因为他自己初学神经网络时,经常觉得很难理解卷积层之间是如何相互连接,又如何与不同类型的层连接的。
而该工具的主要功能包括,卷积、最大池化和完全连接层的可视化表示,以及各种能实现更清晰可视化的简化机制等等。
总而言之,就是想让初学者通过最直观的方式,来get到CNN的重点。
如何用Unity搞出一个3D网络
在正式上手Unity前,作者先在Houdini软件中,搭建了一个可视化的3D网络原型。
也就是说,先给Unity版3D网络提供一个搭建思路,提前准备好实现展示卷积计算的方法、特征图的形状、边绑定的效果等问题。
它的节点编辑器长这样:
然后,就可以在Unity上搭建3D神经网络了。
首先,需要预设好神经网络的“形状”。
由于之前并没有用过Unity,作者先学习了着色器和过程式几何相关的知识。
这里面,作者发现了一些局限性,他采用的是Unity为着色器开发的语言Shaderlab,这个语言无法使用着色变化,只有对语义进行预定义的变量,才能让它在顶点、几何和像素着色器之间传递。
而且,它无法任意分配顶点属性,只有位置、颜色、UV等预定义属性。(可能这也是3D网络无法实时改变颜色的原因之一)
在研究了一些实例化(instancing)相关的概念后,作者计划采用几何着色器的方法生成神经网络的连线。其中起点和终点被传递到顶点着色器,并直接转发到几何着色器。
这些线,最多可以由120个顶点组成,因为Unity允许的几何着色器能创建的变量的标量浮点数为1024。
设计后的网络形状,大致长这样:
然后,就是从模型的TensorFlow代码中,生成对应的3D神经网络图像。
其中,Tensorflow-native.ckpt格式的文件,需要存储重构模型图所需的数据、二进制的权重读取和激活值,以及特定层的名字。
以Cifar10-greyscale数据集为例,需要编写一个检查点(checkpoint)文件,以及设置随即初始化的权重。
在那之后,需要加载这些检查点文件、启动TensorFlow会话,输入训练示例,以便查询每一层的激活函数。
然后编写一个json文件,存储每一层的形状、名称、权重和激活函数,便于读取。然后使用权重值,将颜色数据分配给各层的Unity Mesh。
最终搞出来的效果,还是不错的:
作者还录了个开发视频,在文末可以找到地址。
相关研究还不少
事实上,此前已经有不少学者,进行过神经网络可视化的研究。
例如,去年5月,一位中国博士就可视化了卷积神经网络,将每一层的变化都展示得非常清楚,只需要点击对应的神经元,就能看见它的“操作”。
这是用TensorFlow.js加载的一个10层预训练模型,相当于在浏览器上就能跑CNN模型,也可以实时交互,显示神经元的变化。
不过,这还是个2D的项目。
目前,也已经有人像上面那个神经网络模型一样,做出了3D的可视化神经网络:
这个项目,同样用到了边绑定、光线追踪等技术,与特征提取、微调和归一化相结合,将神经网络可视化。
这项项目希望能借由这些技术,来估计神经网络中不同部分的重要性。
为此,作者将神经网络的每一部分都用不同的颜色来表示,根据节点和节点在网络中的重要性,来预测它们之间的关联性。
大致的处理过程是这样的:
如果对于这类3D神经网络可视化感兴趣,可以在文末找到对应的开源项目地址。
作者介绍
Stefan Sietzen,现居维也纳,此前曾是个3D视觉方向的自由职业者。
目前,他在维也纳工业大学读硕,对视觉计算(visual computing)非常感兴趣,这个3D神经网络,就是他在硕士期间做的项目之一。
开发过程:
https://vimeo.com/stefsietz
已开源的3D神经网络项目:
https://github.com/julrog/nn_vis
参考链接:
https://www.reddit.com/r/MachineLearning/comments/leq2kf/d_convolution_neural_network_visualization_made/
https://mp.weixin.qq.com/s/tmx59J75wuRii4RuOT8TTg
https://vimeo.com/stefsietz
http://portfolio.stefansietzen.at/
http://visuality.at/vis2/detail.html
— 完 —
本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。
加入AI社群,拓展你的AI行业人脉
量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展。
现在加入,还可参与2.9-2.11社群内抽奖哦,扫码添加小助手入群▽
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见~
360度无死角、近距离看「CNN」训练,是种什么体验?网友:美得不真实相关推荐
- ACSI: 360度无死角测量顾客满意度
除了CSAT.NPS .CES这三种指标之外,还有没有考量更周全的顾客满意度指数模型,能帮助企业360度无死角全方位测量其顾客的满意度指数? 答案:有.那就是美国顾客满意度指数ACSI. ACSI是什 ...
- 一种360度无死角开源的BMS电池保护板
一种360度无死角开源的BMS电池保护板 感谢Danny Bokma和Jonathan French的无私贡献. 这款全开源的BMS电池保护板名叫DieBieMS. DieBieMS电池保护板主要特性 ...
- 继LSTM之父用世界模型来模拟2D赛车后,谷歌又推出全新世界模型助力导航:360度无死角,就问你怕了没?...
来源:AI科技评论本文约3400字,建议阅读10分钟 今年2月,Google AI 也用世界模型,在 Atari 游戏中实现了达到人类水平的表现. 近年来,世界模型(World Model)在机器人. ...
- 图片360度无死角自由旋转
前言 图片360度任意旋转, 一.设计思路 1.确定中心和起始点:当鼠标点击旋转图标时,中心点为左边图片中心,起始点为旋转图标中心: 2.确定结束点:当鼠标移动时,鼠标的每一次变换都会更新结束点的坐标 ...
- 阿里巴巴前架构师360度无死角剖析微服务
微服务是当前软件架构领域非常热门的词汇,在社区中也有很多热烈的讨论.因此,OSC第130期高手问答的主题是"究竟什么才是微服务",并邀请了黄勇作为高手嘉宾. 黄勇,现任特赞公司CT ...
- 停车还能360全方位影像_德国首创“新型汽车”不仅能无人驾驶,还能360度无死角停车...
说在驾校除了理论外,第一个学的就是侧方停车和倒车入库.但等到实际开车的时候,停车仍然是一些新手司机最头疼的事情.有时候好不容易找到停车位,停车都要好半天--经常是前后左右险象环生,手忙脚乱半天车还是停 ...
- 360度无死角 | Pulsar与Kafka对比全解析
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 2020 年,Pulsar 受到持续关注,Pulsar 的应用场景也越来越广泛. 本文分别从性能. ...
- 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...
来源:IEEE Spectrum 本文约1739字,建议阅读5分钟. 本文介绍一位乐高爱好者Yuksel Temiz为了从各种角度拍摄微流控芯片,用乐高.Arduino和树莓派,一起DIY了一个高精度 ...
- 统计信号处理基础_0基础学Python,就业中你需要建立360度无死角技能树
1956年,人工智能的概念就已经提出,但在以前,人工智能大多只是存在于书本和荧幕中,到了今天,生活中充斥着人工智能的影子,智能语音助手.翻译器.指纹识别.人脸识别.无人驾驶...... 自阿尔法围棋出 ...
最新文章
- python采集文章_八爪鱼采集器能取代python爬虫吗?
- python画直方图代码-Python绘制直方图及子图的方法分析(代码示例)
- 无线路由器说说2.4G和5G Wi-Fi的区别
- 下面可提供安全电子邮件服务的是()【最全!最详细解析!!】
- QT中的模态对话框及非模态对话框
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
- ASP.NET Core 中的错误处理
- lazada发货_Lazada发货用什么物流?费用要多少?
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- C++求复数的角度_高考数学一轮复习33,复数,常见类型及解题策略
- 海思hi3518 移植live555 实现H264的RTSP播放
- Oracle根据月份获取其是哪个季度
- c#获取或修改配置文件
- Supermicro 1024US-TRT 服务器评测:1U 机箱中的 128 个内核
- 电脑公司特供版 GHOST XP SP3 纯净版 Ver1105
- 深聊性能测试,从入门到放弃之:如何对IO进行性能调优
- 数据增强方式mosaic(基于yolo4)代码实现python
- Vue3中setup前写async页面不显示
- Linux硬盘管理:分区、GParted分区操作
- SQL-sql常用的语句
热门文章
- 您是否应该始终偏爱xrange()而不是range()?
- kube-proxy源码解析
- vue+element-ui动态生成多级表头,并且将有相同字段下不同子元素合并为同一个...
- 【对讲机的那点事】带你玩转灵通LT33公网集群对讲机
- 从JDK源码角度看Long
- css create 多边形 polygon
- Codeforces Round #278 (Div. 2)
- DAY02 WINDOWS Ghost系统的备份与还原以及不同虚拟机的通信的实现
- pku1985 Cow Marathon
- php 提交成功后跳转,PHP提交后跳转的简单示例