搭建CTPN网络(基于windows与tensorflow)

2.1.1.CTPN介绍

CTPN模型主要包括三个部分,分别是卷积层、Bi-LSTM层、全连接层,其结构如下图所示

特征提取

在这里插入图片描述

LSTM
在这里插入图片描述

汇聚结果:

在这里插入图片描述

ctpn过程
那么ctpn是怎么把这一行文字给框出来的呢,它是首先把这一行里的每个字给框出来,然后把所有的字的框合并,就得到一行文字的框,那么它是怎么把每个字给框出来呢,这就是和目标检测一样的呢,借鉴了faster rnn的思想,也是最后一个feature map每个像素点生成若干个ancor,与真实框重合最大的ancor负责预测,然后将每个文字的预测ancor先送到lstm网络中提取特征,然后再送到全连接层,进行目标置信度分类,横向中心点偏移回归、竖向中心点、竖向长度回归,训练完了之后对每个文字的预测ancor加上训练好的偏移量就得到了每个文字修正后的预测ancor了,然后将所有修正后的ancor合并就得到了一行文字的预测框
注意:
为什么每个文字生成的预测ancor要先送到lstm网络中提取特征,然后再送到全连接层去分类和回归,而一般的目标检测网络比如faster rcnn可能是直接送到全连接层进行回归和分类的,原因是因为像一般的目标检测网络它检测图片上的某个目标都是人啊,动物啊,还有其它的目标啊,,它们之间是没有前后关系的,而一行文字里面的每个文字都是有前后关系的,所以需要将每个文字生成的ancor先送到lstm中提取特征,然后再来回归和分类。

2.1.2.安装nms and bbox

GIT clone下载https://github.com/eragonruan/text-detection-ctpn

Git下载ctpn后,要进行下面步骤,生成 nms.so and a bbox.so(so是Linux下动态库文件)
nms and bbox utils are written in cython, hence you have to build the library first.
cd utils/bbox
chmod +x make.sh
./make.sh

因为我是windows7,所以直接打开make.sh文件,看到里面内容,其实运行python setup.py install即可。
因为是windows,所以没有生成 nms.so and a bbox.so。但生成了bbox.cp37-win_amd64.pyd、nms.cp37-win_amd64.pyd(pyd是其他语言写的python库),可以看看windows章节如何使用这两个文件。

2.1.3.Cython

如上所述,需要先安装cython。Pip install Cython。

扫描二维码关注公众号,回复: 10132281 查看本文章

C语言是编译性语言,而Python则是解释性语言,简而言之,就是Python运行是逐行运行,不需要实现编译,而C需要在运行前编译。那么,可想而知,如果运行前,需要事先编译,那么其实有一种“上帝视角”的感觉,自然可以做很多优化,让代码运行的更快。而Cython的出现就是这个目的,让Python也可以被编译,然后执行。Cython是一种部分包含和改变C语言,以及完全包含pyhton语言的一个语言集合。Cython是用Python实现的一种语言,可以用来写Python扩展,用它写出来的库都可以通过import来载入,性能上比Python的快。Cython里可以载入Python扩展(比如 import math),也可以载入C的库的头文件(比如:cdef extern from “math.h”),另外也可以用它来写Python代码。将关键部分重写成C扩展模块。Cython中的强大之处在于可以把Python和C结合起来,它使得看起来像Python语言的Cython代码有着和C相似的运行速度。

2.1.4.安装VC++

运行make.sh文件内容的python setup.py install时出现下面错误error: Unable to find vcvarsall.bat。需要安装vc++, Cython 需要c语音环境吧。我安装了绿色版vc++不行,换成安装visual studio 2017,选择插件vc++。

我电脑比较老吧,visual studio 2019 安装不上,就安了2017.结果上面 Unable to find vcvarsall.bat错误不报了,又报下面错误:
c:\programdata\anaconda3\include\pyconfig.h(59): fatal error C1083: 无法打开包括
文件: “io.h”: No such file or directory
在这里插入图片描述

最终又通过visual studio安装工具,安装了windows 10 sdk 才可以运行成功。
1.Visual C++ Build tools core features.
2.VC++ 2017 v141 toolset (x86,x64)
3.Visual C++ 2017 Redistributable Update
4.Windows 10 SDK (10.0.16299.0) for Desktop C++
在这里插入图片描述

2.1.5.运行ctpn demo

download the ckpt file from googl drive or baidu yun(此步骤也是必须,ckpt 是预训练的模型)
put checkpoints_mlt/ in text-detection-ctpn/(上一步下载的文件)
put your images in data/demo, the results will be saved in data/res, and run demo in the root
python ./main/demo.py
终于可以运行demo了,但还是有不少问题要解决,比如TensorFlow兼容性,windows问题等,详见下面章节。

2.1.6.Opencv

运行python ./main/demo.py时报下面错误:ModuleNotFoundError: No module named ‘cv2’

故需要安装下opencv,命令是:pip install opencv-python
国内镜像地址:https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/

opencv是一个强大的图像处理和计算机视觉库,实现了很多实用算法。
表1:当前 OpenCV 所拥有的模块
模块 说明
Core 该模块包含 OpenCV 库的基础结构以及基本操作。
Improc 图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。
Highgui 在 OpenCV 3.0中,分割为 imcodecs、videoio 以及 highgui 三部分。

这个模块包含可以用来显示图像或者简单的输入的用户交互函数。这可以看作是一个非常轻量级的 Windows UI 工具包。
Video 该模块包含读取和写视频流的函数。
Calib3d 这个模块包括校准单个、双目以及多个相机的算法实现。
Feature2d 这个模块包含用于检测、描述以及匹配特征点的算法。
Objdectect 这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。
Ml 机器学习模块本身是一个非常完备的模块,包含大量的机器学习算法实现并且这些算法都能和 OpenCV 的数据类型自然交互。
Flann Flann 的意思是“快速最邻近库”。这个库包含一些你也许不会直接使用的方法,但是其他模块中的函数会调用它在数据集中进行最邻近搜索。
GPU 在 OpenCV 中被分割为多个 cuda* 模块。

GPU 模块主要是函数在 CUDA GPU 上的优化实现,此外,还有一些仅用于 GPU 的功 能。其中一些函数能够返回很好的结果,但是需要足够好的计算资源,如果硬件没有GPU,则不会有什么提升。
Photo 这是一个相当新的模块,包含计算摄影学的一些函数工具。
Stitching 本模块是一个精巧的图像拼接流程实现。这是库中的新功能,但是,就像 Photo 模块一样,这个领域未来预计有很大的增长。
Nonfree 在 OpenCV 3.0 中,被移到 opencv_contrib/xfeatures2d。

OpenCV 包含一些受到专利保护的或者受到使用限制的(比如 SIFT 算法)算法。这些算法被隔离到它们自己的模块中,以表明你需要做一些特殊的工作,才可以在商业产品中使用它们。
Contrib 在 OpenCV 3.0 中,融合进了 opencv_contrib。

这个模块包含一些新的、还没有被集成进 OpenCV 库的东西。
Legacy 在 OpenCV 3.0 中,被取消。

这个模块包含一些老的尚未被完全取消的东西。
ocl 在OpenCV 3.0 中,被取消,取而代之的是 T-API。

这是一个较新的模块,可以认为它和 GPU 模块相似,它实现了开放并行编程的 Khronos OpenCL 标准。虽然现在模块的特性比 GPU 模块少很多,但 ocl 模块的目标是提供可以运行在任何 GPU 或者是其他可以搭载 Khronos 的并行设备。这与 GPU 模 块形成了鲜明的对比,后者使用 Nividia CUDA 工具包进行开发,因此只能在 Nividia GPU 设备上工作。

2.1.7.Tensorflow 2.0与contrib

我本地安装的是TensorFlow2.0,运行python ./main/demo.py时报错,ImportError: No module named ‘tensorflow.contrib’。是tf 2.0 把tf.contrib砍了。contrib模块的成长,超出了TensorFlow团队 (在一个repo里) 能维护的范围。
在这里插入图片描述

tensorflow官方对该 contrib 库的定位是:此目录中的任何代码未经官方支持,可能会随时更改或删除。每个目录下都有指定的所有者。它旨在包含额外功能和贡献,最终会合并到核心TensorFlow中,但其接口可能仍然会发生变化,或者需要进行一些测试,看是否可以获得更广泛的接受。(包括下文的 slim)不属于 tensorflow 原生支持的。
tensorflow.contrib.layers
tf.contrib.layers.xavier_initializer():一种经典的权值矩阵的初始化方式;

TensorFlow 2.x版本将彻底抛弃TF-slim接口,所以升级TF-slim接口程序会有较大的工作量。官方网站给出的指导建议是:如果手动将TF-slim接口程序转化为tf.layers接口实现,则可以满足基本使用;如果想与TensorFlow 2.x版本结合得更加紧密,则可以再将其转化为tf.keras接口。

看来我只有再退回tensorflow1.x了,我退到了1.15.0,重写cptn的contirb工作量应该比较大。

Pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==1.15.0
国内镜像安装速度快。
在这里插入图片描述

2.1.8.Windows

我的电脑是windows7 ,而git上的cptn(text-detection-ctpn)是基于linux弄的。运行python ./main/demo.py时,还是会找bbox.so文件. 下面是git issues上一位同仁提供的方法,我本地跑通了。参考https://github.com/eragonruan/text-detection-ctpn/issues/359。

my environment is:
windows10 ,
python3.7 ,
tensorflow1.13 ,
vs2019
step 1:make some change
change "np.int_t " to “np.intp_t” in line 25 of the file lib\utils\bbox\nms.pyx
otherwise appear " ValueError: Buffer dtype mismatch, expected ‘int_t’ but got ‘long long’ " in step 6.
step 2:updata c file
execute:cd your_dir\text-detection-ctpn-master\lib\utils\bbox
execute:cython bbox.pyx
execute:cython nms.pyx
step 3:create setup file as setup_new.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(“nms.pyx”),include_dirs=[numpy_include])
step 4:build .pyd file
execute:python setup_new.py install
copy bbox/build/bbox.cp36-win_amd64.pyd and cython_nms.cp36-win_amd64.pyd to your_dir\text-detection-ctpn-master\lib\utils\bbox
step 5:run demo
execute:cd your_dir\text-detection-ctpn-master
execute:python ./ctpn/demo.py

2.1.9.CTPN Demo运行成功

运行python ./main/demo.py

在这里插入图片描述
在这里插入图片描述

运行前图片:
在这里插入图片描述

运行后图片:
在这里插入图片描述

发布了21 篇原创文章 · 获赞 18 · 访问量 1457

猜你喜欢

转载自blog.csdn.net/zephyr_wang/article/details/104200499