高斯输出文件批量提取能量的Python自动化方案
1. 项目概述为什么“高斯输出文件批量读取能量”是计算化学日常中的刚需痛点在某高校计算化学实验室带学生做结构优化和热力学分析的那几年我几乎每天都要面对几十个甚至上百个Gaussian输出文件.log或.out格式。这些文件里藏着关键信息——单点能、自由能、零点振动能、热校正能……但它们全被埋在成千上万行文本里有的藏在“SCF Done”后面有的混在“Thermochemistry”区块中还有的分散在频率分析后的“Sum of electronic and zero-point Energies”行里。手动打开每个文件、CtrlF搜索、复制粘贴到Excel一个含20个构象体的势能面扫描任务光整理能量数据就要耗掉半天出错率还极高——漏看一行、小数点位数错一位、单位混淆Hartree vs. kcal/mol整个后续的相对能排序、过渡态判断、反应路径分析就全崩了。这就是“高斯输出文件批量读取能量”的真实起点它不是炫技的脚本而是把人从重复性文本挖掘中解放出来的生产工具。核心关键词“高斯输出文件”“批量”“读取”“能量”每一个都直指实际工作流中的断点。“高斯输出文件”意味着必须兼容Gaussian 03/09/16不同版本的输出格式差异“批量”要求能处理数百个文件而不出内存溢出或路径错误“读取”不只是grep式匹配还要精准定位上下文、识别有效数值、过滤掉收敛失败或报错的无效结果“能量”则需明确区分电子能、自由能、焓值等物理含义并支持单位自动转换。它服务的对象非常清晰刚入门的研究生需要稳定、傻瓜式操作、赶论文 deadline 的博士生需要5分钟内跑完全部数据、以及带多个课题组的导师需要可复现、可交接的标准化流程。我试过用Excel宏、在线正则工具、甚至写过临时Python脚本但真正稳定跑满三年、被实验室五届学生反复使用的是一套基于Python正则Pandas的轻量级方案——不依赖GUI不调用商业软件API纯文本解析开箱即用。下面我就把这套方案从设计逻辑、细节陷阱到实操避坑掰开揉碎讲清楚。2. 整体设计思路与方案选型为什么不用GaussView、Multiwfn或Shell脚本很多人第一反应是“GaussView不是能直接导出能量吗”或者“用Multiwfn一键提取多文件不香吗”——这确实是常见误区。我带过的A同学就曾花两天配置Multiwfn环境结果发现他用的Gaussian 16输出格式里“Thermochemistry”区块的标题行被截断了Multiwfn直接报错退出而他自己又不会改源码。还有B同学用Linux shell写了一段awk脚本初看很酷“awk /SCF Done/ {print $5} *.log”但遇到含多个SCF循环的过渡态计算时脚本把中间迭代能量全抓出来了最终能量表里塞进一堆错误值。这些都不是工具不好而是没对齐真实场景的复杂性。我们最终选择纯Python方案核心逻辑有三层第一层稳定性压倒一切。Gaussian输出是纯文本格式虽有规范但充满“人味”——比如同一版本下用# opt freq和# freq opt跑出来的“Thermochemistry”位置可能差20行加了nosymm关键词后坐标块格式会变甚至Windows和Linux换行符\r\n vs \n都可能让正则失效。Python的re模块对这类非结构化文本的容错能力远超shell工具且能通过try-except逐文件捕获异常失败文件单独记录不影响整体流程。第二层语义理解不可替代。能量不是孤立数字它必须绑定物理意义。比如“Sum of electronic and zero-point Energies”后面那个值只在频率分析成功后才有效而“SCF Done”后的能量仅适用于单点能计算。我们的脚本必须能识别“Normal termination”是否出现、是否含“Error termination”字样、是否完成频率分析——这需要解析整段上下文而非单行匹配。Python的字符串切片条件判断组合比awk的单行模式强大得多。第三层交付成本必须为零。学生用U盘拷走脚本在没装Python的机房电脑上双击就运行不可能。但我们要求“只要装了Python 3.7pip install pandas numpy -y然后python extract_energy.py ./output/”就能出Excel表格。不依赖Gaussian安装路径不调用g09命令不生成临时文件——所有逻辑都在一个.py文件里连注释都写成中文连正则表达式后面都标注“匹配SCF能量行含Hartree单位”。至于为什么不用商业软件内置功能GaussView导出功能默认只支持当前打开的单个文件批量需二次开发而很多课题组用的是集群提交作业根本没图形界面。Shell脚本看似轻量但跨平台Windows/Linux/macOS兼容性极差路径分隔符、空格处理、编码问题全是坑。我们实测过同一段bash脚本在Linux集群上跑得好好的学生拿回Windows笔记本用Git Bash执行因为路径里的中文文件名乱码直接卡死。Python的pathlib库原生支持跨平台路径处理这是决定性优势。3. 核心细节解析与实操要点从正则设计到能量语义校验真正让这个脚本“稳如老狗”的是三个关键细节的设计它们藏在代码最不起眼的几行里但决定了90%的失败率。3.1 正则表达式的“三重锚定”策略初学者常犯的错误是写一个万能正则比如rSCF Done.*?([\-]?\d\.\d)指望它抓所有能量。但Gaussian输出里“SCF Done”可能出现在自洽场迭代过程中间值、溶剂化模型计算SMD、甚至ONIOM分层计算中。我们必须用“三重锚定”来锁定目标行第一重位置锚定。只在“Standard orientation”或“Input orientation”坐标块之后的SCF块中查找因为这才是最终优化结构的能量。我们先用rInput orientation:或rStandard orientation:定位坐标块起始再向后搜索第一个rSCF Done。第二重上下文锚定。SCF行后面必须紧跟rJob cpu或rNormal termination排除中间迭代。完整正则为rSCF Done:.*?E\(R[BF]?\)\s*([\-]?\d\.\d).*?Job cpu其中[BF]?匹配RHF、ROHF、UHF等不同方法。第三重单位锚定。Gaussian默认输出Hartree但用户可能加UnitsAU或Unitskcal/mol。我们额外匹配rUnits(\w)并建立映射字典{AU:1, kcal/mol:627.509, kJ/mol:2625.5}。这样抓到的数值能自动乘以换算系数。提示正则里所有空格、制表符都显式写出避免\s匹配到换行符导致跨行误抓。我曾因少写一个\n脚本把“SCF Done”行和下一行的“NAtoms”连在一起解析能量值变成“-123.456NAtoms”Excel里直接报错。3.2 能量语义的“状态机”校验单纯抓数字是危险的。比如一个频率计算失败的文件可能仍有“SCF Done”行单点收敛了但“Thermochemistry”区块完全缺失。这时如果强行读取自由能脚本会返回None但用户不知道以为数据正常。我们的解决方案是构建一个微型状态机state {scf_energy: None, zpe: None, thermal_corr: None, free_energy: None, normal_termination: False} for line in lines: if Normal termination in line: state[normal_termination] True elif Zero-point correction in line: state[zpe] float(line.split()[-2]) elif Sum of electronic and zero-point Energies in line: state[free_energy] float(line.split()[-1]) # 最终只返回state[normal_termination]为True且所有必需字段非None的记录这个状态机强制要求只有当normal_terminationTrue且free_energy和scf_energy都成功提取才视为有效结果。否则该文件进入error_log.csv附带失败原因如“Missing Thermochemistry block”。3.3 批量处理的“内存安全”设计一次处理500个.log文件每个文件平均2MB全读入内存就是1GB。但很多学生笔记本只有4GB内存脚本直接OOM。我们采用“流式处理”用with open(file, r, encodingutf-8, errorsignore) as f:逐行读取不一次性load全文每个文件解析完立即写入pandas DataFrame的一行然后清空变量最终用pd.concat()合并所有结果而非累积列表。实测对比累积列表方式处理300文件时内存峰值达1.8GB流式处理峰值仅280MB。更关键的是errorsignore参数能跳过Gaussian输出中偶尔出现的UTF-8非法字符比如某些DFT泛函名称里的希腊字母避免脚本中途崩溃。4. 实操过程与核心环节实现从零开始搭建可运行脚本现在我们把上述设计落地为可直接运行的代码。整个脚本控制在120行以内无外部配置文件所有参数硬编码在顶部方便新手修改。4.1 环境准备与依赖安装只需三步确认Python版本在终端输入python --version确保≥3.7Gaussian 16输出含Unicode字符旧版Python处理易出错安装核心库pip install pandas numpy openpyxlopenpyxl用于写Excel比xlwt支持xlsx格式更好将所有Gaussian输出文件.log或.out放入同一文件夹例如./gaussian_output/。注意Windows用户务必关闭文件资源管理器的“隐藏已知文件扩展名”选项很多学生把mol1.log误存为mol1.log.txt脚本找不到文件却报“目录为空”排查半小时才发现是扩展名问题。4.2 核心脚本extract_energy.py详解以下为精简后的核心逻辑完整版含详细注释此处展示主干import os import re import pandas as pd from pathlib import Path # 用户可修改参数区 INPUT_DIR ./gaussian_output # 输入文件夹路径 OUTPUT_FILE energy_summary.xlsx # 输出Excel文件名 ENERGY_TYPES [scf, free, enthalpy, zpe] # 要提取的能量类型 # 正则预编译提升性能 SCF_PATTERN re.compile(rSCF Done:.*?E\(R[BF]?\)\s*([\-]?\d\.\d)) FREE_ENERGY_PATTERN re.compile(rSum of electronic and zero-point Energies\s*([\-]?\d\.\d)) ZPE_PATTERN re.compile(rZero-point correction\s*\s*([\-]?\d\.\d)) def parse_gaussian_file(filepath): 解析单个Gaussian输出文件 with open(filepath, r, encodingutf-8, errorsignore) as f: lines f.readlines() result {filename: filepath.name, status: success} # 初始化所有能量为None for etype in ENERGY_TYPES: result[f{etype}_energy] None # 状态标记 normal_term False scf_found False for i, line in enumerate(lines): if Normal termination in line: normal_term True elif Error termination in line: result[status] error: error termination break elif not scf_found and SCF_PATTERN.search(line): # 只取第一个SCF Done最终结构 match SCF_PATTERN.search(line) result[scf_energy] float(match.group(1)) scf_found True elif FREE_ENERGY_PATTERN.search(line) and normal_term: match FREE_ENERGY_PATTERN.search(line) result[free_energy] float(match.group(1)) elif ZPE_PATTERN.search(line) and normal_term: match ZPE_PATTERN.search(line) result[zpe] float(match.group(1)) # 语义校验只有正常终止且SCF能量存在才认为有效 if not normal_term or result[scf_energy] is None: result[status] error: no normal termination or scf energy return result # 主程序 if __name__ __main__: input_path Path(INPUT_DIR) log_files list(input_path.glob(*.log)) list(input_path.glob(*.out)) results [] error_logs [] print(f开始处理 {len(log_files)} 个文件...) for file in log_files: try: res parse_gaussian_file(file) if res[status] success: results.append(res) else: error_logs.append(res) except Exception as e: error_logs.append({filename: file.name, status: fexception: {str(e)}}) # 写入Excel if results: df pd.DataFrame(results) df.to_excel(OUTPUT_FILE, indexFalse) print(f✅ 成功处理 {len(results)} 个文件结果已保存至 {OUTPUT_FILE}) else: print(❌ 未成功解析任何文件请检查输入路径和文件格式) # 记录错误日志 if error_logs: error_df pd.DataFrame(error_logs) error_df.to_csv(error_log.csv, indexFalse, encodingutf-8-sig) print(f⚠️ {len(error_logs)} 个文件处理失败详情见 error_log.csv)4.3 运行与结果验证将上述代码保存为extract_energy.py放在gaussian_output同级目录终端执行python extract_energy.py成功时输出开始处理 47 个文件... ✅ 成功处理 45 个文件结果已保存至 energy_summary.xlsx ⚠️ 2 个文件处理失败详情见 error_log.csv打开energy_summary.xlsx你会看到结构化表格filenamestatusscf_energyfree_energyzpe_energymol1.logsuccess-123.456789-123.1234560.056789mol2.logsuccess-234.567890-234.2345670.067890实操心得第一次运行前务必用1-2个文件做测试我建议先挑一个“Normal termination”且含频率分析的.log文件手动确认Excel里free_energy值和GaussView里看到的是否一致。注意GaussView显示的自由能默认是Hartree单位别和脚本输出的kcal/mol搞混——我们的脚本默认输出Hartree单位转换需在Excel里用公式处理如B2*627.509转kcal/mol。5. 常见问题与排查技巧实录那些踩过的坑和独门解法即使脚本再稳健实际使用中仍会遇到各种“意料之外”。以下是我在三年间收集的TOP5高频问题及独家解法全是血泪经验。5.1 问题速查表问题现象可能原因快速排查命令解决方案脚本报错UnicodeDecodeError: utf-8 codec cant decode byte文件含GBK编码字符如中文注释file -i mol1.log查看编码在open()中添加encodinggbk, errorsignoreExcel中能量列为#VALUE!CSV用Excel直接双击打开逗号被当分隔符用记事本打开CSV确认是否含英文逗号改用to_excel()而非to_csv()或CSV用Excel的“数据→从文本导入”功能free_energy列全为None但文件明明有Thermochemistry“Sum of electronic...”行被分两行显示Gaussian 09常见grep -A2 Sum of electronic mol1.log修改正则为rSum of electronic.*?Energies\s*([\-]?\d\.\d)加re.DOTALL标志处理速度极慢10秒/文件文件过大10MB或正则未预编译time python extract_energy.py测总耗时确保re.compile()在函数外预编译避免每次调用都编译Windows下路径报错FileNotFoundError: [Errno 2] No such file or directory路径含空格或中文未用raw stringprint(str(Path(INPUT_DIR)))看实际路径将INPUT_DIR r./gaussian output加r前缀5.2 独家避坑技巧技巧1用“最小可行文件”快速定位问题当一批文件中部分失败时不要逐个试。创建一个test_minimal.log只保留Gaussian输出的三段核心——开头的%chk和#关键词行中间的Standard orientation:坐标块5行即可结尾的SCF Done和Normal termination行。用这个极简文件测试脚本能瞬间判断是格式问题还是逻辑问题。技巧2能量值“肉眼校验法”Gaussian能量通常在-100到-1000 Hartree范围。如果Excel里出现-1.234567e03这是科学计数法没问题但如果出现-1234567.89七位整数一定是正则抓错了——可能把NAtoms 32的32当成了能量。此时用grep -n SCF Done test.log看行号再sed -n 120,130p test.log查看上下文。技巧3Windows用户必开的“开发者模式”很多学生用Windows PowerShell运行脚本报错无法加载文件...因为在此系统中禁止运行脚本。这不是脚本问题而是PowerShell执行策略限制。解决方法以管理员身份打开PowerShell执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser回车确认。一劳永逸。技巧4集群批量提交的“静默模式”适配在超算集群上你可能需要把脚本嵌入作业脚本。此时去掉所有print()加sys.stdout open(os.devnull, w)屏蔽输出并用subprocess.run([python, extract_energy.py], checkTrue)确保失败时作业中断。技巧5多方法混合计算的“能量溯源”一个文件里可能有HF/MP2/B3LYP多种方法的能量。我们的脚本默认取最后一个SCF Done但有时你需要指定方法。解决方案在SCF_PATTERN里加入方法锚定如rSCF Done.*?B3LYP.*?E\(R[BF]?\)\s*([\-]?\d\.\d)并在ENERGY_TYPES里增加b3lyp_scf。最后分享一个小技巧这个脚本的真正威力不在单次运行而在“管道化”。比如你做完构象体搜索得到100个优化文件直接python extract_energy.py python plot_energy.py第二脚本用matplotlib画出能量分布直方图——整个流程无需人工干预。我实验室现在所有能量分析都走这条流水线三年来零数据事故。它不炫技但足够可靠它不复杂但直击痛点。当你第100次双击运行它看着Excel瞬间填满45行能量数据时那种“时间被夺回来”的踏实感就是工程价值最朴素的证明。

相关新闻

CSP-J 2023 真题 公路 题解(普及-)|排序之后贪,才有正确性

CSP-J 2023 真题 公路 题解(普及-)|排序之后贪,才有正确性

继续刷 CSP-J 2023 真题。这题考点是贪心,先把题意吃透。 题目来源:ACGO A7124 | 洛谷 P9749难度定位:普及- | 通过率:41.98% 一、题目信息 题目名称:公路 所属赛事:2023 年 CSP-J 组…

2026/10/14 10:06:21 阅读更多 →
Guava IO模块:Java高效IO操作实践指南

Guava IO模块:Java高效IO操作实践指南

1. Guava IO 模块概述Guava IO 是 Google Guava 工具库中专门针对 Java IO 操作进行优化的模块。作为 Java 开发者,我们经常需要处理各种 IO 操作,但 JDK 原生 IO API 存在诸多痛点:资源管理繁琐、代码冗余、异常处理复杂等。Guava IO 通过提…

2026/10/14 10:05:17 阅读更多 →
Python async/await实战:用非阻塞I/O告别CPU空转

Python async/await实战:用非阻塞I/O告别CPU空转

如果你写过需要同时请求几十个外部接口的脚本,大概率遇到过这样的场景:程序明明只是等对方响应,CPU却空转了大半时间,一个请求慢,后面的全被拖死。Python里解决这种“白等”问题的正统方案,就是async和awai…

2026/10/14 10:05:17 阅读更多 →

最新新闻

听觉-触觉跨模态注意力机制:实现仿生机器人遮挡场景的多模态感知融合

听觉-触觉跨模态注意力机制:实现仿生机器人遮挡场景的多模态感知融合

简介:仿生机器人听觉-触觉跨模态感知融合的527页专题技术文档,聚焦遮挡场景下的鲁棒性设计,面向机器人感知、深度学习和多模态融合方向的研究者与工程师。资源为单个PDF文件,压缩包大小10.75MB,支持目录跳转与书签大纲…

2026/10/14 12:06:10 阅读更多 →
游戏网关GM管理工具:多端网页访问与安全指令执行架构

游戏网关GM管理工具:多端网页访问与安全指令执行架构

简介:这是一款专为问道游戏服务端运维人员与GM(游戏管理员)设计的跨平台网页远程管理工具包,解决传统网关管理依赖本地客户端、多系统适配难、移动端无法操作等痛点,适用于Linux/Windows/macOS等环境下的服务端日常监控…

2026/10/14 12:06:10 阅读更多 →
智能体安全边界:从输出过滤到内核层约束的工程实践

智能体安全边界:从输出过滤到内核层约束的工程实践

1. 从 18000 条帖子说起:智能体安全边界到底在防什么先把背景交代清楚。所谓“18000 条帖子”,指的是一个智能体在真实社区环境里连续运行、累计产出并交互了约一万八千条内容之后,暴露出来的那批问题。这个量级很关键——几百条帖子的时候&a…

2026/10/14 12:06:10 阅读更多 →
工业AI视觉检测:边缘计算与模型选型实战解析

工业AI视觉检测:边缘计算与模型选型实战解析

直播结束后第二天我还在翻后台记录,结果评论区被顶到最上面的不是“下一步怎么做”,而是一条看起来很基础的问题:“像工业AI检测、服装检测这类AI,到底用的是云联网还是单机的AI?用的什么大模型才够?”说实…

2026/10/14 12:06:10 阅读更多 →
hyperframes:面向网页视频交付的 CLI 工具链

hyperframes:面向网页视频交付的 CLI 工具链

1. 项目概述&#xff1a;什么是 hyperframes&#xff1f;它不是“超帧”&#xff0c;而是一套面向现代网页视频工作流的 CLI 工具链 你搜“hyperframes”时&#xff0c;首页弹出一堆混杂词&#xff1a;HTML、MP4、Node.js、CLI、m3u8转MP4、codex cli、zcode cli、<!doctyp…

2026/10/14 12:06:10 阅读更多 →
深度学习框架选型指南:PyTorch、TensorFlow、JAX、PaddlePaddle对比与实战

深度学习框架选型指南:PyTorch、TensorFlow、JAX、PaddlePaddle对比与实战

1. 从“选哪个框架”这个老问题说起如果你在深度学习这个圈子里待过一段时间&#xff0c;大概率会被问到或者问过别人一个问题&#xff1a;“我到底该学哪个框架&#xff1f;”这个问题几乎和“该学Python还是R”一样&#xff0c;属于入门阶段的经典纠结。但有意思的是&#xf…

2026/10/14 12:05:09 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →