【论文解读】Referring Camouflaged Object Detection

论文信息

论文题目:Referring Camouflaged Object Detection
论文链接:https://arxiv.org/pdf/2306.07532
代码链接:https://github.com/zhangxuying1004/RefCOD
录用期刊:TPAMI 2025
论文单位:南开大学

ps:下文中为论文翻译及本人解读相结合(一些论文中说的比较清楚的就直接用原话了,有的地方我自己解释了下,也不是照搬原文的)

摘要

我们考虑参考伪装物体检测(Ref-COD)的问题,这是一个新任务,旨在基于一组包含显著目标物体的参考图像分割指定的伪装物体。我们首先组装了一个大规模数据集,称为R2C7K,它包含7K张图像,覆盖现实场景中的64个物体类别。然后,我们开发了一个简单但强大的双分支框架,命名为R2CNet,其中参考分支嵌入来自参考图像的目标物体共同表示,分割分支在共同表示的指导下识别和分割伪装物体。特别地,我们设计了一个参考掩码生成(RMG)模块来生成像素级先验掩码和一个参考特征增强(RFE)模块来增强识别指定伪装物体的能力。广泛的实验表明,我们的Ref-COD方法在分割指定伪装物体和识别目标物体主体方面优于其COD对应方法。我们的代码和数据集公开在https://github.com/zhangxuying1004/RefCOD

引言

引言部分就是介绍了一下COD的背景,但是本文做的“参考-伪装物体检测”其实是一个新的任务或者说一类新方法吧,所以作者在引言中给出的使用场景是:

一个典型例子是探险者寻找特定物种,但大多数物种可能与其他类似物体一起深藏。在这种情况下,如果我们有关于目标的参考信息,寻找过程将变得有方向性且更容易。

emm,这个理由感觉也不是太站得住脚?

但总之:Ref-COD利用参考信息指导指定伪装物体的识别

关键问题在于哪种形式的信息适合作为参考。本文选的是显著物体。理由如下:

现有的方法有基于文本参考的参考表达分割[11],和基于图像参考的少样本分割[12]。
然而,无论是包含指定伪装物体的标注图像,还是现有图像的详细文本描述,其获取过程都耗时费力,阻碍了这些方法向COD的迁移。考虑到网上很容易找到带显著目标的图像,我们提出一个简单问题:我们能否利用突出物体的图像来帮助更好地识别指定伪装物体?
受此问题启发,我们提出一个新颖的Ref-COD基准。我们的意图是利用日益先进的显著物体检测(SOD)研究,从参考图像中获取目标物体的共同表示,用于指导指定伪装物体的分割。图1说明了标准COD与我们Ref-COD之间的任务关系。

在这里插入图片描述
具体来说,Ref-COD将COD过程从盲目检测伪装场景中的差异物体,转变为有目的地匹配目标物体。

为了全面研究这一新基准,我们构建了一个大规模数据集,命名为R2C7K,其中包含大量无版权争议的现实场景样本。该数据集的基本信息如下:
1)它包含7K张图像,覆盖64个物体类别;
2)它由两个子集组成,即包含伪装物体的图像组成的Camo子集和包含显著物体的图像组成的Ref子集;
3)Ref子集中每个类别的图像数量固定,而Camo子集中的则不固定。

为了研究参考信息在Ref-COD中的作用,我们设计了一个双分支网络架构,并开发了一个简单但有效的框架,命名为R2CNet。

该框架包括一个参考分支和一个分割分支。

参考分支旨在从包含显著物体的参考图像中捕获目标物体的共同表示,这些表示将用于识别指定伪装物体。

特别地,我们构建了一个参考掩码生成(RMG)模块来生成像素级参考信息。在该模块中,参考分支的共同表示与分割分支的视觉特征在每个位置进行密集比较,以生成参考先验掩码。

然而,即使属于同一类别,伪装物体与显著物体之间可能存在外观差异,这可能增加准确识别伪装物体的难度。为了克服这一缺点,我们采用双源信息融合策略来消除两个信息源之间的差异。

