TEM-simulator开源教程:可控生成高分辨透射电镜图像
简介TEM-simulator-开源是一款面向生物物理、结构生物学及材料科学领域科研人员的透射电子显微镜TEM成像模拟工具专为辅助实验设计、图像预测与三维重构教学研究而开发。它解决了高成本TEM实验前期验证难、参数调试周期长等痛点尤其适合研究生、青年科研工作者开展虚拟样品建模、电子束-物质相互作用分析及倾斜系列模拟。资源包共46个文件含21个头文件.h定义核心数据结构与接口、20个源码文件.c实现样品建模、波函数演化、探测器响应等关键算法、1个PDF手册、1个可执行程序TEM-simulator.exe及Makefile等构建支持文件整体仅416KB轻量易部署。已有248人学习下载用户可直接运行仿真、查阅完整源码逻辑、复现论文级模拟流程并基于开源架构扩展自定义样品或成像模型是理解TEM物理原理与提升计算显微能力的实用型技术资源。1. TEM-simulator-开源不是“仿真软件下载包”而是透射电镜图像生成的可控黑匣子你有没有遇到过这种场景手头有一张高分辨透射电镜HRTEM图像想反推它的晶体取向、层错位置或应变分布但模型训练缺大量带真值标签的TEM图像又或者在设计新型二维材料时需要预判某晶面在特定加速电压、离焦量下的成像对比度却只能靠查文献里零散的实验图凑数。这时候“TEM-simulator-开源”就不是一句模糊的关键词而是一个能让你在本地生成参数可调、物理可解释、像素级可控的模拟TEM图像的技术入口。它不替代真实电镜但能补足实验周期长、设备机时紧、参数难遍历的硬缺口。典型用户是材料计算方向的研究生、电子显微学方法开发者、以及需要构建TEM-AI数据集的算法工程师——他们不需要“点开即用”的GUI但极度依赖命令行可复现、参数可脚本化、输出可嵌入训练流水线的能力。这个项目的核心价值不在“开源”二字本身而在它把多层晶体衍射、非相干背景、探测器响应、像差传递函数这些原本藏在商业软件黑盒里的物理模块拆解成可读、可改、可调试的Python/C组件。接下来几章我会带你从零跑通一个最小可用流程并告诉你哪些参数动了会翻车、哪些文件必须手动生成、哪些“默认值”其实是玄学陷阱。2. 搭建TEM-simulator-开源环境避开conda与系统库的版本绞杀战TEM-simulator-开源项目通常基于Python生态构建但其底层严重依赖Fortran编译的电子散射核心如MULTEM或自研多层波传播求解器同时需对接OpenCV做图像后处理、NumPy做矩阵运算。常见翻车点不是代码写错而是环境链路断裂。我一般会跳过conda-forge的预编译包版本滞后且常缺Fortran运行时采用“源码编译虚拟环境隔离”双保险策略。2.1 下载与基础依赖安装首先确认系统级Fortran编译器已就位。Linux/macOS下执行# Ubuntu/Debian系 sudo apt-get install gfortran build-essential python3-dev libopenmpi-dev # macOS (Homebrew) brew install gcc open-mpi # 注意brew install gcc 会同时装gfortran路径通常为 /opt/homebrew/bin/gfortran-14提示不要用MacPorts或手动编译GCC——TEM-simulator对gfortran ABI兼容性极敏感gfortran-14比gfortran-13在某些原子散射因子计算中会产生0.3%以上的相位误差最终导致条纹对比度偏移。务必用gfortran --version确认主版本号。接着创建纯净Python环境并安装基础科学栈python3 -m venv temsim-env source temsim-env/bin/activate pip install --upgrade pip setuptools wheel pip install numpy1.24.4 scipy1.11.4 opencv-python4.8.1.78 matplotlib3.7.5注意这里锁定了NumPy 1.24.4而非最新版。TEM-simulator-开源的Cython封装层在NumPy 1.25中因PyArray_GetBuffer接口变更而编译失败错误信息为undefined symbol: PyArray_GetBuffer。这是2023年Q4后最常被忽略的坑。2.2 编译核心Fortran模块项目根目录下通常存在src/fortran/子目录内含.f90源码。关键动作是修改setup.py中的编译器路径——尤其当系统存在多个gfortran时# 在 setup.py 的 Extension 配置段中显式指定编译器 from numpy.distutils.core import setup from numpy.distutils.extension import Extension ext_modules [ Extension( nametemsim.fortran_core, sources[src/fortran/scattering.f90, src/fortran/wave_propagation.f90], extra_f90_compile_args[-O3, -ffree-line-length-none], # 强制指定编译器路径避免distutils自动选错 f2py_options[--fcompilergnu95], ) ]然后执行编译注意必须在激活的venv中python setup.py build_ext --inplace若报错gfortran: error: unrecognized command-line option ‘-fopenmp’说明你的gfortran未启用OpenMP支持。此时需重新编译gfortranLinux或改用Homebrew安装的gcc套件macOS。验证是否成功# 运行测试 python -c import temsim.fortran_core; print(Fortran core loaded)成功输出即表示底层计算引擎已就位。此时temsim/包结构应包含__init__.py、fortran_core.cpython-*.so及core.py等Python胶水模块。3. 生成第一张HRTEM图像从晶体结构文件到像素阵列的六步链路TEM-simulator-开源的最小可行流程不依赖GUI全部通过Python脚本驱动。核心逻辑是晶体结构 → 多层切片 → 波函数传播 → 探测器积分 → 噪声注入 → 图像输出。下面以Si[001]晶向为例走通完整链路。3.1 准备输入晶体结构CIF格式TEM-simulator-开源不自带晶体数据库需用户提供标准CIF文件。可从ICSD或Materials Project导出但必须满足两个硬性条件loop_ _atom_site_label区块中元素符号必须为全大写如Si1而非si1_cell_length_*和_cell_angle_*字段单位必须为Å和°不能是nm或rad。用文本编辑器检查关键字段_cell_length_a 5.431 _cell_length_b 5.431 _cell_length_c 5.431 _cell_angle_alpha 90.0 _cell_angle_beta 90.0 _cell_angle_gamma 90.0 loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si1 Si 0.000 0.000 0.000 Si2 Si 0.250 0.250 0.250 ...提示若用Materials Project下载的CIF含_symmetry_space_group_name_H-M P 1需手动改为P1——TEM-simulator-开源的对称性解析器只认无空格格式否则会跳过所有原子坐标。3.2 构建TEM参数字典Python脚本核心创建run_simulation.py定义物理参数。此处参数非随意填写每个都有明确物理意义import numpy as np from temsim.core import TEMSimulator # 1. 仪器参数单位nm, V, nm, mrad tem_params { accelerating_voltage: 200e3, # 加速电压200 kV spherical_aberration: 0.001, # 球差系数 Cs 1 mm chromatic_aberration: 0.002, # 色差系数 Cc 2 mm energy_spread: 0.7, # 能量展宽 ΔE 0.7 eV aperture_angle: 30e-3, # 孔径角 α 30 mrad defocus: -50.0, # 离焦量 Δf -50 nm负值为欠焦 } # 2. 探测器参数 detector_params { pixel_size: 0.025, # 探测器像素尺寸 0.025 nm/pixel image_size: (512, 512), # 输出图像尺寸 dose: 10.0, # 总电子剂量 10 e⁻/Ų noise_model: poisson, # 噪声类型poisson 或 gaussian } # 3. 晶体取向与厚度 crystal_params { cif_file: Si_icsd_16757.cif, # 上一步准备的CIF zone_axis: [0, 0, 1], # [001]带轴 thickness: 20.0, # 样品厚度 20 nm tilt_angles: [0.0, 0.0], # 双倾转角 [θx, θy] 单位度 }注意defocus参数是TEM图像对比度的最强杠杆。-50 nm欠焦是Si[001]的常用起始值但若你模拟的是MoS₂这类轻元素材料需将defocus设为-200 nm以上——因为轻元素相位衬度主导需更大离焦激发相位梯度。硬编码-50.0会导致MoS₂模拟图一片死黑。3.3 执行模拟并保存结果# 初始化模拟器 simulator TEMSimulator( tem_paramstem_params, detector_paramsdetector_params, crystal_paramscrystal_params ) # 运行多层波传播耗时操作通常1~5分钟 print(Starting multislice simulation...) image_array simulator.run() # 返回 shape(512,512) 的 float64 数组 # 归一化并保存为TIFF保留浮点精度 from PIL import Image normalized (image_array - image_array.min()) / (image_array.max() - image_array.min()) pil_img Image.fromarray((normalized * 65535).astype(np.uint16)) pil_img.save(Si_001_defocus-50nm.tiff) print(Simulation completed. Output saved to Si_001_defocus-50nm.tiff)运行后你会得到一张512×512的16位TIFF图像。打开它应该能看到清晰的Si原子列排列间距约0.314 nm边缘有轻微振铃效应——这正是离焦与球差共同作用的特征。如果图像全黑或全白问题一定出在defocus、thickness或accelerating_voltage三者之一的量级错误上例如误将200kV写成200V。4. TEM-simulator-开源避坑指南五个让新手停在第一步的真实错误TEM-simulator-开源的文档往往假设用户熟悉电子光学基础但实际落地时80%的失败源于几个隐蔽的配置陷阱。以下是我在帮某高校材料实验室部署时记录的真实踩坑案例按发生频率排序4.1 现象ImportError: libgfortran.so.5: cannot open shared object file原因系统gfortran版本如gcc-12编译的.so文件依赖libgfortran.so.5但conda环境或系统默认只提供libgfortran.so.4或libgfortran.so.6。这不是Python路径问题而是动态链接库ABI不匹配。解决Linux用find /usr -name libgfortran.so.*定位正确版本然后创建软链接sudo ln -sf /usr/lib/x86_64-linux-gnu/libgfortran.so.5 /usr/lib/libgfortran.so.5macOSHomebrew安装的gcc会把库放在/opt/homebrew/lib/需将该路径加入DYLD_LIBRARY_PATHexport DYLD_LIBRARY_PATH/opt/homebrew/lib:$DYLD_LIBRARY_PATH4.2 现象模拟图像中出现规则网格状伪影非原子列原因CIF文件中的_cell_length_*单位是nm而非Å。TEM-simulator-开源默认所有长度单位为Å若输入5.431 nm即54.31 Å会导致晶体格子被拉伸10倍波函数采样严重失配在傅里叶空间产生混叠频谱最终投影为网格。解决用文本编辑器全局替换_cell_length_a等字段确保数值为5.431Å而非0.5431nm。验证方法计算a * b * c * sin(α) * sin(β) * sin(γ)Si单胞体积应≈160 ų若算出1600 ų则单位必错。4.3 现象RuntimeWarning: invalid value encountered in sqrt后图像全NaN原因defocus设为正值过焦且thickness过大时多层算法中某一层的透射函数模平方出现负值开方报错。TEM物理中过焦模式信噪比极低开源实现未做鲁棒性保护。解决强制使用欠焦模式。将defocus设为负值且绝对值不小于thickness/2例如20 nm厚样品defocus至少-10 nm。生产环境脚本中应加校验assert defocus 0, Defocus must be negative (underfocus mode) assert abs(defocus) thickness / 2, Defocus magnitude too small for given thickness4.4 现象ValueError: array is not C-contiguous在调用cv2.filter2D时崩溃原因TEM-simulator-开源内部对image_array做了np.transpose()或切片操作导致内存布局变为Fortran顺序F-contiguous而OpenCV要求C-contiguous数组。解决在保存前强制转换image_array np.ascontiguousarray(image_array)4.5 现象同一CIF文件不同机器上模拟结果原子间距偏差0.02 nm原因pixel_size参数单位混淆。文档写“nm per pixel”但部分版本代码实际按“Å per pixel”解析。若你设pixel_size0.025期望0.025 nm/pixel 0.25 Å/pixel而代码按Å解析则实际采样为0.025 Å/pixel导致尺度放大10倍。解决查看temsim/core.py中detector_params解析逻辑搜索pixel_size。若发现类似self.pixel_size params[pixel_size] * 0.1的乘法则说明代码内部已做单位转换此时你应输入pixel_size0.25若无此行则输入0.025。血泪经验永远先用已知尺度标定物如Si110晶面间距0.192 nm做一次验证实验。5. 控制TEM图像物理保真度三个必调参数与一个不可妥协的验证步骤TEM-simulator-开源的价值不在于“能生成图”而在于“生成的图能否替代真实电镜数据用于定量分析”。要达到这一目标必须穿透参数表层理解每个变量对图像形成的物理贡献。以下三个参数是调节图像可信度的黄金三角而最后一个验证步骤是交付前的不可妥协动作。5.1 离焦量Defocus从“形貌图”到“相位图”的开关离焦量Δf不是简单调节对比度的旋钮而是控制成像机制的物理开关|Δf| 20 nm近焦区振幅衬度主导图像反映样品质量厚度分布类似明场像|Δf| 50–200 nm谢尔策聚焦区相位衬度主导图像直接反映晶体势场相位梯度即原子列位置|Δf| 300 nm高离焦区衍射斑点开始可见适合模拟选区电子衍射SAED。对HRTEM原子识别任务必须将defocus锁定在谢尔策区。计算公式为$$ \Delta f_{\text{Scherzer}} \approx -1.2 \times C_s^{1/4} \times \lambda^{3/4} $$其中λ为电子波长200 kV下λ0.00251 nmCs为球差系数。代入Cs1 mm得Δf≈-65 nm。因此所有原子分辨率模拟必须以-65 nm为基准±15 nm内微调。固定其他参数仅扫描defocus从-50到-80 nm观察原子列边缘锐度变化——最佳值对应边缘振铃最小、中心峰最尖锐。5.2 样品厚度Thickness信噪比与多重散射的平衡木厚度影响两类物理过程信噪比厚度↑ → 散射事件↑ → 信号强度↑但背景噪声也↑多重散射厚度↑ → 非弹性散射概率↑ → 相干性下降 → 条纹对比度↓。实测表明对于200 kV电子Si的“最佳厚度窗口”为15–25 nm低于15 nm时信号太弱原子列易被噪声淹没高于25 nm时由于非弹性散射累积0.13 nm的Si-Si键长分辨率会坍缩至0.18 nm以上。因此厚度不应是任意值而应根据目标分辨率反推。若你要验证模型能否分辨0.14 nm的Mo-S键则厚度必须≤18 nmMoS₂的非弹性平均自由程更短。5.3 电子剂量Dose从“理想图”到“真实图”的最后一道门dose参数控制泊松噪声强度但它的物理意义常被误解。TEM-simulator-开源中的dose单位是e⁻/Ų而非e⁻/pixel。这意味着若pixel_size0.025 nm 0.25 Å则单像素面积0.0625 Ų设dose10 e⁻/Ų则单像素平均电子数10 × 0.0625 0.625 e⁻/pixel此时图像信噪比SNR≈√0.625≈0.79属极低剂量成像接近冷冻电镜条件。要获得信噪比10的“高质量图”需将dose提升至1000 e⁻/Ų以上。但请注意高剂量图不能用于训练去噪模型——因为真实电镜受限于辐照损伤无法获取同等剂量的干净参考图。因此生产级数据集应采用dose5–50 e⁻/Ų并配套生成无噪声的doseinf理想图作为监督信号。5.4 不可妥协的验证步骤用已知标定物做像素尺度回归无论参数如何优化必须用真实世界标尺验证输出图像的物理尺度。标准做法是选取一个已知晶面间距d_hkl的标定物如Au111 d0.235 nmSi110 d0.192 nm在模拟图像中测量该晶面间距对应的像素数N计算实际像素尺寸 d_hkl / N与输入的pixel_size比较误差必须1%。例如Si110理论间距0.192 nm若测得图像中对应82像素则实际像素尺寸0.192/820.00234 nm/pixel。若输入pixel_size0.025 nm/pixel则误差达906%——说明pixel_size参数被错误解析或单位混淆。此时必须回溯第4.5节的单位校验而非调整其他参数。我坚持在每次新部署、每次参数大改后都执行此验证。曾有一次因服务器CUDA驱动升级导致浮点运算精度漂移pixel_size校准误差突增至3%差点让整个数据集失效。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

MATLAB声学水下目标定位:从信号建模到TDOA解算的完整实现

MATLAB声学水下目标定位:从信号建模到TDOA解算的完整实现

简介:这份资源是面向计算机、电子信息工程、数学等专业学生与研究人员的水下目标定位项目包,基于Matlab实现声学定位算法,可用于课程设计、期末大作业与毕业设计。包内共72个文件,以16个m脚本、13份pdf文档、11个txt说明及若干png…

2026/10/11 10:14:04 阅读更多 →
火灾火焰目标检测数据集:VOC/COCO/YOLO格式转换与YOLOv8训练指南

火灾火焰目标检测数据集:VOC/COCO/YOLO格式转换与YOLOv8训练指南

简介:YOLO火灾火焰目标检测数据集面向目标检测入门者及消防安全算法工程师,收集自真实场景、数据场景丰富,标注框质量高,可直接用于YOLO系列模型训练与验证。压缩包共2000个文件,大小约103.66MB,核心包含10…

2026/10/11 10:13:04 阅读更多 →
飞行原理课件:从大气分层到伯努利方程的完整知识链路

飞行原理课件:从大气分层到伯努利方程的完整知识链路

简介:这份PPT课件面向航空航天专业学生及飞行原理初学者,系统梳理飞行器飞行原理的核心概念与基本规律,可作为课程学习、复习备考与知识框架搭建的参考材料。资源为单个pptx文件,压缩包约36.63MB,内容以章节化幻灯片呈…

2026/10/11 10:13:04 阅读更多 →

最新新闻

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

简介:新浪Level2接口SDK是一份面向量化开发与行情分析人员的Java工程,用于对接新浪Level2全推行情,获取股票、基金等品种的深度交易数据。相比普通免费接口,Level2数据在速度与深度上更适合机构级策略,适合有一定Java基…

2026/10/11 22:50:35 阅读更多 →
一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

大模型 API 聚合平台的核心价值一句话就能说清:一个 Key 接入多家大模型,统一计费与访问管理,把供应商切换成本降到最低。市面上的主流玩家分三类——国际商业聚合、国内商业聚合、自托管开源方案,路线不同,取舍也不同…

2026/10/11 22:50:35 阅读更多 →
HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

【免费下载链接】hop 项目地址: https://gitcode.com/gh_mirrors/hop22/hop 点击查看 免费下载 HOP 是一款开源的 HWP/HWPX 文档编辑器,桌面外壳由 HOP 团队维护,而文档解析与渲染引擎来自上游项目 rhwp。如何安全地跟随上游版本前进&#x…

2026/10/11 22:50:35 阅读更多 →
Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

简介:本资源为《植物大战僵尸》Android平台开源实现的完整工程源码,面向Android游戏开发初学者与进阶者,聚焦塔防类游戏架构设计、图形渲染与状态管理等核心实践。压缩包共173个文件,含20个Java源文件(涵盖GameScene、…

2026/10/11 22:50:35 阅读更多 →
基于线性回归的PM2.5预测系统Python源码实战解析

基于线性回归的PM2.5预测系统Python源码实战解析

简介:基于线性回归的PM2.5预测系统源码,是一套面向Python学习者、机器学习入门者及大气环境数据分析场景的小型完整项目。代码以单文件Python脚本承载数据读取、特征构造、模型训练与结果预测等关键流程,配套原始训练/测试CSV表、处理后的特征…

2026/10/11 22:50:35 阅读更多 →
PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

【免费下载链接】PgQue PgQue – Zero-bloat Postgres queue built on top of on battle-proven Skypes PgQ. One SQL file to install, pg_cron to tick https://pgque.dev 项目地址: https://gitcode.com/gh_mirrors/pg/PgQue 点击查看 免费下载 PgQue 是一个零膨…

2026/10/11 22:49:35 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →