您的位置:首页 > Web前端

使用SSD训练文本检测

2017-06-29 16:23 155 查看

0 介绍

根据李斯琦操作步骤总结如下:

原项目地址:weiliu89/caffe

所用数据地址:Robust Reading Competition Challenge 2: Reading Text in Scene Images 本文以此数据为例,生成ssd训练所用的lmdb格式。

使用ssd进行文本检测的项目:chenxinpeng/SSD_scene_text_detection

使用ssd进行文本检测的博客 SSD: Signle Shot Detector 用于自然场景文字检测

注意:

(1)我没有直接将此项目中文件放入ssd weiliu89/caffe的目录中,而是把此项目放入ssd同级目录下,这样比较清楚。当然路径要注意修改。

(2)所有代码及说明已经放到github上。地址:ZhangXinNan/SSD_scene_text_detection

(3)我的目录结构如下:

github
caffe_ssd
SSD_scene_text_detection


1 SceneText数据介绍

下载数据解压后,有两个文件夹,test-textloc-gt和train-textloc,我们把它放到 xx/SSD_scene_text_detection/data/scenetext下边。目录结构如下

SSD_scene_text_detection
data
scenetext
test-textloc-gt
train-textloc


那两个文件夹下分别有xxx.jpg和gt_xxx.txt,xxx代表一个数字,gt_xxx.txt代表xxx.jpg所对应的标注数据,例如less data/scenetext/train-textloc/gt_100.txt

158,128,412,182,"Footpath"
442,128,501,170,"To"
393,198,488,240,"and"
63,200,363,242,"Colchester"
71,271,383,313,"Greenstead"


每一行代表一个字符区域的标信息,每行有5列,用逗号分隔,前4列代表坐标,最后1列代表字符内容。

2 生成转lmdb所用文件

2.1 生成trainval.txt和test.txt

2.1.1 生成标注的xml文件

先将给定的 gt_**.txt 标签文件转换为 Pascal VOC XML 格式。

见代码create_xml.py

代码中是把xml文件也放到了jpg和txt文件所放目录。例如:

data/scenetext/test-textloc-gt/156.jpg
data/scenetext/test-textloc-gt/156.xml
data/scenetext/test-textloc-gt/gt_156.txt


2.1.2 生成文件列表

见代码create_train_test_file.py

生成的文件trainval.txt和test.txt直接放到了data/scenetext目录下

SSD_scene_text_detection
data
scenetext
test-textloc-gt
train-textloc
test.txt
trainval.txt


2.2 生成test_name_size.txt

见代码test_name_size.py,得到train_name_size.txt和test_name_size.txt

SSD_scene_text_detection
data
scenetext
test-textloc-gt
train-textloc
test.txt
trainval.txt
test_name_size.txt
train_name_size.txt


2.3 生成labelmap_voc_scenetext.prototxt

创建文件labelmap_voc_scenetext.prototxt,填写如下:

item {
name: "none_of_the_above"
label: 0
display_name: "background"
}
item {
name: "text"
label: 1
display_name: "text"
}


3 生成lmdb

sh create_lmdbdata_scenetext.sh


注意:

1. 修改一下caffe_root的路径(编译caffe版ssd的目录)。

例如:caffe_root=/data/zhangxin/github/caffe_ssd

2. 设置caffe/python的目录

例如: export PYTHONPATH=/data/dmcvcache/zhangxin/caffe_ssd/python

3. 如果遇到ImportError: No module named skimage.io

则:安装 一下, pip install scikit-image

4. 需要在caffe_ssd/models/VGGNet/目录下存放下载好的VGG_ILSVRC_16_layers_fc_reduced.caffemodel文件。

5. 错误:

F0628 14:18:57.290895 33280 relu_layer.cu:26] Check failed: error == cudaSuccess (11 vs. 0)  invalid argument
*** Check failure stack trace: ***
@     0x7fdf009ffe6d  (unknown)
@     0x7fdf00a01ced  (unknown)
@     0x7fdf009ffa5c  (unknown)
@     0x7fdf00a0263e  (unknown)
F0628 14:18:57.298449 33281 relu_layer.cu:26] Check failed: error == cudaSuccess (11 vs. 0)  invalid argument
*** Check failure stack trace: ***
@     0x7fdf0a9b0ea0  caffe::ReLULayer<>::Forward_gpu()
@     0x7fdf009ffe6d  (unknown)
@     0x7fdf0a796435  caffe::Net<>::ForwardFromTo()
@     0x7fdf00a01ced  (unknown)
@     0x7fdf0a7967a7  caffe::Net<>::Forward()
@     0x7fdf009ffa5c  (unknown)
F0628 14:18:57.298449 33281 relu_layer.cu:26] Check failed: error == cudaSuccess (11 vs. 0)  invalid argumentF0628 14:18:57.304498 33225 relu_layer.cu:26] Check failed: error == cudaSuccess (11 vs. 0)  invalid argument
*** Check failure stack trace: ***
@     0x7fdf00a0263e  (unknown)
@     0x7fdf0a907ba8  caffe::Solver<>::Step()
@     0x7fdf009ffe6d  (unknown)
@     0x7fdf0a90da66  caffe::P2PSync<>::InternalThreadEntry()
@     0x7fdf00a01ced  (unknown)
@     0x7fdf0a9b0ea0  caffe::ReLULayer<>::Forward_gpu()
@     0x7fdf0a8feea0  caffe::InternalThread::entry()
@     0x7fdf009ffa5c  (unknown)
@     0x7fdf0a796435  caffe::Net<>::ForwardFromTo()
@     0x7fdefed0224a  (unknown)
@     0x7fdf00a0263e  (unknown)
@     0x7fdefb853df3  start_thread
@     0x7fdf0a7967a7  caffe::Net<>::Forward()
@     0x7fdf0a9b0ea0  caffe::ReLULayer<>::Forward_gpu()
@     0x7fdefb5813dd  __clone
^C[1]+  Done                    nohup python ssd_icdar_scenetext.py

You have mail in /var/spool/mail/root


解决方法:

I added the following lines to commands using multiple “arch” flags in Nvidia's NVCC compiler, and the error does not occur anymore.

-gencode=arch=compute_20,code=\"sm_20,compute_20\"
-gencode=arch=compute_30,code=\"sm_30,compute_30\"
-gencode=arch=compute_35,code=\"sm_35,compute_35\"
-gencode=arch=compute_50,code=\"sm_50,compute_50\"


4 训练

python ssd_icdar_scenetext.py


5 检测

使用ssd_detect.py,根据caffe_ssd目录下 examples/ssd_detect.ipynb 重写。

使用方法:

python ssd_detect.py \
--gpu_id 0 \
--labelmap_file data/scenetext/labelmap_voc_scenetext.prototxt \
--model_def models/VGGNet/scenetext/SSD_300x300/deploy.prototxt \
--image_resize 300 \
--model_weights models/VGGNet/scenetext/SSD_300x300/VGG_scenetext_SSD_300x300_iter_50000.caffemodel \
--image_file data/scenetext/test-textloc-gt/101.jpg
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