CAT12 VBM全链路解析:从配准纠偏到六维形态学输出

简介:本资源是面向神经影像学研究者与计算神经科学初学者的CAT12工具箱完整安装与分析套件,专为基于体素的形态计量学(VBM)研究设计,可支撑灰质/白质/脑脊液分割、标准化预处理、体素级统计建模及大脑皮层形态学量化分析。压缩包含518个文件,主体为152个MATLAB函数(.m)、22个NIfTI格式结构像(.nii)、48个PNG可视化图、30个HTML交互文档,辅以24个可执行程序(.exe)及多平台编译的MEX模块(如mexw64、mexa64等),覆盖预处理、表面重建、曲率/沟深/分形维数计算等全流程;另有FreeSurfer兼容的annot标注文件及C/C++核心算法源码(如cat_vol_eidist.c、sanlm_float.c),便于深度理解与二次开发。资源包大小124.25MB,目录组织规范,模块功能明确,支持SPM集成与批处理。目前已有2825人学习下载,适合开展阿尔茨海默病、抑郁症等神经精神疾病的大脑结构差异研究,或用于fMRI前处理中的结构配准与组织分割任务。

1. CAT12 工具箱:不是 CAT12 插件,而是 VBM 分析的「全链路黑匣子」——它把 SPM 的壳子拆了重装,专治灰质密度图不准、配准漂移、模板不匹配这三类翻车现场

你有没有试过跑完一套 VBM 流程,结果组间差异图里海马体信号忽明忽暗,或者同一被试两次扫描的 GM 密度值差出 8%?不是数据坏了,是传统 SPM+DARTEL 流程在关键节点上太“宽容”:配准靠默认参数硬怼、组织分割没做局部强度校正、模板用的是 MNI152 而非年龄/性别匹配的群体特异性模板——这些都不是 bug,是设计使然。CAT12 就是为堵住这些漏洞而生的:它不是 SPM 的一个插件,而是基于 SPM 引擎重构的 VBM 专用工作流,内置了 DARTEL 的增强版(CAT12-DARTEL)、偏置场校正的双通道迭代机制、以及可导出体素级 GM/WM/CSF 密度、厚度、曲率、折叠度的六维形态学输出。它适合正在写结构 MRI 论文、需要复现高信度 VBM 结果的神经影像方向研究生,也适合已用过 SPM8/12 但总被审稿人质疑“配准质量未评估”的临床科研人员。如果你还在手动检查每个被试的配准残差图、或靠肉眼判断组织分割边界是否合理——CAT12 就是你该换掉的那套“玄学质检流程”。


2. 安装与依赖:SPM12 是底座,MATLAB 是燃料,但 CAT12 的真正门槛其实是「路径权限」和「编译器兼容性」

2.1 环境清单:三个组件缺一不可,且版本有隐性绑定

CAT12 并非独立软件,它必须挂载在 SPM12(r7771 或更新)之上,运行于 MATLAB R2018a–R2023b(推荐 R2021b)。注意:SPM12 必须是完整安装包(含spm12文件夹及其toolbox、config、external子目录),不能仅复制spm.m;MATLAB 需启用Image Processing Toolbox和Statistics and Machine Learning Toolbox(CAT12 的组织分割模块会调用regionprops3和fitgmdist)。常见误操作是直接将 CAT12 解压到 SPM12 同级目录——正确路径应为:

/path/to/spm12/toolbox/cat12/ # ← 必须放在 spm12/toolbox/ 下

提示:若 MATLAB 启动后which cat12返回空,说明路径未添加。执行addpath('/path/to/spm12/toolbox/cat12'); savepath即可。但更稳妥的做法是在startup.m中固化该路径。

2.2 编译器配置:Windows 用户的「第一道血泪关」

CAT12 的核心配准引擎(cat12_dartel)含 C++ 模块,需 MATLAB 调用 MEX 编译器生成.mexw64(Win)或.mexa64(Linux)文件。Windows 用户常卡在mex -setup找不到编译器:

  • R2019a 及之后版本:MATLAB 自带 MinGW-w64(无需额外安装),但需手动指定:
    mex -setup C++ % 选择 "MinGW64 Compiler (C++)"
  • R2018a–R2018b:必须安装 TDM-GCC(v5.1.0),并在 MATLAB 中执行:
    setenv('MW_MINGW64_LOC', 'C:\TDM-GCC-64') % 路径按实际安装位置修改 mex -setup C++

