Knowledge Distillation
知识蒸馏是一种模型压缩常见方法,用于模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识”蒸馏出来,传递给参数量小、学习能力弱的网络。蒸馏可以提供student在one-shot label上学不到的soft label信息,这些里面包含了类别间信息,以及student小网络学不到而teacher网络可以学到的特征表示‘知识’,所以一般可以提高student网络的精度。
本文对一些KD方法的benchmark的论文进行一些方法总结。代码分析主要来自github。
Distilling the Knowledge in a Neural NetworkNIPS 2014 [https://arxiv.org/abs/1503.02531]
这篇论文是知识蒸馏的开山之作,简单来说,KD就是将一个大模型(Teacher)或者多个模型的ensemble学习到的知识迁移到更轻量的模型(Student)上继续学习,从而提高student的性能。
本文提出的方法是用大模型的类别概率(logits)作为”soft target” ...
DL面试知识点
【本文转载自Github,对其知识点进行补充】
深度学习神经网络中的Epoch、Iteration、Batchsize神经网络中epoch与iteration是不相等的
batchsize:中文翻译为批大小(批尺寸)。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
iteration:中文翻译为迭代,1个iteration等于使用batchsize个样本训练一次;一个迭代 = 一个正向通过+一个反向通过
epoch:迭代次数,1个epoch等于使用训练集中的全部样本训练一次;一个epoch = 所有训练样本的一个正向传递和一个反向传递
举个例子,训练集有1000个样本,batchsize=10,那么:训练完整个样本集需要:100次iteration,1次epoch。
参考资料
神经网络中的Epoch、Iteration、Batchsize
神经网络中epoch与iteration相等吗
反向传播(BP)
参考资料
一文搞懂反向传播算法
numpy实现简单的BP神经网络
CNN本质和优势局部卷积(提取局部特征)
权值共享(降低 ...
DETR-note
Transformer和AttentionTransformerTransformer本质上是一个Encoder-Decoder的结构
在paper中,encoder和decoder都由6个block组成,编码器的输出作为解码器的输入。
encoders每个block都是独立的单元,不会share weights。每个block又由以下的两部分组成(self-attention和FFN)
在decoder部分每个block也和encoder相似,只是在两层之间加了一个attention层(类似于seq2seq的attention机制,可以让decoder更加关注input相关的部分)。
编码器
编码器接受单词的词嵌入列表作为输入(列表中每个向量为512-d)。单词在通过self-attention层时会依赖单词之间的关系,但是在通过Feed Forward时没有这些依赖关系,可以并行进行。
self-attention类似于RNN中的隐藏层,self-attention的作用是将其他单词的信息融入到正在处理的单词中。
PS: ”The animal didn't cros ...
PolarMask-note
PolorMask:one-stage实例分割新思路前置知识FCOS FCOS是一个基于全卷积的one-stage检测网络,类似于语义分割针对每个像素进行预测。FCOS是anchor free,proposal free的检测器,可以减少大量的内存计算以及内存占用,并且不需要调优设计anchor和proposal的超参数。事实上这个anchor free方法还是有anchor的只不过不再是box形式,而是用点作为anchor,既减少了anchor数量又取消了超参。此外文章还提出了一个思路:将检测问题可以统一到其他FCN_solvable问题,可以简单的重用其他任务的idea。
网络结构图如下:
可以从图中看出网络结构中也运用了FPN的结构但是没有使用backbone的所有卷积层,但考虑了多尺度的问题直接加入了P5的下采样P6/P7。最后的损失函数也分为三个分支,classification、regression(不同于boxes,回归的4D向量为[l, r, t, b]代表每个像素点向四周的延伸)、centerness。
文章还解决了重叠区域问 ...
Retinanet&focal-loss
RetinaNet只是原来FPN网络与FCN网络的组合应用,因此在目标网络检测框架上它并无特别亮眼创新。文章中最大的创新来自于Focal loss的提出及在单阶段目标检测网络RetinaNet(实质为Resnet + FPN + FCN)的成功应用。Focal loss是一种改进了的交叉熵(cross-entropy, CE)loss,它通过在原有的CE loss上乘了个使易检测目标对模型训练贡献削弱的指数式,从而使得Focal loss成功地解决了在目标检测时,正负样本区域极不平衡而目标检测loss易被大批量负样本所左右的问题。此问题是单阶段目标检测框架(如SSD/Yolo系列)与双阶段目标检测框架(如Faster-RCNN/R-FCN等)accuracy gap的最大原因。
Focal LossFocal Loss主要解决的是类别不平衡问题,常规的单阶段目标检测网络像SSD一般在模型训练时会先大密度地在模型终端的系列feature maps上生成出10,000甚至100,0000个目标候选区域。然后再分别对这些候选区域进行分类与位置回归识别。而在这些生成的数万个候选区域中,绝大多 ...
FPN-note
FPN(Feature Pyramid Networks for Object Detection)FPN解决的主要问题是检测算法在处理多尺度变化问题时的不足以及对小物体检测不友好的问题。传统的方法是构造图像特征金字塔,但是计算量很大,FPN通过独特的构造避免了计算量过高的问题,并且有良好的多尺度处理性能。
图a为传统的多尺度特征提取方法,计算量极大。
图b为单一特征的检测系统,有很大的局限性。
图c为网络多层次结构提取特征,但是存在底层语义较弱的问题。
图d为FPN金字塔特征提取,能够让各个不同尺度的特征都拥有较强的语义信息。
FPN算法 FPN包含两个部分:第一部分是自底向上的过程,第二部分是自顶向下和侧向连接的融合过程。
自底向上过程 自底向上的过程和普通的CNN没有区别。现代的CNN网络一般都是按照特征图大小划分为不同的stage,每个stage之间特征图的尺度比例相差为2。在FPN中,每个stage对应了一个特征金字塔的级别(level),并且每个stage的最后一层特征被选为对应FPN中相应级别的特征。以ResNet为例,选取conv2、conv3、conv4、con ...
PSPNet-note
Pyramid Scene Parseing Network Note PSPNet 采用金字塔池化模块搭建的场景分析网络 , 基于语义分割的场景解析,其目的是赋予图像中每个像素一个类别标签。
1 PSPNet介绍由于传统的FCN存在缺陷:
不匹配上下文关系, FCN将水中的“boat”预测为“car” 。
类别混淆,将摩天大楼一部分识别成了其他。
不显著的类别难以预测,可能会忽略小的东西。
基于对FCN的透彻分析,作者提出了能够获取全局场景的深度网络PSPNet,可以融合局部特征和全局特征,有较好的效果。
1.1 Pyramid Pooling Module(金字塔池化模块) 金字塔池化模块Pyramid Pooling Module由一组不同尺度的池化块组成
该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征–全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1X1的卷积将对于级别通道降为原本的1/N。再通过双线性插值获得未池化前的大小,最终conc ...
FCN note
FCN:Semantic Segmentation图像的语义分割,简言之就是对一张图片上的所有像素点进行分类
1 FCN介绍 与传统的CNN解决的分类与检测问题不同,语义分割是一个空间密集型的预测任务,是像素级别的,需要对图像上所有的像素进行分类。 由于CNN在进行convolution和pooling过程中丢失了图像细节,即feature map size逐渐变小,所以不能很好地指出物体的具体轮廓、指出每个像素具体属于哪个物体,无法做到精确的分割。
FCN是针对语义分割训练的的一个端到端的网络, 是处理语义分割问题的基本框架,后续算法其实都是在这个框架中改进而来。
1.1 卷积化 在一般的分类任务中在conv层之后一般会有全连接层,将二维的图像特征压缩为一维,可以训练输出一个标量,成为分类标签。这样做会失去部分的空间信息,不适用于分割的操作。
语义分割输出为分割图,信息是二维的,所以在进行网络构建的时候抛弃了全连接层而是采用了卷积层,叫做卷积化。
1.2 上采样(Upsampling)上采样与下采样相反,我们需要得到原图像的分割图就需要将缩 ...
Faster_RCNN 笔记
Faster RCNN是在2016提出的用于目标检测的网络结构,并且与之前的网络不同,已经将特征提取(feature extraction),proposal提取,bounding box regression,classification都整合在了一个网络之中。由于RCNN的准确度很大一部分依赖于proposal区域的选择,所以候选区确定尤为重要。Faster RCNN中的RPN是一个最为突出也是最重要的部分。
Faster_RCNN的基本结构
1.Conv layers
Faster RCNN首先使用了基础的Conv layer(conv+relu+pooling)提取输入图像的feature maps。提取出来的feature maps共享用于后续的RPN层以及全连接层。
2.RPN(Region Proposal Networks)
RPN是Faster RCNN中最重要的部分,用于生成region proposals。RPN中引入了一个重要的概念anchor,通过每个位置的anchor(共有k个选框生成),输出2k个score评估选框是否为目标,4k个score确定选框的位 ...
C++期末复习
第一章 引论
面向对象的核心概念:
数据封装:对内保护信息加强联系,对外提供访问接口。
继承:整体和部分的关系,一般和特殊的关系。基类和派生类。
多态性:一个符号有多种含义。表现为函数重载(普通函数重载,运算符重载)
泛型编程:主要依托模板(Template)
第二章 数据类型
指针
12345678const作用于指针三种形式:1)const int *p;p是变量,但指向了常量;2)int * const p;p是常量,但指向了变量;3)const int * const p;常量指针指向了常量
引用&
引用就是对象的别名
独立引用必须初始化
参数引用->实参和形参相同
非常量引用不能指向常量
引用作为返回类型(避免内存复制,直接返回对象)
123456789int &f(int &i){return i;}/*返回一个左值对象(左值 != 左值引用)可以出现在=左边++f() (√) b = f() (√)f(a)返回a这个对象 f(2) (X)int* g();*g() = (√)*/
运算符
new ...