比non-local更好,基于Paddle2.0的GCNet和BAT

本项目使用Paddle2.0复现了改进的non-local网络架构GCNet和BAT,并在动物分类数据集上进行了训练和验证。同时还比较了与传统non-local网络的训练和验证效果区别。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

比non-local更好,基于paddle2.0的gcnet和bat - 创想鸟

项目背景

Non-local是2018年CVPR上的一篇论文Non-local neural networks中提出的一种获取远距离注意力的网络架构,由于non-local是在时域和空域两个维度进行计算的,作者将其用在视频分类中。如果只是在空域进行计算,就可以将其用于图片分类了,这也是本项目的实验任务。

GCNet(Global Context Networks)最初是2019年arxiv上的一篇论文GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond中提出的一种结合SE注意力模块架构和Non local算法原理对non-local进行改进的网络结构。GCNet还获得了ICCV2019 Neural Architects Workshop的最佳论文奖并且最近发表在了期刊TPAMI上。

BAT(Bilinear Attentional Transforms)是2020年CVPR上的一篇论文Non-Local Neural Networks with Grouped Bilinear Attentional Transforms中提出的一种针对non-local网络改进的网络结构。

Non-local可以建模时间和空间维度上的关联性;GCNet结合了基于通道的注意力机制SE和能够捕获全局空间信息的Non-local网络;BAT是在传统的non-local模块上改进的可进行变形操作的新型模块,并且在图片分类和视频分类的性能上已经超过了传统的non-local网络结构。本项目复现GCNet和BAT并和non-local网络进行动物图像分类的实验比较。

项目简介

本项目首次使用paddle2.0复现了non-local网络的改进网络GCNet和BAT,并在动物分类数据集上进行了训练和验证。

动物数据集的划分是按8:2的的划分方法进行训练集与验证集划分的。

GCNet模型简介

一张图片中各个像素点间的关系,特别是长距离像素点间的关系对各种视觉任务非常重要。这种关系可以通过传统的堆叠卷积层的方法获得,但是往往效率低下。Non-local网络通过自注意力机制解决了这个问题。但是对于图片来说,作者通过实验发现,每个像素点的全局特征图基本都是一样的,如图1所示,其中红点是要计算的目标点。基于此,就没有必要计算每个点的全局特征图了。所以,作者就提出了一种比non-local的方法效果好但是计算量小的多的简化的注意力机制模块。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图1 non-local方法计算的红色点的注意力特征图

Non-local的计算方法有多种,包括高斯、嵌入式高斯、点积和拼接。GCNet采用了嵌入式高斯的方法,这也是通常使用的方法。GCNet模块的实现细节示意图如图2所示。其中,图2中的a表示GCNet模块的流程图,图2中的b表示简化版的non-local模块示意图,图2中的c表示GCNet模块示意图。可以看出,GCNet模块是简化版的non-local和SE模块机制的结合。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图2 GCNet模块实现细节示意图

具体实现可以fork后见代码细节。

论文原文:Global Context Networks

参考代码:

PyTorch的实现

BAT模型简介

既然是对non-local网络进行改进,我们先来看下non-local的网络架构是什么样的。如图3所示。当然,图3所示的是在时间和空间两个维度上的non-local架构,和纯空间上的没有太大区别,只需要把T去掉然后将三维卷积换成二维卷积即可。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图3 Non-local网络架构示意图

跟non-local网络相比,BAT可以对图片的局部信息进行各种变换,如缩放、平移、旋转等。如图4所示。图4的a显示的是传统non-local网络的示意图,图4的b显示的是BAT模块的示意图。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图4 BAT和non-local的比较示意图

BAT的实现细节如图5所示。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图5 BAT实现细节示意图

具体实现可以fork后见代码细节。

non-local论文原文:Non-local Neural Networks

BAT论文原文:Non-Local Neural Networks with Grouped Bilinear Attentional Transforms

参考代码:

PyTorch的实现

数据集介绍

本项目使用10分类的动物数据集进行训练和验证.

该十分类动物数据集,包含dog,horse,elephant,butterfly,chicken,cat,cow,sheep,spider和squirrel。每一分类的图片数量为2k-5k。

文件结构

文件名或文件夹名 功能

non_local.pynon_local和BAT模块定义文件context_block.pyGCNet模块定义文件nlnet.py网络定义文件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 Imageimgs = []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()

划分训练集和验证集

In [ ]

!python code/train_val_split.py
finished train val split!

使用non-local网络进行动物分类的训练并验证

训练

In [1]

!python code/train.py --net 'nl'

验证

In [20]

!python code/eval.py --net 'nl'
W0303 17:08:47.355185  7686 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1W0303 17:08:47.359616  7686 device_context.cc:372] device: 0, cuDNN Version: 7.6.add nl after block 1 with 512 planes.add nl after block 3 with 512 planes.add nl after block 1 with 1024 planes.add nl after block 3 with 1024 planes.add nl after block 5 with 1024 planes.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: 1.0642 - acc: 0.7976 - 228ms/step         Eval samples: 3276{'loss': [1.0642079], 'acc': 0.7976190476190477}

图示训练验证过程

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图6. 使用non-local的训练验证图示

使用GCNet网络进行动物分类的训练并验证

训练

In [2]

!python code/train.py --net 'gc'

验证

In [22]

!python code/eval.py --net 'gc'
W0303 17:13:22.231034  8017 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1W0303 17:13:22.235092  8017 device_context.cc:372] device: 0, cuDNN Version: 7.6.add gc after block 1 with 512 planes.add gc after block 3 with 512 planes.add gc after block 1 with 1024 planes.add gc after block 3 with 1024 planes.add gc after block 5 with 1024 planes.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.6511 - acc: 0.8040 - 217ms/step         Eval samples: 3276{'loss': [0.6511191], 'acc': 0.8040293040293041}

图示训练验证过程

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图7. 使用GCNet的训练验证图示

使用BAT网络进行动物分类的训练并验证

训练

In [ ]

!python code/train.py --net 'bat'

验证

In [21]

!python code/eval.py --net 'bat'
W0303 17:11:59.910156  7866 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1W0303 17:11:59.914266  7866 device_context.cc:372] device: 0, cuDNN Version: 7.6.add bat after block 1 with 512 planes.add bat after block 3 with 512 planes.add bat after block 1 with 1024 planes.add bat after block 3 with 1024 planes.add bat after block 5 with 1024 planes.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.7981 - acc: 0.8159 - 236ms/step         Eval samples: 3276{'loss': [0.7981112], 'acc': 0.8159340659340659}

图示训练验证过程

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图8. 使用BAT的训练验证图示

比较

在本次项目中,可以看出,BAT表现最好,GCNet其次,这两个针对non-local的改进型网络在性能上都超过了原始的non-local网络。

比non-local更好,基于Paddle2.0的GCNet和BAT - 创想鸟

图9. Non-local、GCNet和BAT的验证比较图示

以上就是比non-local更好,基于Paddle2.0的GCNet和BAT的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/63386.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
手机淘宝店铺公告在哪里设置?如何添加公告?零基础详解入口位置与编辑技巧,打造高转化店铺“黄金广告位”!
上一篇 2025年11月11日 12:10:28
下一篇 2025年11月11日 12:12:31

相关推荐

  • 顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    9 月 23 日至 27 日,2025 年国际医学影像计算与计算机辅助介入协会(miccai)年会在韩国隆重举行。在此期间,上海科技大学生物医学工程学院创始院长、联影智能联席 ceo 沈定刚荣获大会颁发的 miccai enduring impact award (eia) 持久影响力奖,成为该奖项…

    2026年9月26日 • 用户投稿
    000
  • 2025高分辨率图片生成AI工具Top10榜单

    2025年高分辨率AI图像生成工具将实现技术突破,榜单预测包括DeepImage AI Pro 2025、NVIDIA AI Imaginer 5.0等十款产品,涵盖生成质量、速度、细节控制、Prompt理解与软件兼容性五大维度;当前技术瓶颈集中在计算资源需求大、算法优化难、数据标注成本高,而未来趋…

    2026年9月26日
    200
  • synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 是 Java 中保证线程安全的核心机制,其本质是通过 JVM 内置的 Monitor(监视器)实现互斥访问。当多个线程竞争同步资源时,synchronized 依靠对象头中的 Mark Word 和锁升级机制(偏向锁 → 轻量级锁 → 重量级锁)动态调整锁的实现方式,以平衡…

    2026年9月26日 • 用户投稿
    100
  • sublime怎么修改默认的python build system_sublime Python默认编译系统修改

    sublime怎么修改默认的python build system_sublime Python默认编译系统修改sublime怎么修改默认的python build system_sublime Python默认编译系统修改sublime怎么修改默认的python build system_sublime Python默认编译系统修改sublime怎么修改默认的python build system_sublime Python默认编译系统修改

    答案:通过创建自定义Build System可指定Python解释器路径和运行参数。1. 在Tools→Build System→New Build System中创建新配置;2. 编辑JSON内容,设置cmd为python路径及-u $file参数,确保shell为true;3. 保存为Pytho…

    2026年9月26日 • 用户投稿
    100
  • 医院处方颜色分类解析

    医院处方根据用途的不同被划分为多种类型,常见的包括门诊处方、急诊处方以及特殊管理药品处方。为了便于识别与管理,各类处方所使用的纸张颜色各不相同,例如普通处方为白色,急诊处方为淡黄色,麻醉类药品处方则为淡红色等。 1、 普通处方使用白色印刷用纸,无特殊标识。 2、 急诊处方采用淡黄色纸张,右上角明确标…

    2026年9月26日
    100
  • sublime怎么调试python代码_sublime配置Python调试环境教程

    sublime怎么调试python代码_sublime配置Python调试环境教程sublime怎么调试python代码_sublime配置Python调试环境教程sublime怎么调试python代码_sublime配置Python调试环境教程sublime怎么调试python代码_sublime配置Python调试环境教程

    配置Sublime Text的Python调试环境需安装SublimeREPL插件以运行交互式脚本,设置自定义Build System实现快捷运行输出,通过插入import pdb; pdb.set_trace()使用pdb进行简单断点调试,并可搭配Anaconda或LSP插件提升编码效率,适用于轻…

    2026年9月26日 • 用户投稿
    000
  • Java 8中的Stream API有哪些常用操作?它是惰性求值的吗?

    Java 8中的Stream API有哪些常用操作?它是惰性求值的吗?Java 8中的Stream API有哪些常用操作?它是惰性求值的吗?Java 8中的Stream API有哪些常用操作?它是惰性求值的吗?Java 8中的Stream API有哪些常用操作?它是惰性求值的吗?

    答案:Java 8的Stream API通过中间操作和终端操作实现惰性求值,提升性能与代码可读性。中间操作如filter、map返回新流且惰性执行,终端操作如forEach、collect触发计算并产生结果。惰性求值避免不必要的计算,支持短路操作,优化管道处理,适用于无限流。使用时需避免副作用、重复…

    2026年9月26日 • 用户投稿
    100
  • 新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    【中国,上海,2025年7月31日】2025年中国国际数字娱乐产业大会(cdec)高峰论坛顺利举行。华为终端云服务互动媒体bu总裁张思建在题为《技术赋能体验创新 harmonyos 游戏领启未来》的演讲中指出,随着harmonyos 5设备数量突破千万大关,鸿蒙系统5已成功通过大规模市场验证,整体用…

    2026年9月26日 • 用户投稿
    400
  • 率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    在人工智能技术迅猛发展的背景下,从大规模模型训练到广泛的边缘计算应用,数据以前所未有的速度不断产生。根据 idc 的预测,至 2028 年全球将生成高达 394zb 的数据,其中生成式 ai 贡献超过 100zb。面对如此庞大的数据体量,如何实现安全存储与高效管理,成为亟需解决的关键问题。对于承载数…

    2026年9月26日 • 用户投稿
    100
  • 豆包AI是否能生成代码 豆包代码生成功能及其适用范围分析

    本文将围绕豆包AI是否能生成代码这一问题展开探讨。我们将首先确认其代码生成能力,随后详细讲解如何有效利用此功能,并通过步骤拆解,帮助用户掌握操作过程。最后,会分析该功能的适用场景与潜在局限,以便用户能更全面地理解和运用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年9月26日
    100
  • 优化VSCode远程SSH开发体验与高性能扩展加载方案

    通过优化SSH连接复用、按需加载扩展、预启动远程服务及本地协同调优,可显著提升VSCode远程开发体验。具体包括:配置ControlMaster实现连接共享,减少重复认证;使用高效加密算法加快传输;通过extensionKind分离本地与远程扩展,降低远程负载;设置VSCODE_AGENT_FOLD…

    2026年9月26日
    000
  • 如何利用Nginx日志进行安全监控

    如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控

    保障网站和应用安全,Nginx日志安全监控至关重要。本文将详细介绍关键步骤和最佳实践。 一、Nginx日志配置与启用 默认配置: Nginx通常已启用访问日志和错误日志记录。请确保日志文件配置正确并妥善存储。日志格式: 建议使用标准日志格式,方便后续分析。例如: log_format main ‘$…

    2026年9月26日 • 用户投稿
    000
  • 构建健壮的Java用户输入:Scanner整数解析与异常捕获

    构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获

    本文深入探讨了Java Scanner在获取整数输入时,当用户输入非整数数据可能引发的InputMismatchException。我们将解释此异常的产生机制,并提供一种健壮的解决方案:通过结合try-catch语句有效捕获并处理该异常,从而避免程序崩溃,提升用户交互的稳定性与友好性。 1. Jav…

    2026年9月26日 • 用户投稿
    000
  • 利好!TikTokShop欧洲市场入驻标准更新

    利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新利好!TikTokShop欧洲市场入驻标准更新

    近日,tiktokshop跨境电商针对欧洲市场释放利好信号!英国、西班牙、德国、意大利、法国欧洲五国跨境自运营(pop)模式,入驻标准更新及商家扶持新政策迎来官宣。 最新招商政策中,新商的调整核心在于,商家的第三方电商平台运营经验由【必填】调整为【选填】。同时,TikTokShop美区重点商家、有亚…

    2026年9月26日 • 用户投稿
    000
  • 苹果wapi启动与不启动的区别

    苹果wapi启动与不启动的区别苹果wapi启动与不启动的区别苹果wapi启动与不启动的区别苹果wapi启动与不启动的区别

    启动 WAPI 增强安全性,支持 WAPI 加密网络连接,而关闭 WAPI 兼容性更广,安全性稍弱。 苹果 WAPI 启动与不启动的区别 主要区别: 连接能力: 启动 WAPI:支持 WAPI 网络连接,能够访问使用 WAPI 加密技术的无线网络。不启动 WAPI:不支持 WAPI 连接,无法访问仅…

    2026年9月26日 • 用户投稿
    000
  • 怎么让豆包AI生成Python数据可视化代码

    怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码怎么让豆包AI生成Python数据可视化代码

    明确需求、指定图表类型和库、提供数据结构或示例,能高效让豆包ai生成python可视化代码。1. 先说明要画什么图,如“柱状图”;2. 指定用哪个库,如matplotlib或seaborn;3. 提供数据结构或部分数据;4. 检查生成代码是否完整,必要时补充导入语句或显示命令。 ☞☞☞AI 智能聊天…

    2026年9月26日 • 用户投稿
    000
  • 京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制

    京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制京东新卡支付安全吗?信用卡支付安全吗?全面解析支付安全机制

    “网购时绑定新银行卡会不会被盗刷?””信用卡在平台消费是否存在风险?”随着京东等电商平台支付场景的不断拓展,用户对支付安全的关注度持续攀升。本文深入剖析京东新卡支付与信用卡支付的安全机制,用技术逻辑和平台规则消除你的顾虑。 一、京东新卡支付安全机制解析 1. 什么是京东新卡支付? 当用户首次在京东使…

    2026年9月26日 • 用户投稿
    000
  • Tomcat日志中常见的性能瓶颈是什么

    在tomcat日志中,常见的性能瓶颈主要包括以下几个方面: 线程数配置不当: 问题描述:Tomcat的线程数配置不合理可能导致请求堆积或线程资源浪费。如果线程数过少,可能无法处理高并发请求,导致请求延迟增加。相反,线程数过多可能导致频繁的上下文切换和资源竞争,影响性能。解决方法:根据服务器的硬件资源…

    2026年9月26日
    000
  • 如何在Java中使用protected修饰符

    protected成员可在同类、同包及其他包的子类中访问,主要用于继承;子类不能通过父类实例访问其protected成员,只能继承访问。 在Java中,protected 是一种访问修饰符,用于控制类成员(字段、方法、构造器或内部类)的可见性。它比 private 更宽松,但比 public 更严格…

    2026年9月26日
    100
  • 雷神 911 主机如何测试 M.2 接口?带宽性能评估​

    雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​雷神 911 主机如何测试 M.2 接口?带宽性能评估​

    要测试雷神 911 主机 m.2 接口的带宽性能,首先确认其支持的协议(pcie 或 sata)及规格,可查阅主板说明书或使用硬件检测工具;准备 m.2 ssd、最新驱动、windows 10/11 系统及测试软件如 crystaldiskmark 和 as ssd benchmark;运行测试并记…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信