DANet代码运行问题

Dual Attention Network for Scene Segmentation(CVPR2019)
https://github.com/junfu1115/DANet

运行DANet代码时,按照readme.md文件执行了之后运行test.py脚本出错:
Ninja is required to load C++ extensions

出错原因和解决方法:http://www.dlinzhao.cn/deeplearning/ninja-is-required-to-load-c-extensions/

主要时没有安装Ninja,安装一下就能解决问题。

1.下载

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip

2.解压

unzip ninja-linux.zip

3.移动到系统目录

sudo mv ninja /usr/local/bin
解决后再此运行,依然报错:
ModuleNotFoundError: No module named 'ipdb'

解决方法:

pip install ipdb

之后再就是一个train_fine.txt和val_fine.txt文件的问题。然后就可以运行了,结果:

pixAcc: 0.9596, mIoU: 0.7991: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 500/500 [19:30<00:00,  2.34s/it]
pixAcc: 0.9596, mIoU: 0.7991

比官方给出的验证结果少了0.0002个点。可能设备问题吧

### DANet PAM模块代码实现 在DANet架构中,位置注意力模块(PAM)用于捕捉全局上下文中的空间关系。该模块通过计算不同位置之间的相似度来增强特征图的空间表示能力[^1]。 #### 位置注意力模块的工作原理 PAM主要由三个卷积层组成,分别负责查询(query),键(key) 和 值(value) 的提取: - 查询和键用来计算自适应加权矩阵; - 加权矩阵与值相乘得到最终输出。 这种机制允许模型聚焦于重要的区域并抑制不相关的信息。 #### PyTorch 实现示例 下面是一个基于PyTorch的位置注意模块(PAM)的具体实现: ```python import torch from torch import nn import torch.nn.functional as F class PositionAttentionModule(nn.Module): """ Position attention module""" def __init__(in_dim, gamma=2, b=1): super(PositionAttentionModule,).__init__() # 计算通道数 inter_channels = int(in_dim / (gamma ** 2)) self.inter_channels = inter_channels # 定义三层不同的1x1卷积操作 self.query_conv = nn.Conv2d( in_channels=in_dim, out_channels=inter_channels, kernel_size=1) self.key_conv = nn.Conv2d( in_channels=in_dim, out_channels=inter_channels, kernel_size=1) self.value_conv = nn.Conv2d( in_channels=in_dim, out_channels=in_dim, kernel_size=1) self.gamma = nn.Parameter(torch.zeros(1)) def forward(x): m_batchsize, C, height, width = x.size() proj_query = self.query_conv(x).view(m_batchsize,-1,width*height).permute(0, 2, 1) proj_key = self.key_conv(x).view(m_batchsize,-1,width*height) energy = torch.bmm(proj_query,proj_key) attention = F.softmax(energy,dim=-1) proj_value = self.value_conv(x).view(m_batchsize,-1,width*height) out = torch.bmm(proj_value,attention.permute(0,2,1)) out = out.view(m_batchsize,C,height,width) out = self.gamma * out + x return out ``` 此代码片段定义了一个名为`PositionAttentionModule`的类,它实现了上述提到的功能,并且可以通过调整参数来自定义输入维度和其他超参数设置。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值