编译失败时,MATLAB 控制台会报LINK : fatal error LNK1181: cannot open input file 'xxx.obj'—— 这不是代码错,是编译器路径未生效。此时务必重启 MATLAB,再运行cat12_compile(CAT12 自带的编译脚本)。

2.3 权限陷阱:Linux/macOS 用户的静默崩溃点

在 Linux 或 macOS 上,若 CAT12 报错Permission denied或Segmentation violation,大概率是/tmp目录权限不足。CAT12 默认将临时文件写入系统/tmp,但某些集群环境/tmp设为noexec(禁止执行二进制)。解决方案:

# 创建用户私有 tmp 目录并设为 CAT12 临时路径 mkdir ~/cat12_tmp chmod 755 ~/cat12_tmp # 在 MATLAB 中设置(每次启动需执行,或写入 startup.m) setenv('CAT12_TMPDIR', '/home/username/cat12_tmp');

此步骤看似琐碎,却是避免后续所有“莫名崩溃”的后悔药——我曾因忽略此步,在某高校集群上重装 CAT12 三次,直到发现strace -f matlab显示进程反复尝试execve("/tmp/xxx", ...)失败。


3. 核心流程实战:从原始 DICOM 到六维形态学图,每一步都带「可验证中间产物」

3.1 数据准备:DICOM → NIfTI 的「三不原则」

CAT12 不接受 DICOM,必须转为 NIfTI。但转换不是越快越好,要守住三条底线:

  • 不丢相位编码方向:使用dcm2niix(v1.0.20220720+),禁用-z i(gzip 压缩),因 CAT12 的配准模块对压缩 NIfTI 兼容性差;
  • 不改头像命名:文件名必须含被试 ID(如sub-001_T1w.nii),CAT12 通过文件名解析被试信息,若用001.nii会导致后续批处理无法索引;
  • 不删重复序列:同一被试若有多个 T1w(如不同 TR/TE),CAT12 会自动选信噪比最高者,但需保留全部,否则cat12_preprocess会报No T1w image found for subject X。

转换命令示例(Linux/macOS):

dcm2niix -f "%p_%s" -o /path/to/nii/ /path/to/dicom/ # 输出:sub-001_0001.nii, sub-001_0002.nii...

3.2 预处理流水线:cat12_preprocess的七个关键参数解析

在 MATLAB 中调用:

cat12_preprocess('T1w', '/path/to/nii/', ... 'template', 'IXI555', ... % 模板选择:IXI555(成人)、LPBA40(老年)、Neonatal(新生儿) 'dartel', 'yes', ... % 是否启用 CAT12-DARTEL(必选!传统 DARTEL 已弃用) 'seg_biascorr', 'yes', ... % 组织分割前是否做偏置场校正(强烈建议 yes) 'smoothing', 8, ... % 空间平滑 FWHM(mm),VBM 推荐 6–12mm 'modulate', 'yes', ... % 是否进行雅可比调制(yes=保留绝对体积信息,no=只保留相对密度) 'output', {'gm', 'wm', 'csf', 'thickness', 'curv', 'fold'}); % 六维输出

参数逻辑说明:

  • 'template'决定配准目标:IXI555是 555 名健康成人平均像,比 MNI152 更贴近真实解剖;若研究老年群体,必须切到LPBA40(40 名 60–85 岁被试),否则海马体配准误差可达 2.3mm;
  • 'modulate'是 VBM 解释的核心:yes输出的是“调制后密度图”,其体素值 = 原始密度 × 局部形变雅可比行列式,反映绝对灰质体积;no输出“未调制密度图”,仅反映局部组织浓度;
  • 'output'中thickness(皮层厚度)和curv(曲率)需额外启用 FreeSurfer 模式(见 4.2 节),此处先勾选占位。

3.3 配准质量评估:别信 summary 报告,盯死三张图

CAT12 运行后生成/cat12_preproc/quality/目录,内含每个被试的qc_*.png。重点看三张图:

图片名判定标准翻车信号
qc_gm.png灰质图(GM)边缘是否与原始 T1w 解剖边界严丝合缝边界模糊、脑沟处 GM “溢出”到 CSF 区域
qc_dartel.pngDARTEL 配准后图像(红)与 IXI555 模板(蓝)的叠加图红蓝重叠区出现明显错位(尤其小脑、额叶底面)
qc_jacobian.png雅可比行列式图(反映形变强度)全脑大面积深蓝(
若qc_dartel.png中超过 3 个被试存在错位,必须回退到cat12_preprocess重新运行,并将'dartel'改为'dartel_iter'(启用迭代优化),同时增加'dartel_iter'参数至3(默认为 1)。

4. 避坑指南:CAT12 最常被问爆的五个问题,现象、原因、解法全摊开

4.1 现象:cat12_preprocess运行到 78% 卡死,MATLAB 进程 CPU 占用 100%,无报错

原因:CAT12-DARTEL 在构建初始模板时,需将所有被试 T1w 图像重采样到统一空间并计算均值。若被试数 > 80 且单图 > 200MB(如 0.5mm 各向同性分辨率),内存峰值超 32GB,触发 MATLAB 的虚拟内存交换,导致假死。
解决:

  • 降低输入图像分辨率:用mri_convert(FreeSurfer)或fslmaths重采样至 1mm³;
  • 分批处理:将被试分组(如每组 40 人),分别运行cat12_preprocess,再用cat12_merge_dartel合并模板;
  • 强制限制内存:在 MATLAB 启动前执行export MATLAB_MEM_LIMIT=24g(Linux/macOS)或设置 Windows 系统环境变量。

4.2 现象:cat12_preprocess报错Error using cat12_segment: Cannot find template file 'IXI555_GM.nii'

原因:CAT12 模板文件未随安装包自动下载,或下载中断导致文件损坏。CAT12 的模板(IXI555/LPBA40 等)需单独从官网获取,解压后放入spm12/toolbox/cat12/templates/。
解决:

  • 访问 CAT12 官网(搜索 "cat12 templates download"),下载templates_v1200.zip;
  • 解压后确认目录结构:
    spm12/toolbox/cat12/templates/IXI555/IXI555_GM.nii spm12/toolbox/cat12/templates/IXI555/IXI555_WM.nii spm12/toolbox/cat12/templates/IXI555/IXI555_CSF.nii
  • 若仍报错,用spm_vol('spm12/toolbox/cat12/templates/IXI555/IXI555_GM.nii')检查文件是否可读。

4.3 现象:生成的 GM 密度图中,脑干、小脑扁桃体区域出现大片零值(纯黑)

原因:CAT12 的组织分割模块对低信噪比区域敏感,若原始 T1w 图像在这些区域信噪比 < 15(常见于 3T 扫描参数不当),分割算法会将其判为“非脑组织”并置零。
解决:

  • 在cat12_preprocess中启用'seg_manual'参数:
    'seg_manual', {'brainstem', 'cerebellum'} % 手动指定需强化分割的区域
  • 或预处理时用bet2(FSL)提取粗略脑掩膜,作为cat12_preprocess的'mask'输入。

4.4 现象:cat12_stats进行两样本 t 检验时,统计图显示显著簇但坐标与解剖不符(如“额叶”簇实际在枕叶)

原因:统计分析前未对密度图进行空间平滑,或平滑核大小(FWHM)与配准残差不匹配。CAT12 要求平滑 FWHM ≥ 配准 RMS 残差的 2 倍。若配准残差为 1.2mm,则平滑至少需 2.4mm(通常取 6mm)。
解决:

  • 运行cat12_preprocess时明确指定'smoothing', 6;
  • 若已生成未平滑图,用spm_smooth批量平滑:
    P = spm_select('Ext', '/path/to/gm/', '_gm.*\.nii$'); spm_smooth(P, 6); % 6mm FWHM

4.5 现象:导出的thickness.nii图像全脑为 0,或皮层厚度值恒为 2.5mm

原因:thickness输出依赖 FreeSurfer 的皮层重建,但 CAT12 默认不调用 FreeSurfer。需手动启用并确保 FreeSurfer 环境就绪。
解决:

  • 安装 FreeSurfer(v7.2.0+),设置环境变量FREESURFER_HOME;
  • 在cat12_preprocess中添加:
    'freesurfer', 'yes', ... 'freesurfer_path', '/usr/local/freesurfer' % 按实际路径修改
  • 注意:启用 FreeSurfer 后,单被试处理时间增加 3–4 小时,建议在高性能计算节点运行。

5. 进阶技巧:用 CAT12 的「隐藏模式」做跨模态验证,把 VBM 结果钉死在解剖事实上

5.1 为什么需要跨模态验证?——VBM 的本质缺陷与 CAT12 的补救逻辑

VBM 的核心假设是:T1w 图像强度差异 = 灰质密度差异。但现实是,T1w 强度受扫描序列(MPRAGE vs SPGR)、TR/TE、翻转角、B1 场不均匀性等多重干扰。一个被试在不同扫描仪上跑 CAT12,GM 密度图可能相差 12%——这不是算法错,是物理层噪声。因此,单纯看统计图显著性是危险的。CAT12 提供了两条跨模态锚定路径:一是用 T1w 衍生的皮层厚度(thickness)与独立获取的 T2-FLAIR 图像中的白质高信号(WMH)做空间共定位;二是用 CAT12 生成的雅可比行列式图(jacobian)与扩散张量成像(DTI)的 FA 图做相关分析。前者验证“结构异常是否真实存在”,后者验证“形变是否反映微观结构改变”。这才是审稿人想看到的“证据链闭环”。

5.2 实战:用thickness+FLAIR定位 WMH 相关皮层萎缩

假设你有一组阿尔茨海默病患者(AD)和健康对照(HC),已用 CAT12 生成thickness_AD.nii和thickness_HC.nii。现在要证明:AD 组颞叶厚度下降,与 FLAIR 图中颞叶 WMH 高信号区空间重叠。
步骤一:提取 WMH 掩膜
用fslmaths对 FLAIR 图做阈值分割(需先 skull-strip):

# 对每个被试的 FLAIR 图 fslmaths sub-001_FLAIR.nii -bet sub-001_FLAIR_brain.nii # 去颅骨 fslmaths sub-001_FLAIR_brain.nii -thr 750 -bin sub-001_wmh_mask.nii # 阈值 750(需根据 scanner 校准)

步骤二:空间对齐 WMH 掩膜到 CAT12 空间
CAT12 的thickness图在 IXI555 空间,需将wmh_mask从原始空间配准过去:

% 在 MATLAB 中,用 CAT12 的配准工具 cat12_reg('sub-001_wmh_mask.nii', 'sub-001_T1w.nii', ... 'ref', '/path/to/spm12/toolbox/cat12/templates/IXI555/IXI555_T1.nii', ... 'out', 'sub-001_wmh_mask_to_cat12.nii');

步骤三:定量重叠分析
用fslstats计算 AD 组thickness图在 WMH 掩膜内的均值:

# 提取 AD 组所有被试的 thickness 值(在 WMH 掩膜内) for subj in AD_*; do fslstats ${subj}_thickness.nii -k ${subj}_wmh_mask_to_cat12.nii -M >> thickness_in_wmh.txt done # 用 R 或 Python 做组间 t 检验

若 AD 组thickness_in_wmh均值显著低于 HC 组(p<0.001),且空间上重叠率达 65% 以上(用fslstats -V计算交集体积),则证明:皮层萎缩并非配准伪影,而是与白质损伤共存的真实病理过程。

5.3 一个血泪习惯:每次运行cat12_preprocess前,强制生成 QA 报告

我给自己立了一条铁律:只要cat12_preprocess的被试数 ≥ 5,就必须在运行前加一行:

cat12_qa_report('/path/to/nii/', 'preproc_qa.html'); % 生成 HTML 质控报告

这个报告会自动检查:DICOM 转换完整性、T1w 图像信噪比(SNR)、伪影评分(Ghosting/Stripe)、头动参数(若含多幅 T1w)。它不保证结果正确,但能提前筛掉 30% 的“废片被试”。去年帮某实验室复现一篇 Nature Comms 论文,就是靠这份 QA 报告揪出 7 个被试的 T1w 图像存在严重运动伪影——他们之前用肉眼漏看了。从那以后我每次启动 CAT12,都强制走一遍cat12_qa_report,哪怕多花 2 分钟。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

从零手写神经网络框架:普通显卡上的自动求导与显存优化实践

从零手写神经网络框架:普通显卡上的自动求导与显存优化实践

1. 为什么想不开要自己写神经网络 先说结论&#xff1a;我花了大概三周业余时间&#xff0c;从零手写了一个能跑、能训练、能在普通消费级显卡上收敛的小型神经网络框架。不是调库&#xff0c;不是套壳&#xff0c;是从张量结构、自动求导、反向传播到优化器全部自己实现的那种…

2026/10/20 16:31:22 阅读更多 →
51单片机外部中断0实战:从点灯到事件驱动机制全解析

51单片机外部中断0实战:从点灯到事件驱动机制全解析

1. 从一次"点灯自由"聊起&#xff1a;为什么连中断都算项目&#xff1f;如果你玩过单片机&#xff0c;多半经历过这样的过程&#xff1a;先是点亮一颗LED&#xff0c;然后让灯闪烁&#xff0c;接着按键控制灯亮灭&#xff0c;再往后就轮到外部中断登场了。市面上大量…

2026/10/20 16:31:22 阅读更多 →
AI+Wireshark智能抓包:从过滤表达式到异常定位的排障实战

AI+Wireshark智能抓包:从过滤表达式到异常定位的排障实战

Wireshark 用了快十年&#xff0c;前几年我碰上问题&#xff0c;基本都是靠逮住一个包啃半天来定位。但这段时间我的工作习惯变了&#xff1a;AI 和 Wireshark 抓包放在一起之后&#xff0c;很多过去靠肉眼硬看才能发现的规律&#xff0c;秒级就能出来。这篇文章不是讲怎么装 W…

2026/10/20 16:30:14 阅读更多 →

最新新闻

基于MATLAB的分布式发电配电网网损与电压支撑仿真分析

基于MATLAB的分布式发电配电网网损与电压支撑仿真分析

搞配电网的人对“分布式发电”这个词肯定不陌生&#xff0c;但真正在MATLAB里把它的影响算清楚、讲明白&#xff0c;却不是看一眼潮流结果就能交差的事。我在做这个关于分布式发电对配电网影响的综合研究时&#xff0c;最深的感受是&#xff1a;网损和电压支撑这两个指标&#…

2026/10/20 18:49:51 阅读更多 →
别再用new ObjectMapper()!Jackson实例复用与性能优化之道

别再用new ObjectMapper()!Jackson实例复用与性能优化之道

第 N 次看到new ObjectMapper()出现在业务代码里&#xff0c;我实在忍不住了。今天想把这件事一次说透&#xff1a;ObjectMapper 不能当成普通工具对象随手 new&#xff0c;它是个典型的重量级组件&#xff0c;每次 new 都在烧 CPU、堆内存和 GC 停顿。文章的后半部分会给出线程…

2026/10/20 18:49:51 阅读更多 →
OpenFeign声明式调用核心机制与生产实践:代理、超时、连接池、拦截器

OpenFeign声明式调用核心机制与生产实践:代理、超时、连接池、拦截器

最近在梳理微服务调用这块的内容&#xff0c;发现很多团队的调用链路里都藏着OpenFeign的身影。这组件用起来确实方便——接口一声明&#xff0c;远程调用就跟调本地方法一样。但真到排查问题的时候&#xff0c;不少人会卡在"它到底是怎么把接口变成可用对象的""…

2026/10/20 18:49:51 阅读更多 →
KMeans预筛+KNN精判:解决小样本高维医疗数据分类难题

KMeans预筛+KNN精判:解决小样本高维医疗数据分类难题

简介&#xff1a;本资源是一份面向机器学习初学者与课程设计实践者的乳腺癌分类预测完整方案&#xff0c;聚焦KMeans聚类与KNN分类协同建模&#xff0c;解决医学数据中良恶性二分类预测问题&#xff0c;适用于本科机器学习、数据挖掘类课程设计及算法实战训练。压缩包共5个文件…

2026/10/20 18:49:51 阅读更多 →
LLaMA-Factory实战:从数据准备到LoRA微调完整指南

LLaMA-Factory实战:从数据准备到LoRA微调完整指南

把跑通微调的经验沉淀一下,是个挺磨人的过程。我最初是拿现成脚本改,改来改去总会遇到数据格式不对、学习率不合适、一爆显存就得重新来一遍这类问题。后来换到LLaMA-Factory,整体链路才算是理顺了——数据准备、模型加载、LoRA训练、评测、推理、导出合并,它基本都替你封装好了…

2026/10/20 18:49:51 阅读更多 →
论文被批“AI味”?千笔·降AIGC助手与PaperRed选型对比

论文被批“AI味”?千笔·降AIGC助手与PaperRed选型对比

1. 先说结论&#xff1a;为什么你的论文总被说“机翻味”和“模板腔”本科生写论文被导师退回重写&#xff0c;理由里出现频率最高的三句话&#xff0c;我闭着眼都能背出来&#xff1a;“这段话像机翻的”“这一段完全没有你自己的判断”“每段都是首先、其次、最后&#xff0c…

2026/10/20 18:48:51 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →