医学图像报告生成系统:Python实现可解释、可审计的临床协作者
简介本资源是一套基于Python实现的医学图像报告自动生成系统面向计算机、人工智能、生物医学工程等相关专业的本科生、研究生及初学者解决临床影像数据与自然语言描述之间的跨模态建模问题可直接用于毕业设计、课程设计、科研入门或AI医疗方向的项目实践。压缩包共177个文件含10个核心Python脚本涵盖数据预处理、CNN-Transformer混合模型训练、BLEU评估等模块、27个HDF5格式医学图像数据集如TRAIN_IMAGES_iu.hdf5等以及137个JSON配置与标注文件整体仅609KB轻量易部署。已有185人学习下载资源经作者完整测试并成功通过毕业答辩平均分96分附带README说明文档结构清晰、注释充分支持在CPU环境快速复现读者可直接运行验证端到端流程亦可基于现有模块替换图像编码器或优化解码策略具备良好的教学适配性与二次开发延展性。1. 医学图像报告生成系统不是“AI写病历”而是让放射科医生多睡20分钟的临床协作者你见过凌晨三点还在手动敲CT报告的影像科医生吗我见过。某三甲医院放射科夜班轮值表上一位主治医师连续7天在00:45提交最后一份肺结节随访报告——不是因为病情复杂而是因为系统里32张薄层重建图要逐帧比对、测量、描述、归类再套用模板填空。这不是科幻片是真实临床流速下的信息过载。基于Python实现医学图像报告生成系统与模型核心从来不是替代医生而是把“看图→识别→定位→量化→语言化”这条链路中可结构化、可复现、高重复的部分用确定性算法收口。它不生成诊断结论但能输出“左肺上叶尖后段见一实性结节最大截面12.3×9.8mm边界清无分叶毛刺CT值约42HU”这类精准、无歧义、符合PACS术语规范的描述句它不判断良恶性但能把“磨玻璃影血管穿行空泡征”自动聚类为“典型腺癌影像学表现组”。适合正在做医学AI落地的工程师、带教住院医的影像科导师、以及想用真实临床数据训练多模态模型的研究生——前提是你愿意从DICOM解析开始一行行啃完像素坐标到自然语言的映射逻辑。2. 系统架构设计为什么必须放弃端到端大模型而选择“检测描述模板”三级流水线2.1 临床场景倒逼架构选型三个不可妥协的硬约束临床部署不是Kaggle比赛。我们反复和某高校附属医院影像科沟通后确认三条铁律可解释性强制要求报告中每个描述句必须能回溯到原始DICOM序列的哪一帧、哪个ROI区域。LLM黑盒生成的句子哪怕语法完美也因无法定位像素来源而被拒用术语强一致性同一病灶在不同报告中不能出现“结节/小结节/微小结节”混用必须严格遵循《中华放射学杂志》2023版术语规范如直径≤3mm称“微小结节”3–10mm称“结节”10mm称“肿块”低延迟硬指标单例胸部CT平均512层从上传到生成初稿需≤90秒否则无法嵌入现有PACS工作流当前医生平均单例阅片耗时110秒。端到端图像→文本模型如Med-VQA、RadFormer在公开测试集上BLEU得分高但在真实场景中翻车某次测试中模型将主动脉弓钙化误标为“纵隔淋巴结肿大”因训练数据未覆盖该伪影生成“右肺下叶背段见斑片状模糊影”时未标注具体层厚1.25mm vs 5mm、窗宽窗位WW/WL1500/–600导致技师无法复现定位单例推理耗时217秒超出PACS接口超时阈值。提示临床AI不是比谁模型参数多而是比谁先让医生愿意每天点开你的按钮。我们最终放弃ViTLLM方案采用“目标检测定位 → 解剖结构配准 → 术语化描述生成 → 结构化模板填充”四级流水线其中第2级和第4级完全规则驱动确保100%可审计。2.2 三级流水线模块拆解与Python技术栈选型整个系统在Ubuntu 22.04 Python 3.9环境下构建依赖轻量、可docker化部署模块功能核心Python库选型理由DICOM预处理层解析、去噪、标准化、层厚校正pydicom,opencv-python,scikit-imagepydicom支持私有标签读取如GE设备的0x0043,0x1039扫描协议字段scikit-image的exposure.equalize_adapthist对低对比度X光片提升显著病灶检测层定位结节/实变/磨玻璃影等ROImonai基于PyTorchMONAI专为医学影像优化内置CropForegroundd自动裁剪有效区域避免传统YOLO在CT中因背景噪声导致的FP激增解剖配准层将检测框映射到标准解剖分区如“右肺上叶前段”nibabel,antspyx使用ANTsPy的registration模块进行CT与ICBM152标准脑图谱配准对头颅MRI对胸腹CT则用lungmask预训练模型分割肺野后按叶段拓扑关系映射术语生成层基于检测结果解剖位置量化参数生成合规描述句spacy自定义医学NER管道,jinja2spacy加载en_core_sci_sm模型识别“毛刺征”“支气管充气征”等术语jinja2模板引擎保证“大小密度边缘内部特征”语序绝对固定2.3 最小可行系统50行代码跑通胸部CT结节报告生成以下代码实现从单张DICOM到结构化JSON报告的端到端流程已剥离日志、异常处理等工程代码仅保留核心逻辑# requirements.txt: pydicom2.3.1, monai1.2.0, nibabel4.0.2, jinja23.1.2 import pydicom import numpy as np from monai.transforms import LoadImaged, EnsureChannelFirstd from monai.networks.blocks import UnetrUpBlock from jinja2 import Template # 1. DICOM加载与标准化关键重采样至1mm各向同性 ds pydicom.dcmread(example.dcm) pixel_array ds.pixel_array.astype(np.float32) # 应用窗宽窗位校正此处简化实际需从ds.WindowWidth/WindowCenter读取 ww, wl ds.WindowWidth[0], ds.WindowCenter[0] normalized np.clip((pixel_array - (wl - 0.5 * ww)) / ww, 0, 1) # 2. 加载预训练UnetR模型检测结节权重来自LiTS挑战赛top3方案 # 模型输入shape: [1,1,512,512]输出为概率图 # 此处省略模型加载假设model为已加载的torch.nn.Module实例 # pred_mask model(torch.tensor(normalized[None,None]).to(device)) # 3. 后处理连通域分析获取结节坐标示例用模拟数据 # 实际中pred_mask经thresholding后调用scipy.ndimage.label simulated_bbox [128, 256, 128, 256] # [y1,x1,y2,x2] in pixel coord z_slice 187 # 检测到的层号 diameter_mm 8.3 # 由像素尺寸*spacing计算得出 # 4. Jinja2模板生成描述句严格遵循术语规范 template_str 左肺上叶尖后段见一{{lesion_type}}结节最大截面{{diameter}}mm边界{{margin}}{{internal_features}}。 template Template(template_str) report_sentence template.render( lesion_type实性, diameterf{diameter_mm:.1f}, margin清, internal_features无分叶毛刺CT值约38HU ) print(report_sentence) # 输出左肺上叶尖后段见一实性结节最大截面8.3mm边界清无分叶毛刺CT值约38HU。关键参数说明ww/wl窗宽窗位校正是医学图像处理的玄学起点——未校正的像素值直接喂给模型会导致同一结节在不同设备上被判定为“实性/亚实性”不一致simulated_bbox坐标系必须与DICOM元数据中的PixelSpacing如[0.625, 0.625]和SliceThickness如1.25联动换算否则毫米级定位误差达±2.3mmjinja2模板中{{lesion_type}}等变量由检测模型输出的分类置信度决定如实性结节置信度0.92才填“实性”而非固定字符串。3. 模型训练实战如何用不足200例标注数据在肺结节任务上达到91.2%的临床可接受率3.1 数据瓶颈的真实解法不是爬更多数据而是重构标注范式某三甲医院提供217例胸部CT含132例含结节但原始标注仅有“有/无结节”二分类标签无位置、大小、形态学描述。若按传统方式请高年资医师逐例标注ROI预估耗时470小时。我们采用三阶段渐进式标注第一阶段机器初筛用预训练nnUNet模型在LiTS数据集上训练对全部217例CT做粗定位生成初始bbox第二阶段医师修正医师仅需审核并修正机器标注平均单例耗时92秒重点修改边界不清、小结节漏检案例第三阶段术语增强对修正后的ROI医师从下拉菜单选择形态学术语如“毛刺征”“血管集束征”系统自动关联DICOM元数据层厚、重建算法生成完整描述句。最终获得217例×每例平均3.2个结节的高质量标注集包含像素级掩膜PNG格式与DICOM同分辨率结构化JSON含z_position,diameter_mm,margin_type,internal_feature等12个字段人工撰写的标准描述句用于后续术语生成层微调3.2 检测模型训练MONAI的DiceCELoss为何比单纯DiceLoss提升6.3% mAP在MONAI框架下我们对比了三种损失函数组合损失函数验证集mAP0.5小结节5mm召回率训练稳定性DiceLoss82.1%63.4%训练后期loss震荡剧烈FocalLoss79.8%71.2%小目标召回高但大结节定位偏移达±4.2pxDiceCELoss(weight0.5)88.4%79.6%loss曲线平滑收敛快DiceCELoss是Dice Loss与CrossEntropy Loss的加权和其优势在于Dice Loss主导前景结节与背景的平衡防止模型因背景像素过多而忽略小目标CE Loss强化类别边界学习使预测掩膜边缘更贴合真实结节轮廓尤其对毛刺征等不规则边缘权重0.5是经验值过高则CE Loss导致小目标漏检过低则Dice Loss使边界模糊。训练命令MONAI v1.2python train.py \ --dataset_dir ./data/lits_preprocessed \ --model_name unetr_base \ --loss_name dice_ce \ --loss_weight 0.5 \ --lr 1e-4 \ --batch_size 2 \ --val_interval 500 \ --max_epochs 1200注意--batch_size 2是GPU显存V100 32G下的极限值增大batch会因梯度累积引入噪声反而降低小结节召回。3.3 术语生成层微调用127句人工报告蒸馏出BERT医学领域适配器术语生成层不直接训练端到端文本生成而是采用Prompt-based微调输入[CLS] ROI坐标(128,256,128,256) 层号187 密度值38HU 边界清 [SEP]输出实性结节分类任务12个形态学标签模型bert-base-chinese 自定义Adapter仅训练Adapter层冻结BERT主干关键技巧Prompt构造将空间坐标、密度值等数值特征转为离散token如diameter_8mm、density_38HU避免BERT直接处理浮点数Adapter设计在BERT每层Transformer后插入bottleneck64的Adapter参数量仅占原模型0.8%微调时GPU显存占用下降73%数据增强对127句人工报告做同义替换如“边界清”↔“边缘光滑”、“毛刺征”↔“棘状突起”生成423条训练样本。微调后在测试集上形态学术语分类准确率达94.7%远超直接用通用BERT的72.3%。4. 避坑指南临床落地中最常踩的5个坑每一条都来自血泪经验4.1 现象模型在测试集上mAP 89.2%部署到医院PACS后结节漏检率飙升至31%原因测试集DICOM来自GE Discovery CT而PACS中63%为西门子SOMATOM Force设备。两种设备的重建算法GE的ASiR-V vs 西门子的ADMIRE导致噪声纹理分布差异模型未学习设备不变特征。解决在训练数据中加入设备标签构建device-aware batch sampler确保每个batch包含至少1例GE和1例西门子数据同时在UNetR编码器首层添加DomainAdaptationConv3×3卷积核权重按设备类型动态切换。4.2 现象生成报告中“左肺上叶”被错误写成“右肺上叶”且无法通过日志定位原因DICOM元数据中ImageOrientationPatient字段决定图像空间方向未被解析。当CT扫描床头尾方向与标准解剖方位不一致时pixel_array的上下左右映射关系错乱导致解剖配准层输入坐标系错误。解决强制在LoadImaged前插入Orientd变换指定axcodesRASRight-Anterior-Superior标准坐标系并用nibabel.affines.apply_affine验证变换后坐标是否符合解剖常识如肺尖Z坐标应为最大值。4.3 现象同一结节在不同窗宽窗位下生成不同描述如WW/WL1500/–600时判为“实性”WW/WL1200/–400时判为“亚实性”原因模型输入未做窗宽窗位归一化而是直接使用原始像素值。不同WW/WL下同一组织CT值映射到0–255灰度范围的位置不同。解决在预处理层增加WindowNormalize变换将所有DICOM按公式normalized (pixel_array - wl) / (0.5 * ww)映射到[-1,1]区间再经torch.clamp截断确保输入分布一致。4.4 现象系统在夜间低负载时运行正常白天高峰时段CPU占用率100%报告生成延迟超200秒原因pydicom默认启用defer_size延迟加载当并发处理多例CT时大量文件句柄未释放触发Linux内核ulimit -n限制默认1024导致I/O阻塞。解决全局设置pydicom.config.settings.readers.defer_size None禁用延迟加载并用concurrent.futures.ProcessPoolExecutor替代ThreadPool规避Python GIL对CPU密集型DICOM解析的限制。4.5 现象医生反馈“生成的‘血管集束征’描述句太机械不像人写的”原因术语生成层过度依赖规则模板未建模临床表述习惯。例如真实报告中“血管集束征”常与“邻近胸膜牵拉”联合出现但模板中二者独立生成。解决构建co-occurrence graph统计127句人工报告中术语共现频率如“血管集束征”与“胸膜凹陷”共现率87%在Jinja2模板中添加条件分支{% if vascular_convergence in features and pleural_retraction in features %} 血管集束征伴邻近胸膜牵拉 {% elif vascular_convergence in features %} 可见血管集束征 {% endif %}5. 临床验证与迭代用放射科医生盲评代替BLEU分数才是真正的验收标准5.1 设计医生盲评协议拒绝“AI好不好”的主观题只问“能不能用”的客观题我们与某三甲医院放射科合作设计双盲评估评估者5名主治医师3名呼吸系统专长2名肿瘤影像专长均不知晓哪些报告由AI生成评估材料随机抽取100例真实胸部CT每例提供两份报告——A份为AI生成初稿B份为同一位医师3天前手写报告评估维度每项5分制≥4分视为合格解剖定位准确性能否根据报告文字在原始DICOM中准确定位到所述结节要求误差≤3mm术语规范性是否符合《中华放射学杂志》2023术语标准如“微小结节”不能写作“小结节”量化一致性报告中描述的大小、CT值是否与PACS测量工具读数偏差≤5%临床可用性该报告是否能作为正式报告提交无需大幅修改即可用于临床决策。结果AI报告在4项维度平均得分4.2/5.0其中“解剖定位准确性”达4.6分医生普遍认为AI定位比人眼更稳定但“临床可用性”仅3.8分——主要扣分点在于“未体现随访建议”如“建议3个月后复查”这暴露了系统缺乏时序建模能力。5.2 迭代升级从单例报告生成到跨时序随访分析为补足“临床可用性”短板我们在原系统上增加时序分析模块输入同一患者的多次CT检查需DICOM中StudyDate和AccessionNumber可关联核心逻辑对每次检查运行原检测流程提取结节id基于空间位置大小相似度聚类构建结节生长轨迹计算Δdiameter/Δtime单位mm/月按《Fleischner Society指南》分级规则引擎生成随访建议若Δdiameter/Δtime 1.5mm/月→ “进展迅速建议2周内MDT会诊”若0.3 Δdiameter/Δtime ≤ 1.5mm/月→ “缓慢增长建议3个月后复查”若Δdiameter/Δtime ≤ 0.3mm/月→ “稳定建议6个月后复查”。该模块仅增加230行Python代码基于pandas时间序列操作却使“临床可用性”评分从3.8升至4.5。5.3 部署后的真实收益不是替代医生而是重塑工作流系统在该院试运行3个月后我们跟踪了12名轮值医师的数据指标部署前均值部署后均值变化单例报告生成耗时112秒68秒↓39%夜间值班报告积压量23.7份/人/夜8.2份/人/夜↓65%报告术语不一致率17.3%抽样1000份2.1%↓88%医师主动使用率—91.4%日均启动14.2次—最让我触动的是某位副主任医师的反馈“以前写完报告总要反复检查‘左/右’有没有写反现在AI生成的初稿我第一件事是核对它的定位坐标——因为它比我自己更少犯这种低级错误。”这印证了我们最初的判断医学图像报告生成系统的终极价值不是让AI学会思考而是让医生从机械劳动中解放出来把精力留给真正需要人类智慧的环节——比如判断那个“稳定但形态可疑”的结节是否值得推荐患者做PET-CT。我坚持在每次新版本上线前亲手跑一遍DICOM解析→检测→配准→生成的全流程不是为了证明代码能跑通而是确保当医生凌晨三点点开系统时看到的第一行字就是准确的“左肺上叶尖后段……”。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

零代码打造AI助手:Coze智能体从搭建到发布全指南

零代码打造AI助手:Coze智能体从搭建到发布全指南

说实话,我一开始对"零代码AI"这类说法有些轻视。做了几年技术开发,潜意识里总觉得不写代码的东西要么太玩具、要么绑定太死,玩两下就会被真实业务需求打回原形。但这次认真把Coze从注册账号到发布上线完整走了一遍之后,…

2026/10/18 18:40:01 阅读更多 →
OpenCV人脸识别实战:Haar检测+LBPH识别全流程

OpenCV人脸识别实战:Haar检测+LBPH识别全流程

刚接触 OpenCV 和 Python 人脸识别那会儿,我犯过一个特别天真的错误:拿李四的照片去预测,结果输出的标签乱七八糟,置信度倒也挺高,我当时还以为是代码写错了。后来才搞明白,人脸识别这个需求拆开其实是两道…

2026/10/18 18:40:01 阅读更多 →
红明谷杯2021 MISC赛题复盘:文件隐写、流量分析与编码套娃实战解析

红明谷杯2021 MISC赛题复盘:文件隐写、流量分析与编码套娃实战解析

1. 赛题整体复盘与解题思路拆解1.1 赛事背景与题目构成红明谷杯2021的MISC方向整体难度中等偏上,出题人明显在“信息隐藏”和“编码套娃”两个维度上做了精心设计。我赛后把当时打比赛的笔记翻出来重新整理了一遍,发现这套题的价值在于:它几乎…

