pyinstaller导出pytorch深度学习模型

  • Post author:
  • Post category:其他


项目要求将模型导出成exe可执行文件,于是就使用pyinstaller进行打包,在打包的过程中遇到了一些问题现在在这里记录一下。(可能文章中的方法不是解决问题的正确方法,但是碰巧都给我解决了)

具体的步骤其他大佬的博客里写的挺详细的,大家想了解的话可以去看看。


python将资源文件一起打包进exe 讲解(有算例)



使用pyinstaller将训练好的目标检测算法(基于pytorch)打包成一个exe文件(完整过程)


这里也给出我的环境:

windows10

python3.7.0

torch1.8.1

cuda10.1

PyInstaller4.0.0


安装:


平常我是在anaconda的虚拟环境中运行的,所以打包也用虚拟环境了。

先安装pyinstaller

pip install pyinstaller==4.0.0

安装完成后用控制台进入需要打包的页面

在这里插入图片描述

在这里插入图片描述

第一遍跑完后会生成一个.SPEC的配置文件一个build文件和dist文件。

如果显示成功的话可以在dist文件夹中找到可执行的exe文件。没有意外的话就可以用辣。

没有成功的话,可能是一些组件没有添加进去,接下来打开.SPEC文件进行配置。

在这里插入图片描述

主要是修改这两处,在datas中我把我训练好的权重放进去,每个文件作为一个元组类型,最终放在一个列表中,如果不是元组的话会有一个报错(ValueError: too many values to unpack)。

元组的格式是(“模型路径”,”.生成的文件夹名”) !!生成的路径前面有个点。最终会在dist文件夹下生成一个“.文件夹名”的文件夹。

在这里插入图片描述

里面就是含有我们的模型权重文件。

当然在这里改了的话,在我们的推理脚本中调用权重的路径也要进行修改。替换成相应的路径。

在这里插入图片描述

第二处修改的地方是hiddenimports,这里把自己写的脚本文件添加进去(比如自己写的utils),通过pip安装的会自动打包这个不用操心。

都设置好了之后。控制台执行

pyinstaller  xxxxxx.SPEC

就可以生成.exe可执行文件了。


问题:

主要是出现过两个问题

1、在编译生成的过程中出现了

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 75141:

这个和编码有关系。网上有一些解决方案。


https://blog.csdn.net/qq_35307209/article/details/80856921



https://blog.csdn.net/qq_35203425/article/details/80992870


有些朋友的问题得到了解决,但是我的没有TAT…

然后看到一个大佬(找不到链接了555)说要从源头解决问题,找到他报错的那一处位置再对应的改改。我的报错显示在PyInstaller中的一个文件(具体那里也忘了…当时没有截图)。然后既然是编码的问题,我就在对应的语句后面加上了.decode(“utf-16”),这个也是一个个试的,因为水平实在是有限 …然后值得庆幸的是可以编译!(这里仅给出一种思路,因为我更改了编码之后就出现了下面的问题,猜测可能和修改了编码有关)

但是当我双击点开exe文件时,他就闪退了。仔细一看是有个错误。(这个截图了)

TypeError: compiled module 'C:\\Users\\Administrator\\Desktop\\qqqq\\dist\\github_edition_m3_onnx_yolo5\\base_library.zip\\encodings\\__init__.pyc' is not a code object

在这里插入图片描述

然后就去找解决方案,但是找了一圈没找到啥方法(可能是搜索的关键字有问题)。于是就尝试着把最新的pyinstaller版本降低一下,重装了4.0.0版本,然后重新生成,这次运行了还挺久。生成完成之后去文件夹一看,东西比原本多多了,一些用到的库全打包在里面,我觉得可能之前就是因为没把一些库打包进来。

之前没有将这些库放进来

然后双击.exe就可以运行了!

3、当然这里还有些小问题

在这里插入图片描述

这个是之前还没把运行文件里加载模型的路径给改过来。

在这里插入图片描述

这个是之前还没把自己写的脚本复制进来。

在这里插入图片描述

直接复制到”dist/你的文件名字/”里面,和exe同目录。

所有的问题解决了之后再运行,就可以运行成功了…

在这里插入图片描述

也是不容易。

在其他机器上还没尝试过…不知道行不行。

4.10更新

尝试过了,同样的python环境、CUDA版本、PyTorch版本下能直接运行。

4.13更新

新加了PyQt5之后,重新编译过后发现无法编译,报以下错误。

flag, ord(typcd), nm + pad)) 
struct.error: argument out of range

百度/Google了一下是编译过后文件过大的问题??


https://github.com/pyinstaller/pyinstaller/issues/4495


看了大佬们的解决方案,加了–clean好像也没啥用。

(ten3) C:\Users\Administrator\Desktop\qqqq>pyinstaller --clean -F qt_m3_onnx_yolo5.py

根据大佬们另外的说法,说是大文件不要用-F命令,于是采用以下命令

pyinstaller --clean qt_m3_onnx_yolo5.py

之后,编译成功!



版权声明:本文为qq_38856833原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。