Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新手向教程:使用CPU训练你的字体 #56

Open
chengtx809 opened this issue Jan 25, 2024 · 25 comments
Open

新手向教程:使用CPU训练你的字体 #56

chengtx809 opened this issue Jan 25, 2024 · 25 comments

Comments

@chengtx809
Copy link

chengtx809 commented Jan 25, 2024

本文是在基于 #43 的基础上更改而来,原作者没有提供对于CPU的训练教程,我创建了使用CPU的训练程序,特此补充(如果你使用英伟达显卡训练,请移步作者的教程,本文只是给没有显卡而想要使用CPU训练的人群阅读:)

本教程偏小白向,可能会过于啰嗦,还望见谅

0.下载代码:

image

1.安装python3.8(其他版本可能会报错!)

官网链接:https://www.python.org/downloads/release/python-380/
官网下载慢的话,我自己下载了一份拷到蓝奏云,各位可以直接下:
https://chengtx.lanpw.com/iJ6W21m7s13i 密码:fid4

2.安装库:

我试跑一轮下来,安装了这些库:
以下是Python 3.8没有自带的库及其安装命令:

  1. certifi - 安装命令:pip install certifi
  2. charset-normalizer - 安装命令:pip install charset-normalizer
  3. colorama - 安装命令:pip install colorama
  4. easydict - 安装命令:pip install easydict
  5. einops - 安装命令:pip install einops
  6. fastdtw - 安装命令:pip install fastdtw
  7. filelock - 安装命令:pip install filelock
  8. fsspec - 安装命令:pip install fsspec
  9. idna - 安装命令:pip install idna
  10. Jinja2 - 安装命令:pip install Jinja2
  11. lmdb - 安装命令:pip install lmdb
  12. MarkupSafe - 安装命令:pip install MarkupSafe
  13. mpmath - 安装命令:pip install mpmath
  14. networkx - 安装命令:pip install networkx
  15. numpy - 安装命令:pip install numpy
  16. opencv-contrib-python - 安装命令:pip install opencv-contrib-python
  17. packaging - 安装命令:pip install packaging
  18. pillow - 安装命令:pip install pillow
  19. protobuf - 安装命令:pip install protobuf
  20. PyYAML - 安装命令:pip install PyYAML
  21. requests - 安装命令:pip install requests
  22. setuptools - 安装命令:pip install setuptools
  23. six - 安装命令:pip install six
  24. sympy - 安装命令:pip install sympy
  25. tensorboardX - 安装命令:pip install tensorboardX
  26. torch - 安装命令:pip install torch
  27. torchaudio - 安装命令:pip install torchaudio
  28. torchvision - 安装命令:pip install torchvision
  29. tqdm - 安装命令:pip install tqdm
  30. typing_extensions - 安装命令:pip install typing_extensions
  31. urllib3 - 安装命令:pip install urllib3

你只需要win+R打开cmd,然后依次执行以上命令
如果下载速度较慢,只要几十~几百kb/s,可以依次执行以下命令把pip换成清华源,下载速度会很快:

python -m pip install --upgrade pip
pip config set global.index-url `https://pypi.tuna.tsinghua.edu.cn/simple

如果换源失败,请自行百度“pip换源“,这里不过多赘述
这些库可能有点多,但我实测一轮下来就是安装了这么多:(
如果你还遇到类似:ModuleNotFoundError: No module named 'tqdm'的报错,说明你缺少单引号里的库,需要安装
如我给出的报错信息就要在cmd里执行pip install tqdm来安装库
如果还有关于库安装的问题,自行百度吧:)

3.下载预训练模型:

解压最开始下载的代码文件,在里面新建一个名为checkpoint的文件夹:
image
从readme文件里的百度网盘下载预训练模型checkpoint-iter199999.pth
如果百度网盘太慢,我也将其复制了一份到123云盘(超过100M蓝奏云放不了啊啊啊啊)
https://www.123pan.com/s/TmBBjv-xDlaH.html
最后将下载下来的checkpoint-iter199999.pth文件放入创建的checkpoint文件夹中

4.下载pkl文件:

依旧提供蓝奏云链接:
https://chengtx.lanpw.com/iDQqn1m7vyqh 密码:5qvj
然后在代码目录新建名为data的文件夹
将下载下来的压缩包解压进data文件夹中
image
3个pkl文件应该位于代码根目录下的data\CASIA_CHINESE文件夹中,如上图所示

5.下载适用于CPU训练的user_generate_cpu.py文件:

这是我在原基础user_generate.py代码更改而来,使其使用cpu训练而不是cuda
依旧蓝奏云:
https://chengtx.lanpw.com/iC9XO1m7x2gh 密码:9vwa
把文件解压,得到user_generate_cpu.py文件并放入代码文件夹中:
image

6.更改gmm.py文件:

recording
打开models文件夹下的gmm.py,如上图
image
进入后把文件内的3个"cuda"改为“cpu”(3个“cuda”位置如上图)
image
改完之后应该是上面这样子:
我也提供了改完之后的gmm.py文件
https://chengtx.lanpw.com/iF2Ze1m7y7gd 密码:fskz
下载下来解压后替换models文件夹内的gmm.py文件

7.数据预处理:

在代码根目录新建style_samples文件夹:
image
2024.5.12补
我使用的是windows画图,把画布调成300*300,直接写完后保存到style_samples文件夹内
然后在style_samples文件夹下新建一个python文件,填入这段代码并运行:

from PIL import Image  
import os  
# 设置二值化阈值  
threshold = 128  
current_dir = os.getcwd()  

for filename in os.listdir(current_dir):  
    if filename.endswith(('.jpg', '.png')):  
        img = Image.open(filename)  
        gray_img = img.convert('L')  
        binary_img = gray_img.point(lambda x: 255 if x > threshold else 0, '1')  
        binary_filename = filename.rsplit('.', 1)[0] + '_binary.' + filename.rsplit('.', 1)[1]  
        binary_img.save(binary_filename)  
          
        print(f"保存为:{binary_filename}")
        try:  
            os.remove(filename)  
            print(f"已删除:{filename}")  
        except OSError as e:  
            print(f"无法删除 {filename}.{e.strerror}") 

这段代码运行后会二值化图片,如果没有这一步会导致生成效果不理想!

8.开始训练!

很高兴你能看到这里,这是本教程的最后一步!!!
回到代码根目录,在地址栏输入cmd并回车
recording
在弹出的黑窗口中输入:
python user_generate_cpu.py --pretrained_model .\checkpoint\checkpoint-iter199999.pth --style_path .\style_samples
然后等待一下,出现以下界面
image
恭喜你成功训练!!!
训练完成的图片可以在Generated文件夹下找到
image

若还有问题,欢迎留言,看到后我会第一时间处理!

@CreeperAWA
Copy link

大佬,你教程里下载user_generate_cpu.py的链接是data.7z,解压以后并没有user_generate_cpu.py

@chengtx809
Copy link
Author

大佬,你教程里下载user_generate_cpu.py的链接是data.7z,解压以后并没有user_generate_cpu.py

放错链接了:
https://chengtx.lanpw.com/iC9XO1m7x2gh
密码:9vwa
这个才是

@chengtx809
Copy link
Author

9vwa

已经改完教程链接了,现在看应该是正常的

@maygyd
Copy link

maygyd commented Jan 27, 2024

大佬
image
user_generate.py是不是没加上cpu啊
另外,这是我的报错
image

@maygyd
Copy link

maygyd commented Jan 27, 2024

大佬 image user_generate.py是不是没加上cpu啊 另外,这是我的报错 image

我也重装过一遍了,还是一样

@chengtx809
Copy link
Author

大佬 image user_generate.py是不是没加上cpu啊 另外,这是我的报错 image

好像是的(捂脸,
现在更改教程:)
这个报错我倒是没有见过,确认下python版本是不是3.8,我试过非3.8版本会有不兼容报错,实在不行就把python全卸了只装个3.8

@chengtx809
Copy link
Author

大佬 image user_generate.py是不是没加上cpu啊 另外,这是我的报错 image

我也重装过一遍了,还是一样

我查了一下,是样本图像的问题,数据格式有问题。要更换下样本。
我可以分享下我采集样本的方法:把一堆字写在纸上并且用扫描软件扫描,然后在电脑截图,把一个个字单独截出来再存下来。我使用的截图软件是pixpin,是不会出现任何问题的

@tamako33
Copy link

非常感谢大佬的教程,我在使用过程中还是遇到了如下问题,询问gpt之后也没找到解决办法,想请教大佬这个是什么原因导致的,应该如何解决

图片alt

@maygyd
Copy link

maygyd commented Feb 21, 2024

非常感谢大佬的教程,我在使用过程中还是遇到了如下问题,询问gpt之后也没找到解决办法,想请教大佬这个是什么原因导致的,应该如何解决

图片alt

输入数量够吗

@tamako33
Copy link

非常感谢大佬的教程,我在使用过程中还是遇到了如下问题,询问gpt之后也没找到解决办法,想请教大佬这个是什么原因导致的,应该如何解决
图片alt

输入数量够吗

非常感谢dalao的回复,跑起来了,犯了一个很低级的错误(存放图片的文件夹与命令行的文件夹名称不一致) sry!!! i5-12600KF跑起来大概95.26s/it 然后2%进度稳定蓝屏,使用gpu的话会报cuda的错
UM)H~W(NHKCX`$EM0XVRW{L

@ouremeng
Copy link

大佬,我是纯小白,前面几步已经按照教程设置好了,最后一步输入后按回车只是换行,没有任何反应,可能是什么原因(°ー°〃)

@coling0
Copy link

coling0 commented May 15, 2024

小白感谢大佬提供的脚本,代码在windows10/winserver2016+python3.9.7中得到复现,正常运行,但是经过对比发现一些点:
提供40张图
环境1:windows10+i3-10100+32G 运行时间大概10小时
环境2:windserver2016+双路至强Gold5222+256G 差不多9个半小时
CPU都是跑满100%,不知道为撒差别这么小😂

Snipaste_2024-05-15_22-03-06

@maygyd
Copy link

maygyd commented May 15, 2024 via email

@chengtx809
Copy link
Author

小白感谢大佬提供的脚本,代码在windows10/winserver2016+python3.9.7中得到复现,正常运行,但是经过对比发现一些点: 提供40张图 环境1:windows10+i3-10100+32G 运行时间大概10小时 环境2:windserver2016+双路至强Gold5222+256G 差不多9个半小时 CPU都是跑满100%,不知道为撒差别这么小😂

Snipaste_2024-05-15_22-03-06

我个人也不是很了解这方面知识,目前只做过LLM在CPU上跑的优化
我12代i9跑完大概4h。可以做个参考😂

@chengtx809
Copy link
Author

非常感谢大佬的教程,我在使用过程中还是遇到了如下问题,询问gpt之后也没找到解决办法,想请教大佬这个是什么原因导致的,应该如何解决
图片alt

输入数量够吗

非常感谢dalao的回复,跑起来了,犯了一个很低级的错误(存放图片的文件夹与命令行的文件夹名称不一致) sry!!! i5-12600KF跑起来大概95.26s/it 然后2%进度稳定蓝屏,使用gpu的话会报cuda的错 UM)H~W(NHKCX`$EM0XVRW{L

抱歉现在才看到哈,我个人实测下是不会出现蓝屏,可以具体提供下蓝屏代码看看?

@chengtx809
Copy link
Author

大佬,我是纯小白,前面几步已经按照教程设置好了,最后一步输入后按回车只是换行,没有任何反应,可能是什么原因(°ー°〃)

是不是路径的问题?照着教程是木有问题的欸

@aceliuchanghong
Copy link

@chengtx809 你这儿的style_samples可以发我zip看看吗,麻烦了,谢谢

@chengtx809
Copy link
Author

@chengtx809 你这儿的style_samples可以发我zip看看吗,麻烦了,谢谢

我现在在学校,等明天周末回家了我发你

@chengtx809
Copy link
Author

@chengtx809 你这儿的style_samples可以发我zip看看吗,麻烦了,谢谢

你试试直接微软自带的Windows画图,画布300*300,直接默认画笔,把写好的存到style_samples。然后再在style_samples目录下建一个python文件,写这段二值化代码:

from PIL import Image  
import os  
# 设置二值化阈值  
threshold = 128  
current_dir = os.getcwd()  

for filename in os.listdir(current_dir):  
    if filename.endswith(('.jpg', '.png')):  
        img = Image.open(filename)  
        gray_img = img.convert('L')  
        binary_img = gray_img.point(lambda x: 255 if x > threshold else 0, '1')  
        binary_filename = filename.rsplit('.', 1)[0] + '_binary.' + filename.rsplit('.', 1)[1]  
        binary_img.save(binary_filename)  
          
        print(f"保存为:{binary_filename}")
        try:  
            os.remove(filename)  
            print(f"已删除:{filename}")  
        except OSError as e:  
            print(f"无法删除 {filename}.{e.strerror}") 

然后运行程序,程序会把图片二值化(就去掉灰度),在跑下就能复现出比较好的结果了
对了,字迹笔画细一点的样本出来效果会好一点

@gudaoxongdi
Copy link

gudaoxongdi commented May 30, 2024

简单说一下规律,这个模型对笔画的宽度有着十分严格的限制,只要笔画宽了,就容易出“草书” 解决方法和楼主说的一样,笔宽12,画面100% 我是拿鼠标画的,就调整成,笔宽6,画面50%,这样就方便画一点

确实,跟画笔的粗细关系很大。
二值笔-粗
第1张是按照说明,在sai里用二值笔,关闭压感,粗细为12,结果生成的还是很潦草的。
二值笔-细
第2张,其它条件一样,就是把粗细调成3,生成的就不怎么潦草了。
ai-细
第3张是在AI里,用相对细的线条写的,生成的也不怎么潦草了。

@chengtx809
Copy link
Author

@chengtx809 你这儿的style_samples可以发我zip看看吗,麻烦了,谢谢

style_samples.zip
文件在这里

@la-1314
Copy link

la-1314 commented Aug 29, 2024

Torch not compiled with CUDA enabled 最后报错报这个怎么回事呢求大佬解答一下

@maygyd
Copy link

maygyd commented Aug 29, 2024 via email

@CreeperAWA
Copy link

Torch not compiled with CUDA enabled 最后报错报这个怎么回事呢求大佬解答一下

Torch 没有编译启用 CUDA

这句话意味着你当前使用的 Torch(一个流行的深度学习库,通常指的是 PyTorch)没有被编译以支持 CUDA。CUDA 是 NVIDIA 推出的一个并行计算平台和编程模型,它允许开发者利用 NVIDIA 的 GPU 进行高效的计算。如果你的 Torch 没有编译启用 CUDA,那么它将无法使用 GPU 加速,只能使用 CPU 进行计算,这通常会慢得多。

为了解决这个问题,你可以考虑以下几个步骤:

  1. 确认你的机器上是否安装了 NVIDIA GPU,并且该 GPU 支持 CUDA。
  2. 前往 PyTorch 的官方网站,下载并安装支持 CUDA 的 PyTorch 版本。在安装时,确保选择与你的 CUDA 版本相匹配的 PyTorch 版本。
  3. 安装完成后,你可以通过运行一些简单的测试来确认 PyTorch 是否能够正确地使用 GPU。例如,你可以运行 torch.cuda.is_available() 来检查 PyTorch 是否能够识别并使用 GPU。

如果你没有 NVIDIA GPU,或者你的 GPU 不支持 CUDA,那么你可能需要使用其他方法来加速你的深度学习模型,比如使用 CPU、其他类型的 GPU(如 AMD 的 GPU)或者云服务(如 Amazon EC2、Google Cloud Platform 等)。

@chengtx809
Copy link
Author

chengtx809 commented Aug 30, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants