AI工程师技能图谱:从理论到工程实践

1. 从一份开源技能清单说起

这几年AI行业的热度一直没降过,但有个现象很有意思:明明大模型相关的开源项目、论文、工具多到看不过来,真正能把这些东西串成体系的人却少之又少。大多数人今天学一个模型结构,明天刷一个框架API,后天又去追一个评测榜单,学到最后感觉什么都碰过,上手做项目时依然心里没底。GitHub上那份引发过不少讨论的skills技能清单之所以能火,恰恰是因为它做了一件很多人忽略了的事:把一位顶级AI工程师脑子里的能力地图,以公开笔记的形式摊开在你面前。今天我就以这份清单为引子,结合我自己多年做深度学习项目、带算法团队、从零搭训练管线的实际经历,聊聊一个真正能打的AI工程师到底需要具备哪些能力,以及这些能力该怎么有序养成。

要理解这份清单的价值,首先要明确它的定位。它不只是一个知识点列表,更像是一份“能力体检表”——列出的每一项背后,都对应着实际项目中会被反复考验的关键动作。比如“训练一个模型并让它稳定收敛”这件事,就至少牵扯到数据预处理、梯度分析、超参数调试、分布式训练配置等多层能力。清单存在的意义,是帮你看清自己在哪个环节有短板,以及下一个阶段该往哪个方向发力。无论你是刚入行的算法新人,还是已经带项目的技术负责人,都可以从里面找到对自己有用的部分。

2. 技能图谱的整体设计与拆解逻辑

2.1 为什么按“深度、系统、工程”三个维度划分

很多人看到这类技能清单的第一反应是:东西好多,从哪下手?其实仔细看就能发现,它内部的编排是有清晰逻辑的。第一层是最核心的深度学习理论,包括神经网络基础、反向传播、常见模型结构的演变脉络;第二层是系统视角,包括GPU工作原理、内存带宽、分布式训练的数据并行与模型并行;第三层是工程落地,包括训练流程的标准化、实验管理、模型服务的部署与监控。这三层不是割裂的,而是像盖房子一样逐层往上走。

拿我自己的经验举个例子。早年间我做一个图像分类项目,模型结构是现成的,数据也整理得不错,但训练速度就是上不去。一开始我以为是代码写得不够高效,后来把GPU利用率一测,发现显存带宽根本没吃满,数据加载管线在CPU端卡了脖子。这才意识到,光懂模型结构是不够的,你得理解数据是怎么从磁盘流到显存的,每一步的瓶颈在哪里。这个经历让我彻底认同了“系统视角”的必要性——很多问题不是模型的问题,而是整个数据链路的问题。

2.2 清单背后隐含的“主次关系”

另一个值得注意的点是,这份清单对“经典”和“前沿”的处理方式。它没有把Transformer、扩散模型、LoRA这些热门概念堆在最前面,而是把基础能力放在更靠前的位置。这其实是一个很重要的信号:基础不牢,追新就是空中楼阁。我在面试算法工程师时经常遇到一个现象,候选人能熟练说出ChatGPT的RLHF流程,但让他手写一个简单的CNN前向传播,或者在纸上推一下梯度回传的链式法则,反而会卡壳。这不能说明他能力不行,但至少说明他的知识结构是“头重脚轻”的。

真正稳妥的成长路径,应该是一个“正三角形”结构:底部的经典理论足够宽厚,上部的热点技术才会有支撑。否则就会出现“什么热门追什么,最后什么都没真正掌握”的悬浮状态。所以我一直建议新人做减法,先确保自己能独立完成一个完整的、非demo级的深度学习项目,再去谈追逐前沿。

3. 核心能力模块逐一拆解

3.1 深度学习理论基础:不只是会调接口

理论部分要掌握的核心,是能“从第一性原理出发理解模型为什么有效”,而不是停留在“调用某个现成接口”的层面。这里面有几个关键的知识锚点:

第一,反向传播的数学直觉。你不需要每次都在纸上推导矩阵求导,但必须清楚梯度在每一层是怎么流动的,为什么会出现梯度消失或梯度爆炸,残差连接为什么能缓解这类问题。这些基本素养决定了一个工程师在模型不收敛时,是开始瞎猜超参数,还是能顺着计算图一步步定位问题源头。

第二,常见模型结构的演化脉络。从CNN到RNN到Attention再到Transformer,每一代结构解决了什么问题,又引入了什么新问题。比如CNN的归纳偏置是“局部性”和“平移不变性”,所以适合处理图像;Transformer用全局注意力换来了更强的建模能力,但代价是计算复杂度高、训练需要更大数据。理解这些演化逻辑,可以帮助你在面对一个新任务时更合理地选择起点模型,而不是盲从所谓的SOTA。

第三,训练目标与损失函数的设计。我在实际项目里踩过不少次loss设计的坑。最典型的是一次语义分割任务,我直接套用了交叉熵损失,结果发现小目标的召回率低得可怜。后来改成带focal loss的版本,并针对性地调整了类别权重,效果立刻好了很多。这个经历告诉我:一个合格的算法工程师,不能只会把loss函数从文档里拷出来,还要理解不同损失函数对梯度分布的调节作用。

3.2 系统能力:从单卡训练到分布式调度

这一块是很多算法工程师最怵的部分,但也是拉开水平差距的关键。它包含的知识点很杂:GPU的硬件架构(SM、显存带宽、内核启动开销)、CPU与GPU之间的数据搬运、多卡训练时的通信开销、混合精度训练的数值范围问题、梯度累积与梯度同步的区别等等。

我拆成几个层面来讲。

首先是单机单卡的“瓶颈分析”。一个训练步骤的耗时,可以分解为数据加载耗时、CPU预处理耗时、GPU前向反向耗时、参数更新耗时。你如果在训练日志里发现GPU利用率长期低于70%,大概率不是模型太轻,而是数据管线和计算管线没有重叠好。解决办法通常是启用DataLoader的多进程预取、使用内存映射文件、把部分预处理挪到GPU上做。这些细节用一句话概括,就是“让数据永远提前等在显存门口”。

其次是多卡训练的“通信模式”。数据并行是最常见的方案,但它有个隐含瓶颈:每个step结束,所有卡要同步梯度,通信量随模型尺寸线性增长。这时候就要考虑梯度压缩、梯度累积、甚至切换到模型并行或流水线并行。我曾经在训练一个十几亿参数的语言模型时,发现在40G显存的卡上如果直接跑数据并行,显存根本放不下,于是必须拆分模型层到多张卡上,同时设计好各卡之间的通信顺序,避免出现一路卡在等待另一路的情况。

最后是混合精度与分布式训练的稳定性。很多人用AMP(自动混合精度)的时候,会遇到loss突然变成NaN的情况。这通常不是模型代码写错了,而是fp16的表示范围有限,梯度在累加过程中溢出了。常见的处理手段是:开动态loss scaling、对大梯度做截断、把部分敏感算子强制保持在fp32。这些经验在分布式环境里会更加重要,因为多卡间一旦有某张卡出现数值异常,整个训练都会受到牵连。

3.3 工程能力:实验管理、评测与部署闭环

工程能力可以说是“让算法真的能用起来”的最后一公里。它包含的工具链很丰富,但归根结底解决的是三个问题:实验可复现、效果可衡量、服务可上线。

实验管理是我特别想强调的一点。很多新手做实验是这样的:改一行代码,跑一下,看个loss曲线,然后继续改下一行。一两天下来,代码改了十几版,却记不清哪一版产生了当前这个结果,更说不出为什么这个结果比之前好。我现在的做法是:每个实验都有独立的配置文件和日志目录,训练结束后自动记录环境版本、超参数组合、最终指标。这样过了一个月再回头看,依然能快速定位到“当时效果最好的是哪组配置”。对于想要系统化提升的人来说,这是个成本极低但收益极高的习惯。

评测体系设计也常常被低估。我见过不少项目,训练指标很好看,一到真实场景就崩,典型的例子是离线指标用准确率,但线上用户核心关注的是延迟和兜底回复率。一个严谨的做法是:在项目早期就定义好几套评测集,分别覆盖通用场景、边界场景、对抗样本场景,并把离线评测和线上指标关联起来做追踪。这样才能避免“练得好、打得差”的窘境。

部署环节同样容易翻车。模型训练用的是浮点权重,但上线时为了提速往往会做量化、剪枝、蒸馏。每一步都会带来精度损失,所以要对各环节的单点损失做量化分析,并且保留一个可回滚的基线版本。我在一次NLP服务上线时就吃过这个亏——量化后指标掉了一个多点,但因为线上流量已经在切,排查了整整一个下午,最后发现是某种特定长度的输入在量化后表现异常。后来我养成了一个习惯:量化评估时专门准备一份“长尾样本集”,覆盖分数位极端的输入分布。

4. 实操过程与学习路线落地

4.1 从零到一:按“项目驱动”倒推技能清单

如果说前面是技能地图的“拆解”,那这一部分就是它的“装配顺序”。我给那些刚入行、或者说已经入行但觉得成长缓慢的同行一个建议:不要按知识点去学,而要按项目去学。知识点的学习是散的,而项目会逼着你把散点串联起来。

举个例子,如果你想提升分布式训练能力,与其去读一堆分布式系统论文,不如给自己定一个具体目标:在一台8卡机器上,把一个ResNet-50模型的训练吞吐从1000张/秒优化到3000张/秒。这个目标一立,你自然会被迫去学习数据加载的瓶颈在哪、通信和计算怎么重叠、混合精度怎么配置。整个过程中每一个“被迫”都对应着一次实实在在的技能提升。项目带来的反馈回路是任何教程都给不了的。

我自己早期做深度学习时,就是这样一步步被“逼”过来的。当时我接了一个目标检测的项目,数据集是视频流抽帧,一个epoch要处理几十万张图。最初的训练速度慢到无法忍受,我花了一周时间做性能剖析和管线重构,那周学到的东西,比后来三个月看博客学到的都多。因为知识一旦和具体的痛点绑定,记忆和理解深度是截然不同的。

4.2 工具链选型:实用主义优先

不少人在搭建自己的技术栈时会陷入“选择困难症”,今天看这个框架火,明天又听那个工具链高效。我的建议是:以团队协作和长期维护为第一优先级。

以深度学习框架为例,核心选择就集中在那么两三个主流选项之间。你需要考察的不是“谁在某些benchmark上更快”,而是“谁的生态更全、排错资料更多、团队里多数人更熟”。模型的训练部分可能只占项目三分之一的时间,剩下的时间花在数据标注工具、实验管理平台、模型仓库、部署管道上。这些周边工具的共同点是要能够方便地集成进CI/CD流程,否则团队协作时会出现大量返工。

我这一年多用得比较顺手的组合是:PyTorch做模型训练,配合一套实验管理工具做超参数与指标追踪;数据预处理用独立的脚本模块,保证数据管线和训练逻辑解耦;部署侧优先考虑ONNX导出和TensorRT加速,遇到特殊算子再手写扩展。这套组合不一定适合所有人,但它体现了一个原则——尽量用标准化的、生态完善的组件,把精力集中在建模本身。

4.3 时间投入与能力进阶节奏

很多人问过一个类似的问题:学完这些技能到底需要多久?我的回答是:如果每天有2小时以上的有效学习时间,一年左右可以形成比较完整的体系。注意这里说的是“有效学习”,不是看视频时顺手刷手机的那种。

我建议把整个进阶过程分成三段来规划。第一个阶段(约前3个月)聚焦基础:手推反向传播,从零实现一个简单的CNN,独立完成一次训练和推理闭环。第二个阶段(3到9个月)聚焦工程:试着把自己训练好的模型封装成可供他人调用的服务,给模型加监控、加指标、做A/B测试。第三个阶段(9到12个月)聚焦系统:接触分布式训练、混合精度、大规模数据管道,找一个中型规模的项目做端到端的性能优化实践。走完这三步,你基本上已经具备独立负责一个算法模块或者一个核心系统组件的能力了。

我用这个节奏带过不少人,实际的感受是:第二阶段是最容易放弃的阶段,因为它需要同时面对算法、代码、部署、运维多方面的琐碎问题,成就感又没有第一阶段那么强。但恰恰是这一阶段打下的工程底子,决定了未来面对的项目的规模上限。

5. 常见问题与排查技巧实录

5.1 问题一:模型训练不收敛,应该从哪里开始查

这是一个高频问题。我处理这类问题的顺序是固定的:先看训练曲线,判断是loss根本降不下去,还是震荡得厉害;再检查数据流,确认数据和标签的对应关系没错;接着用一小批数据做overfit测试,让模型在几个batch上强制记忆,确认代码计算图没有bug;最后才去怀疑超参数。这个排查顺序能避免90%的无效调参。

