优化策略(二)数据不均衡

解决数据不均衡:

  • Focal loss
  • hard negative example mining
  • OHEM
  • S-OHEM
  • A-Fast-RCNN
  • GHM(较大关注easy和正常hard样本,较少关注outliners)
  • PISA

Hard Negative Mining/OHEM 二者的区别吗?

Hard Negatie Mining与Online Hard Example Mining(OHEM)都属于难例挖掘,它是解决目标检测老大难问题的常用办法,运用于R-CNN,fast R-CNN,faster rcnn等two-stage模型与SSD等(有anchor的)one-stage模型训练时的训练方法。

难例挖掘的思想可以解决很多样本不平衡/简单样本过多的问题,比如说分类网络,将hard sample 补充到数据集里,重新丢进网络当中,就好像给网络准备一个错题集,哪里不会点哪里。

ps:本文中基本可以将“region proposal 区域提议”与“Region of Interest (RoI)”看成一个东西。

最后,大家可能注意到OHEM和难负例挖掘名字上的不同。

  • Hard Negative Mining只注意难负例
  • OHEM 则注意所有难例,不论正负(Loss大的例子)

一、为何难例挖掘? Why Hard Example Mining

难例挖掘与非极大值抑制 NMS 一样,都是为了解决目标检测老大难问题(样本不平衡+低召回率)及其带来的副作用。

首先,目标检测与图像分类不同,图像分类往往只有一个输出,但目标检测的输出个数却是未知的。除了Ground-Truth(标注数据)训练时,模型永远无法百分百确信自己要在一张图上预测多少物体

所以目标检测问题的老大难问题之一就是如何提高召回率。召回率(Recall)是模型找到所有某类目标的能力(所有标注的真实边界框有多少被预测出来了)。检测时按照是否检出边界框与边界框是否存在,可以分为下表四种情况:

是所有某类物体中被检测出的概率,并由下式给出:

 

为了提高这个值,很直观的想法是“宁肯错杀一千,绝不放过一个”。因此在目标检测中,模型往往会提出远高于实际数量的区域提议(Region Proposal,SSD等one-stage的Anchor也可以看作一种区域提议)。

但此时就会遇到一个问题,因为区域提议实在太多,导致在训练时绝大部分都是负样本,这导致了大量无意义负样本的梯度“淹没”了有意义的正样本。

根据Focal Loss[1]论文的统计,通常包含少量信息的“easy examples”(通常是负例),与包含有用信息的“hard examples”(正例+难负例)之比为100000:100!这导致这些简单例的损失函数值将是难例损失函数的40倍!

Focal Loss的pre,虽然方法不同但解决的是同一个问题

因此,为了让模型正常训练,我们必须要通过某种方法抑制大量的简单负例,挖掘所有难例的信息,这就是难例挖掘的初衷。

难负例挖掘(Hard Negative Mining)就是在训练时,尽量多挖掘些难负例(hard negative)加入负样本集,这样会比easy negative组成的负样本集效果更好。

二、R-CNN中的hard negative mining

对于现在的我们,首先遇到难负例挖掘应该是R-CNN的论文,论文关于hard negative mining的部分引用了两篇论文:

    • Object detection with discriminatively trained part based models
    • Example-based learning for viewbased human face detection.
Bootstrapping methods train a model with an initial subset of negative examples, and then collect negative examples that are incorrectly classified by this initial model to form a set of hard negatives. A new model is trained with the hard negative examples, and the process may be repeated a few times.
we use the following “bootstrap” strategy that incrementally selects only those “nonface” patterns with high utility value:
1) Start with a small set of “nonface” examples in the training database.
2) Train the MLP classifier with the current database of examples.
3) Run the face detector on a sequence of random images. Collect all the “nonface” patterns that the current system wrongly classifies as “faces” (see Fig. 5b).Add these “nonface” patterns to the training database as new negative examples.
4) Return to Step 2.

而R-CNN中的难负例挖掘就是采用了这种自举法(bootstrap)的方法:

    • 先用初始的正负样本训练分类器(此时为了平衡数据,使用的负样本也只是所有负样本的子集)
    • 用(1)训练好的分类器对样本进行分类,把其中错误分类的那些样本(hard negative)放入负样本子集,
    • 再继续训练分类器,
    • 如此反复,直到达到停止条件(比如分类器性能不再提升).
也就是说,R-CNN的Hard Negative Mining相当于给模型定制一个错题集,在每轮训练中不断“记错题”,并把错题集加入到下一轮训练中,直到网络效果不能上升为止。

R-CNN中Hard Negative Mining的实现代码:

rcnn/rcnn_train.m at master · rbgirshick/rcnn Line:214开始的函数定义

在源文件rcnn_train.m中函数 sample_negative_feature用于采样负例特征,对函数定义的关键代码稍作解释。

d.feat = rcnn_pool5_to_fcX(d.feat, opts.layer, rcnn_model); %将pool5层特征前向传播到fc7层特征
d.feat = rcnn_scale_features(d.feat, opts.feat_norm_mean); % 缩放特征norm值,具体参见源码注释
neg_ovr_thresh = 0.3;
if first_time     % 首次直接取 最大IOU < 0.3 的region作为负例,用于后面训练SVM
  for cls_id = class_ids
    I = find(d.overlap(:, cls_id) < neg_ovr_thresh);
    X_neg{cls_id} = d.feat(I,:);
    keys{cls_id} = [ind*ones(length(I),1) I];
  end
else   % 非首次负例采样
 % 先用当前更新过的SVM 预测region,即,应用SVM到 fc7的特征上,y'=w*x+b
  zs = bsxfun(@plus, d.feat*rcnn_model.detectors.W, rcnn_model.detectors.B);
  for cls_id = class_ids % 每个分类独立使用SVM
    z = zs(:, cls_id);   % 对当前分类,获取 SVM 计算值 y'
 % 下一行代码是关键
    I = find((z > caches{cls_id}.hard_thresh) & ...
             (d.overlap(:, cls_id) < neg_ovr_thresh));
% Avoid adding duplicate features
    keys_ = [ind*ones(length(I),1) I];
    if ~isempty(caches{cls_id}.keys_neg) && ~isempty(keys_)
      [~, ~, dups] = intersect(caches{cls_id}.keys_neg, keys_, 'rows');
      keep = setdiff(1:size(keys_,1), dups);
      I = I(keep);
    end
% Unique hard negatives
    X_neg{cls_id} = d.feat(I,:);
    keys{cls_id} = [ind*ones(length(I),1) I];
  end
end

上述代码片段中,非首次负例采样时,要筛选出 难负例example,需要满足两个条件:

  • 负例,即最大IOU 小于 阈值 d.overlap(:, cls_id) < neg_ovr_thresh
  • 分类错误,既然是负例,那么SVM计算值wx+b 应该小于 1,

在inference阶段,同样是这个思路,比如rcnn_detect.m文件中

thresh = -1
scores = bsxfun(@plus, feat*rcnn_model.detectors.W, rcnn_model.detectors.B);
for i = 1:num_classes
  I = find(scores(:, i) > thresh);
  scored_boxes = cat(2, boxes(I, :), scores(I, i));
  keep = nms(scored_boxes, 0.3); 
  dets{i} = scored_boxes(keep, :);
end

三、Fast RCNN中的hard negative mining

Fast RCNN[5]中,将真实标签边框(gt boxes)和区域提议边框(selective search boxes)一起打包为roidb。最后通过采样,将每个minibatch的数据输入训练。

ps:在Faster RCNN中,由于使用了RPN生成区域提议,所以网络输入roidb只有gt boxes。

对每个大小为N的mini-batch进行采样?

随机选取N个图片(通常N=2),然后每个图片中选择64个ROIs(Region of Interests),其中25%为正例,即ROIs的最大IOU 大于等于0.5,剩余的为负例,选择最大IOU位于[0.1,0.5)范围内的roi作为负例。

ps:如果正例数量不足25%,则增加负例数量,使得每个image中采样ROI数量为64,于是一个mini-batch中共有128个ROIs。

Fast RCNN 采用 random sampling 策略,即训练时随机取样

如何确定正负例?

Fast RCNN 中以区域提议与 groud truth 的 IoU 为标准区分正负例,假设阈值1为0.5,阈值2为0.1:

  • [0.5,1] 为正例
  • [0.1, 0.5) 之间标记为负例,
  • [0, 0.1) 的 example 用于 hard negative mining.

不过很吊诡的是,即使直到要有难负例挖掘,训练的时候依然是用负例采样,那难负例哪去了?

难负例哪去了?

hard negative,顾名思义是难以正确分类的样本,也就是说在对负样本分类时候,loss比较大(label与prediction相差较大)的那些样本,也可以说是容易将负样本看成正样本的那些样本;

那就怪了,比方说,如果有个IoU=0.4999的区域提议,它也会被当成负例。显然这张图片更难和正样本区分,那么训练不应该更难吗?

我们可以先验的认为, 如果 RoI(或者说区域提议)里没有物体,全是背景,这时候分类器很容易正确分类成背景,这个就叫 easy negative, 如果RoI(或者说区域提议)里有二分之一个物体,标签仍是负样本,这时候分类器就容易把他看成正样本,这时候就是 hard negative。

确实, 不是一个框中背景和物体越混杂, 越难区分吗? 框中都基本没有物体特征, 不是很容易区分吗?

我看了很多文章的解释,目前只能认为 Fast RCNN 是这么想的:

为了解决正负样本不均衡的问题(负例太多了), 我们应该剔除掉一些容易分类负例, 那么与 ground truth 的 IOU 在 [0, 0.1)之间的由于包含物体的特征很少, 应该是很容易分类的, 也就是说是 easy negitive, 为了让算法能够更加有效, 也就是说让算法更加专注于 hard negitive examples, 我们认为 hard negitive examples 包含在[0.1, 0.5) 的可能性很大, 所以训练时, 我们就在[0.1, 0.5)区间做 random sampling, 选择负例。

但是,我们先验的认为 IoU 在[0, 0.1)之内的RoI是 easy example,是一种一厢情愿的想法。

事实上,剔除IoU过低的数据后,模型可能反而对这些“背景”感到陌生。所以要对其做额外的 hard negitive mining, 找到其中的 hard negitive examples 用于训练网络。

总而言之,在two-stage 模型中,提出的RoI Proposal在输入R-CNN子网络前,对正负样本(背景类和前景类)的比例进行调整。

通常,背景类的RoI Proposal个数要远远多于前景类,Fast R-CNN的处理方式是随机对两种样本进行上采样和下采样,以使每一batch的正负样本比例保持在1:3,这一做法缓解了类别比例不均衡的问题,是两阶段方法相比单阶段方法具有优势的地方,也被后来的大多数工作沿用。

四、Online Hard Example Mining(OHEM)

代码:abhi2610/ohem

CVPR2016的Oral论文:Training Region-based Object Detectors with Online Hard Example Mining[6]将难分样本挖掘(hard example mining)机制嵌入到SGD算法中,使得Fast R-CNN在训练的过程中根据区域提议的损失自动选取合适的区域提议作为正负例训练。

 

在之前,RCNN采用了错题集的办法进行挖掘,Fast RCNN使用的是IoU阈值+随机采样的方法进行Hard Negative Mining,也就是都必须先结束一轮训练,有点事后诸葛亮的感觉。OHEM的工作中,作者提出:

用R-CNN子网络对RoI Proposal预测的分数,来决定每个batch选用的样本,这样,输入R-CNN子网络的RoI Proposal总为表现不好的样本,提高了监督学习的效率。

实际操作中,维护两个完全相同的R-CNN子网络,其中:

  • 一个只进行前向传播来为RoI Proposal的选择提供指导,
  • 另一个则为正常的R-CNN,参与损失的计算并更新权重,并且将权重复制到前者以使两个分支权重同步。

OHEM以额外的R-CNN子网络的开销来改善RoI Proposal的质量,更有效地利用数据的监督信息,成为两阶段模型提升性能的常用部件之一。

即:训练的时候选择hard negative来进行迭代,从而提高训练的效果。

  • 前向时: 全部的ROI通过网络,根据loss排序;
  • 反向时:根据排序,选择Batch-Size/N(minibatch中proposal数除以输入图片数)个loss值最大的(worst)样本来后向传播更新model的weights。

在此之前必须注意,位置相近的ROI在map中可能对应的是同一个位置,loss值相近,所以选取minibatch的RoI之前,要先对Hard程度(loss)做NMS,然后再选择Batch-Size/N个ROI反向传播,这里nms选择的IoU阈值为0.7。

ps:这里的NMS与这篇笔记提到的用于目标检测的NMS类似,不过这里的排序依据不是置信度,而是损失函数的大小。

还有注意的一点是,前反向时使用的不是同一个网络:

  • 一个只用来前向传播的部分来筛选RoI,
  • 另一个把选完的ROIs进行后向传播,

这样的虽然要在内存维护两个网络的参数,但好处是不需要(在计算所有区域提议loss的同时)计算所有区域提议的反向传播了。是一种空间换时间的策略!

OHEM图例

给定图像和选择性搜索结果的RoI(现在不用selective search了,但道理一样),卷积网络计算转换特征映射。 在(a)中,只读RoI网络在特征映射和所有RoI上运行正向传递(以绿色箭头显示)。 然后Hard RoI模块使用这些RoI损失来选择B个样本。 在(b)中,RoI网络使用这些硬性示例来计算前向和后向通道(以红色箭头示出)。

实验结果表明使用OHEM(Online Hard Example Mining)机制可以使得Fast R-CNN算法在VOC2007和VOC2012上mAP提高 4%左右。

 

五、结语

难例挖掘与非极大值抑制一样,是一种流行于计算机科学领域数十年的经典算法,经典到老前辈不认为它需要细讲。然而对一些从深度学习算法入手的萌新来说,这种细枝末节的东西就有些麻烦了233。

不过也正因如此,难例挖掘的确是一个用于平衡样本的好办法,因此它可以运用的范围远远不止于目标检测中。分类、分割等问题都可以找到它的影子。

 

当前基于深度学习的目标检测主要包括:基于two-stage的目标检测和基于one-stage的目标检测.two-stage的目标检测框架一般检测精度相对较高,但检测速度慢;而one-stage的目标检测速度相对较快,但是检测精度相对较低.one-stage的精度不如two-stage的精度,一个主要的原因是训练过程中样本极度不均衡造成的.
目标检测任务中,样本包括哪些类别呢?

  • 正样本:标签区域内的图像区域,即目标图像块
  • 负样本:标签区域以外的图像区域,即图像背景区域
  • 易分正样本:容易正确分类的正样本,在实际训练过程中,该类占总体样本的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
  • 易分负样本:容易正确分类的负样本,在实际训练过程中,该类占的比重非常高,单个样本的损失函数较小,但是累计的损失函数会主导损失函数
  • 难分正样本:错分成负样本的正样本,这部分样本在训练过程中单个样本的损失函数教高,但是该类占总体样本的比例教小
  • 难分负样本:错分成正样本的负样本,这部分样本在训练过程中单个样本的损失函数教高,但是该类占总体样本的比例教小

那么什么是样本不平衡问题?
所谓的样本不平衡问题是指在训练的时候各个类别的样本数量极不均衡.以基于深度学习的单阶段目标检测为例,样本类别不均衡主要体现在两方面:正负样本不均衡(正负样本比例达到1:1000)和难易样本不均衡(简单样本主导loss).一般在目标检测任务框架中,保持正负样本的比例为1:3(经验值)
对于一个样本,如果它能很容易地被正确分类,那么这个样本对模型来说就是一个简单样本,模型很难从这个样本中得到更多的信息;而对于一个分错的样本,它对模型来说就是一个困难的样本,它更能指导模型优化的方向。对于单阶段分类器来说,简单样本的数量非常大,他们产生的累计贡献在模型更新中占主导作用,而这部分样本本身就能被模型很好地分类,所以这部分的参数更新并不会改善模型的判断能力,这会导致整个训练变得低效。
实际训练过程中如何划分正负样本训练集?
近年来,不少的研究者针对样本不均衡问题进行了深入研究,比较典型的有OHEM(在线困难样本挖掘)、S-OHEM、A-Fast-RCNN、Focal Loss、GHM(梯度均衡化)

OHEM(在线困难样本挖掘)

OHEM算法(online hard example miniing,发表于2016年的CVPR)主要是针对训练过程中的困难样本自动选择,其核心思想是根据输入样本的损失进行筛选,筛选出困难样本(即对分类和检测影响较大的样本),然后将筛选得到的这些样本应用在随机梯度下降中训练。在实际操作中是将原来的一个ROI Network扩充为两个ROI Network,这两个ROI Network共享参数。其中前面一个ROI Network只有前向操作,主要用于计算损失;后面一个ROI Network包括前向和后向操作,以hard example作为输入,计算损失并回传梯度。该算法在目标检测框架中被大量使用,如Fast RCNN.

该算法的优点:1).对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强;2).随着数据集的增大,算法的提升更加明显;
该算法的缺点:只保留loss较高的样本,完全忽略简单的样本,这本质上是改变了训练时的输入分布(仅包含困难样本),这会导致模型在学习的时候失去对简单样本的判别能力.

S-OHEM(基于loss分布采样的在线困难样本挖掘)

先来看看原生的OHEM存在什么问题?假设给定RoI_A和RoI_B,其对应的分类和边框回归损失分别为 [公式] .如果按照原生的OHEM(假定各损失函数权重相同),此时RoI_A的总体loss大于RoI_B,也就是说A相对于B更难分类;而实际上单从分类损失函数(交叉熵),RoI_A和RoI_B的实际类别概率分别是61.6%和64.5%,在类别概率上两者只相差0.031,可以认为A和B具有相同的性能;单从边框损失函数(Smooth L1),虽然A和B的损失函数之相差0.01,但这个微小的差会导致预测边框和groudtruth有0.14的差距,此时,B相对于A更难分类,因此单从top-N损失函数来筛选困难样本是不可靠的.针对上述问题,提出了S-OHEM方法(发表于2017年的CCCV),主要考虑OHEM训练过程忽略了不同损失分布的影响,因此S-OHEM根据loss的分布抽样训练样本。它的做法是将预设loss的四个分段: ;给定一个batch,先生成输入batch中所有图像的候选RoI,再将这些RoI送入到Read only RoI网络得到RoIs的损失,然后将每个RoI根据损失(这里损失是一个组合,具体公式为

 随着训练阶段变化而变化;之所以采用这个公式是因为在训练初期阶段,分类损失占主导作用;在训练后期阶段,边框回归损失函数占主导作用)划分到上面四个分段中,然后针对每个分段,通过排序筛选困难样本.再将经过筛选的RoIs送入反向传播,用于更新网络参数.

优点:相比原生OHEM,S-OHEM考虑了基于不同损失函数的分布来抽样选择困难样本,避免了仅使用高损失的样本来更新模型参数.
缺点:因为不同阶段,分类损失和定位损失的贡献不同,所以选择损失中的两个参数  需要根据不同训练阶段进行改变,当应用与不同数据集时,参数的选取也是不一样的.即引入了额外的超参数 需要根据不同训练阶段进行改变,当应用与不同数据集时,参数的选取也是不一样的.即引入了额外的超参数

A-Fast-RCNN(基于对抗生成网络的方式来生成困难样本)

从更好的利用数据的角度出发,OHEM和S-OHEM都是发现困难样本,而A-Fast-RCNN的方法(发表于2017年CVPR)则是通过GAN的方式在特征空间产生具有部分遮挡和形变(本文主要考虑旋转特性)的困难样本,而这部分样本数据很难出现在实际训练数据集中.本文通过生成的方式来教网络什么是“遮挡”和“变形”,区别于传统的直接生成样本图片的方法,这些变换都是基于特征图的:1).通过添加遮挡mask来实现特征的部分遮挡;2).通过操作特征响应图来实现特征的部分变形.本文设计了两个对抗网络 ASDN and ASTN,分别对应于样本的遮挡和样本的变形,并将这两种变形相融合(ASDN的输出作为ASTN的输入),使得检测器在训练的时候可以更加鲁棒.

优点:与OHEM相比,区别在于文本的方法是构建不存在的Hard Poistive样本,而OHEM是挖掘现有样本中的Hard样本.
缺点:从改善效果上来讲,A-Fast-RCNN的方法的效果并不比 OHEM 好太多,也许是仿造的数据和真实性还存在差距,此外GAN网络也比较难训练.

 

 

GHM(损失函数梯度均衡化机制)

对于一个样本,如果它能很容易地被正确分类,那么这个样本对模型来说就是一个简单样本,模型很难从这个样本中得到更多的信息,从梯度的角度来说,这个样本产生的梯度幅值相对较小。而对于一个分错的样本来说,它产生的梯度信息则会更丰富,它更能指导模型优化的方向。对于单阶段分类器来说,简单样本的数量非常大,他们产生的累计贡献在模型更新中占主导作用,而这部分样本本身就能被模型很好地分类,所以这部分的参数更新并不会改善模型的判断能力,这会导致整个训练变得低效。因此单阶段目标检测中样本不均衡性的本质是简单困难样本的不均衡性。
受Focal loss启发,本文通过深入分析one-stage目标检测框架中样本分布不平衡(正负样本不均衡和难易样本不均衡)的本质影响,提出了基于梯度分布的角度(简称GHM,gradient harmonizing mechanism,发表于2019AAAI,并获得了Oral)来缓解one-stage中的训练样本不平衡,从而改善one-stage的目标检测的检测精度.本文提出了梯度密度,并将梯度密度的倒数作为损失函数的权重分别引入到分类损失函数(GHM-C)和边框损失函数(GHM-R).

