Intel SGX入门:硬件级可信执行环境原理与落地实践
1. 从一个真实困惑说起为什么需要关注SGX我第一次接触Intel SGX是在做一个跨平台数据协作项目的时候。当时的需求很朴素多个参与方想联合计算一个统计结果但谁都不愿意把原始数据交出去。我们试过同态加密性能损耗大到没法接受试过安全多方计算通信轮次多到让人崩溃。后来一位做系统安全的同行提了一句“你们看过SGX吗硬件层面直接给你划一块加密飞地。”那是我第一次认真去了解这个技术也是第一次意识到原来CPU厂商早就在芯片里埋了一套“可信执行环境”的硬件方案。SGX全称是Software Guard Extensions中文一般叫“软件防护扩展”。它做的事情用一句话概括在CPU里划出一块被硬件加密保护的内存区域叫做Enclave飞地里面的代码和数据对外部世界——包括操作系统内核、虚拟机监控器、甚至BIOS——都是不可见、不可篡改的。这个“对外部不可见”的范围是SGX最核心的价值主张也是它和传统安全方案最本质的区别。为什么这件事重要因为传统安全模型里操作系统是可信基TCB的一部分。你装了什么杀毒软件、系统有没有被root、内核有没有被植入后门直接决定了你的应用安不安全。但现实是操作系统的攻击面太大了动辄几千万行代码漏洞层出不穷。SGX的思路是我不信任操作系统了我只信任CPU硬件本身。把敏感计算放进Enclave操作系统只能看到一堆加密后的密文想偷看、想篡改都无从下手。这篇是入门系列的第一篇重点讲背景。我会把SGX要解决的问题、它的基本工作原理、和类似技术的对比、以及实际落地时会遇到哪些坑尽量用从业者的视角讲清楚。如果你正在做隐私计算、联邦学习、密钥管理、数字版权保护这类方向或者单纯对硬件安全感兴趣这篇内容应该能帮你建立一个比较扎实的认知框架。2. SGX要解决的核心问题信任边界到底画在哪里2.1 传统安全模型的信任困境要理解SGX的价值得先看清楚传统安全模型的问题出在哪。假设你写了一个处理敏感数据的服务部署在云服务器上。你的信任链条大概是这样的你信任云厂商不会偷看你的数据信任操作系统不会被攻破信任运维人员不会乱来信任虚拟化层没有漏洞。这条链上任何一个环节出问题你的数据就暴露了。这个信任链条有多脆弱我举个实际遇到的场景。某次做安全评估我们发现一台服务器上某个看似无关的第三方库存在提权漏洞攻击者可以利用它读取进程内存。你的应用即使代码写得再严谨只要和这个库跑在同一台机器上敏感数据就可能被读走。更不用说云环境下同一台物理机可能跑着几十个租户的虚拟机侧信道攻击的论文每年都在刷新认知。传统方案怎么应对要么加密存储但计算时必须解密到内存内存里的明文对操作系统完全可见要么用HSM硬件安全模块但HSM通常只做密钥管理没法跑通用计算逻辑要么用TEE可信执行环境的软件方案但纯软件方案的可信根最终还是落在操作系统上绕不开那个根本矛盾。2.2 SGX的信任边界只信CPUSGX把信任边界收缩到了极致只信任CPU芯片本身。具体来说信任边界包括CPU的计算单元、内存加密引擎、以及Intel签名的微码。除此之外的一切——操作系统、Hypervisor、BIOS、系统总线上的其他设备——统统被划到信任边界之外。这个设计带来的直接后果是Enclave里的代码和数据在离开CPU封装之前就已经被加密了。内存控制器里有一个叫做MEEMemory Encryption Engine的模块负责对进出Enclave的内存流量做加解密。即使攻击者用物理探针去抓内存总线上的信号抓到的也是密文。这个威胁模型在以前是需要专用硬件才能实现的SGX把它做进了通用CPU。但这里有个关键点容易被忽略SGX保护的是“运行时”的机密性和完整性它不保护可用性。也就是说操作系统虽然看不到Enclave里的内容但它可以选择不调度你的Enclave、可以拒绝分配内存、可以直接把Enclave杀掉。SGX的威胁模型里拒绝服务攻击是不防的。这一点在实际设计系统时必须考虑进去后面讲落地的时候我会展开。2.3 和类似技术的定位差异市面上做TEE的方案不止SGX一家ARM有TrustZoneAMD有SEVRISC-V生态里也有Keystone、Penglai这些学术方案。它们的目标类似但实现路径和适用场景差别很大。TrustZone的思路是把CPU分成安全世界和普通世界安全世界的代码可以访问普通世界的内存反之不行。它更适合做系统级的隔离比如把指纹识别、支付处理放在安全世界。但TrustZone的安全世界通常由设备厂商控制普通开发者很难往里塞自己的逻辑。AMD SEV的思路是加密整个虚拟机的内存保护的是VM级别的隔离对应用开发者透明。它的粒度比SGX粗但改造成本低适合云厂商做多租户隔离。SGX的粒度最细细到可以只保护一个进程里的某个函数。这个灵活性是它的优势也是它的复杂之处——开发者需要显式地把代码和数据划分成Enclave内和Enclave外两部分这个划分本身就是一门学问。技术方案保护粒度信任根开发者控制力典型场景Intel SGX函数/进程级CPU硬件高需显式划分隐私计算、密钥保护ARM TrustZone系统级安全固件低依赖厂商移动支付、DRMAMD SEV虚拟机级CPU硬件低对应用透明云多租户隔离纯软件TEE进程级操作系统中受限场景这张表不是要分高下而是说明选型时得看清楚你要保护的到底是什么粒度你的信任假设是什么你能接受多大的改造成本。SGX适合那种“我就是要保护这一小段逻辑其他部分我不管”的场景。3. Enclave的工作机制从代码加载到远程认证3.1 Enclave的生命周期一个Enclave从创建到销毁大致经历这几个阶段初始化、加载、执行、销毁。每个阶段都有对应的指令和数据结构理解这些是后续写代码的基础。初始化阶段应用程序调用ECREATE指令创建一个Enclave控制结构SECS相当于给Enclave分配一个“户口”。这个结构里记录了Enclave的基地址、大小、属性等信息。接着用EADD指令把代码和数据页一页一页地加进去每加一页都会计算一个哈希值最终累积成一个叫做MRENCLAVE的度量值。这个度量值是Enclave的身份标识后面远程认证会用到。加载完成后调用EINIT指令完成初始化。EINIT会验证签名和度量值通过后Enclave就进入可执行状态。应用程序通过EENTER指令进入Enclave通过EEXIT指令退出。Enclave执行完毕后用EREMOVE指令销毁。这个过程听起来机械但有几个细节值得注意。第一Enclave的内存是在应用进程的地址空间里分配的但被CPU硬件标记为受保护普通代码访问会触发异常。第二Enclave的代码在加载时会被度量但运行时如果发生缺页操作系统可以拒绝提供页面导致Enclave崩溃。第三Enclave退出时里面的寄存器状态会被清理但内存页的回收依赖操作系统配合。3.2 本地认证与远程认证认证是SGX体系里最精妙的部分之一。它解决的是“我怎么知道对面这个Enclave真的是我想要的代码而且跑在真正的SGX硬件上”这个问题。本地认证用于同一个平台上的两个Enclave之间互相验证。一个Enclave可以请求硬件生成一个报告Report里面包含自己的MRENCLAVE、MRSIGNER签名者标识、以及用户自定义的数据。另一个Enclave可以通过EREPORT指令验证这个报告确认对方身份。这个过程不涉及网络速度很快。远程认证用于跨平台的场景。Enclave生成的报告需要经过一个叫做Quoting Enclave的特殊Enclave转换成QuoteQuote用Intel的签名密钥签名后发送给远程的验证方。验证方通过Intel提供的认证服务验证签名确认这个Quote来自真正的SGX硬件并且Enclave的度量值符合预期。这里有个实际踩过的坑远程认证需要访问Intel的认证服务如果你的部署环境没有外网访问整个流程就走不通。有些云厂商提供了本地的认证代理但配置起来又是一堆事。在做方案设计时认证路径的网络依赖必须提前确认。3.3 密封存储数据怎么安全地持久化Enclave的内存是易失的进程重启后里面的数据就没了。但很多场景需要把敏感数据持久化比如密钥、状态信息。SGX提供了密封Sealing机制来解决这个问题。密封的原理是用一个只有同一个Enclave才能推导出来的密钥对数据进行加密然后存到Enclave外面。下次启动时Enclave重新推导出密钥解密数据。这个密钥的推导和CPU的硬件密钥以及Enclave的度量值绑定所以即使别人拿到了加密后的数据没有对应的Enclave也解不开。密封有两种策略按MRENCLAVE密封和按MRSIGNER密封。前者要求Enclave的代码完全一致才能解密适合对代码完整性要求极高的场景。后者只要求签名者相同允许Enclave升级适合需要迭代更新的产品。选哪种取决于你的业务需求但要注意按MRENCLAVE密封的话改一行代码都会导致旧数据解不开这个坑我在早期项目里踩过数据迁移成本很高。4. 实际落地时的性能与安全权衡4.1 Enclave切换的开销每次从普通世界进入Enclave或者从Enclave退出都有固定的开销。这个开销包括保存和恢复寄存器状态、刷新缓存、以及执行一系列安全检查。根据我的实测一次Enclave切换大概在几千个时钟周期量级具体取决于CPU型号和微码版本。这个开销单独看不大但如果你的逻辑需要频繁进出Enclave累积起来就很可观。我见过一个实现把每次数据库查询都放在Enclave里做结果QPS直接掉了一个数量级。后来改成批量处理把多次查询合并成一次Enclave调用性能才回到可接受范围。设计原则很简单把Enclave调用次数降到最低每次调用处理尽可能多的数据。这跟做系统调用优化的思路是一样的只不过Enclave切换的开销比系统调用还大。4.2 内存限制与页交换SGX的Enclave内存上限受CPU支持的EPCEnclave Page Cache大小限制。早期CPU的EPC只有128MB后来逐步提升但相比普通内存还是小得多。当Enclave使用的内存超过EPC容量时硬件会把一些页面换出到普通内存这个过程叫做EWBEviction。换出的页面是加密的但换入换出本身有性能开销。这个限制在实际项目里经常成为瓶颈。比如你要在Enclave里加载一个大的模型文件或者处理一个大的数据集很容易就超过EPC容量。应对策略有几个一是把数据分片处理每次只加载一部分二是把不敏感的数据放在Enclave外面只把核心逻辑放进去三是用SGX的动态内存管理接口手动控制页面的换入换出。注意EPC容量是硬件规格不同代际的CPU差异很大。做方案设计前务必确认目标部署环境的CPU型号和支持的EPC大小。4.3 侧信道攻击的应对SGX的威胁模型里侧信道攻击是一个绕不开的话题。因为Enclave和普通代码共享CPU的微架构资源攻击者可以通过缓存时序、分支预测、页表访问模式等侧信道推断Enclave内部的信息。Spectre、Meltdown之后这类攻击的关注度更高了。Intel的应对策略包括微码更新、软件缓解措施、以及在SGX SDK里提供常量时间编程的指导。但说实话完全消除侧信道风险是很难的这是一个持续对抗的过程。在实际项目里我的建议是第一敏感数据的访问模式尽量做到与输入无关避免数据依赖的分支和内存访问第二关注Intel的安全公告及时更新微码和SDK第三对安全性要求极高的场景考虑结合其他技术做纵深防御。4.4 开发体验的坑SGX的开发体验和普通应用开发差别很大。你不能在Enclave里调用任意的系统调用不能用标准的C库函数不能直接做IO。Enclave里的代码必须是“自包含”的所有依赖要么静态链接进去要么通过ECALL/OCALL机制和外部通信。ECALL是从外部调用Enclave函数OCALL是从Enclave内部调用外部函数。OCALL的使用要特别小心因为它会退出Enclave退出期间Enclave的状态可能被外部修改。我见过一个bug就是在OCALL之后没有重新验证输入导致Enclave被注入恶意数据。调试也是个大问题。Enclave内部不能直接用gdb需要用Intel提供的调试工具而且调试版本和发布版本的行为可能不一致。我的经验是尽量把逻辑写得简单把能在外面做的验证和测试都在外面做Enclave里只保留最核心的敏感逻辑。5. 典型应用场景与选型建议5.1 隐私计算与联合建模这是目前SGX最热的应用方向之一。多个参与方想联合训练一个模型但各自的数据不能出域。用SGX可以把训练逻辑放进Enclave各方把加密后的数据传进来Enclave解密、计算、输出结果。操作系统和云厂商只能看到密文和加密后的模型参数。这个场景里远程认证是关键。每个参与方都需要验证Enclave里跑的确实是一致的、经过审计的训练代码。认证通过后才愿意把数据密钥交给Enclave。整个流程的设计要保证数据密钥只在Enclave内解密训练过程中的中间结果不出Enclave最终模型可以按约定输出。实际落地时性能是最大的挑战。联合建模的数据量通常很大Enclave的内存限制和切换开销都会成为瓶颈。常见的优化手段包括用GPU做加速但GPU和SGX的配合还在演进中、把非敏感的计算移出Enclave、以及设计更高效的认证协议。5.2 密钥管理与密码学操作SGX很适合做密钥管理。把根密钥存在Enclave里所有加解密操作都在Enclave内完成外部只能拿到密文。这样即使服务器被攻破攻击者也拿不到根密钥。这个场景对性能的要求相对可控因为密钥操作本身不涉及大量数据。但要注意密钥的生命周期管理密钥怎么生成、怎么备份、怎么轮换、怎么销毁。密封存储可以用来做密钥的持久化但密封密钥和CPU绑定如果CPU坏了数据就解不开了。生产环境需要考虑多机备份或者密钥托管方案。5.3 数字版权保护内容提供商可以用SGX来保护解密密钥和播放逻辑。解密和渲染在Enclave内完成外部只能拿到渲染后的帧。这个方案比纯软件方案强但也不是绝对安全——侧信道攻击仍然可能泄露信息而且如果攻击者能控制显示链路还是能截取到最终画面。这个场景的选型要务实SGX能提高攻击成本但不能做到绝对防护。如果版权内容的价值足够高攻击者可能会投入资源做物理攻击或者侧信道分析。方案设计时要评估投入产出比。5.4 什么时候不该用SGX说了这么多SGX的好处也得说说它不适合的场景。第一如果你的信任模型里操作系统是可信的那SGX带来的复杂度可能不值得。第二如果你的计算逻辑需要频繁IO或者大量系统调用SGX的改造成本会很高。第三如果你的部署环境CPU不支持SGX或者EPC容量太小那可能得考虑其他方案。第四如果侧信道攻击在你的威胁模型里优先级很高SGX可能不是最优解。选型这件事没有银弹关键是搞清楚你的信任假设、性能要求、改造成本和威胁模型然后做权衡。6. 入门路径与后续学习方向如果你看到这里对SGX产生了兴趣想动手试试我的建议是从Intel官方的SGX SDK入手。Linux上有开源的SDK和示例代码Windows上也有对应的版本。先跑通一个Hello World级别的Enclave理解ECALL/OCALL的流程然后再逐步深入认证、密封、远程认证这些高级特性。硬件方面不是所有CPU都支持SGX。购买或租用机器前确认CPU型号是否在Intel的支持列表里BIOS里SGX选项是否开启。有些云厂商提供了支持SGX的实例类型但价格通常比普通实例高而且可用区可能有限制。学习路径上我建议按这个顺序先理解威胁模型和信任边界再学Enclave的生命周期和基本指令然后动手写简单的Enclave程序接着研究认证和密封机制最后再考虑性能优化和侧信道防护。每一步都要结合实际代码去验证光看文档很容易似懂非懂。后续这个系列我会继续写具体的开发环境搭建、第一个Enclave程序的编写、远程认证的完整流程、以及性能调优的实战经验。如果你在入门过程中遇到什么问题或者有特定的场景想讨论欢迎交流。SGX这个技术栈的学习曲线确实陡但一旦理解了它的设计哲学很多看似复杂的概念都会变得顺理成章。

