嵌入式推理框架 · 2020年05月27日

Tengine模型可视化工具发布-基于Netron的模型加载解析

Tengine模型可视化工具发布-基于Netron的模型加载解析

目前在神经网络领域,Netron已成为了应用最广泛的模型可视化工具。Netron以其轻量化、跨平台、和简洁明了的显示特性,被众多神经网络开发者冠以“神器”美名。不论是使用TensorFlow、Caffe或者Pytorch的算法工程师,还是通过ONNX, NCNN部署模型的开发者,在检查模型拓扑结构、数据时,都会选择Netron来观察模型。

image001.jpg
图1 模型结构可视化神器Netron

主流可视化工具/方法比较

在Netron出现之前,开发者只能使用各大训练框架原生工具可视化模型,如TensorBoard可以显示网络结构、张量的指标变化和分布情况,或者使用pytorchviz来观察pytorch的模型。

image002.png
图2 TensorBoard

image003.jpg
图3 pytorchviz

这两种方式都需要通过代码对模型做具体定义,而不是直接打开一个已经训练好的模型来进行观察。这在复现和部署模型时,非常不方便。为什么我要了解一个模型的拓扑结构,还要先写段代码定义它?
并且,TensorBoard对数据、节点的显示过于复杂,整个模型显得十分杂乱,缺少上下层的拓扑结构。而pytorchviz在显示时又过于简洁,缺少标注和节点数据描述。

除去训练框架自带的可视化工具,部分开源工具也可以作为模型显示的有效补充。如Netscope支持显示caffe模型的拓扑结构,还可以计算每层参数量、计算量等。

image004.jpg
图4 Netscope
开源的ConvNetDraw工具可以显示每层tensor形状、大小,非常直观。适合制作图表用于解释算法。

image005.jpg
图5 ConvNetDraw

以上工具各有优劣,但不能解决一个问题:即打开一个训练完成的模型,显示其拓扑结构并获得算子属性数据和tensor数据。

Netron正是以上功能的集大成者。

Netron如何解析并显示模型?

Netron是一款基于node.js打造的Electron应用程序。Electron是一个使用JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架(官网链接:http://www.electronjs.org/ ),基于此开发者可以轻松构建从Windows, macOS, Linux到网页端的跨平台应用。Netron使用Electron建立了底层跨平台框架,并在上层搭建了核心功能,包括解析模型拓扑结构,显示模型结构,解析Tensor数据等。

在Netron中,所有模型通过ModelFactory进行注册和解析。根据文件后缀名和magic number的不同,Netron可以准确识别模型类型并分别根据其数据结构解析。在解析如NCNN等模型时,由于其拓扑结构和权重信息分开保存,Netron会根据模型名称找到同目录下的数据文件,解析并显示在拓扑结构模型中。

而在显示模型的处理上,Netron调用了相关图象显示库,包括d3(data-driven-documents)和dagre(directed graph layout),这保证了Netron对于模型拓扑结构的显示效果十分优秀。

Tengine加入Netron开源社区,携手打造开源生态

Tengine模型一直缺乏一个可视化工具。经过研究比对其他工具,最终选定Netron作为支持对象。Netron具有开源、免费的属性,且其跨平台支持,拥有较多用户、开发者。因此Tengine团队决定官方维护Netron,加入Netron开发者队伍以支持显示Tengine模型。

随着Tengine更新和算子支持列表的更新,Tengine团队也将实时提交Netron支持,以匹配最新版本Tengine模型,开发者朋友们可以放心使用。

Netron在版本3.9.8后支持Tengine原生模型tmfile。tmfile模型具有高度融合的特色,不区分拓扑结构文件和tensor数据文件。

image006.jpg
图6 Netron处理tmfile

Netron对于tmfile模型提供了对每个Node属性信息的处理。如图在卷积Convolution算子中,Tengine模型定义的各项数据和tensor数据分别列在右侧sidebar中,这在开发者进行debug的过程时,提供了非常直观的显示。

图6左侧绘图区中的模型拓扑结构遵循从input到output的层级结构,每个node对应input/output/operator属性,根据算子类型分类并按颜色区分类型,其结构非常简洁明了。

tmfile模型由node构成,而node通过tensor连接,每个tensor的权重、bias数据存放在对应的buffer结构中,由tensor通过index索引。

image007.jpg
图7 tmfile图结构

image008.jpg
图8 tmfile模型结构

tmfile的索引方式主要通过index和vector。对于标量数据,其通过index列出。对于非标量数据,则提供vector偏移地址进行索引。
基于此,Netron对tmfile模型完成了结构化的解析。

Netron模型可视化的未来发展

这样一款方便的免费软件,由微软大神Lutz Roeder打造。Lutz供职微软Visual Studio部门担任Principal Software Engineer超过19年。出于对AI的兴趣,他自2010年开始,在工作之余开发了Netron,并在2017年末获得了较大关注。如今,Netron项目已经在Github获得了超过9.4k的Star,并保持着高活跃的社区动态,每周会进行版本release。

在目前的趋势下,Netron仍将成为未来多年神经网络模型可视化工具的首选。

欢迎体验:https://lutzroeder.github.io/netron/


欢迎体验Tengine开源版本:https://github.com/OAID/Tengine Git Clone!

Tengine开发者技术交流群人数突破千(群号:829565581),群里各位大佬坐镇,日常技术讨(shui)论(qun),期待你的加入~~
Snipaste_2020-05-27_10-28-05.png

相关阅读:

推荐阅读
关注数
3393
内容数
68
Tengine是一款轻量级模块化高性能的神经网络推理引擎 ;欢迎体验Tengine,[链接] 《Tengine开发者入门资料包》[链接]
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息