AI驱动自动化测试工具实测:如何用自然语言替代XPath,解决UI选择器维护难题

中午在技术群里刷到一条消息:某科技巨头开源了一个主打AI驱动的自动化测试工具。消息一出,群里的反应几乎和我预想的一样,先是“卧槽,又一个颠覆级项目”,再是“以后写UI自动化是不是不用维护选择器了”,最后还有一句“那些老牌自动化框架是不是真的该慌了”。

我当时的想法比较冷静。做测试开发这些年,见惯了所谓“XX替代YY”的标题党,所以我没有急着站队,而是花了一个下午把它下载下来,从环境搭建到真实跑通一个购物App的登录下单流程,认真走了一遍。这篇文章不打算复述官方文档,也不想做夸大宣传,就从一个一线测试工程师的角度,聊聊它到底解决了什么老问题、上手体验如何、有哪些宣传里不会提的坑,以及我们团队最终会怎么选择工具。

如果你正在做移动端UI自动化,或者你所在团队正被脚本维护率折磨得头疼,这篇内容应该能给你一些具体参考。

1. 它解决的是“选择器维护”这个底层伤痛

做UI自动化的朋友应该都有过这种经历:昨天还跑得好好的脚本,今天前端改了一版布局,页面层级动了一下,测试直接红了一片。改脚本本身不算难,难的是你根本不知道它为什么会挂。

因为传统UI自动化的核心逻辑是“定位控件”。不管你是用ID、XPath,还是用文本属性,本质上都是把测试目标简化成一串可以被程序精确匹配的属性。前端加一个View层级,XPath就失效;产品改了一个按钮文案,文本匹配就找不到对象;某个控件从外层挪到了内层,所有依赖它的用例全部得跟着改。这些问题的根子,在于我们把“测试对象”理解成了“一串属性”,而不是人眼看到的真实界面。

1.1 传统UI自动化的死穴:选择器生命周期

我记得刚入行那会儿,跟过一个迭代特别快的电商项目,版本两周一个小版本,一个月一个大版本。前一周刚把所有用例的选择器修稳定,下一周新版打包出来,又是三分之一的选择器失效。当时团队里专门有两个同事每天只干一件事,就是对着报错日志修XPath。

这个维护成本不是线性增长,而是指数级。页面越复杂,控件越多,任何一个层级变化都可能引起连锁失效。更麻烦的是,有些前端框架以后还会动态渲染组件,同一个控件在不同状态下结构完全不一样,你没法用一个固定的XPath覆盖所有情况。团队最后经常变成“脚本维护人员”而不是“测试开发人员”。这也是为什么很多自动化项目做着做着就废弃了,投入产出比实在太难看。

1.2 新工具的破局思路:从“定位元素”到“理解界面”

这款AI自动化工具的设计思路,完全绕开了上面这套逻辑。它不再把界面当成一棵控件树,而是当成一幅画面、一段语义。它内置了视觉理解和语义推理能力,拿到一张屏幕截图之后,会先识别出哪些是按钮、哪些是输入框、哪些是列表项、哪些是弹窗,然后再结合你输入的自然语言指令去匹配目标,最后通过底层驱动执行真实的点击、输入、滑动操作。

举个最直观的例子。以前我想点击搜索按钮,需要写类似这种代码:

driver.find_element(By.XPATH, "//android.widget.LinearLayout[@id='search_layout']/android.widget.Button[@text='搜索']").click()

用这个工具写同样的操作,可能就是一句:

在首页搜索框中输入“降噪耳机”,然后点击搜索按钮

它不关心这个按钮在控件树里的位置是什么,也不关心ID变了没有,它看的是“屏幕上有一个按钮,它的语义是搜索,位置在搜索框右侧”,然后直接操作它。

这个改动看起来轻描淡写,其实是把整个自动化测试的范式,从“写定位器”转变成了“写意图”。你会突然发现,脚本的阅读成本和维护成本都降了一个量级,因为你要表达的不再是“怎么找到控件”,而是“我要让界面做什么”。

2. 核心引擎拆解:它怎么做到“看见”和“推理”

很多人看到“AI自动化”第一反应是玄学,觉得底层无非是拿个大模型硬套。实际用下来,它内部的工作流程其实非常清晰,归纳起来就是三个阶段:感知、规划、执行。

这和人的操作方式很像。你打开一个App,首先用眼睛看屏幕上有什么;然后脑子里想,我要先点哪里、再输入什么;最后手上执行动作。这个工具就是把这三步全部自动化了,而且每个阶段都留了可观测、可干预的接口。

2.1 从自然语言指令到屏幕操作:三个关键环节

感知环节是整个工具的基石。它会把当前屏幕的截图发给视觉模型,同时尽可能拿到系统层面暴露出来的控件树,比如Android的View层级、Web页面的DOM结构,然后把两者融合成一份“当前界面的结构化描述”。

这份描述在底层大概是这样的:当前页面有顶部导航栏、搜索框、推荐商品卡片列表、底部Tab栏,以及每个可操作元素的坐标位置和语义标签。你不需要读懂这份描述,但它决定了后续所有推理的准确性。

规划环节负责把自然语言步骤拆解成可执行的原子操作。比如“注册一个新账号并登录”这句话,它会被拆成:

  1. 启动App,等待首页加载完成
  2. 点击底部“我的”标签
  3. 点击“注册”按钮
  4. 在手机号输入框填入测试号码
  5. 点击“获取验证码”
  6. 填入验证码
  7. 设置密码
  8. 点击“完成注册”
  9. 校验是否跳转到登录后的个人中心页面

拆解之后再按依赖关系排序,检测前置条件,比如注册页没有加载出来时,点击注册按钮就没有意义,所以必须先等待页面就绪。

执行环节是最有意思的。它并不只是机械地把动作发送到设备,而是每完成一步就截图对比一次,确认“我要操作的元素是不是真的变了”。如果发现界面变化和预期不符,它会触发失败自愈机制,重新理解当前界面,尝试修正操作。

2.2 失败自愈机制:执行出错后工具做了什么

这里我重点讲一下它和传统框架最大的区别——面对失败时的处理方式。

传统框架遇到“元素找不到”,直接抛异常,脚本终止。它的逻辑是“我按规则没找到,就是失败,你去检查环境吧”。而这款AI工具遇到异常时,会做一系列补救动作:

  • 重新截取当前屏幕图像
  • 将当前屏幕内容与预期目标做语义对比
  • 寻找与目标最相近的可操作组件
  • 如果找到,继续执行并把这次修正记录到日志里

你可以把它理解成你让一个新人去点“保存”按钮,他第一次点到了“草稿”,抬头看一眼,发现不对,然后自己重新找到真正的“保存”点下去。传统框架在同样情况下只会站在门口喊“我找不到‘保存’两个字”,然后就罢工了。

这个能力在真实项目中非常实用,尤其是前端频繁改动布局的场景。按钮从页面上方挪到下方,位置变了,但语义没变,AI工具大概率还是能找到。它关心的是“这个界面上有没有一个叫保存的按钮”,而不是“保存按钮的坐标在哪里”。这也是为什么它在应对版本频繁迭代的App时,稳定性明显比传统选择器方案高。

3. 实测:登录和下单一次跑通的完整过程

光看原理还不行,我直接用一个模拟购物类Demo项目做了一轮完整实测。这个项目我本地叫“某商城Demo”,首页有搜索框、商品分类、商品列表、详情页、购物车、结算流程,是典型的电商核心链路,很能说明问题。

整个实测下来,给我印象最深的不是它能把步骤跑通,而是整个测试用例的编写方式彻底变了。下面我按步骤还原一下全过程。

3.1 环境准备与最小启动示例

安装这块比我想象中简单,它直接作为一个Python包分发,依赖项也不多:

pip install ai-auto-testing

装完以后,初始化一个移动端测试项目:

ai-auto-testing init mobile

这个命令会在当前目录生成一个最小化的工程结构,包括配置文件、测试用例目录、报告输出目录。配置文件的重点是告诉工具被测App的信息,比如包名、启动入口、以及要连接哪个设备。

注意:新项目接入时,最容易忽略的是设备环境。安卓设备和电脑之间要提前做好连接授权,不然工具连设备都发现不了,后面全白搭。我建议先单独执行adb devices确认设备在线,再做后续步骤,避免把问题定位到工具本身。

最小测试用例长这样,用YAML格式写意图,不需要写代码:

