如何打包包含深度学习模块做的 PYQT 工程?

275 天前
 MerhanLee
最近做的一个课设,是 CV 领域的深度学习的模型做出来的一个 QT 工程。就是除了基本的 opencv 实现打开图片、视频,图像放大的功能以外,还有个用训练出来的模型做一个图像处理的功能。
模型文件(一百多 M ,别人训练直接拿来用的)和用的 torch 与 torch vision 库都挺大的,整个项目体积主要就是 pth 模型文件的那一百多 M 。
用 python 的 pyinstaller 打包编译程序打包出来 5 个 G ,简单的功能打开图片啥的没啥问题,运行正常,但是一旦点深度学习功能的按钮,立刻闪退。
请问这个问题怎么解决?以及如何打包体积比较小?
1326 次点击
所在节点    Python
8 条回复
NessajCN
275 天前
运行脚本里加上判断依赖是否存在,否则就下载安装
或者手写 requirements.txt 让人自己去下依赖
wanei
275 天前
直接将 python 及项目依赖都打包在一起,课设只要正常运行就行了
zyx199199
275 天前
1. 你打包时应该没有创建独立的 python 运行环境。需要创建一个独立的 python 运行环境,然后安装你的项目依赖库再打包

2. pysinstaller 可以手动指定哪些依赖库要打包的,建议完全手动指定,它的自动查询依赖的机制并不完善

3. 理论上而言,训练好的模型只是要使用的话,是不需要 pytorch/tensorflow 的。不过可能要对模型做一些转换,这一点我不是非常确定

4. 正常情况下,一个 pyqt 项目,没啥大的依赖库,打包后大概是 100 M 。用一些技巧压缩,大概能压缩到几十 M 。
zyx199199
275 天前
5. 你的闪退问题,肯定是 pytorch 没有打包进去导致的。pyinstaller 打包时有个参数(参数值忘了,可以在官网查一下),作用是运行程序时同时展示一个命令行窗口,一旦程序报错闪退,命令行窗口内会显示报错信息
MerhanLee
275 天前
@zyx199199 哇,谢谢大佬给的建议,我再去试试能不能打包出来。我那个训练的 pth 是加载在测试集代码,所以 import module.py ,module 里面用到了 torch 。看看能不能简化一下。它的环境是我新建的虚拟环境,应该只有它的那些库。
Lychee0
274 天前
推理代码还是和 ui 分离开来比较好哈

打包 torch 库必然体积爆炸啊,会写 C++就找个符合你需求的推理框架部署下吧(用 libtorch 也行);会 rust 看看 candle?
Lychee0
274 天前
只会 py 那就 onnx 了,打包出来应该不算大
MiketsuSmasher
273 天前
把你训练的模型拆分出来,把项目代码改成加载外部模型的模式,但把项目和数据捆绑起来分发

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX