基于Paddle2.0的注意力卷积网络SA-NET
本项目基于2021年ICASSP论文的SA-NET模型,用paddle2.0复现含Shuffle Attention模块的网络,在10分类动物数据集(按8:2划分训练、验证集)上实验。对比SA-ResNet50与ResNet50,前者验证准确率达86.78%,通过图示训练过程及结果,展现SA模块融合空间与通道注意力的优势。
项目背景
SA-NET是2021年ICASSP上的一篇论文SA-Net: Shuffle Attention for Deep Convolutional Neural Networks中提出的基于注意力机制的卷积网络模型。本项目即对其进行复现。
计算机视觉领域的注意力机制主要涵盖空间注意力和通道注意力两个方面。其中空间注意力用来捕获像素间的关系,而通道注意力用来捕获通道间的关系。SA-NET提出了一个将空间注意力和通道注意力融合起来的模块Shuffle Attention(SA)。本项目复现SA-NET并用其来完成动物图像分类的实验。
项目简介
本项目首次使用paddle2.0复现了含有注意力机制的网络SA-NET,并在动物数据集上进行了训练和验证。
动物数据集的划分是按8:2的的划分方法进行训练集与验证集划分的。
模型简介
SA-NET网络的核心思想是提出了SA模块。该模块对分组卷积的每个组采取通道分割。对于通道注意力分支,采用全局平均池化产生通道相关的统计信息,然后使用参数来缩放和平移通道矢量并生成通道特征表达。对于空间注意力分支,采用组归一化来产生空间相关的统计信息并生成空间特征表达。将两个分支的特征合并后,使用channel shuffle操作来进行不同子特征间的通信。如图1所示。
图1 SA模块细节示意图
具体实现可以fork后见代码细节。
论文原文:SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
参考代码:
PyTorch的实现
数据集介绍
本项目使用10分类的动物数据集进行训练和测试.
该十分类动物数据集,包含dog,horse,elephant,butterfly,chicken,cat,cow,sheep,spider和squirrel。每一分类的图片数量为2k-5k。
文件结构
| 文件名或文件夹名 | 功能 |
|---|---|
| sa_resnet.py | SA网络定义文件 |
| animal_dataset.py | 数据集定义文件 |
| config.py | 配置文件 |
| train_val_split.py | 训练验证划分文件 |
| train.py | 模型训练 |
| eval.py | 模型验证 |
解压数据集
In [ ]
!unzip -q data/data70196/animals.zip -d work/dataset
查看图片
In [ ]
import osimport randomfrom matplotlib import pyplot as pltfrom PIL import Image
imgs = []
paths = os.listdir('work/dataset')for path in paths:
img_path = os.path.join('work/dataset', path) if os.path.isdir(img_path):
img_paths = os.listdir(img_path)
img = Image.open(os.path.join(img_path, random.choice(img_paths)))
imgs.append((img, path))
f, ax = plt.subplots(3, 3, figsize=(12,12))for i, img in enumerate(imgs[:9]):
ax[i//3, i%3].imshow(img[0])
ax[i//3, i%3].axis('off')
ax[i//3, i%3].set_title('label: %s' % img[1])
plt.show()
<Figure size 864x864 with 9 Axes>
划分训练集和验证集
In [ ]
!python code/train_val_split.py
finished train val split!
使用SA-ResNet50网络进行动物分类的训练并验证
In [1]
!python code/train.py --net 'sa_resnet'
验证
In [5]
!python code/eval.py --net 'sa_resnet'
Constructing sa_resnet50......
W0218 00:13:00.844122 29642 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0218 00:13:00.848348 29642 device_context.cc:372] device: 0, cuDNN Version: 7.6.
Eval begin...
The loss value printed in the log is the current batch, and the metric is the average value of previous step.
step 103/103 [==============================] - loss: 0.6799 - acc: 0.8678 - 215ms/step
Eval samples: 3276
{'loss': [0.67990136], 'acc': 0.8678266178266179}
图示训练验证过程
图2. 使用SA-ResNet50的训练验证图示
使用ResNet50网络进行动物分类的训练并验证
训练
In [1]
!python code/train.py --net 'resnet'
验证
In [2]
!python code/eval.py --net 'resnet'
图示训练验证过程
图3. 使用ResNet的训练验证图示
比较
图4. 使用SA-NET和ResNet的验证比较图示
以上就是基于Paddle2.0的注意力卷积网络SA-NET的详细内容,更多请关注深圳推广【www.sztg.com.cn】。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
如何在Linux中安装并配置Calico网络 Linux实现K8s高性能网络的方法
2026-05-29Calico通过KubernetesCNI接口加载运行,不可手动安装calico-node;calicoctl须版本严格匹配、显式配置DATASTORE_TYPE(kubernetes或etcd)、正确设置IP_AUTODETECTION_METHOD,并禁用IPIP/VXLAN之一以避免冲突。 Calico不是“安装”出来的,而是通过Kubernetes的CNI接口被加载并运行的;直接在宿主机上...
苹果笔记本怎么快速打开网络实用工具_Mac网络测速快捷键【指南】
2026-05-27苹果笔记本用户可通过四种原生方式快速测速:①Option+单击Wi-Fi图标查看实时收发速率;②终端执行networkQuality获取端到端带宽;③macOS13+在菜单栏常驻显示网速;④Safari访问fast.com进行网页级测速。 苹果笔记本用户需要在不打开浏览器、不安装第三方软件的前提下,快速调出系统级网络诊断与测速能力,直接获取当前连接的实时吞吐量或端到端带宽基准值。 用快捷键唤出Wi...
苹果电脑怎么快速切换不同的网络位置_Mac网络配置快捷键【提示】
2026-05-27macOS“网络位置”功能支持一键切换不同网络配置。可通过控制中心、苹果菜单、终端命令、快捷指令或键盘快捷键五种方式实现,涵盖图形界面与自动化场景,无需重启即可实时生效。 如果您在苹果电脑上需要在家庭、公司、咖啡馆等不同网络环境中频繁切换,且每次都要手动调整wi-fi名称、ip地址、dns服务器或代理设置,则可借助macos的“网络位置”功能实现一键式配置切换。以下是实现该目标的多种方法: 一、通...
电脑无法设置静态IP代码 电脑输入网络配置代码命令【网络基础】
2026-05-26命令行设置静态IP失败时,可依次执行:一、用netsh查接口名并设IP/DNS;二、用PowerShell按ifIndex精确配置;三、批处理脚本释放+清缓存+重设;四、重启DHCP等服务并重置TCP/IP与Winsock;五、用ipconfig/all、routeprint、ping和nslookup验证生效。 如果您在电脑上尝试通过命令行设置静态ip地址但操作失败,或系统提示“参数错误”“接口...
如何提高Python中卷积神经网络的训练效率_采用混合精度Mixed Precision
2026-05-26PyTorch的torch.cuda.amp需成对使用autocast与GradScaler,初始化GradScaler(init_scale=2048),前向在autocast内、损失计算后调用scaler.scale(loss).backward()、scaler.step(optimizer)和scaler.update(),缺一不可,否则易因梯度下溢导致训练崩溃。 直接说结论:在PyTor...
如何解决Windows 11连接网络显示受限 修复网络协议重置Winsock方法
2026-05-26Windows11显示“网络受限”是因IP获取失败、DNS解析异常、DHCP故障、Winsock损坏或协议绑定缺失;可依次尝试:一、启用WLANAutoConfig服务;二、运行Internet连接疑难解答;三、管理员命令重置Winsock、TCP/IP及DNS;四、检查IPv4/IPv6协议启用状态;五、执行系统级网络重置。 如果您在Windows11中连接网络后显示“受限”,这通常表明设备已成...
Python中如何计算NumPy数组的移动平均值_利用convolve卷积函数实现
2026-05-25用numpy.convolve计算移动平均需设mode='valid'以避免长度变化和边界伪影,核应为np.ones(n)/n且dtype匹配,优先处理边界再卷积。 直接用numpy.convolve计算移动平均是可行的,但默认行为会改变数组长度、引入边界伪影,不加处理就用容易出错。 为什么convolve默认结果变长了? numpy.convolve的默认模式是mode='full',它返回完整...
电脑网络图标变地球是什么原因_网络连接配置重置教程
2026-05-24小地球图标是NLA服务误判网络状态所致,可通过网络重置、Winsock修复、禁用主动探测、重装网卡驱动或刷新DNS五种方法解决。 如果您发现电脑右下角网络图标突然变成小地球?,但实际仍可访问网页或应用,或完全无法联网,则可能是系统网络连接状态检测机制异常、NLA服务探测失败、DNS配置错误或Winsock协议栈损坏所致。以下是多种可立即执行的网络连接配置重置方法: 一、执行系统级网络重置 该操作将...
怎么开启 Windows 11 内置的“网络桥接网络共享” 两台电脑通过网线共享宽带方法
2026-05-24Windows11中可通过五种独立方法实现主机宽带共享给副机:一、图形界面桥接;二、PowerShell创建桥接;三、承载网络桥接到有线;四、移动热点替代方案;五、ICS配合静态IP分配。 如果您希望在Windows11系统中让一台已连接宽带(如Wi-Fi或有线)的主机,通过网线将互联网共享给另一台无网络的电脑,需启用系统内置的“网络桥接”功能,使主电脑的两个网络适配器(例如WLAN与以太网)合并...
如何在Python中实现PyTorch的空洞卷积_设置nn.Conv2d的dilation参数
2026-05-23dilation参数控制卷积核元素间的采样间隔步长,而非扩大卷积核尺寸;dilation=2时,3×3核实际感受野为5×5,仅在间隔位置采样,参数量不变。 PyTorch中nn.Conv2d的dilation参数到底控制什么 它不是“扩大卷积核尺寸”,而是控制卷积核元素之间的**间隔步长**。比如dilation=2时,一个3×3卷积核实际覆盖区域是5×5(中间填0),但只在(0,0)、(0,2)...