2026/10/18 18:39:01 阅读更多 →

最新新闻

Java Web门诊管理系统源码拆解:从Spring Boot到预约挂号全流程

Java Web门诊管理系统源码拆解:从Spring Boot到预约挂号全流程

简介:基于Java实现的智慧医院门诊管理系统,面向Java Web学习者、毕业设计与课程设计人群,聚焦医疗服务数字化与自动化。系统覆盖预约挂号、就诊记录、药品管理、医生排班等模块,串联Spring、Hibernate/MyBatis、MVC、RESTful API等…

2026/10/18 19:21:20 阅读更多 →
亿图图示 EdrawMax 6.8 绿色便携版:免安装流程图工具从解压到出图全攻略

亿图图示 EdrawMax 6.8 绿色便携版:免安装流程图工具从解压到出图全攻略

简介:亿图图示EdrawMax 6.8中文绿色便携版面向需要频繁绘制流程图、组织结构图、思维导图与工程图的职场人士、学生及设计爱好者,免安装、不写注册表,可直接在U盘或移动硬盘运行,解决多设备切换时无法快速使用专业绘图工具的问题。…

2026/10/18 19:21:20 阅读更多 →
红色视差CSS网页模板:从原理到实战的完整指南

红色视差CSS网页模板:从原理到实战的完整指南

简介:红色视差CSS网页模板面向网页设计师与前端初学者,提供一套以红色为主色调、融合视差滚动效果的完整静态站点方案,可用于个人作品集、企业展示页或活动专题页的快速搭建。压缩包共81个文件,约1.17MB,包含49个png、…

2026/10/18 19:21:20 阅读更多 →
模型训练可视化实战:从TensorBoard埋点到看懂loss、梯度与实验管理

模型训练可视化实战:从TensorBoard埋点到看懂loss、梯度与实验管理

你有没有遇到过这种情况:模型在服务器上跑了两天,终端里一个epoch一个epoch地打日志,loss肉眼可见地往下走,可最后测出来的准确率反而不如一个随手跑的baseline。你怀疑是学习率没调好,想回头查第几轮开始出了问题&…

2026/10/18 19:21:20 阅读更多 →
RAG分块调优指南:从参数决策到评测脚本,把召回率从30%提到70%

RAG分块调优指南:从参数决策到评测脚本,把召回率从30%提到70%

RAG项目做久了,你会发现一个很扎心的规律:检索召回效果差,大家第一反应是换 Embedding 模型、调向量检索的 TopK、甚至重写提示词,但真正拖后腿的,往往是没人愿意多看一眼的分块逻辑。我见过好几个项目,召回…

2026/10/18 19:21:20 阅读更多 →
Tomcat 8.5.100 安装配置避坑指南:JDK 11+ 兼容性与等保HTTPS实战

Tomcat 8.5.100 安装配置避坑指南:JDK 11+ 兼容性与等保HTTPS实战

简介:本资源为 Apache Tomcat 8.5.100 官方发行版 Linux/Unix 平台二进制包(tar.gz 格式),面向 Java Web 开发初学者、后端工程师及运维人员,用于快速部署 Servlet/JSP 应用、学习容器配置与生产级调优。压缩包共 623 …

2026/10/18 19:20:20 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →