2024.05.29 持续更新中……
1. [2020-IJCAI] TextFuseNet
paper: https://www.ijcai.org/proceedings/2020/72
code: https://github.com/ying09/TextFuseNet
准备预训练权重
https://drive.google.com/drive/folders/18Ll-3bAmi4CR2eGTuM-j6fkMrSAaBV4Z?usp=sharing
踩坑经历:
1、现在不太好找 CUDA10.x + 显存>11G 的服务器,如果想在 CUDA>11 的环境中运行,不能根据官方安装 torch==1.3
和 torchvision==0.4
,只需要正常安装自己服务器匹配的版本(测试满足CUDA=11.x有效)即可。之后流程正常跟readme走。
2、直接 python setup.py install develop
会出问题,大概率报未发现 AT_CHECK
未定义,解决方案:https://github.com/ying09/TextFuseNet/issues/77.
3、detectron2安装成功并不代表配好环境,还是要试一下推理脚本。
个人感悟:感觉按照作者提供的权重比复现出的结果精确度不是很足,会出现很多额外的单字符的预测框。如果只追求召回率可以用。
2. [2022-TPAMI] DBNet++ (MMOCR实现版)
这个我用的 mmocr==0.x
分支进行实验,基础环境是 mmcv==1.7.1
mmdet==2.28.x
mmocr==0.6.3
.
唯一有问题的是 numpy
版本过高会在后处理报错,具体文件地址为 mmocr/models/textdet/postprocess/utils.py
,版本低一点应该只报warning. 我在报错地方加了异常处理,不影响性能。
def unclip(box, unclip_ratio=1.5):
poly = Polygon(box)
distance = poly.area * unclip_ratio / poly.length
offset = pyclipper.PyclipperOffset()
offset.AddPath(box, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
try:
expanded = np.array(offset.Execute(distance))
except:
expanded = np.array([])
return expanded
还有潜在的一个坑是在测试ICDAR2015数据集,后处理默认应当为 quad
,而不是 poly
. 否则将复现不出手册中的性能。这里的poly
比 quad
在IC15上还是要差1.3个点。
3. [2022-TPAMI] ABCNet v2
4. [2023-AAAI] DPText-DETR
paper:https://arxiv.org/pdf/2207.04491v2
code: https://github.com/ymy-k/DPText-DETR
按照readme走基本不会有大的问题,这里放上我自己遇到的三个小问题。
(1) RuntimeError: Not compiled with GPU support
这个解决了最长时间,核心原因是在本地安装 adelaidet
的时候没有在GPU环境下,之后重装需要删除本地的 build
文件夹才可以。
(2) 本地安装Adelaidet缺少第三方库
一般缺少 numba
rapidfuzz
editdistance
三个,pip install xxx
就好
(3) AttributeError: module ‘PIL.Image’ has no attribute ‘LINEAR’
detectron2 与 Pillow 版本不兼容导致,两种解决方案:一个是在报错的地方将 LINEAR
改为 BILINEAR
,一个是安装 pip install Pillow==9.4.0
.
5. [2024-AAAI] SRFormer
paper: https://arxiv.org/abs/2308.10531
code: https://github.com/retsuh-bqw/SRFormer-Text-Det
这里列两个比较容易出现的问题
(1)error in ms_deformable_im2col_cuda: no kernel image is available for execution on the device.
DeformableAttn模块没装好,如果cuda环境没太大问题就使用deformable DETR的源码手动装一下 models/ops
下的库就可以了
(2)检测结果异常,漏检严重
需要根据预训练权重标注的 seg_layers
对应在配置文件中的 configs/SRFormer/Base.yaml
文件中做改动
ps:应该是为了刷点不同的数据集seg_layers都不太一样,感觉这里的设计不太实用。此外之前做过训练在一些数据集上24G显存不太够训练,对于一个文本检测模型来说占用的计算资源还是过于多了。优点是性能确实高。