此外,我们还设计了一个参考特征增强(RFE)模块,在参考掩码指导下实现多尺度视觉特征之间的交互,并进一步突出目标物体。

总结而言,本文的贡献可归纳如下:

  • 我们提出了一个新基准,称为Ref-COD。据我们所知,这是首次尝试桥接SOD和COD,并利用显著物体图像分割指定伪装物体。
  • 我们构建了一个大规模数据集,命名为R2C7K,可为Ref-COD研究提供数据基础和更深见解。
  • 我们设计了一个用于Ref-COD研究的新框架,命名为R2CNet,其优异的实验结果表明它为这一新主题提供了有效解决方案。

相关工作

首先介绍COD,然后介绍SOD主,最后描述不同参考信息形式的参考物体分割研究。

前面俩不说了,看下这个参考物体分割

参考物体分割意味着在给定图像中基于某种形式的参考(例如图像和文本)分割视觉物体。

介绍了两种做法:少样本分割和文本参考

少样本分割(FSS)探索基于包含同一类别物体的标注图像指导的物体分割。模型在大量像素标记为基础类的图像(查询集)上训练,并在给定少量标注样本(支持集)的情况下对未见类进行密集像素预测。特别地,大多数现有FSS网络包括两个分支,即支持分支和查询分支,以提取支持图像和查询图像的特征,并实现它们之间的交互。FSS研究的开创性工作由[68]提出,其中支持分支直接预测分割查询分支最后一层的权重。然后,[69]提出掩码平均池化操作以提取代表性支持特征,这被后续工作广泛采用。最近,大量工作[12],[70],[71]在冻结骨干网络上构建强大模块,以提升模型对未见类别的适应性。

参考表达分割(RES)探索基于文本表达的物体分割。RES旨在基于表达分割视觉物体,其网络也采用双分支架构。首个工作由[11]引入,其中视觉和语言特征分别由视觉编码器和语言编码器提取,其拼接用于生成分割掩码。随后,一系列基于多级视觉特征[72]、多模态LSTM[73]、注意力机制[74],[75]、协作网络[76]的方法相继融入RES,以生成高质量结果。此外,[77]采用文本描述作为参考,以丰富图像内容实现更好的固定预测。

在本文中,提出的Ref-COD也属于参考物体分割任务。然而,与现有方法不同,其参考信息的收集不费力。具体来说,它既不需要收集包含目标伪装物体的罕见且难标注图像,也不需要为现有COD数据集标注详细文本描述,这便于学术界和工业界跟进。

数据集

R2C7K数据集包含6,615个样本,覆盖64个类别,其中Camo子集由5,015个样本组成,Ref子集有1,600个样本。注意,该数据集的每个类别包含固定数量的参考图像(即25张),而每个类别中的COD图像数量分布不均。

对于Ref子集,每个类别随机选择20个样本用于训练,剩余5个样本用于测试;对于Camo子集,来自COD10K训练集的样本也用于训练,属于测试集的样本用于测试。来自NC4K的样本随机分配到训练和测试集,以确保这两个划分中每个类别至少包含6个样本。

框架

在这里插入图片描述我们的R2CNet框架的总体架构,由两个分支组成,即绿色的参考分支和橙色的分割分支。在参考分支中,通过将视觉特征与SOD网络生成的前景图进行掩蔽和合并,从图像中获得指定对象的共同表示。在分割分支中,使用编码器最后三层的视觉特征来表示给定的图像。然后,在设计良好的RMG模块中融合并比较这两种特征表示,以生成掩模先验,该先验用于丰富不同尺度之间的视觉特征,以突出我们RFE模块中的伪装目标。最后,将丰富的特征输入解码器以生成最终的分割图。

概述:

  • 输入分为两部分,第一部分是包含伪装物体的图像,记作IcamoI^{camo}Icamo,另一部分包含少量显著目标物体的参考图像,记作IrefI^{ref}Iref,共有K张,{Iiref}i=1K\{I^{ref}_i\}^K_{i=1}{Iiref}i=1K。其中IcamoI^{camo}Icamo来自数据集的Camo子集,包含指定类别c的伪装物体,同时IrefI^{ref}Iref来自Ref子集,其显著物体属于类别c。
  • Ref-COD的输出是一个二值掩码MsegM^{seg}Mseg,用于IcamoI^{camo}Icamo中类别c的伪装物体。

具体来说:

参考图像分支:

在这里插入图片描述
输入图像后,编码器和解码器分别得到两个特征,记作 {Fkref}k=1K\{F_{k}^{ref}\}_{k=1}^{K}{Fkref}k=1K{Mkref}k=1K\{M_{k}^{ref}\}_{k=1}^{K}{Mkref}k=1K。把编码器得到的特征称为视觉特征,大小为H32×W32\frac{H}{32} \times \frac{W}{32}32H×32W ,解码器得到的称为前景掩码。

这两个特征,送入MAP模块(masked average pooling ,MAP)

MAP函数是参考分支中的核心操作,用于从参考图像中提取目标物体的共同表示。
首先使用双线性下采样操作Fdown(⋅)\mathcal{F}_{\text{down}}(\cdot)Fdown()对前景掩码 {Mkref}k=1K\{M_{k}^{ref}\}_{k=1}^{K}{Mkref}k=1K进行下采样,采样到和视觉特征一样大小H32×W32\frac{H}{32} \times \frac{W}{32}32H×32W,然后与视觉特征逐元素相乘,随后沿空间维度求和,得到掩码区域的聚合特征,最后使用1x1卷积进行通道压缩
在这里插入图片描述

最后对FkobjF^{obj}_kFkobj做平均池化,得到最终输出: E∈Rcd×1×1E \in \mathbb{R}^{c_d \times 1 \times 1}ERcd×1×1 是目标物体的嵌入向量,用于指导分割分支定位指定伪装物体。

ps:这一部分是离线计算完成的,作者先对这些显著物体图像进行特征提取,使用的网络是ICON-R,提取完了特征做了MAP计算之后,直接把这些特征存储在本地,在训练网络的过程中直接从本地读取。

├── R2C7K  ├── Camo  ├── train                # training set of camo-subset with 64 categories.  └── test                 # tesing set of camo-subset with 64 categories.  ├── Ref          ├── Images               # all images of ref-subset with 64 categories.├── RefFeat_ICON-R       # all object representations of ref-subset with 64 categories.  └── Saliency_ICON-R      # all foreground maps of ref-subset with 64 categories.  

看数据结构,其中RefFeat_ICON-R就是事先存储好的特征,训练时候直接读取。

分割分支:

在这里插入图片描述
分割分支也是编码器-解码器结构。

作者在论文中说,这里编码器直接用的resnet50

“事实上,我们发现在所提方案下,即使一个简单的分割网络也能表现良好。因此,采用ResNet-50[84]作为编码器,并选择其后三层的特征作为视觉表示”

解码器也很简单,是一个卷积头,由两个卷积层组成用于识别伪装物体。

重点是,两个新模块,即参考掩码生成(RMG)和参考特征增强(RFE),它们添加在编码器和解码器之间,以利用参考分支的共同表示来显式分割伪装目标。

编码器的后三层特征,记作2 3 4:
在这里插入图片描述
这些特征与参考分支的输出一起输入RMG模块,以生成融合特征和参考掩码。
在这里插入图片描述

RMG模块

在这里插入图片描述

首先是一个8维的相对位置编码:

受多模态融合近期工作[72],[85]的启发,我们通过在共同表示和视觉特征之间执行双源信息融合(DSF),具体来说,视觉特征的每个位置与一个8维嵌入向量拼接,

def _make_coord(self, batch, height, width):xv, yv = torch.meshgrid([torch.arange(0,height), torch.arange(0,width)])xv_min = (xv.float()*2 - width)/widthyv_min = (yv.float()*2 - height)/heightxv_max = ((xv+1).float()*2 - width)/widthyv_max = ((yv+1).float()*2 - height)/heightxv_ctr = (xv_min+xv_max)/2yv_ctr = (yv_min+yv_max)/2hmap = torch.ones(height, width)*(1./height)wmap = torch.ones(height, width)*(1./width)coord = torch.autograd.Variable(torch.cat([xv_min.unsqueeze(0), yv_min.unsqueeze(0),\xv_max.unsqueeze(0), yv_max.unsqueeze(0),\xv_ctr.unsqueeze(0), yv_ctr.unsqueeze(0),\hmap.unsqueeze(0), wmap.unsqueeze(0)], dim=0))coord = coord.unsqueeze(0).repeat(batch,1,1,1)return coord

位置编码直接与视觉特征cat起来,
然后就是仿射变换# y = gamma * x + beta
其中这个gamma和beta呢都是由E生成的(E就是参考分支的特征)
在这里插入图片描述
代码:

# y = gamma * x + betabeta2 = torch.tanh(self.beta_proj2(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x2)gamma2 = torch.tanh(self.gamma_proj2(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x2)beta3 = torch.tanh(self.beta_proj3(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x3)gamma3 = torch.tanh(self.gamma_proj3(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x3)beta4 = torch.tanh(self.beta_proj4(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x4)gamma4 = torch.tanh(self.gamma_proj4(ref_x.squeeze())).view(bs, -1, 1, 1).expand_as(x4)x2 = self.fusion_process2(F.relu(gamma2 * x2 + beta2))x3 = self.fusion_process3(F.relu(gamma3 * x3 + beta3))x4 = self.fusion_process4(F.relu(gamma4 * x4 + beta4)) 

然后就是多尺度融合,就是自底向上融合,只不过融合的时候使用的是ConvLSTM

# MSFx4_h, x4_c = self.upsample4(x4), self.upsample4(x4)x3_h, x3_c = self.lstmcell43(input_tensor=x3, cur_state=[x4_h, x4_c])# print('x3: ', x3_h.shape)x3_h, x3_c = self.upsample3(x3_h), self.upsample3(x3_c)x2_h, x2_c = self.lstmcell32(input_tensor=x2, cur_state=[x3_h, x3_c])# print('x2: ', x2_h.shape)return x2_h

融合完了返回一个最上层的特征即可
ConvLSTMCell代码如下:

# convlstm
class ConvLSTMCell(nn.Module):def __init__(self, input_dim, hidden_dim, kernel_size, bias):"""Initialize ConvLSTM cell.Parameters----------input_dim: intNumber of channels of input tensor.hidden_dim: intNumber of channels of hidden state.kernel_size: (int, int)Size of the convolutional kernel.bias: boolWhether or not to add the bias."""super(ConvLSTMCell, self).__init__()self.input_dim = input_dimself.hidden_dim = hidden_dimself.kernel_size = kernel_sizeself.padding = kernel_size[0] // 2, kernel_size[1] // 2self.bias = biasself.conv = nn.Conv2d(in_channels=self.input_dim + self.hidden_dim,out_channels=4 * self.hidden_dim,kernel_size=self.kernel_size,padding=self.padding,bias=self.bias)def forward(self, input_tensor, cur_state):h_cur, c_cur = cur_statecombined = torch.cat([input_tensor, h_cur], dim=1)  # concatenate along channel axiscombined_conv = self.conv(combined)cc_i, cc_f, cc_o, cc_g = torch.split(combined_conv, self.hidden_dim, dim=1)i = torch.sigmoid(cc_i)f = torch.sigmoid(cc_f)o = torch.sigmoid(cc_o)g = torch.tanh(cc_g)c_next = f * c_cur + i * gh_next = o * torch.tanh(c_next)return h_next, c_nextdef init_hidden(self, batch_size, image_size):height, width = image_sizereturn (torch.zeros(batch_size, self.hidden_dim, height, width, device=self.conv.weight.device),torch.zeros(batch_size, self.hidden_dim, height, width, device=self.conv.weight.device))

