训练的分离loss设计

(03-16) 21d
这个方法本身可能不起效

实验方法

资源:
192@pengxk/TOV_mmdetection/

1、按实例分离loss


  • --> algorithm: 根据dr修改bboxes_weight、labels_weight

  • 理论分析:原算法bboxes_gt, lables = filter(bboxes_gt, lables)导致大量漏检。因scale被滤掉的gt,导致其区域原本的正例被匹配为负例。
    1)gt_valid = filter(bboxes_gt, lables)2)filter(sampling_result, gt_valid)
def get_targets(gt_inds_valid_list=None,):
        ### add by fei ##
        if gt_inds_valid_list is None:
            gt_inds_valid_list = [None for i in range(num_imgs)]
        ### add by fei ##

def _point_target_single(gt_inds_valid=None,):
        ### filter code here ##

RepPointsHead Pipline: loss() --invoke->get_target()--invoke-> _point_target_single()


  • 实验分析:将filter(dr=[0.25, 0.33, 0.5])的保留区间都设为全部(即不过滤),性能与之前一致。说明代码实现应该正确,可能是算法策略本身的问题。
    解决:尝试区间调参(按数量划分>>直接按划分),性能上升至20+。

改进:filter改为soft方式(weight[filtered] = 0>>weight[filtered] = soft

2、按图片分离loss

原则:图片不同dr对应loss的权值,与图里目标的尺度分布有关。
要求:一张图片里的所有目标的权值处理一致,最终效果相当于给loss加了权值(pos_ins与neg_ins对应的权值都要同步修改)。
Bug注意:由于两个stage(initrefine)assigner不同、匹配策略不同,造成它们输出的匹配上的(matched)proposals数量不同。


细节proposal: valid_flagsunmap_outputs==True:由于生成的anchor可能不在图片里(inside_flag==False),因此匹配前先去掉这些proposal,匹配完返回前再映射回最初的proposals。

  • 提升惊喜
  • 疑问:效果!=给loss加权值
  • ,在跟loss的过程发现
    FocalLoss
    origin

    weight: 0.7098
  • 区间外losses_pts_refine全0 [Bug]

用什么区间、mean or median、什么soft_weight函数形式、...都是消融实验的问题,首先能肯定是:这是有性能提升的
而现在最需要验证的是:分离loss与FPN分层相结合,是否有效

3、FPN assigned by layers

[ Here]

4、Predictor

卡住没啥进展,就会感觉抑郁


实验记录 (倒序)

Separate-instance
epoch
1

2
...
9

10

11

12
23.2 23.3 ... 27.9 28.1 28.0 28.5 29.6
23.4 23.5 ... 27.9 28.2 28.2 28.6
29.4
24.0 24.3 ... 27.9 28.2 28.1 28.7 29.3

说明:1)instance:对soft_weight敏感,0.3优于0.9
2)似乎FPN与soft此消彼长

Separate-image
epoch
1
2 3 4 5 6 7 8 9 10 11 12 上界
25.0 24.8 25.0 23.7 24.4 23.5 23.3 23.9 28.4 29.0
24.9
24.8
24.6
25.4
24.9
25.2
24.6
23.8
24.7
24.6
24.5
23.9
23.6
23.8
24.2
23.7
28.2
27.4
28.0
27.4
28.1
27.4
28.4
-
29.0
28.4 29.0

说明:image:对soft_weight不敏感

epoch
1
2 3 4 5 6 7 8 9 10 11 12
21.7 21.7 21.7 21.1 22.2 22.0 21.4 21.7 27.0 27.3 27.3 28.0
21.0 21.6 21.5 21.2 21.5 24.6 24.1 23.7 27.5 27.6 27.7 28.0
21.1 21.1 20.7 - - - - - - - - -

说明:区间95比258将样本集合划分地更松散,区间95对应小目标()的范围更小,猜测具有更好的区分度

AP:PR面积
mAP:某iou_thr下所有类别的AP
mmAP:所有iou_thr

  • 修改pth文件的epoch

  • 按图片分开算loss

  • env对了 0.5h

  • 首次功能实现 24h

  • debug 24h *n
    --> 新建多个不必要的高维tensor
    --> , 同步异常变大--> num_total_samples_refine=0?
    训几轮后出 --> if None: pass


  • 分析:评测代码有bug?No 依赖的模型正确导入?算法本身bug(一张图多个实例共享一个dr)?

  • 算法:

input: dr in [0.25, 0.33, 0.5]

key: 根据dr,选出对应的proposals
    [x] 从backbone传dr至head.loss
        or 计算f_map得dr
    [] label,gt_weights = filter_weights(dr, label_weights: (b, w, h), bbox_weights: (???))

key1: 算dr
    # 传dr
    # AnchorFreeHead :: BaseDenseHead.forward_train()
    # ResNet_DR.forward(x, dr) ??? dr from who
key2: for layer in 多层:



参考:
[1] 多尺度训练 web
[2] python区间 interval(1,2)

你可能感兴趣的:(训练的分离loss设计)