testcases: - name: "登录冒烟测试" steps: - action: "启动某商城Demo" - action: "点击右下角的我的" - action: "点击登录按钮" - action: "在手机号输入框输入13800000000" - action: "点击获取验证码" - action: "在验证码输入框输入123456" - action: "点击登录" - check: "页面出现用户头像和昵称"

一个测试用例,本质上就是你平时用文字写的一条测试步骤。没有任何XPath,没有resource-id,没有等待时间的硬编码。

3.2 从编写指令到生成报告:一次完整运行的观察

执行方式也是一条命令:

ai-auto-testing run login-test

我观察了它实际跑的过程。它会启动模拟器或真机上的App,每一步执行前会先截图并分析界面,判断当前状态,然后再执行动作。比如“点击右下角的我的”这句话,工具先识别到屏幕右下角有一个“我的”Tab,确认它是可点击状态,再执行点击。

整个登录流程跑完,一共用了52秒。传统自动化脚本同样流程,优化得好大概35到40秒,慢一点可能要一分钟以上。从速度来说,它并不占优,因为每一步都多了视觉推理的耗时。

但稳定性表现让人意外。我故意把“某商城Demo”的界面做了一次改动,把登录按钮从页面右上角移到了中部,把手机号输入框的ID也改了。传统脚本如果没同步更新选择器,100%必挂;这个AI工具重新跑了一遍,除了日志里多了两条“元素位置变化,已自动适配”的记录之外,整个用例一次性通过。

它还会自动生成一份测试报告,里面包含每一步的截图、操作内容、耗时、以及界面变化前后的对比。这对后期排查问题很有帮助,不用再像以前那样靠录视频来追锅。

4. 宣传文案不会告诉你的四类问题

工具确实好用,但我也必须说几句公道话,它离“万能”还差得挺远。如果你准备直接上生产环境,下面这几个问题最好先心里有数。

4.1 相似控件过多时,AI也会犯糊涂

电商首页的商品卡片通常是类似结构,一个屏幕上有十几个长得差不多的卡片。如果你说“点击第三个商品”,它偶尔会点错。因为视觉模型对“第几个”的理解有时不够稳定,尤其是当页面在快速滚动时。

解决办法是给指令加更明确的语义约束,例如:

点击标题为“某品牌无线耳机”的商品卡片

有了具体文案作为锚点,准确率就高很多。如果界面上的卡片标题也不可读,只有图片,那就得提前给图片加备注,或者改用相对坐标区域限定。

4.2 一次运行成本不低,要控制推理频率

这是最容易被忽略的现实问题。AI工具每执行一步,基本都要调用一次视觉理解能力,每次调用都有模型成本。如果一个用例有50步,跑一遍就是50次推理,连续跑上百个用例,消耗不是一个小数目。

我们在内部压测时发现,登录下单这类长链路用例,如果全流程开启视觉理解,单条用例的成本大概比传统脚本高一个数量级。这也意味着,它的目标场景不是“海量回归”,而是“少量核心链路深度保障”。如果你打算把它用在几百上千条全量回归上,要么预算充足,要么得设计缓存机制。

经验:可以给项目配置“视觉快照缓存”,同一个页面在短时间内只做一次视觉分析,后续步骤直接复用结果。这个选项在配置文件里默认关闭,但强烈建议按实际场景打开,能明显降低成本。

4.3 部分场景它真的搞不定

我实测了几个它应付不了的场景,列出来给大家避坑:

  • 视频流类页面:界面上持续快速变化的内容,视觉模型很难稳定跟踪目标,比如短视频信息流、直播弹层。
  • 纯自定义渲染控件:有些游戏引擎或重度自定义View,控件树为空,截图语义也弱,工具基本相当于“睁眼瞎”。
  • 跨进程混合内容:比如App内嵌H5页面,如果WebView的调试通道没有打开,它拿不到DOM,只能靠截图猜,精度会降低。
  • 需要跨App操作的长链路:例如要从AppA跳转到AppB再跳回来,路径一复杂,感知和规划就容易出错。

这些场景下,传统框架配合明确的控件定位反而更可靠。所以至少现阶段,它不是一个可以无脑替代一切的工具,更像是一个很聪明的特长生。

4.4 历史脚本兼容性几乎为零

如果你团队已经有一套用传统自动化框架写好的用例,想平滑迁移到这个AI工具上,基本是要重写。它虽然支持导入App的包信息,但不会帮你把已有的XPath脚本转成自然语言用例。

这也提醒了我们一件事:迁移前一定要评估存量脚本的价值。如果旧脚本本身维护成本高、失败率高,那重写反而是计算机,反正旧脚本早晚要废;如果旧脚本跑得很稳,只是因为周期长,那就没必要为了追新而全部推倒重来。

5. 它真的会取代传统自动化框架吗:我的决策建议

聊到这儿,标题那个问题终于绕不开了:它会不会让传统自动化框架无路可走?

我的答案非常明确:短期三到五年内,不可能彻底取代。但它一定会切走一大部分市场,尤其是那些被选择器维护折磨到想放弃自动化的团队。

5.1 传统框架和AI工具的核心能力对比

我把实测中感受比较深的差异整理成了表格,方便大家按自己的场景对照:

对比维度传统自动化框架AI驱动的自动化工具
用例编写方式代码/XPath/ID定位自然语言描述操作意图
界面变更适应能力选择器失效后必须人工维护自动重新理解界面语义,多数情况可自愈
执行速度快,因为不需要人工智能推理较慢,每一步都有视觉推理开销
稳定性界面稳定时极高,变更后极低界面变化时表现好,但复杂界面仍会误判
技能门槛需要会写代码、懂元素定位基本不需要代码,业务人员也能上手
运行成本几乎可忽略按推理次数计费,长期大量运行成本偏高
适合场景全量回归、海量稳定用例核心链路冒烟、频繁迭代期的探索性验证
历史脚本迁移无需迁移基本要重写,兼容性差

看完这个表你会发现,它们不是替代关系,而是各有所长的互补关系。

5.2 建议采用的三层测试策略

如果是我在团队里主导这个选型,我会把自动化测试拆成三层来排兵布阵:

第一层,用AI工具覆盖核心业务冒烟链路。比如登录、注册、搜索、加购、支付,这些链路改动最频繁,失败影响最大,非常适合AI工具的自愈能力。前端再怎么改布局,只要功能没变,这条链路就能持续跑。

第二层,用传统框架守住大规模回归用例。成熟稳定的模块、几乎不需要改动的页面,用传统框架完全够用,执行速度快,成本低,没有必要给AI工具增加负担。

第三层,用AI工具辅助测试用例的生成。它还有一个很实用的能力,你只需要把需求文档或者手工测试步骤贴进去,它就能帮你产出结构化的测试步骤。我们团队现在已经在用这个方式评审需求,在写代码之前就先暴露可测试性的问题。

5.3 我最终怎么和团队说的

那天复盘的时候,我跟团队讲了一个观点:真正让传统框架头疼的,不是AI工具的识别能力有多强,而是它把自动化测试的门槛拉低了。

以前写UI自动化,你得懂元素定位、懂代码、懂框架机制,这天然就把很多业务测试同学挡在门外。现在用自然语言就能写用例,业务同学自己就能把核心流程覆盖起来。这种“人人都能写自动化”的变革,比模型本身更让老框架难受。

但我也提醒团队,工具越智能,对工程规范的要求就越高。自然语言用例看着简单,但可维护性取决于你怎么组织页面语义、怎么命名操作目标、怎么设计检查点。你不维护,再智能的工具也会变成一堆难以理解的开放式描述。

我在实际试用里最大的体会是:AI自动化最值钱的地方,不是“不用写代码”,而是“让测试更接近人的真实理解”。当我们把精力从选择器上解放出来,才有机会去思考更重要的测试策略和风险把控问题。

最后再分享一个小建议。无论你最终选不选这类工具,我都建议你周末拿一个小Demo试试它生成用例的能力。不一定要立刻替换生产框架,但提前感受一下“写意图而不是写定位器”的思路,对你未来设计测试方案一定有帮助。技术总在往前跑,早点上手,总比被时代推着走舒服。

相关新闻

MATLAB PCA人脸识别:特征脸原理、降维实现与GUI避坑实战

MATLAB PCA人脸识别:特征脸原理、降维实现与GUI避坑实战

简介:一个基于MATLAB的PCA人脸识别项目,附带图形用户界面,专门面向学习模式识别、计算机视觉或数据降维的高校学生与开发者,可帮助理解如何从高维人脸图像中提取有效信息,并形成低维特征表示的完整流程。压缩包共113个…

