PixelLink实验(一)
项目工程文件下载(SSH key的添加)
本周开始进行PixelLink模型的实验,从Github下载了作者的项目工程文件:
git clone --recursive [email protected]:ZJULearning/pixel_link.git
这里涉及到添加SSH key的问题,之前没有添加所以执行失败。SSH(Secure Shell)是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。通过加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。SSH key最直观的作用:让你方便的登录到 SSH 服务器,而无需输入密码。由于你无需发送你的密码到网络中,SSH **对被认为是更加安全的方式。
添加SSH key需要执行以下几步:
第一步,在终端输入:
ssh-****** -t rsa -C "username"
username是电脑上的用户名。
第二步,一路回车,在/Users/your username/.ssh/id_rsa already exists.Overwrite (y/n)?中输入y,代表存储地址已成功设置。
SSH key成功生成,地址为/Users/username/.ssh/id_rsa.pub.
第三步,执行cat命令查看文件内容:
cat /User/username/.ssh/id_rsa.pub
内容为:
ssh-rsa ..............
第四步,把它整段复制到Github-Settings-SSH and GPG keys中即可成功添加。
环境搭建
第一步,添加PYTHONPATH
export PYTHONPATH=$pixel_link_root/pylib/src:$PYTHONPATH
其中,pixel_link_root是我命名的项目工程的根路径,lib/src中包含util文件夹,其中有项目需要的各种库。
但是这里出现一点小问题,在服务器添加路径后运行是没有问题的,但是在本地使用Pycharm同步时就会出现ImportError: no module named util。尝试将pylib/src的本地路径添加进去:
import sys
import os
sys.path.insert(0, os.path.join('/home/gd/pixel_link_root/pylib/src'))
import util
本地就没有报错了。
第二步,虚拟环境搭建,使用anaconda3管理环境十分方便。作者提供了一份环境的txt文件,所以只需要一行就可以:
conda env create --file pixel_link_env.txt
source activate pixel_link
就可以在anaconda的envs文件夹中看见pixel_link的虚拟环境了。
实验需要的环境主要有:
- ubuntu14.04/16.04
- python2.7
- Tensorflow_gpu >= 1.1
- opencv2
- setproctitle
- matplotlib
测试模型效果
第一步,下载预训练模型,根据论文PixelLink有两个模型,分别是2s和4s。作者分别提供了这两种模型在IC15数据集下的预训练模型:
- PixelLink + VGG16 4s Baidu Netdisk | GoogleDrive, trained on IC15
- PixelLink + VGG16 2s Baidu Netdisk | GoogleDrive, trained on IC15
解压后包含四个文件:
- config.py
- model.ckpt-xxx.data-00000-of-00001
- model.ckpt-xxx.index
- model.ckpt-xxx.meta
将它们放入model_path文件夹中。
第二步,下载ICDAR2015数据集,将其放入dataset文件夹中。
第三步,运行test.sh:
cd pixel_link_root
./scripts/test.sh 3 ./model_path/conv3_3/model.ckpt-38055 ./dataset/ICDAR2015/test/images
其中,3表示GPU_ID。在跑实验之前先看看GPU的使用情况,具体命令是:
nvidia-smi
运行完毕后会生成一个检测结果的zip文件,其内容是txt文件,记录了boundingbox的位置坐标,无法直接可视化结果。作者在项目文件里提供了一个脚本scripts/vis.sh,运行即可生成带有boundingbox的图片,部分检测效果如下图所示:
成功案例
对大型文字(multi-scale)检测效果也不是太好,可能是感受野的问题,需要思考原因。
P、R、F的计算评估考虑在ICDAR官网下载官方提供的脚本:登录ICDAR2015官网(必须注册)- Challenges - Incidental Scene Text - My Methods
下载红框脚本即可。
运行命令:
python script.py –g gt.zip –s submit.zip -p '{"LTRB":true,"E2E":true}'
或者直接把zip文件上传,点击深蓝色按钮Submit results on test set…也可以。
实验使用4s模型,检测结果是P:82.9 R:81.7 F:82.3
与论文中的结果完全一致。
测试任意图片
如果想要测试任意的图片,那么将想测试的图片放入文件夹image_dir,然后
cd pixel_link_root
./scripts/test_any.sh ${GPU_ID} ${model_path}/model.ckpt-xxx ${image_dir}
这个检测结果是可以直接在图片上可视化的。如果对检测结果不满意的话,要么玄学调参(调整eval_image_width, eval_image_height, pixel_conf_threshold, link_conf_threshold等等),要么训练自己的模型。
训练自己的模型
以ICDAR2015数据集举例。
首先,将其转换为tensorflow可接受的tfrecord格式,参考我之前的博客,或者用作者写的脚本都可以。
在scripts/train.sh中修改数据集的名字和路径:
DATASET=icdar2015
DATASET_DIR=$HOME/pixel_link_root/dataset/ICDAR2015
运行命令:
./scripts/train.sh ${GPU_IDs} ${IMG_PER_GPU}
下一篇的工作
下载CTW-1500数据集和Total-text数据集,跑一下看看效果。
参考文献:
https://www.jianshu.com/p/1246cfdbe460 (SSH key)
https://blog.****.net/u011489887/article/details/85767651 (可视化脚本)