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

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

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

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

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

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

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

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

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

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

© 2021 V2EX