在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运行时提示'ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.'

在测试编译FOTS 的时候,出现如下错误:

最省事的情况是降级pytorch版本到0.4,强烈建议使用Anaconda创建独立的Python开发环境,然后在干净的环境中运行。

参考链接


Tensorflow中same padding和valid padding

  • Same Convolution Padding

我之前学习吴恩达老师的课程时,了解到的same padding是指在输入周围填充0,以使卷积操作后输入输出大小相同。而在tensorflow中的same padding却不是这样的。

要理解tensorflow中的same padding是如何操作的,先考虑一维卷积的情况。

ni和no分别表示输入和输出的大小,k为kernel大小,s为stride步长。那么在same padding中,no由ni和s二者确定:no = ceil(ni / s)

比如,假设ni为11,s为2,那么就得到no为6。而s若为1,则输入输出大小相等。

现在已经确定好了输出no的大小,接下来就要确定如何对输入ni进行pad来得到目标输出大小。也就是要找到满足下面公式的pi:

继续阅读Tensorflow中same padding和valid padding

卷积神经网络在ARM-CPU上的推断计算综述

摘要


  深度学习在计算机视觉领域大放异彩,许多在传统方法下无法解决的问题正在被一一攻克。然而,高昂的计算成本也极大地限制了深度学习的使用,在移动端设备、嵌入式设备等计算资源比较拮据的平台上其计算密集的特性尤为突出。本文对现阶段,工业界所使用的深度学习推断阶段的软件操作库、计算框架等,做了充分调研,由底向上勾勒出深度学习推断阶段的技术轮廓。本文主要工作如下:

  1. 总结深度学习推断阶段的主要操作,指出其性能瓶颈所在;
  2. 从软件库层面总结现阶段可用的开源库;
  3. 对比各层次的软件库,做出总结。

深度学习推断的主要操作


  对于大部分的卷积神经网络而言,卷积层是最消耗时间的部分,而全连接层则是参数量最多的部分[2]。 如下图所示[10]为 2012 年获得imagenet冠军的深度神经网络结构Alexnet分别在GPU和CPU进行推断的性能benchmark,由图可以看出,在CPU上卷积层和全连接层占用了95%的计算时间,而在CPU上卷积层和全连接层占用了89%的时间,如何高效地进行卷积层和全连接层的计算成为提升深度学习推断性能的关键点。

继续阅读卷积神经网络在ARM-CPU上的推断计算综述

卷积与反卷积、步长(stride)与重叠(overlap)及output的大小

1. 卷积神经网络的基础概念

        卷积神经网络是一种专门用来处理具有类似网络结果的数据的神经网络。至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。

        最核心的几个思想:稀疏交互、参数共享、等变表示(通俗成为平移不变性)。根本目的说白了就是为了节省运算时间和空间。那接下来看一下是怎么实现的。

1.0 卷积

         用一张图展示一下,卷积的计算。element-wise multiply 然后再相加。

继续阅读卷积与反卷积、步长(stride)与重叠(overlap)及output的大小

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

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

国内访问Coursera网站上的教学视频

最近在通过 Coursera 网站学习 Andrew Ng机器学习 课程,但是发现网站上的视频无法正常播放。

抓包分析发现课程的视频是通过 Amazoncloudfront.net 进行加速的,解决方法就是指定一个不被屏蔽的 IP地址即可。

/etc/hosts 中指定解析地址,如下:

参考链接


Coursera的视频为什么打不开了?

 Andrew Ng机器学习课程相关资料

Andrew Ng 的机器学习课程的视频,由于需要翻墙,因此在这里简单提供一下本站的下载链接。

Mathematics Behind Large Margin Classification

第七周


Support Vector Machines Kernels I

Support Vector Machines Kernels II

UsingAnSVM

讲座幻灯片 Lecture12 Support Vector Machines
编程作业: Support Vector Machines

第八周


讲座幻灯片 Lecture14 K-Means Clustering And PCA
编程作业: K-Means Clustering and PCA

第九周


Density Estimation

Problem Motivation

Gaussian Distribution

Algorithm

Building an Anomaly Detection System

第十周


Learning With Large Datasets

Stochastic Gradient Descent

第十一周


Problem Description and Pipeline

Ubuntu 16.04.3系统上OpenPTrack V1版本安装配置(Kinect V2)

对于Ubuntu 14.04.5系统上的安装操作,请参考Ubuntu 14.04.5系统上OpenPTrack V1版本安装配置(Kinect V2)

下面是我自己fork出来修改后的代码在Ubuntu 16.04.3系统上的安装操作

要求机器上必须有CUDA 8.0/9.0支持的显卡才可以。

1.从GitHub上获取项目代码

2.安装ROS

3.安装OpenPTrack

4.链接OpenPTrack目录

5.Kinect V2驱动程序安装

检查当前用户目录下的.bashrc文件,注释掉如下内容:

然后执行如下命令:

6.重新编译代码

执行如下命令:

检查当前用户目录下的.bashrc文件,然后注释掉如下内容:

上面语句如不注释,会导致程序启动时候的崩溃。

新建一个Shell,执行如下命令

执行此步的时候如果提示找不到Kinect设备,请重启一下系统再试试。

7.测试系统

可能需要重新插拔一下KinectUSB数据线,然后执行如下命令

执行之后,等待十几秒,然后Ctrl+C中断执行。
执行完成后,执行

之后,会弹出三个界面出来。

参考链接


Kinect V2 深度图与彩色图融合(Ubuntu 14.04)

参考Kinect V2在Ubuntu 14.04系统上的驱动配置与安装在一个全新安装的Ubuntu 14.04系统中配置完成相关的驱动及其依赖。

Kinect V2深度图与彩色图融合的方式,简单粗暴,由于深度图像是512*424大小,因此,直接把彩色图像缩放成对应的512*424,然后像素点一一对应。至于原始大小的彩色图像,那么就是一片像素对应同一个深度即可。

注意,这个方式只适合Kinect V2,可以理解成Kinect V2的设计就是这样的,两个设备出厂的时候就校准为这样的输出。

具体的转换代码参考registration.cpp,Registration.cpp,建议直接调用驱动层提供的功能来实现,这样的话,一系列的参数设置可以同步,否则上层每次修改了分辨率等参数的时候,要自己手工修改这些数据。

Python深度图与彩色图融合的例子如下:

 

参考连接