论文阅读CondInst《Conditional Convolutions for Instance Segmentation》

CondInst实例分割

论文链接:http://xxx.itp.ac.cn/pdf/2003.05664v3

CondInst是ECCV20上的一篇关于实例分割的文章,个人感觉和YOLACT的思路有相似之处(CondInst最后的处理更加直接简洁)。作者将全卷积网络应用在实例分割的task上,通过采用动态生成的conditional convolution,解决了之前全卷积网络在实例分割上不work的问题。

涉及的问题

作者首先分析了经典的Mask RCNN的问题:(1)由于采用bbox先做框定,所以对于一些不规则的instance,bbox中会掺杂大量的背景信息或者其他实例的杂讯;(2)由于要区分前景和背景信息,因此mask head需要足够大的感受野来编码上下文信息,所以就导致了较多卷积层的堆叠,造成了计算的复杂;(3)ROI操作需要将不同尺寸的区域统一到相同区域,因此对于面积较大的instance,会损失很多精度。

随后作者又分析了FCN的问题:FCN在语义分割等领域已经非常出色,虽然语义分割和实例分割很相似,但FCN在实例分割上依旧不太work(远比不上ROI系列的算法)。究其原因,是因为FCN很难区分一张图像中有相同特征的实例,而实例分割要求我们将所有的实例区分开来;而ROI算法就可以将不同的instance裁剪出来,再逐一进行mask的预测。所以实例分割需要两类信息:(1)appearance:每一个目标的外观特征,即属于什么类别;(2)location:如果一张img有多个同类物体,要通过位置信息区分出他们的不同。

CondInst

所以作者提出了CondInst,可以看作是一个instance-aware的FCN。受动态卷积的启发,CondInst的网络参数是根据instance的不同而变化的,而这个网络参数的作用是编码一些instance的特征(例如位置、形状或者外观信息)。因此根据不同实例对应的conditional mask,把他们分配到整个特征图上,就可以避免ROI操作,从而直接得到每一个instance的mask。
在这里插入图片描述
如上图所示,一张img上有K个实例,就需要动态地生成K个mask head,每一个head在他们的filter中都含有目标实例的一些特征,因此不同的mask作用到特征图时,只会根据各自编码特征,去响应拥有特征的实例所对应的pixel。进而得到不同instance的mask。

Architecture

下图为CondInst的模型图:

在这里插入图片描述

backbone采用ResNet50,采用FPN结构。下面的mask branch是P3经过卷积得到的特征图,FmaskF_{mask}Fmask,其维度C=8,然后又经过一个类似于coordconv的操作,加上了两个维度的position信息,得到了F~mask\widetilde{F}_{mask}F mask,维度为8+2=10。上面的部分针对不同尺度的特征图(P3-P7),得到分类向量px,yp_{x,y}px,y,以及controller里面的参数θx,y\theta_{x,y}θ

提供的参考引用中未提及基于改进条件生成对抗网络(Conditional GAN)的风格引导绝缘子图像增强用于缺陷检测的相关内容,无法根据引用准确回答该问题。不过可以从通用角度介绍相关情况。 在缺陷检测任务里,绝缘子图像的质量会影响检测的准确性与可靠性。基于改进条件生成对抗网络的风格引导图像增强技术,可通过学习图像的风格特征,生成具有特定风格的增强图像,以此提高图像的质量与多样性。 条件生成对抗网络(Conditional GAN)由生成器和判别器构成。生成器负责生成图像,判别器则判断图像是真实的还是生成的。改进的条件生成对抗网络可能会在网络结构、损失函数等方面进行优化,以提升生成图像的质量和风格控制能力。 风格引导的增强方式,是将特定的风格信息融入到生成过程中,让生成的绝缘子图像具有期望的风格特征,例如不同的光照条件、角度、噪声水平等。这样能模拟出更多实际场景下的绝缘子图像,增加训练数据的多样性,从而提高缺陷检测模型的泛化能力。 在缺陷检测中,使用增强后的图像训练模型,可使模型学习到更多的特征和模式,提高对不同风格和条件下绝缘子缺陷的识别能力。例如,在实际应用中,绝缘子可能会受到不同天气、光照等因素的影响,增强后的图像能帮助模型更好地适应这些复杂情况,减少误检和漏检的概率。 ```python # 以下是一个简单的条件生成对抗网络示例代码框架 import torch import torch.nn as nn import torch.optim as optim # 定义生成器 class Generator(nn.Module): def __init__(self, input_dim, output_dim): super(Generator, self).__init__() self.model = nn.Sequential( nn.Linear(input_dim, 128), nn.LeakyReLU(0.2), nn.Linear(128, 256), nn.BatchNorm1d(256), nn.LeakyReLU(0.2), nn.Linear(256, 512), nn.BatchNorm1d(512), nn.LeakyReLU(0.2), nn.Linear(512, output_dim), nn.Tanh() ) def forward(self, z, label): input_tensor = torch.cat((z, label), dim=1) return self.model(input_tensor) # 定义判别器 class Discriminator(nn.Module): def __init__(self, input_dim, num_classes): super(Discriminator, self).__init__() self.model = nn.Sequential( nn.Linear(input_dim + num_classes, 512), nn.LeakyReLU(0.2), nn.Linear(512, 256), nn.LeakyReLU(0.2), nn.Linear(256, 1), nn.Sigmoid() ) def forward(self, x, label): input_tensor = torch.cat((x, label), dim=1) return self.model(input_tensor) # 初始化网络 input_dim = 100 output_dim = 784 num_classes = 10 generator = Generator(input_dim, output_dim) discriminator = Discriminator(output_dim, num_classes) # 定义损失函数和优化器 criterion = nn.BCELoss() g_optimizer = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999)) d_optimizer = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999)) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值