转自:走近CTPN:1. 解读README_coasxu的博客-CSDN博客
本文链接:https://blog.csdn.net/weixin_44633882/article/details/90714222
我第一个读源码并复现的检测类神经网络就是CTPN(Connectionist Text Proposal Network),由于对Tensorflow的不了解,还有对网络流程的不熟悉,导致第一次读源码十分困难,也请教了一些人,才算是理解了整个网络。
相信有别的同学想要理解CTPN,但存在一些疑惑没有解决。这里希望能帮助到你们,若能帮助到你们,这篇博客就不只是我的记录,而是被赋予了更多的价值。
若有人认为本文有地方有误,请及时和我联系,非常欢迎交流沟通。
不再闲聊,让我们开始吧!
我参考的代码是来自于 https://github.com/eragonruan/text-detection-ctpn
首先来说明如何按README.md运行源码,补充一些注意点。好让需要用的人能尽快使用。
Test 直接跑demo
因为作者的代码和模型都提供了,我们可以直接拿来运行。接下来分析README.md.
1. git clone 不必多解释
2. setup 编译cpython实现的nms和bbox
为什么要使用cpython来实现nms和bbox呢?因为python实现速度太慢。
cd utils/bbox
chmod +x make.sh
./make.sh
1
2
3
make.sh文件
运行结果是产生bbox.cpython-35m-x86_64-linux-gnu.so和nms.cpython-35m-x86_64-linux-gnu.so两个文件,这样就可以直接像调用库一样调用了。
python setup.py install // 对nms和bbox创建动态链接库
mv build/*/*.so ./ // 移动到主目录
rm -rf build/ // 删除build文件夹
1
2
3
具体更多配置细节和问题,可以参考我的博客文章CTPN/Faster-RCNN中使用cpython对overlap计算加速
3. demo
先完成2.setup建立链接库
从百度云或者google drive下载模型(ckpt文件)
把下载得到的checkpoints_mlt/文件夹放入text-detection-ctpn/项目文件夹
把你图片放入data/demo,就可以直接使用了,结果会被保存在data/res,在项目根目录运行demo
python ./main/demo.py
1
Train 训练自己的模型
1. prepare dataset 准备数据集
下载VGG16 net预训练模型vgg_16.ckpt,放到data/文件夹中。下载地址tensorflow/models
关于预训练模型在Tensorflow中的使用,参考我的博客文章Tensorflow如何直接使用预训练模型(vgg16为例)
下载数据集,作者收集了一份ICDAR2017(Multi-lingual scene text detection)数据集,下载地址:google drive或百度云,将下载的数据放到data/dataset/mlt,就可以开始训练啦。
注意: 这个作者要求的ground truth(标签),和常用的不太一样。如果你看过论文,就会知道它的anchor(候选框)的宽度都是16。所以,GT(标签)——由4个点围成的矩形,宽度也是16。(对原数据集做切分)
这里清楚地描述:比如( 0 , 0 ) , ( 60 , 32 ) (0,0),(60,32)(0,0),(60,32)四个点围成一个矩形。
做了切分之后,变成了32 / 16 = 2 32/16=232/16=2个anchors. 每个anchor的宽度都为16
作者提供的上面的mlt数据集,已经切分好的。如果没有切分,或者说你想用自己的数据集,怎么修改标签呢?
2. other datasets 其他的数据集
作者提供了split_label.py函数来让我们切分数据集。
修改utils/prepare/split_label.py中的DATA_FOLDER和OUTPUT,对应到你自己的数据集。
DATA_FOLDER = "/media/D/DataSet/mlt_selected/"
OUTPUT = "data/dataset/mlt/"
1
2
在根目录运行run split_label.py
python ./utils/prepare/split_label.py
1
数据集格式
文件内容:x 0 , y 0 , x 1 , y 1 x0,y0,x1,y1x0,y0,x1,y1
输入文件名:gt_img_XXX.txt
输出文件名: img_XXX.txt
在图像中显示GT
3. train
run train.py即可
python ./main/train.py
1
作者提到checkpoints_mlt模型是在GTX 1070上训练了50k iters. 每个iter使用0.25s.大概需要3.5h来完成50k iters.