基本信息

  • 标题:Few-Shot Learning with Global Class Representations
  • 年份:2019
  • 期刊:ICCV
  • 标签:global class representations, few-shot learning
  • 数据:miniImageNet,Omniglot

创新点

  1. 通过在训练阶段引入新类的数据,同时对基类和新类学习全局类别表征,并利用样本生成策略解决类别不均衡问题,有效防止模型在基类数据中出现过拟合的现象,从而提高了模型泛化到新类的能力。
  2. 方法可以很容易的扩展到广义小样本学习(相比标准小样本学习,广义小样本学习中测试样本不仅包含新类,还包含了基类)。
  3. 所提的方法在标准小样本学习与广义小样本学习的benchmark上均取得了很好的效果。并且在广义小样本学习上,性能的提升更大。

创新点来源

阅读全文 »

最近快要面试了,再刷一遍剑指Offer,看大家分享刷LeetCode和剑指Offer的时候都是有模板的,如果按照随机顺序刷,很容易忘记而且不容易总结刷题思路。所以常常把一类题放到一块一起刷。

《剑指Offer》有如下优点:

  • 很可能在面试中出现原题(至少在微软面试经常能遇到原题)
  • 题量少,但是涵盖的内容较全,性价比较高
  • 能培养一个良好的刷题习惯

缺点是:

  • 题目较少,刷着容易过拟合
  • 动态规划的题比较少,因此需要在力扣上专项训练。
阅读全文 »

最近在刷leetcode的时候,经常要用到标准库,这里总结一下标准库的常见用法,用于查询使用。

queue

queue模板类的定义在<queue>头文件中。只能在容器的末尾添加新元素,只能从头部移除元素。

与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型。

定义queue对象的示例代码如下:

阅读全文 »

本篇文章主要参考了TensorRT(5)-INT8校准原理,并添加了一些自己的见解。

Low Precision Inference

现有的深度学习框架,如Pytorch、Tensorflow在训练一个深度神经网络时,往往都会使用 float 32(Full Precise ,简称FP32)的数据精度来表示,权值、偏置、激活值等。若一个网络很深的话,比如像VGG,ResNet这种,网络参数是极其多的,计算量就更多了(比如VGG 19.6 billion FLOPS, ResNet-152 11.3 billion FLOPS)。如果多的计算量,如果都采用FP32进行推理,对于嵌入式设备来说计算量是不能接受的。解决此问题主要有两种方案:

  1. 模型压缩、剪枝。在这里不做讨论。
  2. 在部署推理时(inference)使用低精度数据,比如INT8。当然训练的时候仍然采取FP32的精度。

下面从经验上分析低精度推理的可行性。

阅读全文 »

创新点

  1. 对于WIDER FACE数据集,手动标记五个landmark坐标,这种额外监督信息对于hard face detection的性能提升有巨大的作用
  2. 在已有的监督分支下,并行的新增了一个额外的自监督mesh decoder分支,用于预测pixel-wise 3D shape人脸信息。
  3. 基于单阶段目标检测框架,提出了一种新的人脸检测方法RetinaFace,该方法采用多任务学习策略来同时预测face score、face box、five landmarks以及每个人脸像素的三维位置和对应关系
  4. 在WIDER FACE hard测试集中,RetinaFace的AP比现有的最好方法提升了1.1%,达到了91.4%。
  5. 通过使用轻量级的backbone,对于VGA分辨率的图片,RetinaFace能够在单CPU下实现real-time的速度。

基础知识

face localisation定义

狭义上的face localisation的定义是传统意义上的face detection。广义上的face localisation包括了face detection、face alignment、pixel-wise face parsing、3D dense correspondence regression。

阅读全文 »

对于C/C++程序,编译主要分为三个步骤:

  1. 源文件进行预处理,这个过程主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件
  2. 进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成*.s的汇编文件;
  3. 进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可重定位的二进制目标文件。

通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件 (object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file)。 静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时。下面来详细介绍这两种链接方式。

静态链接

为什么要进行静态链接

阅读全文 »

DALI库是一个用于数据预处理以及数据读取的第三方加速库。最近因为调用这个库的时候会出问题,所以重新编译了一下,这里记录下编译的过程。

首先,DALI库的官方地址官方文档地址,因为我这里使用的是旧版本的DALI库——0.11版本,其编译文档可以在这里找到,一般来说,直接按照流程编译是没有问题的,但是对于没有Root权限情况下的编译,就有点麻烦了。下面介绍一下:

首先,下面的编译条件要满足,尤其是对于GCC版本,我编译的使用使用了GCC4.9.2。

image-20200620174055268

值得注意的是,对于上面的编译条件,有一个通常不满足,那就是FFmpeg库,按照官方文档里面的指示,可以从这里下载FFmpeg安装包,我这里将安装包放到了/data2/zhaodali/software下,然后执行下面操作:

阅读全文 »

本篇文章主要参考了TensorRT(1)-介绍-使用-安装,并加上了一些自己的理解。

简介

TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT 之前称为GIE。

Training-vs-Inference-Graphic

由上图可以很清楚的看出,训练(training)和 推理(inference)的区别:

阅读全文 »

最近稍微学习了一下TensorRT,这里参考这很多博客,主要参考了如何使用TensorRT对训练好的PyTorch模型进行加速?。然后加上自己的一些注释。

现在训练深度学习模型主流的框架有TensorFlow,Pytorch,mxnet,caffe等。这个贴子只涉及Pytorch,对于TensorFlow的话,可以参考TensorRT部署深度学习模型,这个帖子是C++如何部署TensorRT。其实原理都是一样的,对于TensorFlow模型,需要把pb模型转化为uff模型;对于Pytorch模型,需要把pth模型转化为onnx模型;对于caffe模型,则不需要转化,因为tensorRT是可以直接读取caffe模型的;mxnet模型也是需要转化为onnx的。

对于TensorRT的安装,这里就不赘述了,之前我的博客有介绍过。

Python环境下Pytorch模型转化为TensorRT

Python环境下Pytorch模型转化为TensorRT有两种路径,一种是先把Pytorch的pt模型转化为onnx,然后再转化为TensorRT;另一种是直接把pytorch的pt模型转成TensorRT。

阅读全文 »