学校:圣何塞州立大学硕士生作者:刘遥行

TensorSpace:超酷炫3D神经网络可视化框架

TensorSpace - 一款 3D 模型可视化框架,支持多种模型,帮助你可视化层间输出,更直观地展示模型的输入输出,帮助理解模型结构和输出方法。

是什么(What)

TensorSpace 是一款 3D 模型可视化框架,一动图胜千言。 

官网链接:

https://tensorspace.org/

Github链接:

https://github.com/tensorspace-team/tensorspace

TensorSpace 擅长直观展示模型结构和层间数据,生成的模型可交互。官方支持手写字符识别,物体识别,0-9 字符对抗生成网络案例等。

为什么(Why)

本部分说明:为什么要使用这个框架?这个框架主要解决了什么问题?我们的灵感来源于何处?

3D神经网络可视化一片空白 

机器学习可视化上,每个机器学习框架都有自己的御用工具TensorBoard 之于 TensorFlow ,Visdom 之于 PyTorch,MXBoard 之于 MXNet。这些工具的 Slogan 不约而同地选择了 Visualization Learning(TensorBoard的 Slogan),也就是面向专业机器学习开发者,针对训练过程,调参等设计的专业向可视化工具。

但面向一般的计算机工程师和非技术类人才(市场、营销、产品等),一片空白,没有一个优秀的工具来帮助他们理解机器学习模型到底做了什么,能解决一个什么问题。

机器学习开发和工程使用并不是那么遥不可及,TensorSpace 搭建桥梁连接实际问题和机器学习模型。

3D可视化的信息密度更高更直观

市面上常见的机器学习可视化框架都是基于图表(2D),这是由它们的应用领域(训练调试)决定的。但 3D 可视化不仅能同时表示层间信息,更能直观地展示模型结构,这一点是 2D 可视化不具备的。

例如在何恺明大神的 Mask-RCNN 论文中,有这么一幅图来描述模型结构(很多模型设计类和应用落地类的论文都会有这么一幅图):

TensorSpace 可以让用户使用浏览器方便地构建一个可交互的神经网络 3D 结构。更进一步的,用户还可以利用 3D 模型的表意能力特点,结合 Tensorflow.js 在浏览器中进行模型预测(跑已经训练好的模型看输入输出分别是什么),帮助理解模型。

模型结构:黑盒子的真面目是什么?

模型就像是一个盛水的容器,而预训练模型就是给这个容器装满了水,可以用来解决实际问题。搞明白一个模型的输入是什么,输出是什么,如何转化成我们可理解的数据结构格式(比如输出的是一个物体标识框的左上角左下角目标),就可以方便地理解某个模型具体做了什么。

例如,YOLO 到底是如何算出最后的物体识别框的?LeNet 是如何做手写识别的?ACGAN 是怎么一步一步生成一个 0-9 的图片的?这些都可以在提供的 Playground 中自行探索。

如下图所示,模型层间的链接信息可通过直接鼠标悬停具体查看。

层间数据:神经网络的每一层都做了什么?

3D 模型不仅可以直观展示出神经网络的结构特征(哪些层相连,每一层的数据和计算是从哪里来),还能结合 Tensorflow.js 在浏览器中进行模型预测。由于我们已经有了模型结果,所有的层间数据直观可见,如下图所示:

TensorSpace 内部,调用 Callback Function 可以方便的拿到每一层的输出数据(未经处理),工程和应用上,了解一个模型的原始输出数据方便工程落地。

怎么建(How)

首先你需要有一个使用常用框架训练好的预训练模型,常见的模型都是只有输入输出两个暴露给用户的接口。TensorSpace 可以全面地展示层间数据,不过需要用户将模型转换成多输出的模型,过程详见以下文档。

模型预处理简介:

http://tensorspace.org/html/docs/preIntro_zh.html

具体流程如下图所示:

TensorSpace 构建对应模型这一步,下面一段构建 LetNet 的代码可能更加直观,如果要在本地运行,需要 Host 本地 Http Server。

你最需要的是模型结构的相关信息TensorFlow,Keras 都有对应的 API 打印模型结构信息,比如 Keras 的 model.summary()。还有类似生成结构图的方式,生成如下图的模型结构 2D 示意图:

是的,你需要对模型结构非常了解才可能构建出对应的 TensorSpace 模型。未来版本已计划推出自动脚本,通过导入对应的模型预训练文件,一键生成多输出模型。但是 TensorSpace 的 Playground 子项目未来会力所能及地收集更多模型,在模型应用落地和直观展示这个领域努力做出贡献。

谁可能用(Who)

做这样一款开源框架,除了填补 3D 可视化的一般解决方案的框架空白外,还思索了几个可能可行的应用场景。

前端开发者过渡机器学习

  • 前端(全栈)开发者,产品经理等

未来,前端的重复性工作可能会慢慢减少。最近有一个原型图→HTML代码的项目,另一个 2017 年的开源项目 Pix2Code 都在尝试利用机器学习自动化一些 Coding 中的重复劳动,提高效率。

机器学习一定不会取代前端工程师,但掌握机器学习工具的工程师会有优势(这种工具会不会整合进 Sketch 等工具不好说),既然入了工程师行,终身学习势在必行。 

TensorSpace 虽然不能帮忙训练和设计模型,但它却擅长帮助工程师理解已有模型,为其找到可应用的领域。并且,在接驳广大开发者到机器学习的大道上做了一点微小的工作,做一个可视化的 Model Zoo。

机器学习教育

  • 机器学习课程教育者

使用 TensorSpace 直观地在浏览器上显示模型细节和数据流动方向,讲解常见模型的实现原理,比如 ResNet,YOLO 等,可以让学生更直观地了解一个模型的前世今生,输入是什么,输出是什么,怎么处理数据等等。

我们只是提供了一个框架,每一个模型如果需要直观地展示对数据的处理过程,都值得 3D 化。

模型演示和传播

  • 机器学习开发者

JavaScript 最大的优势就是可以在浏览器中运行,没有烦人的依赖,不需要踩过各种坑。有一个版本不那么落后的浏览器和一台性能还可以的电脑就可以完整访问所有内容。

如果您的项目需要展示自己的模型可以做什么、是怎么做的,私以为,您真的不应该错过 TensorSpace。

TensorSpace 教学模型原理效果非常好。它提供了一个接口去写代码,搞清楚每一个输出代表了什么,是如何转化成最后结果。当然,从输出到最后结果的转换还是需要写 JavaScript 代码去构建模型结构,在这个过程中也能更进一步理解模型的构造细节。

现在还没有完成的 Yolov2-tiny 就是因为 JavaScript 的轮子较少(大多数处理轮子都使用 Python 完成),所有的数据处理都需徒手搭建。时间的力量是强大的,我们搭建一个地基,万丈高楼平地起!

致谢

机器学习部分

我们最初的灵感来源于一个真正教会我深度卷积网是如何工作的网站:

http://scs.ryerson.ca/~aharley/vis/conv/

源码只能下载,我 Host 了一份在 Github 上:

https://github.com/CharlesLiuyx/3DVis_ConvNN

这个网站的效果,也是团队未来努力的方向(大网络上,因为实体过多,性能无法支持。为了解决性能问题,我们优化为:不是一个 Pixel 一个 Pixel 的渲染,而是一个特征图一个特征图的处理。

前端部分

使用 Tensorflow.js、Three.js、Tween.js 等框架完成这个项目,感谢前人给的宽阔肩膀让我们有机会去探索更广阔的世界。

开发团队们

感谢每一个为这个项目付出的伙伴,没有你们每个人,就没有这个开源项目破土而出。

开发团队成员:

syt123450 — 主力开发

https://github.com/syt123450

Chenhua Zhu — 开发

https://github.com/zchholmes

Qi (Nora) — 设计师

https://github.com/lq3297401

CharlesLiuyx — 机器学习模型 & 文档

https://github.com/CharlesLiuyx

也欢迎你有什么想法给我留言,或直接在 Github 上提出 Pull Request。

工程GitHub深度神经网络可视化
31
相关数据
何恺明人物

Facebook AI Research研究科学家。Residual Net提出者。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

TensorBoard技术

一个信息中心,用于显示在执行一个或多个 TensorFlow 程序期间保存的摘要信息。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

LeNet技术

LeNet 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从 1988 年开始,在许多次成功的迭代后,这项由 Yann LeCun 完成的开拓性成果被命名为 LeNet5。LeNet5 的架构基于这样的观点:(尤其是)图像的特征分布在整张图像上,以及带有可学习参数的卷积是一种用少量参数在多个位置上提取相似特征的有效方式。在那时候,没有 GPU 帮助训练,甚至 CPU 的速度也很慢。因此,能够保存参数以及计算过程是一个关键进展。这和将每个像素用作一个大型多层神经网络的单独输入相反。LeNet5 阐述了那些像素不应该被使用在第一层,因为图像具有很强的空间相关性,而使用图像中独立的像素作为不同的输入特征则利用不到这些相关性。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

物体识别技术

计算机视觉领域的一个分支,研究物体的识别任务

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

推荐文章
謝分享,很酷的東西。 不過想請問一下,一般我們不是都認為,深度神經網路,較前面的層學到的是比較低級的特徵,而經過層層堆積,愈靠近輸出層所學到的特徵是愈高級、抽象的, 但為什麼我仔細看了一下playground裡面的幾個範例模型,如LeNet,當我用滑鼠畫了一個數字後,點開他的每一層Feature map卻發現,似乎是愈往後面的特徵圖,反而愈低級,愈看不懂,而前面的層反而比較高級呢?