这个融合特征就是这个模块的输出。记作FfF^fFf
但是这个模块还有一个输出:参考掩码
看图可以看到还有一个TM, Target Matching操作,就是用来生成参考掩码的

目标匹配(Target Matching)​​模块,通过动态卷积操作计算分割分支特征与参考表示之间的相似度,生成​​参考先验掩码(referring prior mask)​​,为后续特征增强提供定位指导。

具体来说,把参考特征当作卷积核来对视觉特征进行卷积,将卷积结果拼接在一起,然后归一化与激活处理

# 目标匹配计算
mask = torch.cat([  # 拼接batch内所有样本的结果F.conv2d(      # 动态卷积操作x2_h[i].unsqueeze(0),   # 融合特征 [1, C, H, W]ref_x[i].unsqueeze(0)    # 共同表示 [1, C, 1, 1] 作为卷积核) for i in range(bs)           # 遍历batch中每个样本
], 0)                            # 沿batch维度拼接# 归一化与激活处理
mask = self.relevance_acti(      # LeakyReLU激活self.relevance_norm(mask)     # BatchNorm2d归一化
)

可以看下论文里原话的描述:
在这里插入图片描述
他就是说将参考特征与融合特征的每一个位置进行比较,用来生成参考掩膜,记作HmH^mHm
我的理解就是:这里这个卷积核是1x1的,就是说他和融合特征的每一个位置去进行计算,

RFE模块

参考特征增强模块用于在不同尺度上丰富视觉特征。
在这里插入图片描述

具体来说,首先将上一阶段产生的先验掩码 (prior mask,HmH^mHm) 和融合特征 (fusion features,FfF^fFf) 分别调整尺寸至与前述三个特征图(即 {H2j+1×W2j+1}j=24\left\{\frac{H}{2^{j+1}}\times\frac{W}{2^{j+1}}\right\}_{j=2}^{4}{2j+1H×2j+1W}j=24)相同的形状。

然后,将同一尺度上调整尺寸后的掩码和特征图通过拼接 (concatenation) 进行融合。不同尺度的输出特征表示为 {Fjscale}j=24\left\{F_{j}^{\text{scale}}\right\}_{j=2}^{4}{Fjscale}j=24(其中 Fjscale∈Rcd×H2j+1×W2j+1F_{j}^{\text{scale}}\in R^{c_{d}\times\frac{H}{2^{j+1}}\times\frac{W}{2^{j+1}}}FjscaleRcd×2j+1H×2j+1W),这些特征也被拼接在一起,以增强识别伪装目标的能力。我们将最终增强后的特征表示为 Fenr ∈ Rcd×H8×W8F^{enr}\,\in\,R^{c_{d}\times\frac{H}{8}\times\frac{W}{8}}FenrRcd×8H×8W

如PFENet[70]所述,细粒度特征图中的微小目标在下采样过程中可能会变得模糊不清。因此,我们构建了一条跨尺度路径 (cross-scale path, CSP),从精细特征跨越到粗糙特征,以实现它们之间的交互。

此外,为了确保生成的增强特征 FenrF^{enr}Fenr 更加鲁棒,我们还对 {Fjscale}j=24\left\{F_{j}^{scale}\right\}_{j=2}^{4}{Fjscale}j=24 施加了监督,其对应的预测图表示为 {Mjscale}j=24\left\{M_{j}^{scale}\right\}_{j=2}^{4}{Mjscale}j=24(其中 Mjscale∈R1×H×WM_{j}^{scale}\in R^{1\times H\times W}MjscaleR1×H×W)。

这个增强后的特征,直接降低到1通道,尺寸调整为原始图像大小,就作为预测图了。

具体的细节参考代码中的注释:

class RFE(nn.Module):''' Referring Feature Enrichment (RFE) ModuleFollow implementation of https://github.com/dvlab-research/PFENet/blob/master/model/PFENet.py'''def __init__(self, d_model=64):super(RFE, self).__init__()self.d_model = d_modelself.pyramid_bins = [44, 22, 11]        # 352 // 8, 352 // 16, 352 // 32self.avgpool_list = [nn.AdaptiveAvgPool2d(bin_) for bin_ in self.pyramid_bins if bin_ > 1]self.init_merge = []self.alpha_conv = []self.beta_conv = []self.inner_cls = []for idx in range(len(self.pyramid_bins)):if idx > 0:self.alpha_conv.append(nn.Sequential(nn.Conv2d(self.d_model*2, self.d_model, kernel_size=1, stride=1, padding=0, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU())) self.init_merge.append(nn.Sequential(nn.Conv2d(self.d_model + 1, self.d_model, kernel_size=1, padding=0, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),))  # 局部特征增强模块:就是两个3x3的卷积                    self.beta_conv.append(nn.Sequential(nn.Conv2d(self.d_model, self.d_model, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),nn.Conv2d(self.d_model, self.d_model, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True)))            self.inner_cls.append(nn.Sequential(nn.Conv2d(self.d_model, self.d_model, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),nn.Dropout2d(p=0.1),                 nn.Conv2d(self.d_model, 1, kernel_size=1))) self.init_merge = nn.ModuleList(self.init_merge) self.alpha_conv = nn.ModuleList(self.alpha_conv)self.beta_conv = nn.ModuleList(self.beta_conv)self.inner_cls = nn.ModuleList(self.inner_cls)self.pyramid_cat_conv = nn.Sequential(nn.Conv2d(self.d_model*len(self.pyramid_bins), self.d_model, kernel_size=1, padding=0, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),                          )              self.conv_block = nn.Sequential(nn.Conv2d(self.d_model, self.d_model, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),   nn.Conv2d(self.d_model, self.d_model, kernel_size=3, padding=1, bias=False),nn.BatchNorm2d(self.d_model),nn.ReLU(inplace=True),                             )  def forward(self, feats, mask):'''feats: [bs, 64, 44, 44]sf: [bs, 1, 44, 44]'''inner_out_list = [] # 存储各尺度预测结果pyramid_feat_list = [] # 存储各尺度处理后的特征# 多尺度处理循环for idx, tmp_bin in enumerate(self.pyramid_bins):if tmp_bin <= 1.0: # 这个tmp_bin上面定义了,取值为44、22、11,不可能小于1.0   这里应该是一个拓展,如果小于1.0的话就代表比例,就按照比例计算,实际暂时没用到这个bin_ = int(feats.shape[2] * tmp_bin)feats_bin = nn.AdaptiveAvgPool2d(bin)(feats)else: # 常规下采样(平均池化  并调整到设定的尺寸)bin_ = tmp_binfeats_bin = self.avgpool_list[idx](feats)# 掩码下采样mask_bin = F.interpolate(mask, size=(bin_, bin_), mode='bilinear', align_corners=True)# 特征+掩码 进行融合merge_feat_bin = torch.cat([feats_bin, mask_bin], 1) # 通道拼接merge_feat_bin = self.init_merge[idx](merge_feat_bin) # 1×1卷积融合if idx >= 1: # 从第二个尺度开始 要额外进行跨尺度融合(当前尺度+上一尺度)pre_feat_bin = pyramid_feat_list[idx-1].clone() # 获取上一尺度处理后的特征# 上采样至当前尺度尺寸pre_feat_bin = F.interpolate(pre_feat_bin, size=(bin_, bin_), mode='bilinear', align_corners=True)# 拼接当前特征和上一尺度特征rec_feat_bin = torch.cat([merge_feat_bin, pre_feat_bin], 1)# 特征融合(1×1卷积)+ 残差连接merge_feat_bin = self.alpha_conv[idx-1](rec_feat_bin) + merge_feat_bin  # beta_conv:就是过两个3x3的卷积merge_feat_bin = self.beta_conv[idx](merge_feat_bin) + merge_feat_bin# 辅助预测(多尺度监督)   这里输出一个监督图  inner_out_bin = self.inner_cls[idx](merge_feat_bin)# 特征上采样(恢复至输入尺寸)merge_feat_bin = F.interpolate(merge_feat_bin, size=(feats.size(2), feats.size(3)), mode='bilinear', align_corners=True)# # 保存当前尺度结果(中间的监督图)inner_out_list.append(inner_out_bin)# 保存处理后的特征pyramid_feat_list.append(merge_feat_bin)# 拼接所有尺度的特征  再卷积降通道feats_refine = self.pyramid_cat_conv(torch.cat(pyramid_feat_list, 1))# 再过俩卷积 + 残差连接feats_refine = self.conv_block(feats_refine) + feats_refine  return feats_refine, inner_out_list
损失函数

BCE+IoU
但是前面有四个预测图做bce,这里他没有设置权重,就直接相加了
在这里插入图片描述

实验

这个实验是这样的,先看前两行,baseline是没有参考信息的,就是编码器-解码器结构,然后逐级融合,得到分割结果。第二行是带参考信息的,可以看到效果好了很多。然后就是,分为了单目标和多目标,来看效果。

下面的都是在现有的方法上去应用参考信息,可以看到效果都有提升。
在这里插入图片描述
在这里插入图片描述

消融实验

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88186.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring中过滤器和拦截器的区别及具体实现

在 Spring 框架中&#xff0c;过滤器&#xff08;Filter&#xff09; 和 拦截器&#xff08;Interceptor&#xff09; 都是用于处理 HTTP 请求的中间件&#xff0c;但它们在作用范围、实现方式和生命周期上有显著区别。以下是详细对比和实现方式&#xff1a;核心区别特性过滤器…

CANFD 数据记录仪在新能源汽车售后维修中的应用

一、前言随着新能源汽车市场如火如荼和新能源汽车电子系统的日益复杂&#xff0c;传统维修手段在面对复杂和偶发故障时往往捉襟见肘&#xff0c;CANFD 数据记录仪则凭借其独特优势&#xff0c;为售后维修带来新的解决方案。二、 详细介绍在新能源汽车领域&#xff0c;CANFD 数据…

某当CRM XlsFileUpload存在任意文件上传(CNVD-2025-10982)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 前言: 我们建立了一个更多,更全的…

自然语言处理与实践

文章目录Lesson1&#xff1a;Introduction to NLP、NLP 基础与文本预处理1.教材2.自然语言处理概述(1)NLP 的定义、发展历程与应用场景(2)NLP 的主要任务&#xff1a;分词、词性标注、命名实体识别、句法分析等2.文本预处理3.文本表示方法&#xff1a;词向量表示/词表征Lesson2…

CSS揭秘:9.自适应的椭圆

前置知识&#xff1a;border-radius 用法前言 本篇目标是实现一个椭圆&#xff0c;半椭圆&#xff0c;四分之一椭圆。 一、圆形和椭圆 当我们想实现一个圆形时&#xff0c;通常只要指定 border-radius 为 width/height 的一半就可以了。 当我们指定的border-radius的值超过了 w…

善用关系网络:开源AI大模型、AI智能名片与S2B2C商城小程序赋能下的成功新路径

摘要&#xff1a;本文聚焦于关系在个人成功中的关键作用&#xff0c;指出关系即财富&#xff0c;善用关系、拓展人脉是成功的重要途径。在此基础上&#xff0c;引入开源AI大模型、AI智能名片以及S2B2C商城小程序等新兴技术工具&#xff0c;探讨它们如何助力个体在复杂的关系网络…

2025年渗透测试面试题总结-2025年HW(护网面试) 34(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 34 一、网站信息收集 核心步骤与工具 二、CDN绕过与真实IP获取 6大实战方法 三、常…

萤石全新上线企业AI对话智能体,开启IoT人机交互新体验

一、什么是萤石AI对话智能体&#xff1f;如何让设备听得到、听得懂&#xff1f;这次萤石发布的AI对话Agent&#xff0c;让设备能进行自然、流畅、真人感的AI对话智能体&#xff0c;帮助开发者打造符合业务场景的AI对话智能体能力&#xff0c;实现全双工、实时打断、可扩展、对话…

智绅科技:以科技为翼,构建养老安全守护网

随着我国老龄化进程加速&#xff0c;2025年60岁以上人口突破3.2亿&#xff0c;养老安全问题成为社会关注的焦点。智绅科技作为智慧养老领域的领军企业&#xff0c;以“科技赋能健康&#xff0c;智慧守护晚年”为核心理念&#xff0c;通过人工智能、物联网、大数据等技术融合&am…

矩阵系统源码部署实操指南:搭建全解析,支持OEM

矩阵系统源码部署指南矩阵系统是一种高效的数据处理框架&#xff0c;适用于大规模分布式计算。以下为详细部署步骤&#xff0c;包含OEM支持方案。环境准备确保服务器满足以下要求&#xff1a;操作系统&#xff1a;Linux&#xff08;推荐Ubuntu 18.04/CentOS 7&#xff09;硬件配…

基于python的个人财务记账系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

从 CODING 停服到极狐 GitLab “接棒”,软件研发工具市场风云再起

CODING DevOps 产品即将停服的消息&#xff0c;如同一颗重磅炸弹&#xff0c;在软件研发工具市场炸开了锅。从今年 9 月开始&#xff0c;CODING 将陆续下线其 DevOps 产品&#xff0c;直至 2028 年 9 月 30 日完全停服。这一变动让众多依赖 CODING 平台的企业和个人开发者陷入了…

#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

深入解析C++驱动开发实战:优化高效稳定的驱动应用

深入解析C驱动开发实战&#xff1a;优化高效稳定的驱动应用 在现代计算机系统中&#xff0c;驱动程序&#xff08;Driver&#xff09;扮演着至关重要的角色&#xff0c;作为操作系统与硬件设备之间的桥梁&#xff0c;驱动程序负责管理和控制硬件资源&#xff0c;确保系统的稳定…

SNIProxy 轻量级匿名CDN代理架构与实现

&#x1f310; SNIProxy 轻量级匿名CDN代理架构与实现 &#x1f3d7;️ 1. 整体架构设计 &#x1f539; 1.1 系统架构概览 #mermaid-svg-S4n74I2nPLGityDB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-S4n74I2nP…

Qt的信号与槽(一)

Qt的信号与槽&#xff08;一&#xff09;1.信号和槽的基本认识2.connect3.关闭窗口的按钮4.函数的根源5.形参和实参的类型&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【Qt的学习】 &…

springMVC02-视图解析器、RESTful设计风格,静态资源访问配置

一、SpringMVC 的视图在 SpringMVC 中&#xff0c;视图的作用渲染数据&#xff0c;将模型 Model (将控制器&#xff08;Controller&#xff09;)中的数据展示给用户。在 Java 代码中&#xff0c;视图由接口 org.springframework.web.servlet.View 表示SpringMVC 视图的种类很多…

Go中使用Google Authenticator

现在为了安全Google二次验证使用越来越平凡了&#xff0c;所以我们自己做的一些产品中&#xff0c;也会用到Google Authenticator。 介绍 Google Authenticator采用的算法是TOTP&#xff08;Time-Based One-Time Password基于时间的一次性密码&#xff09;&#xff0c;其核心内…

ReactNative【实战系列教程】我的小红书 4 -- 首页(含顶栏tab切换,横向滚动频道,频道编辑弹窗,瀑布流布局列表等)

最终效果 顶栏 modules/index/components/topBar.tsx import icon_daily from "/assets/images/icon_daily.png"; import MaterialIcons from "expo/vector-icons/MaterialIcons"; import { useCallback, useState } from "react"; import { Im…

告别Root风险:四步构建安全高效的服务器管理体系

当整个开发团队都使用root账号操作服务器&#xff0c;且重要数据无备份时&#xff0c;系统如同行走在悬崖边缘。本文将分享一套经过验证的四步解决方案&#xff0c;帮助团队快速提升主机安全性。 为什么必须告别Root账号&#xff1f; 直接使用root账号的风险&#xff1a; &am…