2026/10/20 10:03:45 阅读更多 →
Protobuf 实战:为何比 JSON 更高效?原理、场景与选型建议

Protobuf 实战:为何比 JSON 更高效?原理、场景与选型建议

做后端这几年,我一直在反复观测同一类问题:接口联调、日志落盘、消息入队、客户端同步,不同系统之间交换数据到底用什么格式最顺手。早期我默认 JSON,后来发现只要流量一大、字段一多,文本格式的浪费就开始变得刺眼。于…

2026/10/20 10:03:45 阅读更多 →
基于深度强化学习的无人机TSP路径规划:从建模到实战部署

基于深度强化学习的无人机TSP路径规划:从建模到实战部署

我最早做这个课题,是因为手里接了一个无人机配送的仿真验证任务:一架四旋翼要在尽量短的时间内访问完若干个任务点,最后回到起降点。乍一看就是经典的旅行商问题(TSP),但把“车”换成“无人机”&#xff0c…

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

最新新闻

VS2019快速集成wxWidgets二进制包实战指南

VS2019快速集成wxWidgets二进制包实战指南

1. 项目概述:为什么“直接使用二进制文件”是wxWidgets开发中最常被卡住的第一关 在Visual Studio 2019环境下配置wxWidgets,绝大多数人踩进的第一个坑,不是代码写错,也不是逻辑出问题,而是——连编译都过不去。你下载…

2026/10/20 11:33:30 阅读更多 →
AI芯片设计黑盒困局:从不可解释到可控黑盒的工程实践

AI芯片设计黑盒困局:从不可解释到可控黑盒的工程实践

“AI 在芯片领域依然是个黑盒。”这句话不是我从某篇报告里抄来的,是我在上一个流片项目的复盘会上,被自己的算法同事一句一句追问出来的。当时我们上线了一个辅助布局优化的AI模型,指标提升很漂亮,可一旦被问到“为什么这几百个标…

2026/10/20 11:33:30 阅读更多 →
HTC Vive OpenVR 配置避坑指南:SDK 1.25.4 + SteamVR 1.26.4 黄金组合

HTC Vive OpenVR 配置避坑指南:SDK 1.25.4 + SteamVR 1.26.4 黄金组合

简介:本资源是面向VR开发初学者与进阶者的OpenVR实战入门项目,聚焦HTC Vive设备的API调用与Tracker扩展应用,解决开发者在跨平台VR交互开发中接口适配难、追踪数据解析复杂等实际问题。压缩包共9个文件,含4个核心Python脚本&#…

2026/10/20 11:33:30 阅读更多 →
Llama 3 精读:FP8 量化与长上下文实测经验分享

Llama 3 精读:FP8 量化与长上下文实测经验分享

1. 为什么值得花时间精读 Llama 3Llama 3 发布之后,我身边不少做推理部署和模型微调的朋友都在第一时间拉取了权重做实测。大家最关心的其实不是榜单上的分数,而是两个非常实际的问题:第一,这个模型在FP8 量化之后精度到底掉多少&…

2026/10/20 11:33:30 阅读更多 →
腾讯广告回收业务推广类目梳理:可投品类、禁投品类及资质要点

腾讯广告回收业务推广类目梳理:可投品类、禁投品类及资质要点

前言很多再生资源、回收行业的从业者,会选择腾讯广告(朋友圈、视频号、腾讯新闻等流量位)来收集 B 端企业或 C 端散户的业务咨询信息。但回收类目细分多、监管差异大,不少商家开户后遇到广告拒审、计划下架、账户限流等问题。多数…

2026/10/20 11:33:30 阅读更多 →
专科生论文降AI率实战指南:九款降AIGC工具测评与避坑要点

专科生论文降AI率实战指南:九款降AIGC工具测评与避坑要点

最近后台问得最多的不是论文怎么写,而是“论文写完了AI率太高怎么办”。很多专科生现在交课程论文、毕业设计、实习报告之前,都要先跑一遍AIGC检测,结果一出来就慌了:明明是自己查阅资料写的初稿,只是用AI帮忙润了润色…

2026/10/20 11:32:30 阅读更多 →

日新闻

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/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

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