【YOLO11-MM 多模态目标检测】EMA注意力增强多尺度目标模态特征,效果优于ECA、CBAM、CA,目标遮挡数据集涨点
本文研究了在YOLO11-MM多模态目标检测网络中引入EMA(高效多尺度注意力)模块的方法。通过将EMA分别置于模态融合的前期、中期和后期,系统分析了不同插入位置对特征表达能力和检测性能的影响。EMA通过分组通道、方向感知池化和像素级交互,在保持较低计算开销的同时增强了多模态特征的表达能力。实验在FLIR数据集子集上进行,结果表明EMA能有效提升检测精度。文章详细介绍了EMA的实现原理、网络结构修
摘要
本文研究了在YOLO11-MM多模态目标检测网络中引入EMA(高效多尺度注意力)模块的方法。通过将EMA分别置于模态融合的前期、中期和后期,系统分析了不同插入位置对特征表达能力和检测性能的影响。EMA通过分组通道、方向感知池化和像素级交互,在保持较低计算开销的同时增强了多模态特征的表达能力。实验在FLIR数据集子集上进行,结果表明EMA能有效提升检测精度。文章详细介绍了EMA的实现原理、网络结构修改方法以及训练配置,为多模态目标检测研究提供了实用参考。
目录
1. EMA(Efficient Multi-scale Attention)的核心思想
一、引言
本文主要围绕 YOLO11-MM 多模态目标检测 展开,重点研究在网络中引入 EMA(Efficient Multi-scale Attention) 注意力模块的整体思路与具体实践。我们将 EMA 分别置于模态融合路径的前期(early)、中期(middle)与后期(late),对不同插入位置进行系统改造与对比实验,分析在不同阶段引入注意力机制对特征表达能力及最终检测性能的影响规律。
传统的通道注意力(CA)与空间注意力(SA)在视觉任务中已被证实能够显著提升特征表征质量,但普遍依赖通道压缩来建模跨通道依赖关系,这在一定程度上会削弱深层语义信息。本文在 YOLO11-MM 框架中引入高效多尺度注意力(EMA),通过显式融合通道与空间信息、构建多尺度并行子网络结构以及改进坐标相关建模方式,在保持较低计算与参数开销的前提下,获得更加细致且具有全局感知能力的特征表示。
在实验设计上,我们一方面针对不同插入位置对 EMA 进行系统消融,力图在特征表达增强与网络复杂度之间取得最佳平衡;另一方面从检测精度、推理开销与训练稳定性等维度综合评估方法效果,并对大量实验结果进行了归纳与分析,期望为多模态目标检测领域的模型设计与工程实现提供可复用的经验与参考。
需要特别说明的是:本文所使用的数据集为 FLIR 数据集的一个子集,并非完整 FLIR 数据集,读者在复现或扩展实验时需特别留意数据划分与配置差异。希望本文的工作能够为正在从事多模态目标检测研究与应用的读者提供具有实用价值的技术参考。
二、注意力优势、结构图、代码
1. EMA(Efficient Multi-scale Attention)的核心思想
代码地址:https://github.com/YOLOonMe/EMA-attention-module/blob/main/EMA_attention_module
EMA 的出发点是:
通道注意力 / 空间注意力虽然有效,但通过通道降维建模跨通道关系会破坏部分深层语义信息。
为此,EMA 不再做全局通道压缩,而是:
-
将通道按
groups划分并 重排到 batch 维(group_x = x.reshape(b * groups, c//groups, h, w)),得到多组子特征; -
在每个子特征里,沿 水平/垂直方向自适应池化(
pool_h、pool_w),利用1×1 Conv融合,获得方向感知的空间权重; -
结合
GroupNorm + 3×3 Conv引入局部上下文; -
再通过 跨维度的 Softmax + 矩阵乘法 构造像素级两两关系,生成最终注意力权重
weights,对原特征进行重标定。

2. EMA 的优势特点
(1) 不依赖通道降维,保留更完整的语义信息
传统 SE / CBAM 常用 c→c/r→c 的 MLP 压缩通道,EMA 通过“重排 + 分组”的方式在子空间内建模相关性,避免了通道维信息丢失,对深层视觉语义更友好。
(2) 多尺度 / 多分组建模,空间语义分布更充分
把通道拆成多个 group,每个 group 内部独立建模,使得不同语义子空间都能学到各自的空间注意模式,提升对复杂场景、多尺度目标的表达能力。
(3) 方向感知 + 像素级两两关系
-
利用
pool_h/pool_w+1×1 Conv显式编码水平、垂直方向的长程依赖,类似一种“坐标敏感”的空间注意力; -
通过 Softmax 与矩阵乘法,对
x1与x2做跨维交互,捕获 像素级 pairwise 关系,比只做通道权重或简单空间 mask 更细腻。
(4) 兼顾效率与效果,适配轻量网络
EMA 的核心运算基于分组后的 c//groups 通道(并辅以小卷积和池化),在保持较强表达力的同时,有效控制了参数量与 FLOPs,非常适合 YOLO11-MM 这类强调推理速度与部署体验的轻量架构。
(5) 实现简单、易于复现与扩展
你给出的 EMA(nn.Module) 代码结构清晰,依赖的仅是常规卷积、池化和归一化层,便于在多种骨干或检测头中直接插入;配合论文摘要和网络结构图,读者可以快速理解设计动机并完成复现。
3. 在 YOLO11-MM 多模态目标检测中的突出贡献
-
增强多模态融合特征的表达能力:
放在模态融合前/中/后期,EMA 能在可见光与红外等模态的联合特征上,同时利用通道、空间和像素级关系,突出跨模态一致的目标区域、抑制各模态中的噪声与伪目标。 -
在轻量前提下提升检测精度:
相比引入更重的 Transformer/self-attention,EMA 的分组设计使得额外开销可控,却能带来稳定 mAP 提升,实现“精度–复杂度”更优的折中。
4. 代码说明
class EMA(nn.Module):
def __init__(self, channels, factor=16):
super(EMA, self).__init__()
self.groups = factor
assert channels // self.groups > 0
self.softmax = nn.Softmax(-1)
self.agp = nn.AdaptiveAvgPool2d((1, 1))
self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
self.pool_w = nn.AdaptiveAvgPool2d((1, None))
self.gn = nn.GroupNorm(channels // self.groups, channels // self.groups)
self.conv1x1 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=1, stride=1, padding=0)
self.conv3x3 = nn.Conv2d(channels // self.groups, channels // self.groups, kernel_size=3, stride=1, padding=1)
def forward(self, x):
b, c, h, w = x.size()
group_x = x.reshape(b * self.groups, -1, h, w) # b*g,c//g,h,w
x_h = self.pool_h(group_x)
x_w = self.pool_w(group_x).permute(0, 1, 3, 2)
hw = self.conv1x1(torch.cat([x_h, x_w], dim=2))
x_h, x_w = torch.split(hw, [h, w], dim=2)
x1 = self.gn(group_x * x_h.sigmoid() * x_w.permute(0, 1, 3, 2).sigmoid())
x2 = self.conv3x3(group_x)
x11 = self.softmax(self.agp(x1).reshape(b * self.groups, -1, 1).permute(0, 2, 1))
x12 = x2.reshape(b * self.groups, c // self.groups, -1) # b*g, c//g, hw
x21 = self.softmax(self.agp(x2).reshape(b * self.groups, -1, 1).permute(0, 2, 1))
x22 = x1.reshape(b * self.groups, c // self.groups, -1) # b*g, c//g, hw
weights = (torch.matmul(x11, x12) + torch.matmul(x21, x22)).reshape(b * self.groups, 1, h, w)
return (group_x * weights.sigmoid()).reshape(b, c, h, w)
三、逐步手把手添加CA/ECA/GAM/CAA注意力
3.1 第一步
在 ultralytics/nn 目录下面,新建一个叫 attention 的文件夹,然后在里面分别新建一个.py 文件,把注意力模块的“核心代码”粘进去。
注意🔸 如果你使用我完整的项目代码,这个 attention 文件夹已经有了、里面的模块也是有的,直接使用进行训练和测试,如果没有你只需要在里面新建一个 py 文件或直接修改已有的即可,如下图所示。

3.2 第二步
第二步:在该目录下新建一个名为 __init__.py 的 Python 文件(如果使用的是我项目提供的工程,该文件一般已经存在,无需重复创建),然后在该文件中导入我们自定义的注意力EMA,具体写法如下图所示。

3.3 第三步
第三步:找到 ultralytics/nn/tasks.py 文件,在其中完成我们模块EMA的导入和注册(如果使用的是我提供的项目工程,该文件已自带,无需新建)。具体书写方式如下图所示

3.4 第四步
第四步:找到 ultralytics/nn/tasks.py 文件,在 parse_model 方法中加入对应配置即可,具体书写方式如下图所示。
elif m in {CBAM,CA,CAA,ECA,GAM,EMA}: # 所有注意力机制模块
c2 = ch[f]
args = [c2, *args]

四 完整yaml
4.1 YOLO11-MM前期(early)加入EMA
训练信息:summary: 188 layers, 2,590,676 parameters, 2,590,660 gradients, 6.6 GFLOPs
# Ultralytics YOLO11 🚀 MultiModal Early Fusion Configuration
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # YOLO11n summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
s: [0.50, 0.50, 1024] # YOLO11s summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
m: [0.50, 1.00, 512] # YOLO11m summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
l: [1.00, 1.00, 512] # YOLO11l summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
x: [1.00, 1.50, 512] # YOLO11x summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.4 GFLOPs
backbone:
# P1/2 - 早期融合层:直接处理6通道输入(RGB+X)
- [-1, 1, Conv, [64, 3, 2], 'Dual'] # 0-P1/2 (6ch->64ch early fusion)
- [-1, 1, EMA, []] # 0-P1/2 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]] # 2
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]] # 4
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]] # 6
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]] # 8
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 2, C2PSA, [1024]] # 10
# 检测头 - 标准YOLO11检测头结构
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 11
- [[-1, 7], 1, Concat, [1]] # 12 cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 14
- [[-1, 5], 1, Concat, [1]] # 15 cat backbone P3
- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]] # 17
- [[-1, 14], 1, Concat, [1]] # 18 cat head P4
- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]] # 20
- [[-1, 11], 1, Concat, [1]] # 21 cat backbone P5
- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)
- [[17, 20, 23], 1, Detect, [nc]] # 23 Detect(P3, P4, P5)

4.2 YOLO11-MM中期(middle)加入EMA
训练信息:summary: 336 layers, 4,984,822 parameters, 4,984,806 gradients, 11.4 GFLOPs
# Ultralytics YOLOMM 🚀 Standard Mid-Fusion Paradigm
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants
# [depth, width, max_channels]
n: [0.50, 0.25, 1024]
s: [0.50, 0.50, 1024]
m: [0.50, 1.00, 512]
l: [1.00, 1.00, 512]
x: [1.00, 1.50, 512]
# P4/P5双层融合架构
backbone:
# ========== RGB路径 (层0-10) - 完整骨干网到P5 ==========
- [-1, 1, Conv, [64, 3, 2], 'RGB'] # 0-P1/2 RGB路径起始
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]] # 2
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8 (RGB_P3)
- [-1, 2, C3k2, [512, False, 0.25]] # 4
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]] # 6 (RGB_P4)
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]] # 8
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 2, C2PSA, [1024]] # 10 (RGB_P5)
# ========== X路径 (层11-21) - 完整骨干网到P5 ==========
- [-1, 1, Conv, [64, 3, 2], 'X'] # 11-P1/2 X路径起始
- [-1, 1, Conv, [128, 3, 2]] # 12-P2/4
- [-1, 2, C3k2, [256, False, 0.25]] # 13
- [-1, 1, Conv, [256, 3, 2]] # 14-P3/8 (X_P3)
- [-1, 2, C3k2, [512, False, 0.25]] # 15
- [-1, 1, Conv, [512, 3, 2]] # 16-P4/16
- [-1, 2, C3k2, [512, True]] # 17 (X_P4)
- [-1, 1, Conv, [1024, 3, 2]] # 18-P5/32
- [-1, 2, C3k2, [1024, True]] # 19
- [-1, 1, SPPF, [1024, 5]] # 20
- [-1, 2, C2PSA, [1024]] # 21 (X_P5)
# ========== P4和P5层级融合 ==========
# P4级融合
- [[6, 17], 1, Concat, [1]] # 22 P4融合: RGB_P4(6) + X_P4(17)
- [-1, 2, C3k2, [1024, True]] # 23 (Fused_P4)
- [-1, 1, EMA, []] # 0-P1/24 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
# P5级融合
- [[10, 21], 1, Concat, [1]] # 24 P5融合: RGB_P5(10) + X_P5(21)
- [-1, 2, C3k2, [1024, True]] # 25
- [-1, 1, C2PSA, [1024]] # 26 (Fused_P5)
- [-1, 1, EMA, []] # 0-P1/28 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
# 标准YOLOv11检测头 (Neck + Head)
head:
# 自顶向下路径 (FPN)
- [28, 1, nn.Upsample, [None, 2, "nearest"]] # 27 Fused_P5上采样
- [[-1, 24], 1, Concat, [1]] # 28 连接Fused_P4
- [-1, 2, C3k2, [512, False]] # 29
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 30
- [[-1, 4], 1, Concat, [1]] # 31 连接RGB_P3(4)
- [-1, 2, C3k2, [256, False]] # 32 (P3/8-small)
# 自底向上路径 (PAN)
- [-1, 1, Conv, [256, 3, 2]] # 33
- [[-1, 31], 1, Concat, [1]] # 34
- [-1, 2, C3k2, [512, False]] # 35 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]] # 36
- [[-1, 28], 1, Concat, [1]] # 37
- [-1, 2, C3k2, [1024, True]] # 38 (P5/32-large)
- [[34, 37, 40], 1, Detect, [nc]] # 39 Detect(P3, P4, P5)

4.3 YOLO11-MM后期(late)加入EMA
训练信息:summary: 342 layers, 5,152,182 parameters, 5,152,166 gradients, 12.9 GFLOPs
# Ultralytics YOLO11 🚀 MultiModal Late Fusion Reference
# 说明:该“late-ref”版本遵循 YOLOMM 设计范式与分支书写规范,使用第5字段进行模态路由标注。
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # YOLO11n summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
s: [0.50, 0.50, 1024] # YOLO11s summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
m: [0.50, 1.00, 512] # YOLO11m summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
l: [1.00, 1.00, 512] # YOLO11l summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
x: [1.00, 1.50, 512] # YOLO11x summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.4 GFLOPs
backbone:
# RGB路径 (层0-10) - 完整的RGB特征提取
- [-1, 1, Conv, [64, 3, 2], 'RGB'] # 0-P1/2 RGB路径起始
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]] # 2
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]] # 4
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]] # 6
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]] # 8
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 2, C2PSA, [1024]] # 10 RGB路径结束
# X路径 (层11-21) - 完整的X模态特征提取
- [-1, 1, Conv, [64, 3, 2], 'X'] # 11-P1/2 X路径起始(from=-1但实际从X模态输入)
- [-1, 1, Conv, [128, 3, 2]] # 12-P2/4
- [-1, 2, C3k2, [256, False, 0.25]] # 13
- [-1, 1, Conv, [256, 3, 2]] # 14-P3/8
- [-1, 2, C3k2, [512, False, 0.25]] # 15
- [-1, 1, Conv, [512, 3, 2]] # 16-P4/16
- [-1, 2, C3k2, [512, True]] # 17
- [-1, 1, Conv, [1024, 3, 2]] # 18-P5/32
- [-1, 2, C3k2, [1024, True]] # 19
- [-1, 1, SPPF, [1024, 5]] # 20
- [-1, 2, C2PSA, [1024]] # 21 X路径结束
# 独立检测头 - RGB和X模态各自独立检测,最后融合决策
head:
# RGB检测分支 (层22-33)
- [10, 1, nn.Upsample, [None, 2, "nearest"]] # 22 从RGB backbone
- [[-1, 6], 1, Concat, [1]] # 23 cat RGB backbone P4
- [-1, 2, C3k2, [512, False]] # 24
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 25
- [[-1, 4], 1, Concat, [1]] # 26 cat RGB backbone P3
- [-1, 2, C3k2, [256, False]] # 27 (RGB P3/8-small)
- [-1, 1, Conv, [256, 3, 2]] # 28
- [[-1, 24], 1, Concat, [1]] # 29 cat RGB head P4
- [-1, 2, C3k2, [512, False]] # 30 (RGB P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]] # 31
- [[-1, 10], 1, Concat, [1]] # 32 cat RGB backbone P5
- [-1, 2, C3k2, [1024, True]] # 33 (RGB P5/32-large)
# X模态检测分支 (层34-45)
- [21, 1, nn.Upsample, [None, 2, "nearest"]] # 34 从X backbone
- [[-1, 17], 1, Concat, [1]] # 35 cat X backbone P4
- [-1, 2, C3k2, [512, False]] # 36
- [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 37
- [[-1, 15], 1, Concat, [1]] # 38 cat X backbone P3
- [-1, 2, C3k2, [256, False]] # 39 (X P3/8-small)
- [-1, 1, Conv, [256, 3, 2]] # 40
- [[-1, 36], 1, Concat, [1]] # 41 cat X head P4
- [-1, 2, C3k2, [512, False]] # 42 (X P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]] # 43
- [[-1, 21], 1, Concat, [1]] # 44 cat X backbone P5
- [-1, 2, C3k2, [1024, True]] # 45 (X P5/32-large)
- [[27, 39], 1, Concat, [1]] # 46 融合P3
- [-1, 1, EMA, []] # 0-P1/2 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
- [[30, 42], 1, Concat, [1]] # 47 融合P4
- [-1, 1, EMA, []] # 0-P1/2 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
- [[33, 45], 1, Concat, [1]] # 48 融合P5
- [-1, 1, EMA, []] # 0-P1/2 6-channel input ######### 加入注意力 ,同时也可以替换为其他的注意力
- [[47, 49, 51], 1, Detect, [nc]] # 49 Detect(P3, P4, P5)

五 训练代码和结果
5.1 模型训练代码
import warnings
from ultralytics import YOLOMM
# 1. 可选:屏蔽 timm 的未来弃用警告(不影响训练,仅减少控制台噪音)
warnings.filterwarnings(
"ignore",
category=FutureWarning,
message="Importing from timm.models.layers is deprecated, please import via timm.layers"
)
if __name__ == "__main__":
# 2. 加载多模态模型配置(RGB + IR)
# 这里使用官方提供的 yolo11n-mm-mid 配置,你也可以换成自己的 yaml
model = YOLOMM("ultralytics/cfg/models/attention/yolo11-mm-late_attention.yaml")
# 3. 启动训练
model.train(
data="FLIR3C/data.yaml", # 多模态数据集配置(上一节已经编写)
epochs=10, # 训练轮数,实际实验中建议 100+ 起步
batch=4, # batch size,可根据显存大小调整
imgsz=640, # 输入分辨率(默认 640),可与数据集分辨率统一
device=0, # 指定 GPU id,CPU 训练可写 "cpu"
workers=4, # dataloader 线程数(Windows 一般 0~4 比较稳)
project="runs/mm_exp", # 训练结果保存根目录
name="rtdetrmm_flir3c", # 当前实验名,对应子目录名
# resume=True, # 如需从中断的训练继续,可打开此项
# patience=30, # 早停策略,连降若干轮 mAP 不提升则停止
# modality="X", # 模态消融参数(默认由 data.yaml 中的 modality_used 决定)
# cache=True, # 启用图片缓存,加快 IO(内存足够时可打开)
)

5.2 模型训练结果


六 总结
到这里,本文的正式内容就告一段落啦。
最后也想郑重向大家推荐我的专栏 「YOLO11-MM 多模态目标检测」。目前专栏整体以实战为主,每一篇都是我亲自上手验证后的经验沉淀。后续我也会持续跟进最新顶会的前沿工作进行论文复现,并对一些经典方法及改进机制做系统梳理和补充。
✨如果这篇文章对你哪怕只有一丝帮助,欢迎订阅本专栏、关注我,并私信联系,我会拉你进入 「YOLO11-MM 多模态目标检测」技术交流群 QQ 群~
你的支持,就是我持续输出的最大动力!✨
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)