GHM-C分类损失函数
对于分类损失函数,这里采用的是交叉熵函数,梯度密度中的梯度模长是基于交叉熵函数的导数进行计算的,GHM-C公式如下:

总结与困惑

总结:

  • OHEM系列的困难样本挖掘方法在当前的目标检测框架上还是被大量地使用,在一些文本检测方法中还是被经常使用;
  • OHEM是针对现有样本并根据损失loss进行困难样本挖掘,A-Fast-RCNN是构建不存在的Hard Poistive样本(即造样本),Focal Loss和GHM则从损失函数本身进行困难样本挖掘;
  • 相比Focal loss,本文提出的GHM是一个动态的损失函数,即随着不同数据的分布进行变换,不需要额外的超参数调整(但是这里其实还是会涉及到一个参数,就是Unit region的数量);此外GHM在降低易分样本权重的同时,对outliner也会有一定程度的降权;
  • 无论是Focal Loss,还是基于GHM的损失函数都可以嵌入到现有的目标检测框架中;Focal Loss只针对分类损失,而GHM对分类损失和边框损失都可以
  • GHM方法在源码实现上,作者采用平均滑动的方式来计算梯度密度,不过与论文中有一个区别是在计算梯度密度的时候,没有乘以M,而是乘以有效的(也就是说有梯度信息的区间)bin个数
  • 之前尝试过Focal Loss用于多分类任务中,发现在精度并没有提升;但是我试过将训练数据按照训练数据的原始分布并将其引入到交叉熵函数中,准确率提升了;GHM方法的本质也是在改变训练数据的分布(将难易样本拉匀),但是到底什么的数据分布是最优的,目前尚未定论;

困惑:

  • 从GHM与其它经典方法的对比中,不难看出在相同框架的基础上,GHM对中大型目标的检测(特别是大目标)优于Focal loss,但对于小目标的检测不如Focal loss好;这里是什么原因导致的?

 

5.PISA

     文章三个技术点:            

     IOU-HLR            

     ISR(基于重要性的样本权值重标定)            

     CARL(分类感知的回归损失)           

     这篇论文我今天早上读的,说下我个人觉得它有一个缺点:                   

     它是对IOU排序,但是IOU这个指标并不能知道两个box是如何相交的,在GIOU这篇论文中有提到,那这样会出现一种情况:当有两个样本与GT的IOU一致时,可能这两个样本的重要程度不一样(如一个落在目标上而一个没有落在目标上),但是其IOU值是一样的,所以从这点上个人觉得还有待改进。

一、IOU-HLR    

        全名:IoU Hierarchical Local Rank (IoU-HLR)     对每个batch的样本通过对IOU进行排序,如下图

                                                                                             IOU-HLR    

 先将所有的样本根据它们最近的gt目标分成不同的组。接下来,根据每个组的IoU和gt按降序排列样本,得到IoU-LR。随后,使用相同的IoU-LR采样,并按降序排序。具体来说,所有top1的IoU-LR样本都被收集和排序,然后是top2、top3(省略号)。

二、ISR(Importance-based Sample Reweighting)     

       基于重要性的样本权值。这部分主要是对CLS LOSS进行改进,因为要写公式,我不想写,所以直接从paper中截图下来了,如下图:

上图中,j为类别,nj样本总数,{r1,r2...,rnj}为IOU-HLR表示,然后通过一个线性函数将ri转换成ui,ui表示类别j的第i个样本的重要程度,ui的公式如上图。然后采用指数形式来进一步将样本重要程度转换了权重(weights)wi。wi公式如上图 ,gamma为程度因子。然后改写交叉熵如Fig 5 (3)。n和m表正样本和总样本数量,si和si'我不说大家也应该知道是什么吧- - 

三、CARL(分类感知的回归损失)    

       这个是对box loss改进    分类感知的回归损失用来联合优化分类和回归损失,从名字就能明白他要干什么了,就是让box loss联动分类loss,就是分类loss到box loss里面插一脚嘛。     好吧,我说得正式一点,就是,作者希望让回归损失能感知分类Score,这样梯度就能才能够回归分支传递到分类分支。

    公式如下,依旧截图:

        pi代表相应类别的预测score,di和di'我不说大家应该知道是啥了 ~     和分类loss类似,也用一个指数函数将pi转换为vi,L代表smooth L1 loss

参考文献:https://zhuanlan.zhihu.com/p/60612064

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值