相关新闻

基于 GPU 算力集群利用率的反向限流:防止私有化推理卡池进入热崩溃

基于 GPU 算力集群利用率的反向限流:防止私有化推理卡池进入热崩溃

大模型私有化部署在各行各业落地过程中,绝大多数架构师在传统微服务中积累的限流经验都会彻底失效。传统的 API 网关限流通常基于固定的 QPS 或并发连接数,比如给某个接口配置 200 QPS 的令牌桶。但这套逻辑放在大模型推理集群上几乎等于自杀。 在 LLM 推…

2026/10/15 14:30:40 阅读更多 →
【Bug已解决】Pytorch What‘s the difference between define layer in __init__() and directly use in… 解决方案

【Bug已解决】Pytorch What‘s the difference between define layer in __init__() and directly use in… 解决方案

【Bug已解决】Pytorch Whats the difference between define layer in init() and directly use in forward()? 解决方案 问题描述 在 PyTorch 中定义神经网络模型时,许多初学者(尤其是从 Keras/TensorFlow 迁移过来的开发者)经常会混淆两种…

2026/10/15 14:30:40 阅读更多 →
面向教学的数字摄影测量工作站:让相对定向、核线与DEM生成都看得见

面向教学的数字摄影测量工作站:让相对定向、核线与DEM生成都看得见

简介:E-FOTO 是一个面向教学的数字摄影测量工作站项目,采用免费开源方式提供软件与学习材料,旨在帮助学生理解摄影测量原理。这份 DOC 文档围绕项目理念、主要模块与开发进展展开,属于典型的教学/技术资料。文档共1个文件&#xf…

2026/10/15 14:30:40 阅读更多 →

最新新闻

Python数据分析实战:从工具链到工程化实践

Python数据分析实战:从工具链到工程化实践

1. 项目概述:为什么Python是数据分析师的首选工具十年前我刚入行数据分析时,主流工具还是Excel和SPSS。直到2015年第一次用Python处理百万行销售数据,5分钟完成同事需要通宵操作的报表,才真正体会到"工欲善其事必先利其器&qu…

2026/10/15 15:20:03 阅读更多 →
Kotlin语言基础与Android开发实践指南

Kotlin语言基础与Android开发实践指南

1. Kotlin语言概述与开发环境搭建作为一名从Java转向Kotlin的Android开发者,第一次接触Kotlin时就被它的简洁性惊艳到了。Kotlin是JetBrains公司2011年推出的静态类型编程语言,2017年被Google官方宣布为Android开发一级语言。与Java相比,Kotl…

2026/10/15 15:20:03 阅读更多 →
3天18小时无人值守:dzhng/skills 驱动 Codex 自主运行的完整案例复盘

3天18小时无人值守:dzhng/skills 驱动 Codex 自主运行的完整案例复盘

【免费下载链接】skills Reusable AI agent skills for software factories: explore ideas, write specs, implement, review, and run autonomous research. Works with Claude Code, Codex, and other skill-compatible agents. 项目地址: https://gitcode.com/g…

2026/10/15 15:20:03 阅读更多 →
EVEngine v0.5.0 重构:从游戏运行时转向可组合创作平台

EVEngine v0.5.0 重构:从游戏运行时转向可组合创作平台

说实话,在把 v0.5.0 的发布说明发出去之前,我纠结了很久。如果只写"修复了若干个 bug、新增某某模块",那完全体现不了这一版的真实分量;可要是一上来就聊架构、聊生态、聊理念,又怕把实际用户吓跑。几轮讨论…

2026/10/15 15:20:03 阅读更多 →
基于mongoose实现多线程HTTP Server:多核并发与性能调优实战

基于mongoose实现多线程HTTP Server:多核并发与性能调优实战

简介:本资源面向嵌入式开发与C/C后端学习者,提供一份基于mongoose库实现多线程HTTP服务器的完整工程源码,帮助理解轻量级Web服务器在高并发场景下的线程池设计、线程同步与请求分发机制。压缩包共11个文件,约221KB,以c…

2026/10/15 15:20:03 阅读更多 →
OpenTelemetry Instrumentation for VoyageAI:为 Embedding 与 Rerank 调用接入可观测性

OpenTelemetry Instrumentation for VoyageAI:为 Embedding 与 Rerank 调用接入可观测性

LLMOps可观测性 【免费下载链接】openllmetry Open-source observability for your GenAI or LLM application, based on OpenTelemetry 项目地址: https://gitcode.com/gh_mirrors/op/openllmetry 点击查看 免费下载 这篇技术指南以 openllmetry 仓库中的 opentel…

2026/10/15 15:19:02 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →