这的确是新的上等的OCR,但是部署有一定的难度,并且在WIN和Ubuntu不一样,所以请看情况尝试。
需求
- GPU,最好是支持BF16的A系列,当然不支持也没事,到时候改一下代码就行。没有GPU就算了,GPU显存小于8G也算了。
- 良好的外网,折腾的时候网不好也不行。
- GPT或者其他AI,万一有问题,可以问一下。
开始前
服务器开局
- 如果是Ubuntu22.04,请参考GPU服务器开局教程。
- 如果是win,请自行安装显卡驱动和CUDA,安装方式网上都有。但是理论上来说不需要急着在部署之前安装CUDA,GPU驱动倒是记得安装。GAME和STUDIO实测没区别自己看着办。
都记得安装miniconda,是必须要的。完整的CONDA就无所谓了,反正装了也用不到。配网
自己去配。理论上不用代理也行,自己把源换了就是。
正式开始
把文件准备好
git clone https://github.com/Ucas-HaoranWei/GOT-OCR2.0
然后去github把权重下载,丢到一个文件夹,比如说这样。【他们甚至给出百度网盘】
七个文件都要下载,然后丢到weight文件夹,你自己想别的也行。配环境
Ubuntu22.04没有难度,照葫芦画瓢就行了,直接跟着github页面走就是。
重点在WIN。
有三点需要改的。都在conda的环境下操作。- 安装deepspeed,这个东西我两年前没办法装上去,现在有办法了,看自己情况选择一个人家编译好的版本就行。实测你自己默认安装根本不行。编译错误修不好的。
这个是Python3.10的pip install https://github.com/daswer123/resemble-enhance-windows/releases/download/deepspeed/deepspeed-0.11.2+cuda121-cp310-cp310-win_amd64.whl
这个是Python3.11的
pip install https://files.pythonhosted.org/packages/2e/5c/2058713749655a6b1830ecb8d7db61637a396239610aeb11b59974d29b66/deepspeed-0.15.0-cp311-cp311-win_amd64.whl
我自己在虚拟环境里面用的是3.10的那个。
(got) D:\GOT-OCR2.0\GOT-OCR-2.0-master>python --version Python 3.10.14
安装好了这个东西后再继续操作。
- 修改原先依赖文件
可以看到原先依赖是写死了deepspeed的库的版本的,但是我实测下来可以用0.11.2,所以改掉就行了。
图片位置就是要改的,现在已经改好了,图片上面是文件名字。
- 安装deepspeed,这个东西我两年前没办法装上去,现在有办法了,看自己情况选择一个人家编译好的版本就行。实测你自己默认安装根本不行。编译错误修不好的。
- 修改demo代码这一步如果是支持BF16的GPU可以不做。
把两个Python文件都点开,
搜索torch.autocast,把多出来的b去掉。
改成下面这张图的样子。
好啦,现在环境配完,照着给出的例子试一下吧。
测试
单图片
随便丢了一张图,还是我截图的。
然后是输出
(got) D:\GOT-OCR2.0\GOT-OCR-2.0-master>python D:\GOT-OCR2.0\GOT-OCR-2.0-master\GOT\demo\run_ocr_2.0.py --model-name "D:\GOT-OCR2.0\GOT-OCR-2.0-master\weight" --image-file "C:\Users\Administrator\Pictures\book1.png" --type ocr
<|im_start|>system
You should follow the instructions carefully and explain your answers in detail.<|im_end|><|im_start|>user
<img><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad><imgpad></img>
OCR: <|im_end|><|im_start|>assistant
为若干路,各路设转运使等官,掌一路财赋等事。
宋代县以上的行政单位是州,州政由中央派员前往管理,称为“知
某州军州事”(“军”指地方军队,“州”指民政),简称知州。州有通判,号
称监州官,不似后世一般的副职。州的属官有判官管行政,有推官管司
法。和州平行的还有府、军、监,设官和州大致相同。
宋代没有太守,刺史也是虚衔。欧阳修知滁州时写《醉翁亭记》提
到太守,写《丰乐亭记》提到刺史,都是沿用前代的旧称。
元代地方最高行政机构是行中书省,体制类似中央,也有丞相、参
知政事等官。明初沿袭元制,后改称承宣布政使司,简称布政司,但习
惯仍称为“省”,长官为左右布政使,掌一省之政。明代有战事时,派朝
臣出巡地方,处理军务,称为巡抚。遇有军事问题牵连几省,巡抚不能
解决时,则派总督处理。总督巡抚都是临时差使,不算正式地方官。清
代总督巡抚才成为固定的“封疆大吏”,巡抚是省级的最高长官,总督
则总揽一省或两三省的军民要政。这样,布政使就只管财政和人事,成
了督抚的下属了。
明清一省分为数道,道下有府有州。府州的长官称为知府、知州。
其佐贰,府有同知、通判等,州有州同(同知)、州判等。有两种州:直隶
州略等于府;散州隶属于府,和县相当。
品阶勋爵
品——古代把职官分为若干等级,通称为品。汉代以禄石多寡作
为官位高低的标志,例如九卿是中二千石,刺史太守之类是二千石,
县令是千石到六百石,禄石不同,月俸收入不同。曹魏时职官分为九
品,一品最高,九品最低。隋唐时九品又分正从,自正四品起,每品又
分上下二阶,共有三十级。明清加以简化,九品只各分正从,共十八
级。隋唐时九品以内的职官称为流内,九品以外的职官称为流外。流
外官经过考铨转授流内官,唐代称为入流。清代不列入九品之内的官
称为未入流。
阶——隋代把有职务的官称为职事官,没有职务的官称为散官。
效果可以的,显存占用6G左右。
多图片
我觉得有必要改代码了,最开始我以为他多图片是一张一张批量执行,然后我没想到的是全部丢到LLM里面去跑,在三百多页的情况下不出意外的炸了。
al)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 27.92 GiB (GPU 0; 22.00 GiB total capacity; 34.16 GiB already allocated; 0 bytes free; 34.96 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
后面改成十张图,能跑,但是输出有些奇怪。
反正迟早要改代码跑并行的,不管了。
结论
是好东西,是可以继续开发的东西,而且不只是文字,线谱等也可以进行OCR,具体看他们提供的benchmark文件夹里面的东西就知道了。
代码原理什么的不解释了,这个AI清楚,先这样折腾吧。