任务:VisDrone2019-DET 无人机目标检测
改进对象:YOLOv8l、YOLOv10l、YOLO11l、YOLO12l、YOLO26l
改进模块:DORGM(Deep Orthogonal-Enhanced Generative Module)
插入位置:YOLO 检测头 P3/P4/P5 三个输出端
训练设置:300 epochs,imgsz=640,batch=128,8 GPU,seed=42
本文面向初学者,完整介绍如何把 DORGM 思想迁移到 YOLO 系列目标检测模型中。文章先给出改进效果,再解释为什么需要改进、DORGM 的来源与原理、代码和 YAML 如何修改,最后给出 5 个改进模型的 drawio 架构图和实验总结。
1. 改进效果先看结论
本轮实验只测试了 5 个 DORGM 改进模型。整体结果如下:
| YOLO12l-DORGM | 29.55 | 4.04 | 0.4336 | 0.2564 | 0.5635 | 0.4435 |
| YOLOv8l-DORGM | 46.79 | 5.18 | 0.4188 | 0.2444 | 0.5555 | 0.4268 |
| YOLOv10l-DORGM | 28.93 | 5.09 | 0.4155 | 0.2436 | 0.5534 | 0.4251 |
| YOLO11l-DORGM | 28.47 | 4.13 | 0.4133 | 0.2433 | 0.5488 | 0.4256 |
| YOLO26l-DORGM | 29.35 | 2.91 | 0.4061 | 0.2385 | 0.5569 | 0.4165 |
最直接的结论是:
| Best mAP50 | YOLO12l-DORGM | 0.4336 |
| Best mAP50-95 | YOLO12l-DORGM | 0.2564 |
| Best Precision | YOLO12l-DORGM | 0.5635 |
| Best Recall | YOLO12l-DORGM | 0.4435 |
| Fastest | YOLO26l-DORGM | 2.91 ms |
也就是说,YOLO12l-DORGM 是当前精度最优方案,YOLO26l-DORGM 是当前速度优先方案。
2. 与原始 YOLO 基线的对比
为了判断 DORGM 是否有效,必须和原始 YOLO 基线对比。基线结果如下:
| YOLO12l | 26.40 | 3.34 | 0.4259 | 0.2514 | 0.5574 | 0.4299 |
| YOLO11l | 25.32 | 2.24 | 0.4181 | 0.2464 | 0.5483 | 0.4336 |
| YOLOv8l | 43.64 | 2.71 | 0.4152 | 0.2427 | 0.5503 | 0.4273 |
| YOLOv10l | 25.78 | 2.56 | 0.4115 | 0.2425 | 0.5488 | 0.4185 |
| YOLO26l | 26.19 | 2.24 | 0.4065 | 0.2381 | 0.5512 | 0.4150 |
把 DORGM 改进前后的变化列出来更直观:
| YOLO12l-DORGM | +3.15 | +0.70 | +0.0077 | +0.0050 | +0.0061 | +0.0136 |
| YOLOv8l-DORGM | +3.15 | +2.47 | +0.0036 | +0.0017 | +0.0052 | -0.0005 |
| YOLOv10l-DORGM | +3.15 | +2.53 | +0.0040 | +0.0011 | +0.0046 | +0.0066 |
| YOLO11l-DORGM | +3.15 | +1.89 | -0.0048 | -0.0031 | +0.0005 | -0.0080 |
| YOLO26l-DORGM | +3.16 | +0.67 | -0.0004 | +0.0004 | +0.0057 | +0.0015 |
从对比可以看出,DORGM 并不是对所有 YOLO 结构都同等有效。它对 YOLO12l 的提升最明显,对 YOLOv8l 和 YOLOv10l 有稳定小幅增益;对 YOLO26l 基本保持精度,同时仍然保留较高速度;但对 YOLO11l 出现轻微下降。这说明 DORGM 更适合作为一种特征增强模块,需要结合不同 YOLO 架构做插入位置和参数消融,而不能简单认为“加了模块一定提升”。
3. 为什么 VisDrone 需要这种改进
VisDrone 是无人机视角目标检测数据集,典型特点是:
原始 YOLO 系列已经具备较强的多尺度检测能力,但在 VisDrone 上仍然会遇到两个问题:
- 特征耦合:不同尺度、不同场景、不同遮挡程度的目标特征混在一起,模型难以区分真正有用的目标模式和背景噪声。
- 条件差异:同一类别在不同拍摄高度、光照和密集程度下表现差异很大,固定卷积参数不一定能适配所有样本。
DORGM 的设计正好对应这两个问题:它通过正交投影减少特征干扰,通过软路由专家分支让不同样本获得不同的特征修正。
4. DORGM 原始思想简介
DORGM 来自论文 Deep Orthogonal-Enhanced Generative Model for robust pavement crack segmentation。原始任务是路面裂缝分割,论文链接和代码链接如下:
- ScienceDirect: https://www.sciencedirect.com/science/article/pii/S1569843225006351
原论文主要解决的是裂缝图像在不同环境条件下的鲁棒分割问题,例如光照、雨水、阴影、雾霾、路面材料差异等。它的核心思想包括两点:
原论文是分割任务,且包含较完整的变分推断和生成模型建模。本文不是直接完整复现原论文的数学优化过程,而是将其核心思想工程化迁移到 YOLO 检测任务中。
5. 从裂缝分割到 YOLO 检测的适配思路
在 YOLO 中,检测头通常接收 P3、P4、P5 三个尺度的特征:
| P3 | 8x | 更关注小目标 |
| P4 | 16x | 更关注中等目标 |
| P5 | 32x | 更关注大目标和高语义信息 |
VisDrone 中小目标多,因此不能只增强 P5。本文把 DORGM 插入到 P3、P4、P5 三个检测特征输出端:
– [-1, 1, C3k2, [256, True]] # P3 output
– [-1, 1, DORGM, [4]] # P3-DORGM
– [-1, 1, Conv, [256, 3, 2]]
– [[-1, 13], 1, Concat, [1]]
– [-1, 2, C3k2, [512, True]] # P4 output
– [-1, 1, DORGM, [4]] # P4-DORGM
– [-1, 1, Conv, [512, 3, 2]]
– [[-1, 10], 1, Concat, [1]]
– [-1, 1, C3k2, [1024, True, 0.5, True]] # P5 output
– [-1, 1, DORGM, [4]] # P5-DORGM
– [[17, 21, 25], 1, Detect, [nc]]
这个放置方式有三个好处:
6. DORGM 模块结构
本文代码中的 DORGM 模块包含四个关键部分。
6.1 OrthoProj:正交投影
原论文中使用 QR 分解构造正交映射。为了更适合深度网络训练,代码中使用 Cayley 变换参数化一个正交 1×1 卷积:
q = torch.linalg.solve(eye + a, eye – a)
return F.conv2d(x, q.view(c, c, 1, 1))
它的作用是把输入特征投影到正交空间,减少不同条件特征之间的耦合。
6.2 SoftRouter:软路由
软路由通过全局平均池化和 MLP 得到每个样本属于不同专家分支的权重:
z = self.pool(x).view(b, c)
phi = F.softmax(self.fc(z), dim=–1)
这里的 phi 可以理解为原论文中软标签后验分布的工程化近似。
6.3 Expert:轻量专家分支
每个专家分支由 depthwise 3×3 卷积和 pointwise 1×1 卷积组成:
DWConv 3×3 -> PWConv 1×1 -> BN -> SiLU
它用于学习不同条件下的特征修正项。
6.4 Residual Gamma:残差回注
DORGM 最终输出为:
out = x + gamma * delta
其中 gamma 初始化为 0。这样模块刚插入时近似恒等映射,训练初期不会突然破坏原始 YOLO 特征流。
6.5 论文中“改进方法”部分的推荐写法
本文针对 VisDrone 无人机目标检测中小目标密集、尺度变化剧烈、遮挡严重以及背景干扰强等问题,在 YOLO 系列模型的检测头阶段引入 DORGM 特征增强模块。原始 YOLO 检测头直接利用 P3、P4 和 P5 三个尺度特征进行目标预测,虽然具备多尺度检测能力,但不同场景条件下的目标特征、背景噪声和尺度变化信息容易在特征空间中发生耦合,进而影响小目标定位和召回性能。为缓解这一问题,本文借鉴深度正交增强生成模型中的正交特征解耦和软标签路由思想,构建适用于目标检测任务的轻量化 DORGM 模块,并将其分别嵌入到 P3、P4 和 P5 三个检测特征输出端。
具体而言,DORGM 首先通过正交投影层对输入特征进行变换,使特征在潜在空间中获得更强的解耦表达能力,从而降低复杂背景、遮挡和尺度变化带来的干扰。随后,模块利用全局平均池化和多层感知机生成样本级软路由权重,根据输入图像的特征分布自适应地分配不同专家分支的重要性。每个专家分支由轻量卷积结构构成,用于学习不同条件下的特征修正项。最后,多个专家输出按照软路由权重加权融合,并通过残差连接回注到原始特征中。由于该模块保持输入输出通道数和空间尺寸不变,因此能够无缝插入 YOLO 检测头,而不会破坏原有 PAN-FPN 多尺度特征融合结构。
在结构设计上,本文没有将 DORGM 插入主干网络早期层,而是选择在检测头最终输出的 P3、P4 和 P5 三个尺度上进行增强。这样设计的原因在于:P3 特征主要负责小目标检测,P4 特征兼顾中等尺度目标,P5 特征包含更强语义信息;对三个检测尺度同时增强,可以使模型在保持原有多尺度检测能力的基础上进一步提升复杂场景下的特征判别能力。改进后的检测头可表示为:原始多尺度融合特征首先经过对应尺度的 DORGM 模块进行正交解耦和条件自适应修正,然后再输入 Detect 或 v10Detect 层完成分类和边界框回归。
需要说明的是,本文并非直接复现 DORGM 原论文中的完整变分贝叶斯生成建模过程,而是将其核心思想工程化适配到 YOLO 检测框架中。相比原始方法,本文实现更加轻量,训练流程与 YOLO 原有端到端检测训练保持一致,便于在不同 YOLO 版本中快速迁移和验证。实验结果表明,引入 DORGM 后,YOLO12l-DORGM 在 VisDrone 数据集上取得了最优综合性能,说明该模块能够有效增强无人机复杂场景下的多尺度目标特征表达能力。
7. 代码改进过程
7.1 放入模块文件
将 dorgm.py 放入:
ultralytics/nn/modules/dorgm.py
代码如下:
"""DORGM: Deep Orthogonal-Enhanced Generative Model.
即插即用模块,来源于论文 "Deep Orthogonal-Enhanced Generative Model for robust
pavement crack segmentation"。核心思想:
1. 正交约束:将隐藏特征投影到正交子空间,解耦条件特异性噪声与固有目标模式。
2. 软标签路由:通过可微的贝叶斯风格聚类,把样本自适应地分配到 K 个专家支路。
3. 残差+门控融合:专家输出与主分支相加,保证即插即用且不破坏原始特征流。
该实现面向检测任务(YOLO26),做了三点工程化调整:
– 正交层用 Cayley 变换 + 正交初始化参数化一个 1×1 卷积,保证前向/反向
都保持正交,避免论文中每个 batch 做 QR 分解的开销与数值不稳定。
– 软路由改为 GAP + MLP + softmax,等价于论文中
变分后验 q_phi(z_n) 的分类分布,复杂度 O(C·K)。
– 专家支路做成轻量 depthwise 3×3 + 1×1,参数量可控。
"""
from __future__ import annotations
import torch
import torch.nn as nn
import torch.nn.functional as F
__all__ = ("DORGM", "OrthoProj", "SoftRouter")
class OrthoProj(nn.Module):
r"""正交 1×1 投影层。
用一个可学习方阵 A,通过 Cayley 变换 Q = (I – A_skew)(I + A_skew)^{-1}
得到正交矩阵 Q(A_skew = A – A^T 为反对称阵),再作为 1×1 卷积的权重。
这样无论怎么训练,Q 始终严格正交:Q^T Q = I。
论文式 (2) 要求 \\hat{h}^T \\hat{h} = I,这里用 Cayley 参数化直接满足。
"""
def __init__(self, channels: int):
super().__init__()
self.channels = channels
w = torch.empty(channels, channels)
nn.init.orthogonal_(w)
self.weight = nn.Parameter(w – w.t())
def _ortho_matrix(self) –> torch.Tensor:
# torch.linalg.solve 在 CUDA 上不支持 fp16,AMP/半精度训练时需在 fp32 下求解
w = self.weight.float()
a = w – w.t()
eye = torch.eye(self.channels, device=a.device, dtype=a.dtype)
q = torch.linalg.solve(eye + a, eye – a)
return q
def forward(self, x: torch.Tensor) –> torch.Tensor:
q = self._ortho_matrix().to(dtype=x.dtype)
return F.conv2d(x, q.view(self.channels, self.channels, 1, 1))
class SoftRouter(nn.Module):
"""软标签路由器。
对应论文中 q_phi(z_n) 的分类后验:对输入做全局统计 -> MLP -> softmax,
得到每个样本对 K 个聚类的软分配 phi ∈ [B, K]。
"""
def __init__(self, channels: int, num_clusters: int, reduction: int = 4):
super().__init__()
mid = max(channels // reduction, num_clusters)
self.pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channels, mid, bias=False),
nn.GELU(),
nn.Linear(mid, num_clusters, bias=True),
)
def forward(self, x: torch.Tensor) –> torch.Tensor:
b, c, _, _ = x.shape
z = self.pool(x).view(b, c)
return F.softmax(self.fc(z), dim=–1)
class _Expert(nn.Module):
"""单个条件专家:DWConv3x3 + PWConv,建模某一条件下的修正项。"""
def __init__(self, channels: int):
super().__init__()
self.dw = nn.Conv2d(channels, channels, 3, padding=1, groups=channels, bias=False)
self.pw = nn.Conv2d(channels, channels, 1, bias=False)
self.bn = nn.BatchNorm2d(channels)
self.act = nn.SiLU(inplace=True)
def forward(self, x: torch.Tensor) –> torch.Tensor:
return self.act(self.bn(self.pw(self.dw(x))))
class DORGM(nn.Module):
"""Deep Orthogonal-Enhanced Generative Module (plug-and-play).
前向流程:
y = OrthoProj(x) # 正交解耦
phi = SoftRouter(y) # [B, K] 软分配
e_k = Expert_k(y) # K 个专家输出
delta = sum_k phi_k * e_k # 软路由加权融合
out = x + gamma * delta # 残差 + 可学习缩放
论文式 (9) 的训练目标 F(x) + phi * F_hat(x) 在这里对应
"x + gamma * sum phi_k e_k",gamma 初始化为 0 使模块一开始等于恒等映射,
便于直接插入预训练主干而不破坏原有表征。
Args:
c1: 输入通道(= 输出通道,保持 shape 不变,便于即插即用)。
num_clusters: 聚类数 K,论文消融中常用 3~5。
reduction: 路由 MLP 中的压缩比。
"""
def __init__(self, c1: int, num_clusters: int = 4, reduction: int = 4):
super().__init__()
assert c1 > 0
self.c1 = c1
self.num_clusters = num_clusters
self.ortho = OrthoProj(c1)
self.router = SoftRouter(c1, num_clusters, reduction=reduction)
self.experts = nn.ModuleList([_Expert(c1) for _ in range(num_clusters)])
self.gamma = nn.Parameter(torch.zeros(1))
def orthogonality_loss(self) –> torch.Tensor:
"""返回 ||Q^T Q – I||_F^2,供外部作为辅助损失(通常已被 Cayley 参数化保证为 0,
这里仍保留接口,便于监控数值误差)。"""
q = self.ortho._ortho_matrix()
eye = torch.eye(self.c1, device=q.device, dtype=q.dtype)
return torch.linalg.norm(q.t() @ q – eye, ord="fro") ** 2
def forward(self, x: torch.Tensor) –> torch.Tensor:
y = self.ortho(x)
phi = self.router(y)
outs = torch.stack([e(y) for e in self.experts], dim=1)
w = phi.view(phi.size(0), self.num_clusters, 1, 1, 1)
delta = (outs * w).sum(dim=1)
return x + self.gamma * delta
if __name__ == "__main__":
m = DORGM(64, num_clusters=4)
x = torch.randn(2, 64, 40, 40)
y = m(x)
print(x.shape, "->", y.shape, "ortho_err=", m.orthogonality_loss().item())
7.2 在 modules 中导出
在 ultralytics/nn/modules/__init__.py 中导入:
from .dorgm import DORGM, OrthoProj, SoftRouter
并加入 __all__,这样 YAML 解析时能识别 DORGM。
7.3 修改 parse_model
在 ultralytics/nn/tasks.py 中导入 DORGM,并在 parse_model() 中加入特殊解析逻辑:
elif m is DORGM:
c2 = ch[f]
args = [c2, *args]
原因是 DORGM 是 shape-preserving 模块,它不需要像 Conv 那样在 YAML 中显式传入输出通道。解析器会自动把当前输入通道 ch[f] 传给 DORGM。
7.4 新增改进模型 YAML
本文新增了 5 个模型配置:
| YOLOv8l-DORGM | ultralytics/cfg/models/v8/yolov8l-dorgm.yaml |
| YOLOv10l-DORGM | ultralytics/cfg/models/v10/yolov10l-dorgm.yaml |
| YOLO11l-DORGM | ultralytics/cfg/models/11/yolo11l-dorgm.yaml |
| YOLO12l-DORGM | ultralytics/cfg/models/12/yolo12l-dorgm.yaml |
| YOLO26l-DORGM | ultralytics/cfg/models/26/yolo26l-dorgm.yaml |
各模型 Detect 输入如下:
| YOLOv8l-DORGM | Detect | [16, 20, 24] |
| YOLOv10l-DORGM | v10Detect | [17, 21, 25] |
| YOLO11l-DORGM | Detect | [17, 21, 25] |
| YOLO12l-DORGM | Detect | [15, 19, 23] |
| YOLO26l-DORGM | Detect | [17, 21, 25] |
7.5 修改 benchmark 脚本
benchmark_visdrone_fixed.py 中新增 DORGM 模型列表,并将默认测试集改成只跑 DORGM 版本:
DORGM_YOLO_MODELS = {
"YOLOv8l-DORGM": "ultralytics/cfg/models/v8/yolov8l-dorgm.yaml",
"YOLOv10l-DORGM": "ultralytics/cfg/models/v10/yolov10l-dorgm.yaml",
"YOLO11l-DORGM": "ultralytics/cfg/models/11/yolo11l-dorgm.yaml",
"YOLO12l-DORGM": "ultralytics/cfg/models/12/yolo12l-dorgm.yaml",
"YOLO26l-DORGM": "ultralytics/cfg/models/26/yolo26l-dorgm.yaml",
}
默认参数:
parser.add_argument(
"–variant",
choices=("baseline", "dorgm", "both"),
default="dorgm",
)
这样直接运行脚本时,只会测试 5 个 DORGM 改进模型。
8. 一键训练和验证
建议使用项目 Conda 环境运行:
python benchmark_visdrone_fixed.py
如果在 Linux 服务器上运行:
python benchmark_visdrone_fixed.py \\
–data ultralytics/cfg/datasets/VisDrone.yaml \\
–epochs 300 \\
–batch 128 \\
–imgsz 640 \\
–device 0,1,2,3,4,5,6,7 \\
–workers 4
脚本会依次完成:
9. 改进后的 drawio 架构图
图中颜色含义如下:
| 紫色 | Backbone 或 Neck 中的主特征模块 |
| 绿色 | SPPF、PSA、C2PSA 等上下文增强模块 |
| 红色 | Upsample |
| 黄色 | Concat |
| 蓝色 | 下采样卷积或 SCDown |
| 橙色 | DORGM 模块 |
| 青色 | Detect / v10Detect |
9.1 YOLOv8l-DORGM
YOLOv8l-DORGM 以 C2f 为主要特征模块,在 SPPF 后进入 PAN-FPN 结构。本文在最终 P3、P4、P5 检测特征后分别接入 DORGM。

9.2 YOLOv10l-DORGM
YOLOv10l-DORGM 使用 C2fCIB、SCDown、PSA 和 v10Detect。DORGM 插入后,v10Detect 读取三个增强后的检测特征。

9.3 YOLO11l-DORGM
YOLO11l-DORGM 使用 C3k2、SPPF 和 C2PSA。实验中该模型加入 DORGM 后精度略降,说明 DORGM 与不同 YOLO 结构存在适配差异。

9.4 YOLO12l-DORGM
YOLO12l-DORGM 是本轮实验中综合性能最好的模型。它大量使用 A2C2f 结构,加入 DORGM 后 mAP50、mAP50-95、Precision 和 Recall 均达到本轮最优。

9.5 YOLO26l-DORGM
YOLO26l-DORGM 的精度基本与原版持平,但速度仍然最快。它适合作为实时性优先的版本。

10. 实验结果分析
10.1 为什么 YOLO12l-DORGM 最强
YOLO12l 原始基线已经是 5 个原始 YOLO 中精度最好的模型。加入 DORGM 后,它的提升仍然最明显:
| mAP50 | 0.4259 | 0.4336 | +0.0077 |
| mAP50-95 | 0.2514 | 0.2564 | +0.0050 |
| Precision | 0.5574 | 0.5635 | +0.0061 |
| Recall | 0.4299 | 0.4435 | +0.0136 |
这说明 YOLO12l 的 A2C2f 特征结构和 DORGM 的正交解耦、软路由增强较为兼容。尤其是 Recall 提升明显,说明 DORGM 对减少漏检有帮助。
10.2 为什么 YOLO26l-DORGM 仍然值得保留
YOLO26l-DORGM 的 mAP50-95 只比原版高 0.0004,精度提升很小。但它的推理耗时为 2.91 ms,是 5 个 DORGM 模型中最快的。
如果应用场景更关注实时性,例如无人机边缘端快速检测,那么 YOLO26l-DORGM 仍然有价值。它可以作为速度优先方案,而 YOLO12l-DORGM 作为精度优先方案。
10.3 为什么 YOLO11l-DORGM 没有提升
YOLO11l-DORGM 的 mAP50 和 mAP50-95 相比原始 YOLO11l 略有下降。这说明 DORGM 不是简单堆叠就一定有效。可能原因包括:
因此,后续可以针对 YOLO11l 单独测试 P3 only、P3+P4、并联式 Detect 前增强 等插入方式。
10.4 类别层面的观察
从 YOLO12l-DORGM 的类别结果看,car 和 bus 仍然是最容易检测的类别:
| car | 0.8122 | 0.5712 |
| bus | 0.6297 | 0.4565 |
而 bicycle 和 awning-tricycle 仍然较弱:
| bicycle | 0.1686 | 0.0737 |
| awning-tricycle | 0.1499 | 0.0963 |
这符合 VisDrone 的任务特点:这些类别目标小、遮挡多、形态变化大,而且容易和背景混淆。DORGM 能增强特征鲁棒性,但不能完全解决极小目标和严重遮挡问题。
11. 初学者复现 checklist
如果你想从零复现本实验,可以按下面顺序检查:
python -c "from ultralytics import YOLO; YOLO('ultralytics/cfg/models/12/yolo12l-dorgm.yaml')"
python benchmark_visdrone_fixed.py
benchmark_results_VisDrone_fixed.csv
benchmark_results_VisDrone_fixed.md
runs/benchmark_VisDrone/
assets/dorgm_yolo_visdrone/dorgm_yolo_architectures.drawio
12. 后续改进方向
当前结果已经证明 DORGM 对 YOLO12l 有明确增益,但还可以继续做消融实验。
12.1 聚类数 K 消融
原论文指出不同数据集的最优 K 不相同。当前实验使用 K=4,后续建议测试:
K = 3, 4, 5
优先在 YOLO12l-DORGM 上测试,因为它当前表现最好。
12.2 插入位置消融
当前插入方式是:
P3 + P4 + P5
后续可以测试:
P3 only
P3 + P4
P4 + P5
Detect 前并联增强
这样可以判断 DORGM 到底是对小目标层 P3 更有效,还是对多尺度整体增强更有效。
12.3 轻量化 DORGM
DORGM 会增加约 3.15M 参数。对于速度敏感场景,可以尝试:
12.4 结合 P2 小目标检测层
VisDrone 中极小目标很多,P3 仍然可能不够细。后续可以尝试在 YOLO12l-DORGM 上加入 P2 检测层,再观察 pedestrian、people、bicycle、motor 等类别是否提升。
13. 总结
本文将 DORGM 的正交解耦和软路由思想迁移到 YOLO 系列目标检测任务中,并在 VisDrone2019-DET 数据集上进行了验证。实验表明:
整体来看,DORGM 不是简单的注意力模块,而是一种带有“正交解耦 + 条件路由 + 专家修正”思想的特征增强模块。对于场景复杂、尺度变化明显、目标密集的无人机检测任务,它提供了一条值得继续深入研究的改进方向。






