《南溪的目标检测学习笔记》——后处理方法的学习笔记

1 前言

后处理方法是很重要的,我在学习训练COCO数据集时深有体会,这里用笔记记录一下后处理的相关知识~

2 南溪使用的的后处理方法

南溪使用后处理操作流程:
阈值过滤(低阈值去框,提速nms) → \rightarrow
(进行NMS之前目前不进行其它,因为不同框的分数不同,会影响NMS的效果)
按类别NMS(能量场效应) → \rightarrow
按类别Top-K (提高准确率)(暂停使用,待测试 → \rightarrow
整体Top-K(暂停使用,待测试

2.1 阈值过滤——最简单的后处理

设置一定的阈值范围对boxes进行过滤,感觉0.5一般是不错的选择;

2.2 NMS——最常用的后处理方法

参考YOLOV4和TextBox的NMS方法;

2.3.1 NMS算法的思考

对于NMS算法来说,是基于“同类目标框重叠的可能性较小的先验信息的”,具体来说,就是bboxes之间的IoU值;

2.3.2 Simple NMS算法

Nms算法实现,已经torchvision.ops中进行了实现:
torchvision.ops.nms

2.3.3 Soft-NMS算法

Ref:PaddleDetection在CornerNet-Squeeze模型中使用了Soft-NMS算法;
Soft-NMS原始论文:《Soft-NMS – Improving Object Detection With One Line of Code》

算法分析:

原始论文中的伪代码如下
代码实现:(参考PaddleDetection-post_process-soft_nms

def soft_nms(dets, sigma, thres):
    dets_final = []
    while len(dets) > 0:
    	# 将候选框按照得分高低降序排序
    	# Tip:np.argmax()会返回数组中最大元素的索引
        maxpos = np.argmax(dets[:, 0])
        # 将得分最高的候选框放入最终结果dets_final中
        dets_final.append(dets[maxpos].copy())
        # 获取最佳bbox的各个属性
        ts, tx1, ty1, tx2, ty2 = dets[maxpos]
        # 获得所有候选框的得分
        scores = dets[:, 0]
        # force remove bbox at maxpos
        # (通过将maxpos的score置为-1),从而将其删除
        scores[maxpos] = -1
        x1 = dets[:, 1]
        y1 = dets[:, 2]
        x2 = dets[:, 3]
        y2 = dets[:, 4]
        areas = (x2 - x1 + 1) * (y2 - y1 + 1)
        xx1 = np.maximum(tx1, x1)
        yy1 = np.maximum(ty1, y1)
        xx2 = np.minimum(tx2, x2)
        yy2 = np.minimum(ty2, y2)
        w = np.maximum(0.0, xx2 - xx1 + 1)
        h = np.maximum(0.0, yy2 - yy1 + 1)
        inter = w * h
        ovr = inter / (areas + areas[maxpos] - inter)
        weight = np.exp(-(ovr * ovr) / sigma)
        scores = scores * weight
        idx_keep = np.where(scores >= thres)
        dets[:, 0] = scores
        dets = dets[idx_keep]
    dets_final = np.array(dets_final).reshape(-1, 5)
    return dets_final

2.3.4 顶会算法学习

Weighted Boxes Fusion方法

原始论文:Weighted boxes fusion: Ensembling boxes from different object detection models
官方实现:ZFTurbo-Weighted-Boxes-Fusion

2.4 Top-K——“也还挺简单的”

2.4.1按类别top-K——“根据统计先验的处理方法”

可以按照类别对boxes进行top-K的筛选;

2.4.2 全局Top-K

(暂时不考虑使用“全局Top-K”,这个方法的物理含义还不是很明显)

3 阈值的超参数搜索

Conf的取值范围: ( 0.25 , 0.95 ) , s t r i d e = 0.05 (0.25,0.95), stride = 0.05 (0.25,0.95),stride=0.05
搜索次数: 15 × 15 = 225 次 15\times15=225\text{次} 15×15=225
搜索方法:网格搜索

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值