V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
MerhanLee
V2EX  ›  Python

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

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

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

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

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

    打包 torch 库必然体积爆炸啊,会写 C++就找个符合你需求的推理框架部署下吧(用 libtorch 也行);会 rust 看看 candle?
    Lychee0
        7
    Lychee0  
       14 天前 via Android
    只会 py 那就 onnx 了,打包出来应该不算大
    MiketsuSmasher
        8
    MiketsuSmasher  
       13 天前
    把你训练的模型拆分出来,把项目代码改成加载外部模型的模式,但把项目和数据捆绑起来分发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2506 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:31 · PVG 14:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.