智能体融合巡检机器人决策系统:架构、实现与调优实战

搞巡检机器人的朋友应该都有同感:真正难的不是让机器人动起来,而是让它知道“接下来该干什么、该信谁、该先处理哪件事”。前几年大家普遍用规则引擎和状态机来搭决策系统,我也这么干过,效果嘛——常规场景没问题,一旦现场出现偏一点的情况,比如仪表读数异常但没超阈值、设备外观变化很小但可能就是故障前兆,规则就傻了。后来我把智能体技术逐步融合进这套决策系统,让机器人具备现场语义理解和多步任务规划能力,整个决策链路才算真正灵活起来。这篇文章,我围绕“智能体技术如何更深度地融入巡检机器人的决策系统”这个方向,把实操验证过的架构设计、模块实现、部署调优和经验教训整理出来,给正在搞机器人智能化改造的团队一个可参考的样本。

1. 项目背景:巡检机器人决策系统的真实瓶颈

1.1 传统决策系统的天花板在哪里

巡检机器人的决策系统,早期基本都是“感知—规则匹配—动作执行”的套路。传感器数据进来,和预设阈值比对,满足条件就触发对应动作。比如温度超过某个值就报警、巡检点位到了就拍照存档。再复杂一点,用有限状态机把机器人行为拆成“待命”“巡检中”“发现异常”“返回充电”等状态,按条件跳转。这种系统的优点是确定、可预期、容易排查问题,只要规则覆盖得到位,常规巡检稳定性很高。

但问题也出在“覆盖到位”这四个字上。现场环境的变数远比我们想象的要多:油污遮挡了仪表盘、临时堆放的物料挡住了阀门、设备发出异响但所有传感器读数都正常、同一个表计在不同光照下读数偏差大……这些长尾情况,规则很难提前枚举。运维老师傅到现场,扫一眼、听一下、翻翻历史数据,基本就有判断了,这种基于经验和多模态信息的推理,恰恰是传统规则系统最不擅长的地方。

我遇到过最典型的例子:某化工厂区要求机器人每日巡检数十个点位,其中一部分仪表被油污遮住。规则引擎的判断逻辑是“检测不到读数就按超限处理”,结果一晚上连续误报十几次。现场人员后来被迫把规则改成“检测不到就先跳过”,又导致真正漏油的设备没被发现。传统决策系统本质上是在“已知的已知”里做匹配,对“已知的未知”和“未知的未知”几乎没有应对能力。

1.2 深度融合不是“接入一个大模型”

很多团队一听到智能体融合,第一反应是给机器人加一个大模型接口,让运维人员问一句“现场什么情况”,模型回答一段话。这不是融合,这是外挂。

我理解的“深度融合”,是把智能体嵌入决策链路的关键位置,让它直接参与感知理解、任务规划、异常决策和人机协同。具体拆开来看,至少包括四个层面:感知理解层要把摄像头画面、激光雷达点云、红外热像、气体浓度等多模态数据统一转化为结构化语义信息;任务决策层要根据巡检目标、现场状态和历史记录,动态规划下一步动作和优先级;行为反馈层要能把决策结果安全地下发给运动控制、云台、机械臂等执行机构;记忆学习层则要沉淀每次巡检的经验,让系统越用越准。

只有这四个层面真正打通,智能体才算是“长”在决策系统里,而不是挂在旁边。这也是我在后续所有架构设计里反复强调的核心原则。

2. 体系架构设计:智能体如何嵌入决策链路

2.1 分层混合架构:控制闭环与智能规划分离

我最终采用并验证可行的方案,是一个“实时控制层+任务规划层+监控协同层”的分层混合架构。核心思路是:把毫秒级的运动控制、避障、云台闭环调度放在底层,用确定性算法保证稳定和安全;把理解、规划、异常处置放在中间层,由智能体负责;再往上是监控协同层,处理最复杂、需要远程介入的情况。

实时控制层不引入任何大模型推理,完全依赖传统控制算法。这样设计的理由很直接:避障一类的逻辑,连续两帧点云数据之间只有几十毫秒的处理窗口,大模型推理哪怕跑到了亚秒级也可能误事;而任务规划层面对的决策节奏本身是秒级的,智能体刚好适应。两层之间通过明确的指令接口沟通:任务规划层输出“去哪个点位、到了之后执行什么动作、什么条件下切换到下一个任务”,实时控制层负责把这些意图变成平滑的运动轨迹和可靠的执行动作。

监控协同层则是为智能体自身搞不定的场景准备的。比如现场出现从未见过的泄露形态,任务规划层会生成结构化的事件描述、附带图像摘要,推送给远程坐席人员;人员确认后再下发处置指令。这样既不要求模型全知全能,也保留了人在回路的冗余。

2.2 智能体决策模块的数据流设计

智能体想做好决策,输入必须“对口”。我调试下来,系统给智能体的输入主要包括三类:结构化感知数据、任务上下文、工具接口清单。

结构化感知数据包含视觉检测结果、仪表读数、环境参数等。比如摄像头画面经过检测模型后输出的是“表计位置、读数、是否有遮挡、是否变色”这类结构化信息,再拼成文本供大模型消费。任务上下文则是当前所在位置、当前任务目标、历史异常记录,这些决定了模型知道“自己正在干什么”。工具接口清单是一组可调用的动作函数,包括导航、拍照、读取传感器、查询历史、触发告警等。

数据流整体上是单向闭环:传感器数据先进入感知摘要模块,生成结构化现场描述;摘要连同任务上下文进入智能体推理引擎;模型输出决策意图序列,经过校验模块确认后,转换为工具调用指令;执行结果再回到系统,更新上下文,进入下一轮循环。这套数据流设计的关键好处是,模型永远不需要接触原始海量感知数据,输入长度可控、推理延迟可控、上下文也不会被无用的原始信息撑爆。

2.3 为什么不能让大模型全盘接管决策

这里要说明一个容易踩的坑。有段时间我尝试让大模型直接输出底层控制指令,比如“左转30度”“前进1米”,结果在现场测试中出现过很尴尬的一幕:模型看到某个区域点云分布有点怪,生成了“原地顺时针旋转一圈再继续”的指令,机器人照做后差点碰到旁边伸出来的设备支架。还好当时速度低、有急停兜底,不然就是一起安全事故。

这件事给我的教训很深刻:大模型的输出带有概率性,哪怕是同一个输入,多跑几次也可能得到不同结果,把它直接接到实时运动控制上,等于把安全交给了一个“有创造力的概率发生器”。所以体系架构上要强制约定:智能体只负责决定“做什么”,底层控制器负责“怎么做”。前者允许发散和灵活,后者必须确定和稳定。这也是我在所有项目里都坚持的第一原则。

3. 核心模块实现与实操要点

3.1 感知摘要模块:给智能体一份干净的现场报告

感知摘要模块是整个融合链路里最先需要落地的部分。我的实现方式是,先用轻量视觉模型对机器人主摄像头画面做实时检测,识别出当前视野内的关键设备、表计、管道、人员、异物等对象,再对每个对象做属性提取。举个例子,仪表读数识别的输出就是下面这种结构:

{ "frame_id": "cam_01_202504101032", "timestamp": "2025-04-10 10:32:15", "objects": [ { "type": "gauge", "id": "g-1043", "reading": 58.2, "unit": "bar", "status": "in_range", "obstacle": "oil_stain", "confidence": 0.94 }, { "type": "pipe", "id": "p-2201", "appearance": "normal", "leak_flag": false } ], "temperature_c": 37.6, "humidity_percent": 48 }

得到结构化检测结果之后,还要做一步关键的“文本化翻译”,把上面的JSON转成一句话,例如“巡检点3的表计g-1043读数58.2巴,在正常范围内,但表面存在油污遮挡,置信度0.94”。这一步看起来多余,但实测下来对后续推理准确率影响极大。模型在处理自然语言描述时的推理稳定性,明显高于直接处理JSON或原始图像。

实操当中有两个细节需要注意:一是检测模型的置信度阈值不要太低,我一般设置到0.85以上,太低会产生大量误检,反而误导后续决策;二是对同一对象的多帧结果要加一个“稳定判别”逻辑,连续几帧都识别到同样的异常才能写入摘要,避免单帧闪烁造成误报。

3.2 任务规划模块:用工具调用机制驱动动作序列

任务规划模块的核心是把智能体变成“会调用工具的决策器”。我用的是工具调用(function calling)机制,在推理请求里附带一份可调用函数清单,模型根据现场情况决定按什么顺序调用哪个函数。下面是一个简化的工具定义示例:

tools = [ { "name": "navigate_to", "description": "导航到指定巡检点", "parameters": {"type": "object", "properties": {"point_id": {"type": "string"}}, "required": ["point_id"]} }, { "name": "capture_image", "description": "拍摄当前视野图像并保存", "parameters": {"type": "object", "properties": {"angle": {"type": "number"}}, "required": ["angle"]} }, { "name": "check_history", "description": "查询指定设备的历史记录", "parameters": {"type": "object", "properties": {"device_id": {"type": "string"}}, "required": ["device_id"]} }, { "name": "set_alarm", "description": "上报异常并触发告警", "parameters": {"type": "object", "properties": {"level": {"type": "string"}}, "required": ["level"]} } ]

规划流程上,我建议采用“模板+动态补全”的策略:把常见的巡检任务拆成预设模板,例行巡检模板规定机器人按点位顺序完成检查,异常复核模板规定出现异常时必须先重新拍照确认、再查历史数据、再决定是否告警。智能体在模板范围内做灵活调整,而不是每次任务都从头自由发挥。这样既保留灵活性,又防止模型生成出格的动作序列。

一个典型的规划输出序列可能长这样:先调用navigate_to到达目标点,再调用capture_image获取现场画面,对画面分析后发现表计读数异常,于是调用check_history比对历史趋势,最后调用set_alarm上报。整个过程在几秒内完成,输出的每一步都有明确的工具参数,校验模块也能逐项检查合法性。

3.3 安全校验与兜底机制

智能体的输出不能直接执行,必须经过一层安全校验。我在实际系统里做了四道关卡:工具参数合法性检查要求所有输出参数必须符合预设类型和范围;动作范围过滤器负责检查坐标点、云台角度是否在机器人可达范围和安全边界内;禁区逻辑专门排除那些不允许进入的设备密集区;置信回退机制则规定当模型输出置信度低于阈值且无法确认意图时,自动转交人工复核。

兜底策略上,我特别强调要做“熔断降级”。连续N次校验失败或任务规划超时时,系统自动放弃本次智能决策,切换回保守策略——当前任务标记为待复核,机器人回到安全待命位置,等待重启或人工介入。这个机制在长时间连续运行的场景里非常重要,模型偶尔会陷入某种重复输出状态,没有熔断,整台机器人就会卡死在原地。

为了更直观,把安全兜底措施汇总如下:

兜底关卡实现方式触发条件
参数合法性检查对工具入参做类型与范围校验参数类型错误或越界
动作范围过滤坐标与角度白名单目标点越界或进入禁区
置信回退输出置信度低于阈值时转人工模型无法确认当前意图
熔断降级连续N次校验失败或超时触发保守待命策略

4. 实操落地:部署流程与参数调优

4.1 硬件环境与模型选型

先讲部署环境。我在项目中通常采用“机器人本体工控机+边缘计算盒子”的组合方案。机器人本体工控机负责实时控制和传感器数据初步处理;边缘计算盒子单独跑智能体推理服务,通过局域网接口与主控通信。这样把时延敏感的实时任务和时延容忍度较高的智能推理任务隔离开,互不抢占资源。

模型选型方面,本地部署优先考虑参数量在7B至14B左右的多模态模型,量化后可以在带独立显卡的边缘盒子上达到数秒以内的推理延迟。具体选开源模型还是商用模型,要看项目对数据隐私和延时的要求。我的建议是:先拿开源轻量模型跑通流程,再根据实际并发量决定是否需要换成商用服务。不要一上来就追求大参数模型,巡检场景的决策链路里,更重要的是控制推理延迟和输出稳定性。

部署形态主要有三种,适合不同阶段:单机本地部署适合数据敏感和网络不稳的厂区;边缘节点集中部署适合多台机器人共用一个算力中心;混合部署适合需要远程专家协同的场景。多数项目建议从第二种开始,成本和稳定性比较均衡。

4.2 提示词模板与决策流程配置

提示词设计是这个方案里最容易被低估的环节。我调试过很多版,最终沉淀了一套适合巡检场景的模板结构,包括角色设定、环境信息、任务约束、输出格式四块。下面是一个日常巡检任务的系统提示词模板示例:

你是某工业厂区的巡检决策智能体。当前机器人正在进行例行巡检。 请根据现场感知信息,按以下约束作出决策: 1. 巡检任务必须在模板框架内执行,不得改变巡检点顺序; 2. 发现异常时,先重新拍摄确认,再查询历史,最后才允许告警; 3. 所有输出必须调用可用工具完成,禁止直接生成底层运动指令; 4. 如果感知信息不足或冲突,明确输出“不确定”并请求人工确认; 5. 每次只输出下一个动作,不要一次输出多个未校验的动作。

这套模板有几个关键作用:第一,把决策自由度限制在任务框架内,防止模型“自由发挥”;第二,把异常处置流程内嵌到提示词里,让模型天然遵循“确认—查证—告警”的顺序;第三,强制模型输出动作必须是工具调用,堵住了它直接输出运动指令的路径。“不确定就说不确定”这条约束也很重要,它显著降低了模型在模糊场景下强行给出错误判断的概率。

流程配置上,我会用本地配置文件维护任务点位列表、各点位的检测项、异常等级和对应处置策略。配置文件里还会记录每个任务模板关联的工具集合,比如“表计复核任务”只开放capture_image、check_history、set_alarm三个工具,其他工具一律不开放。收窄工具集合是减少模型跑偏最有效的手段。

4.3 延迟优化与资源占用的实测记录

智能体融合最常被质疑的就是延迟。我实测过一条典型链路:摄像头画面完成检测和识别约220毫秒,结构化文本生成约30毫秒,大模型推理约800毫秒,工具调用与执行约150毫秒,整体决策周期大概在1.2秒左右。对于任务级决策来说,这个延迟完全够用,毕竟巡检机器人本身就是按秒级节奏行动的,不需要也不可能做到毫秒级响应。

为了把延迟压下来,我做了几项优化:输入裁剪,每帧只保留检测到的关键对象和属性,不保留完整标签数据;结果缓存,同一巡检点在短时间内重复经过时直接复用上次的摘要结果;量化推理,把模型权重量化到int8,速度提升明显,精度损失在可接受范围内;预热加载,部署完成后先跑一轮空任务让模型进入最佳推理状态。优化后的实测对比:

优化项优化前优化后
感知摘要平均耗时350ms250ms
模型推理平均耗时1200ms800ms
整体决策周期1.8s1.2s
边缘盒内存占用11GB8.5GB

需要提醒的是,模型推理延迟跟并发请求数强相关。我踩过的一个坑是:三台巡检机器人在同一时段集中上报异常,边缘盒子并发推理直接导致延迟翻倍,最慢的一次超过4秒。后来在服务端加了请求排队和并发限制,保证单请求延迟的稳定性,宁可让后面的任务等一等,也不要所有任务一起变慢。

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

5.1 误判与幻觉:如何让智能体少说胡话

融合后遇到最多的就是误判问题。仪表读数识别明明在正常范围,模型偏偏推理出“可能存在超压风险”;现场明明只是轻微灰尘,却被描述成“疑似泄漏”。排查下来,这类问题八成出在感知输入不完整或提示词缺乏约束上。

处理思路有三条:一是加强感知输入的完整性,确认视觉模型确实把关键对象都识别出来了,特别是遮挡、反光等干扰因素要体现在摘要中;二是在提示词里强制加入“不确定就说不确定”的约束,让模型在证据不足时承认自己不知道;三是建立历史对照机制,当模型判断出现异常时,把它和历史正常记录放在一起,让它自己判断差异是否真的异常。

