使用word2vec训练中文维基百科

word2vec是Google于2013年开源推出的一个用于获取词向量的工具包,关于它的介绍,可以先看词向量工具word2vec的学习

获取和处理中文语料

维基百科的中文语料库质量高、领域广泛而且开放,非常适合作为语料用来训练。相关链接:

有了语料后我们需要将其提取出来,因为wiki百科中的数据是以XML格式组织起来的,所以我们需要寻求些方法。查询之后发现有两种主要的方式:gensim的wikicorpus库,以及wikipedia Extractor。

WikiExtractor

Wikipedia Extractor是一个用Python写的维基百科抽取器,使用非常方便。下载之后直接使用这条命令即可完成抽取,运行时间很快。执行以下命令。

相关链接:

相关命令:

相关说明:

  • -b 2048M表示的是以128M为单位进行切分,默认是1M。
  • extracted:需要将提取的文件存放的路径;
  • zhwiki-latest-pages-articles.xml.bz2:需要进行提取的.bz2文件的路径

二次处理:

通过Wikipedia Extractor处理时会将一些特殊标记的内容去除了,但有时这些并不影响我们的使用场景,所以只要把抽取出来的标签和一些空括号、「」、『』、空书名号等去除掉即可。

保存后执行 python filte.py wiki_00 即可进行二次处理。

gensim的wikicorpus库

转化程序:

化繁为简

维基百科的中文数据是繁简混杂的,里面包含大陆简体、台湾繁体、港澳繁体等多种不同的数据。有时候在一篇文章的不同段落间也会使用不同的繁简字。这里使用opencc来进行转换。

中文分词

这里直接使用jieba分词的命令行进行处理:

转换成 utf-8 格式

非 UTF-8 字符会被删除

参考链接:https://github.com/lzhenboy/word2vec-Chinese

继续阅读使用word2vec训练中文维基百科

ImageNet(2010-2017)图像识别数据集

ImageNet 数据集是目前世界上图像识别最大的数据库,根据 WordNet 层次 结构 (目前仅限物体)组织,主要用于机器视觉领域的图像分类和目标检测。其中层次结构的每个节点由数百和数千个图像描绘,每个节点平均有超过 500 个图像,有大约 1500 万张图片,2.2 万类。 ImageNet 数据集于 2009 年由斯坦福大学的李飞飞等人在视觉科学学会(VSS)首次发布,而后自 2010 年起一年一度的 ImageNet 大规模视觉识别挑战(ILSVRC)挑战赛不断完善 ImageNet 数据集。

ImageNet.torrent  需要占用磁盘空间 860.55 GB

参考链接


在ubuntu 18.04(GeForce GTX 760 4GB显存)使用Pytorch Pix2PixGAN(CUDA-10.1)

1. 参照 pytorch 1.0.1在ubuntu 18.04(GeForce GTX 760)编译(CUDA-10.1) 建立 pytorch 1.0.1 的编译环境,并解决编译时遇到的问题。

2. 依旧是推荐在 Anaconda 上建立独立的编译环境,然后执行编译:

编译出错信息,参考 pytorch 1.0.1在ubuntu 18.04(GeForce GTX 760)编译(CUDA-10.1) 里面的介绍解决。

3. 编译安装 TorchVision

4. 检出 CycleGAN and pix2pix in PyTorch 的代码,并安装依赖

执行训练的时候,如果出现如下错误:

这个原因是由于 PyTorch 版本差异造成的,(作者在 Pytorch 0.4.1 版本上测试,我们在 Pytorch 1.0.1 版本上测试),执行如下命令修复:

5. 测试训练结果

参考链接


在ubuntu 18.04(GeForce GTX 760 4GB显存)使用MaskTextSpotter(CUDA-10.1)进行训练

参考 在ubuntu 18.04(GeForce GTX 760 4GB显存)编译/测试MaskTextSpotter(CUDA-10.1) 建立能运行的测试环境。

由于测试集使用的是 icdar2013 ,因此,务必保证已经可以在 icdar2013 数据集中进行测试。

接下来就是进行数据训练:

1. 修改训练脚本,默认情况下,训练脚本中使用了 8 张卡进行训练,我们只有一张卡,因此要调整训练参数

2. 下载训练集 MaskTextSpotter 默认使用的是 SynthText 数据集进行训练,需要先下载这个数据集,大约 40GB

3. 解压缩 SynthText 数据集到指定目录

4. 下载转换后的 SynthText 数据集索引文件,上面解压缩出来的索引是 .mat 扩展名的文件,我们需要转换成 MaskTextSpotter 需要的数据索引文件,作者提供了一份已经转换好的文件,我们直接下载并使用这个文件即可,这个文件大概要 1.6GB 的样子。

5. 生成训练文件 train_list.txt

执行脚本,生成文件

执行测试

注意,我们在 configs/pretrain.yaml 加载的权重文件是 "WEIGHT: "./outputs/finetune/model_finetune.pth" ,这个权重文件是从 SynthText 训练得来的,那么这个"model_finetune.pth"是怎么生成的呢?

作者没有详细介绍,我们从 masktextspotter.caffe2 项目的配置文件中可以知道,这个文件其实是从 " WEIGHTS: https://dl.fbaipublicfiles.com/detectron/ImageNetPretrained/MSRA/R-50.pkl" 开始生成的。这个文件也可以从本站下载 R-50.pkl

R-50.pkl: converted copy of MSRA’s original ResNet-50 model

具体配置文件内容参考如下:

其实我们直接删除或者注释掉权重文件加载部分也是可以的。只是,如果想要复现原作者的测试成果的话,我们最好使用相同的配置信息。

对于 4GB 显存的机器来说,由于显存非常有限,导致非常可能在运行的途中出现 "RuntimeError: CUDA out of memory." ,目前测试来看,继续执行命令即可。

训练结果存储在 outputs/pretrain 目录下,训练结果会在训练到一定阶段之后,存储到这个目录下。

如果出现类似如下错误,请适当减少学习速率 BASE_LR

参考链接


pytorch 1.0.1在ubuntu 18.04(Lenveo Thinkpad T440)编译(CUDA-9.1.85)

目前由于 CUDA-9.1.85 已经不支持 Femi 架构了。

因此如下参数:,

会导致全部的 .cu 文件会全部编译失败,我们只能是从 CUDA-8.x 上进行编译。

老老实实装一个 ubuntu 16.04 编译吧,实体机或者 nvidia-docker ,都可以试试。

目前 ubuntu 18.04 上使用 sudo  apt-get install nvidia-cuda-toolkit 安装的是 9.1.85 版本的 nvidia cuda , 尽管版本比较老,但是好在稳定性好,适用范围广。

当我们的项目需要使用指定版本的 pytorch 的时候,目前官方提供的编译好的 nvidia cuda 安装包并不兼容全部的硬件。这个在实际环境中是比较麻烦的。

目前来说,比较稳妥的办法是直接从源代码编译。

如果显卡是几年前的显卡(GeForce GTX 760  Compute Capability = 3.0 / GeForce GT 720M  Lenveo Thinkpad T440 Compute Capability = 2.1),运行的时候会提示:

执行的时候会报错

硬件的计算能力查询 Recommended GPU for Developers

------------------------------------------------------------------------------------

安装官方软件源的 cuda-9.1.85, 高版本的显卡驱动不支持:

如果安装时报错,如下:

并且 sudo apt --fix-broken install无效,则执行强制包清除命令:

Lenveo T440 Compute Capability = 2.1 不支持 cuDNN ,因此没必要安装 , 其实连最新版本的 CUDA-10.1 也不能安装,原因在于 NVIDIA GT 720M 的驱动只支持到 390 版本,而 CUDA-10.1418 以上的版本才能支持,具体表现在于系统启动后没有加载显卡驱动,dmesg 可以查看到如下信息:

------------------------------------------------------------------------------------

切换 GCC 版本到 GCC-5

------------------------------------------------------------------------------------

依旧是推荐在 Anaconda 上建立独立的编译环境,然后执行编译:

如果出现如下错误:

则需要调整代码 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu, 在其中的 cusparseGetErrorString 函数上增加 #if (!((CUSPARSE_VER_MAJOR >= 10) && (CUSPARSE_VER_MINOR >= 2)))

如下:

这样解决跟 CUDA-10.1自带函数的冲突问题。

具体参考: https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu

源码安装的Pytorch,卸载需要执行:

Pytorch 代码下载非常缓慢,可以本站下载同步好的pytorch源代码

参考链接


在ubuntu 18.04(GeForce GTX 760 4GB显存)编译/测试MaskTextSpotter(CUDA-10.1)

如果需要运行 MaskTextSpotter, 最少需要 4GB 显存,低于这个容量,运行不起来。

安装最新版本的 cuda-10.1,低版本的编译会出问题:

配置独立环境

编译安装 Pytoch

如果出现如下错误:

则需要调整代码 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu, 在其中的 cusparseGetErrorString 函数上增加 #if (!((CUSPARSE_VER_MAJOR >= 10) && (CUSPARSE_VER_MINOR >= 2)))

如下:

这样解决跟 CUDA-10.1自带函数的冲突问题。

具体参考: https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu

编译安装 TorchVision

源代码编译

准备测试数据

执行测试的时候,如果出现如下错误信息:

那么问题出现的原因是maskrcnn_benchmark/data/datasets/icdar.py解析文件的时候,遇到了478,239,511,241,511,255,478,253,$5,000这样的数据,测试代码如下:

修正后的代码如下:

其他错误,可能是中途软件安装卸载造成的软件版本冲突,则直接删除环境,重新创建一个干净的环境重新构建。 

参考链接


pytorch 1.0.1在ubuntu 18.04(GeForce GTX 760)编译(CUDA-10.1)

目前 ubuntu 18.04 上使用 sudo  apt-get install nvidia-cuda-toolkit 安装的是 9.1.85 版本的 nvidia cuda , 尽管版本比较老,但是好在稳定性好,适用范围广。

当我们的项目需要使用指定版本的 pytorch 的时候,目前官方提供的编译好的 nvidia cuda 安装包并不兼容全部的硬件。这个在实际环境中是比较麻烦的。

目前来说,比较稳妥的办法是直接从源代码编译。

如果显卡是几年前的显卡(GeForce GTX 760  Compute Capability = 3.0 / GeForce GT 720M  Lenveo Thinkpad T440 Compute Capability = 2.1),运行的时候会提示:

执行的时候会报错

硬件的计算能力查询 Recommended GPU for Developers

------------------------------------------------------------------------------------

安装最新版本的 cuda-10.1,低版本的编译会出问题:

安装 cuDNN 去官网下载对应版本的 cuDNN 一共是三个安装包,逐个安装即可。

Lenveo T440 Compute Capability = 2.1 不支持 cuDNN ,因此没必要安装 , 其实连最新版本的 CUDA-10.1 也不能安装,原因在于 NVIDIA GT 720M 的驱动只支持到 390 版本,而 CUDA-10.1418 以上的版本才能支持,具体表现在于系统启动后没有加载显卡驱动,dmesg 可以查看到如下信息:

------------------------------------------------------------------------------------

依旧是推荐在 Anaconda 上建立独立的编译环境,然后执行编译:

如果出现如下错误:

则需要调整代码 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu, 在其中的 cusparseGetErrorString 函数上增加 #if (!((CUSPARSE_VER_MAJOR >= 10) && (CUSPARSE_VER_MINOR >= 2)))

如下:

这样解决跟 CUDA-10.1自带函数的冲突问题。

具体参考: https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu

源码安装的Pytorch,卸载需要执行:

Pytorch 代码下载非常缓慢,可以本站下载同步好的pytorch源代码

参考链接


树莓派4B使用ARM Compute Library运行AlexNet

继续阅读树莓派4B使用ARM Compute Library运行AlexNet

Why GEMM is at the heart of deep learning

I spend most of my time worrying about how to make deep learning with neural networks faster and more power efficient. In practice that means focusing on a function called GEMM. It’s part of the BLAS (Basic Linear Algebra Subprograms) library that was first created in 1979, and until I started trying to optimize neural networks I’d never heard of it.
继续阅读Why GEMM is at the heart of deep learning