(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(init
、refine
)assigner不同、匹配策略不同,造成它们输出的匹配上的(matched)proposals数量不同。
细节
proposal: valid_flags
和unmap_outputs==True
:由于生成的anchor可能不在图片里(inside_flag==False
),因此匹配前先去掉这些proposal,匹配完返回前再映射回最初的proposals。
- 提升惊喜
- 疑问:效果
!=
给loss加权值 -
,在跟loss的过程发现
FocalLoss
- 区间外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.6 |
24.9 |
24.6 |
24.7 |
24.5 |
23.6 |
24.2 |
28.2 |
28.0 |
28.1 |
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
debug24h *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)