DBNet笔记

1、 模型结构,训练阶段:

模型backbone为resnet+dcn,颈部采用标准的FPN结构,具体细节:输入图片进行下采样得到c2、c3、c4、c5,对应下采样4倍、8倍、16倍、32倍,通过FPN自底向上的方式(例如对于c5,进行上采样2倍和c4经过1x1卷积的结果进行相加,以此类推)得到p2、p3、p4、p5,然后将得到的p2、p3、p4、p5都上采样到1/4的原图大小之后进行cat,然后有2个分支,一个缩减标签分支,一个是边缘标签分支,对于缩减标签分支,首先将得到的特征图通过几个1x1卷积进行通过双线性插值的方式进行上采样4倍得到原图大小的feature map,对于边缘标签分支,将得到的probality map和刚才的cat得到的feature map进行cat得到257通道的feature map作为边缘标签分支的输入,然后通过双线性插值或者转置卷积的方式进行上采样原图大小,最后将probality map 和thresh map通过DB公式进行联合得到approxmate thresh map。
在这里插入图片描述

2、训练阶段标签转换:

对于probality map的标签,主要是将原标签通过上面D公式进行缩减,而对于边缘标签的计算,首先通过公式D将标签进行扩张D像素,然后求扩张后的标签图中每一个像素点到原标签gt各边的距离,取距离最小的,然后用1减去距离图,得到扩张后的边缘标签图,最后进行归一化。
在这里插入图片描述

3、预测阶段:

可以选择用thresh分支得到pro thr map也可以直接用pro map进行输出,首先将得到的probality map通过固定阈值进行二值化,然后通过反向求D的方式进行扩张,扩张后还要进行复杂的后处理,如果是以bbox方式输出,首先通过opencv求出最小外接矩形,然后求最小外接矩形内的像素的平均输出预测概率,如果该值小于bbox thresh就丢弃,然后进行输出,如果以polygon形式输出,会首先进行下面的过滤操作,然后也是求区域内像素的平均预测概率,如果该值小于bbox thresh就过滤。

       for contour in contours[:self.max_candidates]:
            epsilon = 0.01 * cv2.arcLength(contour, True)#计算周长
            approx = cv2.approxPolyDP(contour, epsilon, True)#过滤掉点之间小于距离epsilon的点,留下剩余的点
            points = approx.reshape((-1, 2))                    #shape:4x2
            if points.shape[0] < 4:#如果上面的轮廓的点被过滤掉,就pass掉这个轮廓
                continue
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值