GCN-Global Convolutional Network

问题:

下图引用自:https://blog.csdn.net/u011974639/article/details/78897066
在这里插入图片描述

因此这个任务本身就是矛盾的。从定位的角度来看,模型结构应该是完全卷积的,不应该使用全连接或全局的池化,因为这些层将丢弃位置信息;从分类的角度看,模型需要对输入的变换保持不变——对象可以移动、旋转或重新缩放,但分类结果不发生改变,因此需要更为大的核,才能保证具有较强的鲁棒性。

现在的大多数模型主要考虑的是定位问题,而没有考虑到分类问题,这对于分类任务不是应该最先考虑的。
在这里插入图片描述
图A是一个分类的模型,就像是圆锥形,由底层向上提取高纬度的全局特征用于分类(不同层数有融合),但是分辨率太低,空间信息丢失过多,不利于定位;图B是定位模型,尽可能地保证能够图像分辨率足够高,然而,由于分类器是局部连接而不是全局连接到特征图,因此分类器很难处理输入上的不同变换(旋转等)。图C作者提出的模型,这种模型在保证了定位的分辨率的同时,通过不同的局部特征图的密集连接,得到了综合的考虑。

方法:

Global Convolutional Network (GCN)
在这里插入图片描述

  • B中的GCN模块是一个全局的卷积模块(调整k可达到全局),因为参数太多使用了可分离卷积来替代。

  • A是总体模型,其中基本定位结构还是降采和升采的那套结构,只不过加入GCN模块能够使网络更加在意在分类能力上的表现。

  • C是边界精炼模块(BR,也可以叫边界对齐模块),它利用残差模块来实现,相当于学习一下预测输出与标准应有的误差,然后进行修正。
    论文中将C表示为公式 :
    在这里插入图片描述

结果1:

下面这个是对比试验的几个模型
在这里插入图片描述
A是作者提出的,B是baseline,C是直接的k * k的卷积核,D是用3 * 3 小的卷积核堆积成的和A一样参数量的结构。它们的比较对象是GCN模块

1、A上的不同的k的测试结果

在这里插入图片描述
结果随着核的增大而变得更好,证明作者的分析是正确的,专注于分类的方向是对的。

2、A和C模块的对比结果

在这里插入图片描述
GCN模型随着参数的增加效果变好,而C模型随着参数的增加,反而效果变坏了,可能有由于参数巨大而导致不能拟合。

3、A和D对比(D不使用非线性激活函数,达到相同感受野)

在这里插入图片描述
由于GCN使用了可分离卷积,当k > 7的时候,3 * 3的卷积核构成与我们的可分离卷积构成的相同的感受野的时候,用的参数更加的多。

4、降低D的stack层数

在这里插入图片描述
随着层数的下降,D的表现越来越低,而且参数远大于GCN,因此GCN模型更加有效。

5、解释模型(distance<7)

在这里插入图片描述
上图为边缘统计和分割结果的内部统计(distance<7成为边界区域),结果表明我们的模型专注于内部的分类,而边缘区域主要还是靠定位,而我们提出的BR也有助于提升边缘定位的准确性,联合我们的GCN能够达到很好的效果。

结果2:ResNet-GCN

bottleneck module

考虑到好的效果所以将GCN模块直接替代预训练模型里面的bottleneck module,而且使参数和计算成本尽量保持一致。细节如下:
在这里插入图片描述
在这里插入图片描述

最终的结果为

在这里插入图片描述
可以看出我们的基于GCN的ResNet模型应用于分类的效果没有ResNet效果好,但是在分割数据集上继续微调以后,效果超过了ResNet50。

结论

提出了GCN更多的关注于内部的分类,提出的BR对于边界进行了分割学习,论证了大尺寸核原理的正确性,通过使用可分离卷积,在大尺度核、参数量、VRF(Valid Receptive Field)之间达到了一种平衡。

另外,用它替换用于分割的时候的残差网络中的bottleneck module,可以有效地提升分割的准确性。但不适用于分类任务。

PASCAL VOC 2012 (82.2%) and Cityscapes (76.9%).

PyG(Torch Geometric)是一个用于图神经网络(Graph Neural Networks, GNNs)的Python库,它是基于PyTorch构建的。如果你想使用PyG搭建GCN(Graph Convolutional Network)网络,首先需要安装`torch_geometric`库。以下是一个简单的步骤概述: 1. **安装**: ```bash pip install torch torchvision torchaudio -f https://download.pytorch.org/whl/torch_stable.html pip install torch-scatter -f https://github.com/rusty1s/pytorch_scatter/blobs/main/dist/ pip install torch-sparse -f https://github.com/rusty1s/pytorch_sparse/blobs/main/dist/ pip install torch-cluster -f https://github.com/rusty1s/pytorch_cluster/blobs/main/dist/ pip install torch-geometric ``` 2. **导入所需模块**: ```python import torch from torch_geometric.nn import GCNConv, global_mean_pool ``` 3. **构建数据结构**: 使用`torch_geometric.data.Data`类来创建图的数据结构,包括节点特征和边的信息。 4. **定义模型**: ```python class GCN(torch.nn.Module): def __init__(self, in_channels, hidden_channels, out_channels): super(GCN, self).__init__() self.conv1 = GCNConv(in_channels, hidden_channels) self.conv2 = GCNConv(hidden_channels, out_channels) def forward(self, data): x, edge_index = data.x, data.edge_index x = F.relu(self.conv1(x, edge_index)) x = self.conv2(x, edge_index) return global_mean_pool(x, data.batch) ``` 5. **训练和预测**: 定义损失函数、优化器,并通过`DataLoader`加载数据进行训练。 ```python model = GCN(...).to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) for epoch in range(100): # 假设这是训练循环 optimizer.zero_grad() output = model(data) loss = F.nll_loss(output[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step() # 预测阶段 with torch.no_grad(): pred = model(data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值