背景区域为负样本什么意思_⽬标检测正负样本区分策略和平
衡策略总结(⼀)
0简介
本⽂抛弃⽹络具体结构,仅仅从正负样本区分和正负样本平衡策略进⾏分析,⼤体可以分为正负样本定义、正负样本采样和平衡loss设正负样本定义、正负样本采样和平衡loss设
计三个⽅⾯计三个⽅⾯,主要是⽹络预测输出和loss核⼼设计即仅仅涉及⽹络的head部分。所有涉及到的代码均以mmdetection为主所有涉及到的代码均以mmdetection为主。本⽂是第
⼀部分,主要包括fasterrcnn、librarcnn、retinanet、ssd和yolo⼀共5篇⽂章。下⼀篇会包括anchor-free的平衡策略,以及最新改进
算法。
由于本⼈⽔平有限,如果有分析不对的地⽅,欢迎指正和交流!
1anchor-ba
1.1two-stage
1.1.1fasterrcnn
论⽂名称:FasterR-CNN:TowardsReal-TimeObjectDetectionwithRegionProposalNetworks
(1)head结构
fasterrcnn包括两个head:rpnhead和rcnnhead。其结构如下:
rpnhead的输出是包括分类和回归,分类是⼆分类,只区分前景和背景;回归是仅仅对于前景样本(正样本)进⾏基于anchor的变换回归。
rpnhead的⽬的是提取roi,然后输⼊到rcnnhead部分进⾏refine。rcnnhead的输出是包括分类和回归,分类输出是类别数+1(1是考虑
背景),回归是仅仅对于前景样本不考虑分类类别进⾏基于roi的变换回归,rcnnhead的⽬的是对rpn提取的roi特征进⾏refine,输出精准
bbox。
(2)正负样本定义
rpn和rcnn的正负样本定义都是基于MaxIoUAssigner,只不过定义阈值不⼀样⽽已。rpn的assigner:
rcnn的assigner:
下⾯对MaxIoUAssigner进⾏详细分析。⾸先分析原理,然后分析细节。正负样本定义⾮常关键。MaxIoUAssigner的操作包括4个步骤:
1.⾸先初始化时候假设每个anchor的mask都是-1,表⽰都是忽略anchor
2.将每个anchor和所有gt的iou的最⼤Iou⼩于neg_iou_thr的anchor的mask设置为0,表⽰是负样本(背景样本)
3.对于每个anchor,计算其和所有gt的iou,选取最⼤的iou对应的gt位置,如果其最⼤iou⼤于等于pos_iou_thr,则设置该anchor的
mask设置为1,表⽰该anchor负责预测该gtbbox,是⾼质量anchor
4.3的设置可能会出现某些gt没有分配到对应的anchor(由于iou低于pos_iou_thr),故下⼀步对于每个gt还需要找出和最⼤iou的
anchor位置,如果其iou⼤于min_pos_iou,将该anchor的mask设置为1,表⽰该anchor负责预测对应的gt。通过本步骤,可以最
⼤程度保证每个gt都有anchor负责预测,如果还是⼩于min_pos_iou,那就没办法了,只能当做忽略样本如果还是⼩于min_pos_iou,那就没办法了,只能当做忽略样本了。从这⼀步可以看
出,3和4有部分anchor重复分配了,即当某个gt和anchor的最⼤iou⼤于等于pos_iou_thr,那肯定⼤于min_pos_iou,此时3和4
步骤分配的同⼀个anchor。
从上⾯4步分析,可以发现每个gt可能和多个anchor进⾏匹配,每个anchor不可能存在和多个gt匹配的场景。在第4步中,每个gt最多只会
和某⼀个anchor匹配,但是实际操作时候为了多增加⼀些正样本,通过参数gt_max_assign_all可以实现某个gt和多个anchor匹配场
景。通常第4步引⼊的都是低质量anchor,⽹络训练有时候还会带来噪声,可能还会起反作⽤。通常第4步引⼊的都是低质量anchor,⽹络训练有时候还会带来噪声,可能还会起反作⽤。
简单总结来说就是:如果anchor和gt的iou低于neg_iou_thr的,那就是负样本,其应该包括⼤量数⽬;如果某个anchor和其中⼀个gt的最
⼤iou⼤于pos_iou_thr,那么该anchor就负责对应的gt;如果某个gt和所有anchor的iou中最⼤的iou会⼩于pos_iou_thr,但是⼤于
min_pos_iou,则依然将该anchor负责对应的gt;其余的anchor全部当做忽略区域,不计算梯度。该最⼤分配策略,可以尽最⼤程度的保
证每个gt都有合适的⾼质量anchor进⾏负责预测,
下⾯结合代码进⾏分析:主要就是assign_wrt_overlaps函数,核⼼操作和注释如下:
通过代码可以发现,当设置_max_assign_all=True时候是可能出现第4步的某个gt和多个anchor匹配场景,默认参数就是当设置_max_assign_all=True时候是可能出现第4步的某个gt和多个anchor匹配场景,默认参数就是
True。
由于rcnnhead预测值是rpnhead的refine,故rcnnhead⾯对的anchor(其实就是rpn输出的roi)和gt的iou会⾼于rpnhead部
分,anchor质量更⾼,故min_pos_iou阈值设置的⽐较⾼,由于pos_iou_thr和neg_iou_thr设置都是0.5,那么忽略区域那就是没有了,
因为rcnnhead⾯对的都是⾼质量样本,不应该还存在忽略区域。
(3)正负样本采样
步骤2可以区分正负和忽略样本,但是依然存在⼤量的正负样本不平衡问题,解决办法可以通过正负样本采样或者loss上⾯⼀定程度解解决办法可以通过正负样本采样或者loss上⾯⼀定程度解
决,fasterrcnn默认是需要进⾏正负样本采样的。rpnhead和rcnnhead的采样器都⽐较简单,就是随机采样,阈值不⼀样⽽已。rpn
head采样器:
rcnnhead采样器:
num表⽰采样后样本总数,包括正负和忽略样本,pos_fraction表⽰其中的正样本⽐例。add_gt_as_proposals是为了放在正样本太少⽽
加⼊的,可以保证前期收敛更快、更稳定,属于技巧。neg_pos_ub表⽰正负样本⽐例,⽤于确定负样本采样个数上界,例如我打算采样
1000个样本,正样本打算采样500个,但是可能实际正样本才200个,那么正样本实际上只能采样200个,如果设置neg_pos_ub=-1,
那么就会对负样本采样800个,⽤于凑⾜1000个,但是如果设置为neg_pos_ub⽐例,例如1.5,那么负样本最多采样200x1.5=300
个,最终返回的样本实际上不够1000个。默认情况neg_pos_ub=-1。由于rcnnhead的输⼊是rpnhead的输出,在⽹络训练前期,rpn
⽆法输出⼤量⾼质量样本,故为了平衡和稳定rcnn训练过程,通常会对rcnnhead部分添加gt作为proposal。其代码⾮常简单:
对正负样本单独进⾏随机采样就⾏,如果不够就全部保留。
由于原始fasterrcnn采⽤的loss是ce和SmoothL1Loss,不存在loss层⾯解决正负样本不平衡问题,故不需要分析loss由于原始fasterrcnn采⽤的loss是ce和SmoothL1Loss,不存在loss层⾯解决正负样本不平衡问题,故不需要分析loss。
1.1.2librarcnn
论⽂名称:LibraR-CNN:TowardsBalancedLearningforObjectDetection
libra主要是分析训练过程中的不平衡问题,提出了对应的解决⽅案。由于librarcnn的head部分和正负样本定义没有修改,故不再分析,仅
仅分析正负样本采样和平衡loss设计部分。
(1)正负样本采样
注意librarcnn的正负样本采样规则修改仅仅是对于rcnn⽽⾔,对于rpnhead没有任何修改,依然是随机采样器。原因是作者的主要⽬的
是为了涨点mAP,作者认为rpn涨⼏个点对最终bbox预测map没有多⼤帮助,因为主要是靠rcnn部分进⾏回归预测才能得到⽐较好的
mAP。其参数如下:
主要看IoUBalancedNegSampler部分即可。仅仅作⽤于负样本(iou=0~0.5之间)。作者认为样本级别的随机采样会带来样本不平衡,由于
负样本本⾝iou的不平衡,当采⽤随机采样后,会出现难负(iou0.5附近)和易负(iou接近0)样本不平衡采样,导致后⾯性能不好。作者发现
了如果是随机采样的话,随机采样到的样本超过70%都是在IoU在0到0.05之间的,都是易学习负样本,作者觉得是不科学的,⽽实际统计
得到的事实是60%的hardnegative都落在IoU⼤于0.05的地⽅,但是随机采样只提供了30%,实在是太少了。最常⽤的解决难易样本不平
衡问题的解决办法就是ohem,基于Loss排序来采样难负样本,但是作者分析,(1)这种⽅法对噪⾳数据会⽐较敏感,因为错误样本loss⾼;
(2)参数⽐较难调。所以作者提出了IoU-balancedSampling,如下所⽰:
可以看出,随机采样效果最不好,⽽ioubalancedsampling操作会尽量保证各个iou区间内都会采样到。由于该操作⽐较简单,就不贴论
⽂公式了。核⼼操作是对负样本按照iou划分k个区间,每个区间再进⾏随机采样,保证易学习负样本和难负样本⽐例尽量平衡,实验表明对
K不敏感,作者设置的是3。具体做法是对所有负样本计算和gt的iou,并且划分K个区间后,在每个区间内均匀采样就可以了。假设分成三
个区间,我想总共取9个,第⼀个区间有20个候选框,第⼆个区间有10个,第三个区间有5个,那这三个区间的采样概率就是
9/(3x20),9/(3x10),9/(3x5),这样的概率就能在三个区间分别都取3个,因为区间内候选框多,它被选中的概率⼩,最终体现各个区间都
选这么多框。
实际代码做法是实际代码做法是:⾸先按照iou分成k个区间,先尝试在不同区间进⾏随机采样采相同多数⽬的样本,如果不够就全部采样;进⾏⼀轮后,
如果样本数不够,再剩下的样本中均匀随机采样。例如假设总共有1000个候选负样本(区间1:800个,区间2:120个,区间3:80个),分为
3个区间,总共想取333个,那么理论上每个区间是111个,⾸先第⼀次在不同区间均匀采样,此时区间1可以采样得到111个,区间2也可
以得到111个,区间3不够,所以全部保留;然后不够的样本数,在剩下的(800-111)+(120-111)+0个⾥⾯随机取31个,最终补齐333
个。核⼼代码如下:
意思是在各个区间内,如果够数⽬就随机采样,如果不够那就剩下的负样本⾥⾯全部采样。
(2)平衡回归loss
原始的fasterrcnn的rcnnhead,使⽤的回归loss是smoothl1,作者认为这个依然存在不平衡。作者分析是:loss解决Classification和
Localization的问题,属于多任务loss,那么就存在⼀个平衡权重,⼀般来说回归权重会⼤⼀些,但⼀味的提⾼regression的loss其实会让
outlier的影响变⼤(类似于OHEM中的noilabel),outlier外点样本这⾥作者认为是样本损失⼤于等于1.0,这些样本会产⽣巨⼤的梯度不
利于训练过程,⼩于的叫做inliers。平衡回归loss的⽬的是既不希望放⼤外点对梯度的影响,⼜要突出内点中难负样本的梯度,从⽽平衡回归loss的⽬的是既不希望放⼤外点对梯度的影响,⼜要突出内点中难负样本的梯度,从⽽
实现对外点容忍,对内点区分难负样本的作⽤实现对外点容忍,对内点区分难负样本的作⽤。为此作者在smoothl1的基础上进⾏重新设计,得到BalancedL1Loss。核⼼操作就是
想要得到⼀个当样本在
附近产⽣稍微⼤点的梯度的函数。⾸先smoothl1的定义如下:
其梯度如下:
为了突出难样本梯度,需要重新设计梯度函数,作者想到了如下函数:
梯度公式
可以实现上述任务。然后反向计算就可以得到Loss函数了。为了保证连续,还需要增加(9)的限制。
左边是梯度曲线,右边是loss曲线,可以看出⾮常巧妙。
1.2one-stage
1.2.1focalloss
论⽂名称:FeaturePyramidNetworksforObjectDetection
该论⽂也叫做retinanet,是⽬前⾮常主流的FPN⽬标检测one-stage⽹络结构,本⽂主要是提出了⼀个focalloss来对难易样本进⾏平衡,
属于平衡loss范畴。
(1)⽹络结构
由于该⽹络结构⾮常流⾏,故这⾥仅仅简要说明下,不做具体分析。
图(d)即为retinanet的⽹络结构。主要特点是:(1)多尺度预测输出;(2)采⽤FPN结构进⾏多层特征图融合。⽹络进⾏多尺度预测,尺度
⼀共是5个,每个尺度共享同⼀个head结构,但是分类和回归分⽀是不共享权重的。
为了⽅便和fasterrcnn进⾏对⽐,下⾯再次贴出rpn结构,并解释参数含义。
1.共同部分
anchor_strides表⽰对应的特征图下采样次数,由于retinanet是从stage1开始进⾏多尺度预测,故其stride⽐rpn⼤⼀倍;
anchor_ratios表⽰anchor⽐例,⼀般是1:1,1:2和2:1三种;
2.不同部分
rpn中的anchor_scales表⽰每个特征尺度上anchor的ba尺度,例如这⾥是8,表⽰设定的anchor⼤⼩是8[4,8,16,32,64],可以看出
每个预测层是1个size*3个⽐例,也就是每个预测层是3个anchor;⽽retianet是不同的,scales_pre_octave=3表⽰每个尺度上有3个
scalesize,分别是
,⽽octave_ba_scale=4,意思其实和rpn的anchor_scales意思⼀样,但是这⾥换个名字是因为retinanet的scale值是固定的,就⼀个
值,⽽rpn可能是多个值;通过上⾯的设置,retinanet的每个预测层都有scale_pre_octivatelen(anchor_ratios)个anchor,这⾥是9个,
是⾮常多的,anchor的⼤⼩是octave_ba_scale*[8,16,32,64,128]。可以明显发现retinanet正负样本不平衡问题⽐fasterrcnn更加
严重。
(2)正负样本定义
retinanet是one-stage算法,其采⽤的正负样本定义操作是MaxIoUAssigner,阈值定义和rpn不⼀样,更加严格。如下所⽰:
min_pos_iou=0,可以保证每个GT⼀定有对应的anchor负责预测。0.4以下是负样本,0.5以上且是最⼤Iou的anchor是正样本0.4~0.5
之间的anchor是忽略样本。其不需要正负样本采样器,因为其是通过平衡分类loss来解决的。
(3)平衡分类loss
FocalLoss是本⽂重点,是⽤于处理分类分⽀中⼤量正负样本不平衡问题,或者说⼤量难易样本不平衡问题。作者⾸先也深⼊分析了
OHEM的不⾜:它通过对loss排序,选出loss最⼤的example来进⾏训练,这样就能保证训练的区域都是hardexample,这个⽅法的缺
陷,是把所有的easyexample(包括easypositive和easynegitive)都去除掉了,造成easypositiveexample⽆法进⼀步提升训练的精度
(表现的可能现象是预测出来了,但是bbox不是特别准确),⽽且复杂度⾼影响检测效率。故作者提出⼀个简单且⾼效的⽅法:FocalLossFocalLoss
焦点损失函数焦点损失函数,⽤于替代OHEM,功能是⼀样的,需要强调的是:FL本质上解决的是将⼤量易学习样本的loss权重降低,但是不丢弃FL本质上解决的是将⼤量易学习样本的loss权重降低,但是不丢弃
样本,突出难学习样本的loss权重,但是因为⼤部分易学习样本都是负样本,所以顺便解决了正负样本不平衡问题样本,突出难学习样本的loss权重,但是因为⼤部分易学习样本都是负样本,所以顺便解决了正负样本不平衡问题。其是根据交叉
熵改进⽽来,本质是dynamicallyscaledcrosntropylossdynamicallyscaledcrosntropyloss,直接按照lossdecay掉那些easyexample的权重,这样使训练更加
bias到更有意义的样本中去,说通俗点就是⼀个解决分类问题中类别不平衡、分类难度差异分类问题中类别不平衡、分类难度差异的⼀个loss。
上⾯的公式表⽰label必须是one-hot形式。只看图⽰就很好理解了,对于任何⼀个类别的样本,本质上是希望学习的概率为1,当预测输出
接近1时候,该样本loss权重是很低的,当预测的结果越接近0,该样本loss权重就越⾼。⽽且相⽐于原始的CE,这种差距会进⼀步拉开。
由于⼤量样本都是属于well-classifiedexamples,故这部分样本的loss全部都需要往下拉。其简单思想版本如下:
1.2.2yolov2oryolov3
论⽂名称:YOLOv3:AnIncrementalImprovement
yolov2和yolov3差不多,主要是⽹络有差异,不是我们分析的重点,下⾯以yolov3为例。
(1)head结构
yolov3也是多尺度输出,每个尺度有3个anchor。对于任何⼀个分⽀都是输出[anchor数×(x,y,w,h,confidence,class类别数)h',w']。需要需要
注意的是,其和fasterrcnn或者ssd不⼀样,其类别预测是不考虑背景的,所以才多引⼊了⼀个confidence的概念,该分⽀⽤于
区分前景和背景。区分前景和背景。,所以最复杂的设计就在condidence上⾯了。
(2)正负样本定义
yolo系列的正负样本定义⽐较简单,原则和MaxIoUAssigner(固定anchor和gt值计算)⾮常类似,但是更加简单粗暴:保证每个gtbbox保证每个gtbbox
⼀定有⼀个唯⼀的anchor进⾏对应⼀定有⼀个唯⼀的anchor进⾏对应,匹配规则就是IOU最⼤,⽽没有考虑其他乱七⼋糟的。具体就是:对于某个groundtruth,⾸先要
确定其中⼼点要落在哪个cell上,然后计算这个cell的每个anchor与groundtruth的IOU值,计算IOU值时不考虑坐标,只考虑形状(因为
anchor没有坐标xy信息),所以先将anchor与groundtruth的中⼼点都移动到同⼀位置(原点),然后计算出对应的IOU值,IOU值最⼤
的那个先验框anchor与groundtruth匹配,对应的预测框⽤来预测这个groundtruth。这个匹配规则和ssd和fasterrcnn相⽐,简单很
多,其没有啥阈值的概念其没有啥阈值的概念。对于分类分⽀和bbox回归分⽀,采⽤上述MaxIoU分配原则,可以保证每个gtbbox⼀定有唯⼀的anchor保证每个gtbbox⼀定有唯⼀的anchor
进⾏负责预测,⽽不考虑阈值进⾏负责预测,⽽不考虑阈值,即使某些anchor与gt的匹配度不⾼也负责,⽽fasterrcnn⾥⾯的MaxIoUAssigner是可能由于fasterrcnn⾥⾯的MaxIoUAssigner是可能由于
anchor设置不合理导致某个gt没有anchor进⾏对应,⽽变成忽略区域的anchor设置不合理导致某个gt没有anchor进⾏对应,⽽变成忽略区域的。可以看出这种分配制度会导致正样本⽐较少。对于
confidence分⽀,其在上述MaxIoU分配原则下,还需要从负样本中划分出额外的忽略区域。因为有些anchor虽然没有和gt有最⼤iou,但
是其iou依然很⾼,如果作为正样本来对待,由于质量不是很⾼以及为了和分类、回归分⽀的正样本定义⼀致,所以不适合作为正样本,但
是如果作为负样本那也不合适,毕竟iou很⼤,这部分位置的anchor就应该设置为忽略区域,⼀般忽略iou阈值是0.7即将负样本中的iou⼤
于0.7中的anchor设置为忽略区域(需要特别注意⼀个细节:此处的iou是每个位置的anchor预测值和所有gt计算iou,⽽不是固定的(需要特别注意⼀个细节:此处的iou是每个位置的anchor预测值和所有gt计算iou,⽽不是固定的
anchor和所有gt计算iou,因为此处需要考虑位置信息,fasterrcnn系列不需要这么算的原因是fasterrcnn是每个位置都会预
测xywh,⽽yolo系列是基于grid⽹格预测,xy和wh预测是分开来的,所以会更复杂⼀些)测xywh,⽽yolo系列是基于grid⽹格预测,xy和wh预测是分开来的,所以会更复杂⼀些)。总结就是:
1基于maxiou分配准则,区分正负样本
2在负样本范围内,将iou(基于anchor预测值和gt计算)⼤于忽略阈值的anchor定义为忽略区域,实时改变
3此时就区分出了正、负和忽略anchor样本,正anchor⽤于分类、回归分⽀学习,正负anchor⽤于confidence分⽀学习,忽略
区域不考虑。
对于yolov3,由于是多尺度预测,故还有⼀个细节需要注意:⾸先需要将gt利⽤maxiou原则分配到不同的预测层上去,然后在每个⾸先需要将gt利⽤maxiou原则分配到不同的预测层上去,然后在每个
层上单独计算正负样本和忽略样本,也就是和fasterrcnn不⼀样的地⽅是yolov3不存在某个gt会分配到多个层进⾏预测的可能
性,⽽是⼀定是某⼀层负责的性,⽽是⼀定是某⼀层负责的。但是不同的具体代码实现时候可能会有些许差别。
(3)loss
由于其采⽤的是普通的bce分类Loss和smoothl1回归loss,故不再进⾏分析。
1.2.3ssd
论⽂地址:SSD:SingleShotMultiBoxDetector
(1)head结构
ssd是最典型的多尺度预测结构,是⾮常早期的⽹络。
其ssd300的head结构如下:
可以看出,ssd⼀共包括6个尺度输出,每个尺度的strides可以从anchor_strides中看出来,basize_ratio_range表⽰正⽅形anchor的
min_size和max_size,anchor_ratios表⽰每个预测层的anchor个数,以及⽐例。有点绕,下⾯具体分析。为了⽅便设置anchor,作者设
计了⼀个公式来⽣成anchor,具体为:
k为特征图索引,m为5,⽽不是6,因为第⼀层输出特征图Conv4_3⽐较特殊,是单独设置的,
表⽰anchor⼤⼩相对于图⽚的⽐例,
和
是⽐例的最⼩和最⼤值,论⽂中设置min=0.2(ssd300中,coco数据集设置为0.15,voc数据集设置为0.2),max=0.9,但是实际上代
码不是这样写的。实际上是:对于第⼀个特征图Conv4_3,其先验框的尺度⽐例⼀般设置为
,故第⼀层的
=0.1,输⼊是300,故conv4_3的min_size=30。对于从第⼆层开始的特征图,则利⽤上述公式进⾏线性增加,然后再乘以图⽚⼤⼩,可
以得到各个特征图的尺度为60,111,162,213,264。最后⼀个特征图conv9_2的size是直接计算的,300*105/100=315。以上计算可
得每个特征的min_size和max_size,如下:
计算得到min_size和max_size后,需要再使⽤宽⾼⽐例因⼦来⽣成更多⽐例的anchor,⼀般选取
,但是对于⽐例为1的先验框,作者⼜单独多设置了⼀种⽐例为1,
的尺度,所以⼀共是6种尺度。但是在实现时,Conv4_3,Conv8_2和Conv9_2层仅使⽤4个先验框,它们不使⽤长宽⽐为3,1/3的先验
框,每个单元的先验框的中⼼点分布在各个单元的中⼼。具体细节如下:
以featuremap上每个点的中点为中⼼(offt=0.5),⽣成⼀些列同⼼的priorbox(然后中⼼点的坐标会乘以step,相当于从
featuremap位置映射回原图位置)。
正⽅形priorbox最⼩边长为和最⼤边长为:min_size和
根据aspectratio,会⽣成2个长⽅形,长宽为
⽬的是保存在该⽐例下,⾯积不变。以fc7为例,前⾯知道其min_size=60,max_size=111,由于其需要6种⽐例,故⽣成过程是:
第⼀种⽐例,(min_size,min_size)=(60,60)
第⼆种⽐例,
,
第三种⽐例,
,
第四种⽐例,$
不管哪个框架实现,核⼼思想都是⼀样,但是可能某些数据的设置不⼀样。下⾯以mmdetection为例:
(2)正负样本定义
ssd采⽤的正负样本定义器依然是MaxIoUAssigner,但是由于参数设置不⼀样,故有了不同的解释。
其定义anchor与gt的iou⼩于0.5的就全部认为是负样本,⼤于0.5的最⼤iou样本认为是正样本anchor,同时由于min_pos_iou=0以及
gt_max_assign_all=Fal,可以发现该设置的结果是每个gt可能和多个anchor匹配上,匹配阈值⽐较低,且每个gt⼀定会和某个每个gt可能和多个anchor匹配上,匹配阈值⽐较低,且每个gt⼀定会和某个
anchor匹配上,不可能存在gt没有anchor匹配的情况,且没有忽略样本anchor匹配上,不可能存在gt没有anchor匹配的情况,且没有忽略样本。总结下意思就是:
和所有gt的iou都⼩于0.5,则认为是负样本
和某个gt的最⼤iou⼤于0.5,则认为是正样本
和所有anchor的最⼤iou值,如果⼤于0.0,则认为该最⼤iouanchor是正样本
4.没有忽略样本
(3)平衡分类loss
由于正负样本差距较⼤,如果直接采⽤ce和smoothl1训练,效果可能不太好,⽐较样本不平衡严重。故作者的celoss其实采⽤了
ohem+ce的策略,通过train__pos_ratio=3来配置负样本是正样本的3倍。
核⼼就是按照分类loss进⾏topk,得到3倍的负样本进⾏反向传播。
本文发布于:2022-11-27 08:43:58,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/29953.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |