Netron是一个用于可视化深度学习网络模型的工具软件,主体以JavaScript语言实现,源码在: https://github.com/lutzroeder/netron 。用户可以使用各系统平台的安装包进行安装之后使用,也可以用浏览器使用在线版本: Netron。
Netron支持几乎所有常见的深度学习框架所导出的模型: ONNX, TensorflowLite, Caffe, Keras, MNN, NCNN, MediaPipe等等。
开发者在自己设计的软件中也有自定义的有向无环图,在Netron中就无法打开,如果需要可视化就需要自己开发相应的代码转换软件。本文介绍如何将开源的Netron集成到自己的Python QT软件中。
实现效果如下图所示:
一.开发环境与基础依赖
- Windows 10 64bit: VSCode
- Python3: PyQt5-Qt5==5.15.2, PyQtWebEngine==5.15.4
- FlatWidget: PyQT图形界面设计二.扁平化无边框窗口
- Netron: https://github.com/lutzroeder/netron
其中FlatWidget是笔者之前基于Python QT设计的无边框宽口界面,本文以此为基础进行集成。
将netron源码中的source目录中的所有文件作为本文工程的第三方依赖(thirdparty/netron),复制完代码之后的工程结构如下:
二.软件集成
QWebEngine需以OpenGL Widget为容器进行创建,现在QT Designer中拖拽一个OpenGL Widget到主窗口中。
编译完成后,构造QWebEngineView:
sys.path.append(os.getcwd() + os.path.sep + "thirdparty")
from netron.server import start
def InitWebEngine(self):
self.view_layout = QVBoxLayout(self.MainWindow_.ViewWidget)
self.view_layout.setContentsMargins(0, 0, 0, 0)
self.browser = QWebEngineView()
self.view_layout.addWidget(self.browser)
self.address = start(None, None, browse=False)
url_address = "http://{}:{}".format(self.address[0], self.address[1])
self.browser.load(QUrl(url_address))
只需调用此函数即可启用Netron。具体代码相机如下:
1~2行: 将netron的目录添加到python的环境中。
4~7行: 添加一个垂直布局器,并将QWebEngineView添加到其中。
9行: start为netron的API
def start(file, data, address=None, browse=False, verbosity=1)
file为模型文件的路径,data为模型数据,data与file都可以是空,都为空的情况下则打开的欢迎界面,browse指示是否自动打开本地浏览器查看,该函数的返回值为本地http服务器的地址与端口:(address, port)。
11行,通过QWebEngine加载serve.start启动的http服务。