其他
【强基固本】手把手教你学DBNet
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
编辑:人工智能前沿讲习
基于回归:Textboxes++、R2CNN,FEN等 基于分割:Pixel-Link,PSENet,PMTD,LOMO,DBNet等
01
1)传统分割方法的后处理
2)DBNet后处理
02
图像经过FPN网络结构,得到四个特征图,分别为1/4,1/8,1/16,1/32大小; 将四个特征图分别上采样为1/4大小,再concat,得到特征图F 由F得到 probability map (P) 和 threshold map (T) 通过P、T计算(通过可微分二值化DB,下文介绍) approximate binary map( 近似binary map )
训练阶段:对P、T、B进行监督训练,P和B是用的相同的监督信号(label); 推理阶段:通过P或B就可以得到文本框。
03
nn.Upsample(scale_factor=2, mode='nearest'))
04
binary = self.binarize(fuse) #由F得到P
if self.training:
result = OrderedDict(binary=binary)
else:
return binary
if self.adaptive and self.training:
if self.serial:
fuse = torch.cat(
(fuse, nn.functional.interpolate(
binary, fuse.shape[2:])), 1)
thresh = self.thresh(fuse)
4.1 probability map
self.binarize = nn.Sequential(
nn.Conv2d(inner_channels, inner_channels //
4, 3, padding=1, bias=bias), #shape:(batch,256,1/4W,1/4H)
BatchNorm2d(inner_channels//4),
nn.ReLU(inplace=True),
nn.ConvTranspose2d(inner_channels//4, inner_channels//4, 2, 2), #shape:(batch,256,1/2W,1/2H)
BatchNorm2d(inner_channels//4),
nn.ReLU(inplace=True),
nn.ConvTranspose2d(inner_channels//4, 1, 2, 2), #shape:(batch, W, H)
nn.Sigmoid())
2)将得到的特征图进行反卷积操作,卷积核为(2,2),得到的特征图shape为(batch,256,1/2W,1/2H),此时为原图的1/2大小;(代码第6行)
3)再进行反卷积操作,同第二步,不同的是输出的特征图通道为1,得到的特征图shape为(batch,W,H),此时为原图大小。(代码第9行)
4)最后经过sigmoid函数,输出概率图,probability map。(代码第10行)
4.2 threshold map
binary = self.binarize(fuse) #由F得到P
if self.training:
result = OrderedDict(binary=binary)
else:
return binary
if self.adaptive and self.training:
if self.serial:
fuse = torch.cat(
(fuse, nn.functional.interpolate(
binary, fuse.shape[2:])), 1)
thresh = self.thresh(fuse) #由F得到T
05
thresh_binary = self.step_function(binary, thresh)
def step_function(self, x, y):
return torch.reciprocal(1 + torch.exp(-self.k * (x - y)))
06
1)标准二值化(Standard binarization)
2)可微分二值化(Differentiable binarization)
是probability map, 是threshold map;
k为放大倍数,根据实验取值为50。
3)为什么可微分二值化会带来性能提升?
2)对比曲线中的黄线和蓝线,在错误预测的区域( 的x<0区域, 的x>0区域)这一放大效果更为显著,也就是loss更大,进而可以促进模型的优化过程并产生更为清晰的预测结果。被放大区域为下图红框区域。
07
08
8.1 概率图标签
8.2 阈值图标签
09
是阈值图的标签。
10
def unclip(self, box, unclip_ratio=1.5):
poly = Polygon(box)
distance = poly.area * unclip_ratio / poly.length
offset = pyclipper.PyclipperOffset()
offset.AddPath(box, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)
expanded = np.array(offset.Execute(distance))
return expanded
“强基固本”历史文章
小样本学习只是一场学术界自嗨吗?
检测和处理异常值的极简指南
完整版图解Transformer
机器学习建模中的Bagging思想!
常见的几种最优化方法
聊聊炼丹效率
为什么回归问题用MSE?
记MoCo中一个关于CrossEntropyLoss的计算问题
Transformer总结-2022版
浅谈弱监督学习(Weakly Supervised Learning)
DINO:目标检测benchmark COCO屠榜的正确姿势
图卷积知识梳理
生成对抗网络(GAN)与它背后的思想
基于深度学习的自然图像和医学图像分割:网络结构设计
更多强基固本专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!