5.2 指令偏离与任务中断:用状态机兜住边界

任务规划层偶尔会出现“跑偏”现象:明明在执行表计复核,模型突然要求调用某个跟当前任务完全无关的工具;或者任务进行到一半,模型自己生成了一个新的巡检计划。这类问题本质上是因为模型对“当前任务边界”的理解不够牢固。

我的经验是,在任务规划层外面再套一个轻量状态机。每个任务模板本身就定义了允许调用的工具范围和动作顺序,模型只能在当前状态允许的范围内做选择。一旦输出超出范围,校验模块直接拦截并让模型重新生成。同时,任务上下文中要反复强调“当前正在执行XX任务”,句子里明确给出任务名称和阶段编号,模型就不容易在中途走神。

5.3 多机协同与上下文隔离

项目上线到第二个月,我又踩了一个新坑:多台机器人同时接入同一个智能体服务时,出现了上下文互相污染。A机器人刚完成异常复核,B机器人的下一轮请求里竟然带上了A的现场描述。问题出在会话管理上没有按机器人隔离上下文。

解决方法是给每个机器人分配独立的session ID,所有上下文存储、历史记录、对话状态都按session隔离,互不共享。另外还要设置上下文长度上限,系统只保留最近几轮的摘要和关键结论,避免长会话导致上下文漂移。最后,我建议把所有决策输入输出都记录成结构化日志,一旦出现判断偏差,可以通过日志完整回放,定位是哪一层的输入有问题。

5.4 场景覆盖率与人工信任问题

最后想聊聊一个容易被忽略的维度:人工信任。传统规则系统被质疑得少,因为它的判断路径足够透明;但智能体系统不一样,输出是概率性的,现场人员尤其是老师傅,很难在前期认同一个“说不清为什么这么判断”的机器决策。

我在项目里做的第一个相关动作,不是急着让系统跑得更聪明,而是把每一次智能体决策的输入、输出、置信度、工具调用链都记录下来,做成可视化日志。遇到判断偏差,可以随时回放,向现场人员解释“它为什么这么决策,哪一步出了问题”。开发层面可能觉得这些日志是负担,但实际推广时,它反而是换来信任最重要的一张牌。系统可以犯错,但要犯得明明白白;智能体可以灵活,但每一步都要有据可查。把透明性做在前面,后面迭代模型、调整提示词、增加新能力,都会顺畅得多。

相关新闻

4-bit大模型量化原理与工程实践:显存受限下的精度平衡术

4-bit大模型量化原理与工程实践:显存受限下的精度平衡术

1. 项目概述:为什么4-bit量化不是“降级”,而是显存受限场景下的精准工程取舍“低显存配置福音”这六个字,不是营销话术,是实打实的硬件现实倒逼出的技术路径。我接触过太多在24GB显存以下环境里挣扎的开发者——有人用3090跑7B模…

2026/10/21 7:12:52 阅读更多 →
A100 按量实例转长期计费前,需要确认哪些条件?

A100 按量实例转长期计费前,需要确认哪些条件?

关机按量实例转按天/周/月:生命周期边界 A100 GPU 实例完成一轮小规模训练验证后,接下来常见的决定是:继续按量使用,还是改成按天、按周或按月计费? 这个问题表面上是在选择计费周期,实际上涉及三个不同的判…

2026/10/21 7:12:52 阅读更多 →
125B大模型在12GB显存上稳定推理的异构内存调度方案

125B大模型在12GB显存上稳定推理的异构内存调度方案

1. 项目概述:当大模型撞上小显卡,不是放弃,而是换条路走“125B模型塞进12GB显卡”——这句话刚在技术社区刷屏时,我正盯着自己那张用了三年的RTX 3060 12GB,手边是刚下载完的Qwen2.5-125B-Instruct权重文件。它有248GB…

2026/10/21 7:12:52 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

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

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

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

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

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

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

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

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

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

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 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/21 21:50:56 阅读更多 →
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/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练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/21 16:24:48 阅读更多 →