如果模型在训练集上连小批量都无法拟合,那问题基本出在实现细节上,比如数据归一化错误、标签顺序错位、学习率设置过高或过低。我见过不少人一上来就调学习率scheduler,折腾半天才发现是某个数据增强模块没关,导致训练集和验证集的分布都变了。这种低级问题其实很常见,所以先做数据校验永远是第一步。

5.2 问题二:多卡训练速度不升反降

这种情况往往是通信开销占据了主导。可以先用性能剖析工具看看各阶段的时间占比,如果通信占比超过30%,就要考虑优化方向了。常见的优化手段包括:调大batch size来摊薄通信频率、使用梯度累积模拟更大的batch、或者换成通信量更小的并行策略。另外,网卡带宽和交换机拓扑也会在高性能场景中成为硬瓶颈,这一点在自建机房时尤其要提前测好。

另一个被很多人忽略的点是:多卡训练时每张卡的输入数据要尽量独立,避免频繁从共享存储读取同一批文件。我在实际项目中就遇到过,因为数据文件全部放在一个共享文件系统上,8张卡同时读数据时直接打满了存储的IO带宽,训练速度反而不如单卡。后来把每个worker的数据预先切成独立分片,并放在本地NVMe盘上,速度立刻翻了近三倍。

5.3 问题三:模型上线后效果与离线评测差异大

这是最“玄学”也最让人头疼的问题之一。多数情况下,根因在于离线评测与线上数据分布不一致。比如训练集做了数据增强,但部署环境中没有对应的增强逻辑;或者训练和推理时的文本预处理方式不同,导致同一个输入得到不同的tokenize结果。

我的建议是:从数据侧入手,在项目准备阶段就构造一个“线上模拟集”,尽量模拟真实请求的分布,包括长度分布、关键词分布、噪声比例等。每次上线前,先在模拟集上跑一版全量评测,再决定是否放量。在服务侧,要保证训练管线与推理管线共用一套预处理代码,杜绝“训练有一套实现、推理又写了一套”的情况。

5.4 实操心得速查表

高频问题常规表现快速排查方向
Loss不降训练曲线平直检查标签是否错位、模型是否过小、学习率是否过低
Loss突变为NaN训练中断检查AMP的loss scaling设置、有无除零或log0情况
GPU利用率低训练吞吐低检查数据加载管线、磁盘IO、CPU预处理耗时
多卡加速比差8卡跑不出4倍查看通信耗时占比,调大batch size或改为模型并行
离线好线上差指标全面下跌对比训练与推理预处理逻辑,构造线上模拟集复测

这个表格是我平时排查问题时的“肌肉记忆”,遇到现象时先对号入座,能少走很多弯路。

6. 我的个人体会与扩展思考

6.1 技能树的本质是“知道自己在哪个阶段”

做了这么多年AI技术工作,我愈发觉得,技能清单本身只是地图的一部分,更重要的是你对“自己当前处于地图的哪一区域”有足够清醒的认知。很多人学技能像是在收集徽章——今天搞定一个BERT变体,明天换一个扩散模型的新实现,看着很热闹,但真要独立负责模块时却撑不起来。

与其追求“我知道的技术很多”,不如追求“我能独立打通一条完整链路”。把数据、模型、训练、评估、部署、迭代这一整条链路亲手走通两三遍,你的工程判断力和自信心会完全不一样。这也是我在招聘时最看重的潜质之一:不是某个模型的精度有多高,而是这个人能不能把一个模糊问题变成一个清晰方案,再稳稳当当地拆解执行下去。

6.2 后续的扩展方向:从个体技能到团队能力

这份清单目前更多地是从“个体能力”出发的。但当你走向技术管理岗位,你会发现“团队技能矩阵”是另一个值得提前建设的维度。比如团队里谁适合做理论突破,谁擅长系统优化,谁又能把服务和产品衔接做得滴水不漏,这正是个体技能在团队层面的延伸与互补。

我最后想分享的一个小技巧来自我的个人经历:每隔半年,我会把团队中每个人对技能清单上各条目的自评分数收集起来,合并成一张热力矩阵。它不是考核工具,而是一份“能力体检报告”,用来发现当前最欠缺、最需要补强的能力区域。这个方法不复杂,但坚持下来,对团队的学习方向和资源分配非常有帮助。

说到底,技能图谱的意义不在于让你把每一项都打满勾,而是帮你在这个信息过载的行业里,始终保有一条清晰的成长主线。主线立住了,节奏就不会乱。

相关新闻

AI批量汉化图文说明书:从OCR到机器翻译的跨境售后降本实践

AI批量汉化图文说明书:从OCR到机器翻译的跨境售后降本实践

接手某跨境小家电项目的售后周报时,我对着退货数据愣了很久。退货率在 8% 上下徘徊,真正能被归类为“质量故障”的订单还不到三分之一,剩下的一长串原因描述几乎都能浓缩成同一句话:不会用,看不懂,装不上。…

2026/10/20 20:45:34 阅读更多 →
从零实现Transformer:自注意力机制与工程实践详解

从零实现Transformer:自注意力机制与工程实践详解

1. 从零理解Transformer:为什么它成了深度学习的默认底座如果你最近两年翻过任何一篇大模型相关的技术文章,几乎不可能绕开Transformer这个词。它最早出现在一篇讨论序列到序列建模的论文里,当时的目标很单纯——把机器翻译做得更好。但谁也没…

2026/10/20 20:45:34 阅读更多 →
AutoCAD图层颜色线型协同设计原理与工程实践

AutoCAD图层颜色线型协同设计原理与工程实践

1. 图层不是“分文件夹”,而是设计逻辑的底层操作系统很多人刚接触AutoCAD时,会把图层简单理解成“给不同内容分个文件夹”——比如把墙画在“墙体层”,门窗放在“门窗层”,标注塞进“标注层”。这种理解看似合理,实则…

2026/10/20 20:45:34 阅读更多 →

最新新闻

技能习得底层逻辑:从知识到肌肉记忆的刻意练习路径

技能习得底层逻辑:从知识到肌肉记忆的刻意练习路径

1. 从“skills”这个标题说起:一个被严重低估的硬核话题“skills”这个词,单独拎出来看,信息量几乎为零。它不像“分布式锁”“图像分割”“家庭收纳”那样自带场景,也不像“副业”“跳槽”那样自带情绪。但恰恰是这种极简的标题&…

2026/10/20 21:27:39 阅读更多 →
GPT-4o权重存档:为何模型参数比API更关键

GPT-4o权重存档:为何模型参数比API更关键

1. 一场没有官方通告的“退役”:GPT-4o权重开放请愿背后的现实逻辑“GPT-4o退役8个月”这个说法,乍看像一则突发新闻,实则是一次社区自发形成的集体认知校准。它并非来自任何技术公告或产品日志,而是开发者、研究者与开源实践者在…

2026/10/20 21:27:39 阅读更多 →
Kafka NoBrokersAvailable异常排查实战指南

Kafka NoBrokersAvailable异常排查实战指南

kafka.errors.NoBrokersAvailable: NoBrokersAvailable这个异常,只要是写过 Python Kafka 客户端的人,联调和上云阶段大概率都撞见过。我第一次遇到它是在一个数据同步任务里,消费者刚启动日志就刷出这个异常,看起来像整个集群挂了…

2026/10/20 21:27:39 阅读更多 →
UNet图像分割实战:数据管道、损失设计与工业级部署

UNet图像分割实战:数据管道、损失设计与工业级部署

简介:本资源是一份面向Python图像处理初学者与深度学习入门者的U-Net图像分割实践项目,聚焦生物医学、遥感及卫星影像等场景下的像素级分割任务。资源提供完整可运行代码框架与配套示例数据,涵盖数据预处理、模型构建(含跳跃连接与…

2026/10/20 21:27:39 阅读更多 →
从零搭建个人技能管理系统:结构化数据模型与实操流程

从零搭建个人技能管理系统:结构化数据模型与实操流程

1. 当“skills”不再是一个空壳:从零搭建个人技能管理系统的底层逻辑“skills”这个词,单独拎出来看,信息量几乎为零。它可以是简历上罗列的一串名词,可以是招聘JD里反复出现的硬性要求,也可以是某个技术社区里被反复讨…

2026/10/20 21:27:39 阅读更多 →
从函数到能力封装:构建可复用、可编排的skills技能系统

从函数到能力封装:构建可复用、可编排的skills技能系统

1. 当“skills”成为一个项目标题:我看到的不是技能清单,而是一套能力封装系统第一次看到“skills”这个标题时,我脑子里冒出来的不是“技能列表”四个字,而是一个更具体的画面:一个可以被反复调用、组合、扩展的能力单…

2026/10/20 21:26:35 阅读更多 →

日新闻

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实现详解

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →