文本检测算法一:CTPN
CTPN源码解析1-数据预处理split_label.py
CTPN源码解析2-代码整体结构和框架
CTPN源码解析3.1-model()函数解析
CTPN源码解析3.2-loss()函数解析
CTPN源码解析4-损失函数
CTPN源码解析5-文本线构造算法构造文本行
CTPN训练自己的数据集
主要目的是复现CTPN,检验一下它检测文本的能力,看是否能应用在项目上,顺便将复现过程及过程中遇到的问题记录下来。
CTPN是什么?
CTPN结合CNN与LSTM深度网络,CTPN是从Faster R-CNN改进而来:知乎:一文读懂Faster RCNN,从编程实现角度学习Faster R-CNN(附极简实现)
CTPN能有效的检测出复杂场景的横向分布的文字,是目前比较好的文字检测算法,效果如下图。CTPN论文 tensorflow代码
下面记录一下复现过程:
环境:win10+anaconda3+pycharm+python3.7+tensorflow1.10+vs2015_runtime
一 代码修改
- 在文件 ./ctpn/text.yml 设置 "USE_GPU_NMS " as "False"
- 在文件 ./lib/fast_rcnn/config.py 设置 "__C.USE_GPU_NMS" 为 "False";
- 在文件 ./lib/fast_rcnn/nms_wrapper.py 中,注释掉 "from lib.utils.gpu_nms import gpu_nms" ;
- 在文件lib \ utils \ cython_nms.pyx的第26行进行一些更改“np.int_t”更改为“np.intp_t” 否则出现“ValueError:Buffer dtype mismatch,expected'int_t'但得到'long long' “在第6步。
- 在文件 \text-detection-ctpn-master\lib\rpn_msr\proposal_layer_tf.py中的第53行加入“cfg_key=cfg_key.decode('utf-8')”
- 在文件“ctpn \ demo.py”的第29行中,将“base_name = image_name.split('/')[ - 1]”更改为“base_name = image_name.split('\\')[ - 1]”
二 重新编译文件
打开anaconda prompt,激活tensorlow环境,进入到路径“\ text-detection-ctpn-master \ lib \ utils ”中去(Anaconda Prompt 怎么切换工作路径到E盘);
- 执行 cython bbox.pyx
- 执行 cython cython_nms.pyx
我的处理截图:处理完后,cython_nms和bbox的修改日期会发生改变。
三 重建setup文件
打开文件夹”text-detection-ctpn-master\lib\utils“,新建一个setup_cpu.py文件,文件代码如下所示:
import numpy as np
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
numpy_include = np.get_include()
setup(ext_modules=cythonize("bbox.pyx"),include_dirs=[numpy_include])
setup(ext_modules=cythonize("cython_nms.pyx"),include_dirs=[numpy_include])
四 重新编译
打开vs2015 X64 本机工具命令提示符,激活tensorflow环境,进入”text-detection-ctpn-master\lib\utils“,
执行下列代码:
python setup_cpu.py build_ext --inplace
执行完会在文件夹”text-detection-ctpn-master\lib\utils\lib\utils“中生成2个pyd文件,分别为:
- “bbox.cp36-win_amd64.pyd”
- “cython_nms.cp36-win_amd64.pyd”
将这两个文件复制到“text-detection-ctpn-master\lib\utils”。
我的处理截图:处理完后,会在utils文件下生成两个文件夹,分别是build文件夹和lib文件夹,pyd文件在lib文件夹下。
五 运行demo
在运行demo前需要下载checkpoints训练好的模型到工程环境中去,下载完了直接解压成文件夹放到root目录下!类似于下图:
在anaconda prompt中,激活tensorflow环境进入到工程root路径下(Pycharm中运行demo.py也行,其他IDE也行,反正就是要运行demo.py)。
python .\ctpn\demo.py
1)运行发现以下错误:
解决方法:此处我是将其他文件夹放到了ctpn文件夹里
2)继续运行demo.py,又出现了下面这个问题
解决方法:将77行代码,改成了用绝对路径:
cfg_from_file('E:/sxl_Programs/Python/TextDetector/CTPN/text-detection-ctpn-master/ctpn/text.yml')
3)继续运行demo.py,又出现了下面这个问题:
尝试方法:.\ctpn\lib\fast_rcnn文件夹下config.py,148行的路径设置有问题,不过直接在这里改没有用,改完后在demo中还是按默认路径读取。
最终解决方法:将demo.py,89行diamagnetic改成:
ckpt = tf.train.get_checkpoint_state('./checkpoint/') #cfg.TEST.checkpoints_path
六 如果出现以下界面就证明成功运行了。
七,效果图
在下载的文件包里自带的几张图片的基础上,我加了几张图(11,12,16,19,31),测试一下效果,效果如下: