本轮工作的核心目标不是继续发散设计,而是把 XNet2d 从概念结构推进到一版可运行、可训练、来源清晰、依赖边界尽量干净的工程原型。
重点围绕四件事展开:
XNet 的方法学结构;XNet2d 初版;global branch 从临时轻量 mixer 升级到真正的 VMamba SS2D;lib/modules 与 lib_mamba,使当前工程聚焦到 XNet 主路径。当前 XNet 的核心结构共识如下:
X-TEBX-CRBX 的来源是:
E_i -> D_i 的同尺度路径E_{i+1} -> D_i 的斜向语义引导路径这意味着它不是改名 U-Net,而是一个带显式 cross-scale guide 的 X-shaped 编解码结构。
X-TEB 当前角色分工:
VMamba SS2DX-CRB 当前角色分工:
已在:
tmp/docs/method/XNet_method.md
中形成一版较完整的方法草稿,包含:
X-TEB / X-CRB 公式化说明另补充了来源说明:
tmp/docs/method/lib_mamba_source_note.md
其作用是记录:
lib_mamba 当前主接入来源VMamba 与 MobileMamba 的关系边界XNet2d 使用的是哪一条 SS2D 分支主实现位于:
lib/modules/xnet_2d.py
当前已实现的主要类:
XNetStem2dXNetDownsample2dXWaveletBranch2dXSSMGlobalBranch2dXGlobalBranch2dXTEB2dXNetEncoderStage2dXNetEncoder2dXGuideProjector2dXCRB2dXNetDecoder2dXNetSegHead2dXNetBoundaryHead2dXNet2d这是本轮最关键的工程结论之一。
最初做过一个临时轻量 token mixer 版 global branch,但后续已经清理掉。
当前 XNet2d 的 global branch 已接入:
tmp/VMamba-main/classification/models/vmamba.py
对应的 SS2D 主线实现,而不是:
MobileMamba 的 vmambanew.py这使得方法归因更加清晰:
XNet 的 global branch 是基于 VMamba 主线 SS2DMobileMamba 的二次改写分支用户特别关心的一点已经明确:
SS2D 不是 Mamba 官方原生模块当前判断是:
SS2D 不是 state-spaces/mamba 官方仓库里的原生模块VMamba 这条视觉 2D 状态空间扩展路线selective_scan 内核与 Mamba 官方体系相关SS2D 本身是视觉化、二维化后的实现,不应表述成“官方 Mamba 2D 实现”后续写文档/论文时,应表述为:
global branch adopts a VMamba-style SS2D operator而不要写成:
official Mamba 2D implementation当前项目内已有:
lib/modules/lib_mamba
并且主接入分支已经切换到:
vmamba.pycsm_triton.pycsms6s.py本轮已将 lib/modules/lib_mamba/__init__.py 简化为:
SS2D同时按 XNet 当前需要做过一次删减和收缩。
但需要注意:
kernels/selective_scanlib_mamba 里仍存在编译后的 selective_scan 相关目录oflex 主动恢复的合理内容已经确认:
selective_scan_cuda_oflex 可以在正确加载 torch 后成功导入csms6s.WITH_SELECTIVESCAN_OFLEX == True用户验证结果表明:
python -c "import torch; import selective_scan_cuda_oflex; print('oflex OK after torch')"
是成功的。
libc10.so原因不是编译失败,而是:
import selective_scan_cuda_oflextorch因此:
import torchimport selective_scan_cuda_oflex即可正常导入。
当前 XNet2d -> SS2D -> selective_scan 这条链路已经能够吃到 oflex。
中途一度判断 torch_py310_cuda126 环境已损坏,但用户后续确认该环境在其本机上最终可用:
torch.__version__ == 2.11.0+cu126torch.cuda.is_available() == TrueRTX 4070 Ti SUPER因此,后续应以用户本机环境验证结果为准,而不是将当前 agent 侧 conda run 的 GPU 不可见误判为环境损坏。
用户最终已验证:
python -c "import torch; from lib.modules import XNet2d; model = XNet2d(...).cuda().eval(); ..."
输出:
(1, 2, 128, 128)
说明:
XNet2d GPU 前向可通过lib/modules/__init__.py 目前已改成只导出:
XNet 相关类不再导出:
XNet 无关的模块lib/trainers/supervised.py
已经从旧的:
SegmentationModel2d切到:
XNet2d并且构造参数也已调整成读取 XNet 所需字段。
这意味着:
lib/modules 里大量旧的 Swin 依赖即使不存在在某些 agent 侧环境中仍可见:
selective_scan_cuda_oflex is unavailable; SS2D will use a slower backend.
但就用户本机验证结果而言:
oflex 实际可用之前存在:
timm.models.layers 的废弃导入 warning已改用:
timm.layers所以这类 warning 已基本清掉。
之前 csms6s.py 里使用:
torch.cuda.amp.custom_fwd/custom_bwd已改成:
torch.amp.custom_fwd/custom_bwd因此这部分警告已处理。
如果只看对下一轮最重要的结论,可压缩成下面几句:
XNet2d 已实现,且 GPU 前向通过。global branch 已切到 VMamba-main/classification/models/vmamba.py 的 SS2D 主线。selective_scan_cuda_oflex 已在用户环境中确认可用。lib/modules 已清成以 XNet 为核心的较小集合。lib/trainers/supervised.py 已改成使用 XNet2d。如果下一轮继续做工程推进,优先级建议如下:
把 XNet2d 接入现有训练配置并实际跑最小训练实验。
这比继续做结构层面的发散更重要,因为:
SS2D 主路径已经接上;进一步裁剪 vmamba.py,只保留:
SS2Dv2SS2D删除:
VSSMSS2Dv3SS2Dm0XNet 无关的工厂函数这样可以进一步让 lib_mamba 变成 XNet 私有最小版本。
为 XNet2d 增加一版专用 config 模板,并开始:
wavelet branch on/offfrequency refine on/offSS2D on/offdiagonal guide on/off这四类核心消融。
本轮工作的真正精华结论是:
XNet 的结构已经从概念草图推进到工程原型,且 global branch 已被成功替换为基于 VMamba 主线 SS2D 的 GPU 可运行实现;同时项目的模块导入边界与训练入口已开始围绕 XNet 收缩,具备进入训练与消融阶段的条件。