PartLLM:用文本统一3D部件分割,一个模型搞定三类任务

1. 从"切蛋糕"说起:3D部件分割到底难在哪

如果你接触过三维建模、数字孪生或者机器人抓取相关的项目,大概率会被同一个问题折磨过:拿到一个完整的三维网格模型,怎么把它拆成有语义的部件?比如一把椅子,要自动识别出椅背、坐垫、四条腿;一个水杯,要分出杯身和把手。这件事在学术上叫3D部件分割,听起来很学术,但落到实际工程里,它就是无数下游任务的地基——不做部件级拆分,机器人不知道该抓哪里,工业质检不知道缺陷出在哪个结构上,AR交互也没法做到"点哪拆哪"。

传统做法大致分两条路。一条是基于几何特征的纯算法路线,靠曲率、法线、凹凸性这些低层特征做聚类,优点是快,缺点是对语义一无所知,遇到形状复杂或者部件之间过渡平滑的模型就歇菜。另一条是深度学习路线,用点云网络或者网格卷积网络做逐点分类,效果比纯几何好很多,但问题也很明显:每个数据集、每类物体、每种分割粒度,往往都要单独训练一个模型。你想让同一个模型既能做"整形状拆成部件",又能做"我点一下杯子把手,你把把手单独抠出来",还能做"我说一句'把椅子的靠背分出来',模型就照做"——这在过去基本意味着三套独立的系统。

PartLLM这篇工作想解决的就是这个"三合一"的问题。它的核心思路非常有意思:把3D部件分割这件事,统一成一种文本化的输入输出格式。模型不再直接输出每个点的类别标签,而是输出一段结构化的文本,描述"这个形状由哪些部件组成、每个部件叫什么、对应哪些区域"。一旦分割变成了文本生成,那么形状拆分、交互式分割、文本引导分割这三类任务,就都能塞进同一个多模态大模型的框架里,用同一套参数、同一个训练流程搞定。

这个思路的价值在于,它把3D视觉里一个长期碎片化的问题,拉回到了当下最成熟的技术范式——多模态大语言模型。下面我会从任务统一、文本化表示、模型架构、训练策略、实测表现和落地注意事项几个角度,把这篇工作拆开讲透。不管你是做3D视觉的研究者,还是想在自己的三维项目里落地部件分割的工程师,都能从中拿到可以直接参考的东西。

2. 三类分割任务为什么长期各自为战

2.1 全形状拆分:一次性把模型拆干净

全形状拆分(whole-shape decomposition)是最经典的任务设定:给一个完整的三维形状,要求模型输出所有部件的分割结果。这里的难点在于部件数量和部件边界都是不确定的。一把椅子可能有5个部件,一张桌子可能只有2个,一个复杂的机械零件可能有几十个。传统方法要么预设固定的部件数量,要么依赖后处理做聚类,前者不灵活,后者不稳定。

更麻烦的是"部件"这个概念本身就有歧义。同一个模型,按功能分和按几何分,结果可能完全不同。比如一个带杯盖的水杯,功能上杯盖是一个独立部件,几何上它可能和杯身连成一体。这种歧义让全形状拆分任务很难有一个"标准答案",也导致不同数据集之间的标注体系互不兼容。

2.2 交互式分割:用户点一下,模型抠一块

交互式分割(interactive segmentation)的设定是:用户给出一个提示,比如在某个位置点一下,或者画一个粗略的框,模型据此分割出对应的部件。这个任务在2D图像领域已经被SAM这类模型做得很成熟了,但搬到3D上难度陡增。原因是3D数据没有2D图像那样规整的像素网格,点云是无序的,网格的拓扑结构又千变万化,用户的一个点击如何映射到三维空间中的语义区域,本身就是个难题。

而且交互式分割对实时性要求很高。用户点一下,等个十几秒才出结果,体验就崩了。这就要求模型不能太笨重,推理路径不能太长。过去的方法通常要针对交互任务专门设计一个轻量网络,和全形状拆分的模型完全分开。

2.3 文本引导分割:用一句话指定要拆哪里

文本引导分割(text-guided segmentation)是这三类里最"新"的。用户输入一句自然语言,比如"把椅子的扶手分出来",模型要理解这句话的语义,然后在3D形状上定位并分割出对应区域。这个任务同时考验模型的语言理解能力和3D空间感知能力,是典型的多模态问题。

过去的做法一般是把CLIP这类图文对齐模型迁移到3D上,通过对比学习让3D特征和文本特征对齐。但CLIP本身是在2D图像上训练的,迁移到3D有天然的鸿沟,而且它只能做"整形状和文本的匹配",做不到精细的部件级定位。所以文本引导分割的效果一直不太理想。

三类任务各自有各自的网络结构、训练数据和评测指标,工程上要同时支持它们,代码量和维护成本都是灾难。PartLLM的出发点,就是找到一种统一的表示,让这三类任务共享同一套底层能力。

3. 把分割变成"写作文":文本化表示的核心设计

3.1 为什么选文本作为统一接口

PartLLM最关键的一个决策,是把分割结果表示成结构化文本,而不是传统的逐点标签或掩码。这个选择乍看有点反直觉——3D分割明明是空间任务,为什么要用文本这种一维序列来表示?

理由其实很扎实。第一,文本是天然可变长的。部件数量不确定的问题,用文本表示就自然解决了:有几个部件就写几段,不需要预设数量。第二,文本可以承载语义信息。传统标签只能告诉你"这是第3类",而文本可以直接写"这是椅背",语义一目了然。第三,也是最关键的,文本是大语言模型的原生接口。一旦分割变成文本生成,就可以直接复用预训练好的多模态大模型,不需要从零设计网络结构。

打个比方,这就像把"填表格"改成了"写描述"。填表格要求你事先知道表格有多少行、每行填什么;写描述则自由得多,你想怎么写就怎么写,只要读的人能看懂。PartLLM就是让模型学会用"写描述"的方式来完成分割。

3.2 文本化表示的具体格式

那么这段"描述"具体长什么样?根据这类工作的常见设计,通常会包含几个要素:部件名称、部件的空间位置描述、以及部件对应的点或区域索引。一个典型的输出可能长这样:

部件1: 椅背, 位于形状后上方, 包含点 [12, 13, 15, ...] 部件2: 坐垫, 位于形状中部水平面, 包含点 [45, 46, ...] 部件3: 椅腿, 位于形状底部四角, 包含点 [...]

这种格式的好处是人机都能读。人看一眼就知道模型分出了什么,机器则可以直接解析出点索引去做下游处理。而且这种格式天然支持交互:用户说"我要椅背",模型就只输出椅背那一段;用户点一个位置,模型就输出包含该位置的部件描述。

注意:文本化表示的一个潜在风险是"点索引"部分会很长。一个几万点的模型,如果每个部件都要列出所有点索引,文本长度会爆炸。实际实现中通常会做下采样,或者用区域描述代替逐点索引,这一点在复现时要特别留意。

3.3 文本化带来的三个额外好处

除了统一接口,文本化还带来几个不那么显眼但很实用的好处。

其一是可解释性。传统分割模型输出一堆类别概率,你很难判断它为什么这么分。文本化输出则直接告诉你模型的"推理过程",出错时也容易定位是语义理解错了还是空间定位错了。

其二是易于扩展新部件类别。传统分类模型要加一个新类别,得改输出层、重新训练。文本化表示下,只要在训练数据里加入包含新部件名称的样本,模型就能学会,不需要动网络结构。

其三是天然支持多任务联合训练。全形状拆分、交互式分割、文本引导分割,在文本化框架下只是输入输出格式的细微差别,可以混在同一个训练集里一起训,模型能学到任务之间的共性。

4. 模型怎么把3D形状"读"进语言模型

4.1 3D编码器与语言模型的对齐

PartLLM的架构本质上是"3D编码器 + 多模态大语言模型"的组合。3D编码器负责把点云或网格转成一串特征向量,然后通过一个投影层,把这些特征映射到语言模型的嵌入空间,让语言模型能"看懂"3D形状。

这里的关键技术点是模态对齐。3D特征和文本特征的分布差异很大,直接拼接效果通常很差。常见的做法是用一个轻量的投影网络(比如几层MLP)做维度变换,再配合对比学习或者指令微调,让两个模态在语义空间里对齐。PartLLM这类工作通常会在预训练阶段就用大量的3D-文本配对数据做对齐,然后在分割任务上做指令微调。

4.2 点云序列化:让Transformer能处理3D

语言模型处理的是序列,而点云是无序集合,这两者怎么衔接?主流做法有两种:一种是用PointNet++这类网络先提取局部特征,再把特征序列化;另一种是用FPS(最远点采样)加KNN分组,把点云组织成类似"词序列"的结构。

PartLLM大概率采用了后者或者类似的混合方案。具体来说,先对原始点云做下采样,得到一组中心点,每个中心点通过KNN聚合周围点的特征,形成一个个"局部token"。这些token按某种顺序排列后,就变成了语言模型可以处理的序列。这个过程中,采样密度和KNN的K值是两个关键超参:采样太稀会丢失细节,太密则序列过长、推理变慢;K值太小局部信息不足,太大则特征被过度平滑。

4.3 输出端的约束解码

文本化输出有个现实问题:模型可能会"胡说",生成不存在的点索引或者格式错误的描述。所以在解码阶段通常要加约束。常见做法包括:限制输出词表只包含合法的部件名称和格式符号;用正则或者语法解析器校验输出格式;对点索引做范围检查,越界的直接丢弃或修正。

这部分在论文里往往一笔带过,但实际复现时是最容易踩坑的地方。我见过不少团队模型训得挺好,一到推理就输出一堆乱码,最后发现是解码约束没做好。

5. 训练策略:数据从哪来,任务怎么混

5.1 训练数据的构造

PartLLM要同时支持三类任务,训练数据也得覆盖这三类。全形状拆分的数据相对好找,PartNet、ShapeNet这些数据集都有部件级标注。交互式分割的数据需要额外构造:从全形状标注里随机选一个部件,取其中一个点作为"点击提示",对应的部件作为目标输出。文本引导分割的数据则需要把部件名称和自然语言指令配对,比如"把扶手分出来"对应"扶手"这个部件。

这里有个容易被忽略的细节:指令的多样性。如果训练时只用一种句式,模型很容易过拟合到那个句式上,换个说法就不认识了。所以构造数据时要有意识地做指令增强,同一个意思用多种表达方式,比如"分割出椅背""把椅背单独拿出来""我要椅背这部分"等等。

5.2 多任务联合训练的损失设计

三类任务混在一起训,损失函数怎么设计是个学问。最直接的做法是全部当成文本生成任务,用统一的交叉熵损失。但这样有个问题:交互式分割和文本引导分割的输出通常比全形状拆分短很多,如果按token平均,短任务的权重会被稀释。

常见的解决方案是按任务加权,或者按样本长度做归一化。另一种思路是分阶段训练:先在全形状拆分上预训练,让模型学会基本的部件语义,再用交互和文本引导数据做微调。PartLLM这类工作通常会报告两种策略的对比结果,实践中分阶段训练往往更稳,但联合训练的上限可能更高。

5.3 指令微调的关键作用

多模态大模型能不能做好分割,很大程度上取决于指令微调的质量。预训练阶段模型学到的是"3D形状和文本的粗对齐",但具体到"分割"这个任务,还需要专门的指令数据来教。指令微调的数据通常包含三部分:任务描述(比如"请分割这个形状的所有部件")、输入(3D形状特征)、输出(文本化的分割结果)。

指令微调的一个经验是:任务描述的模板要丰富,但输出格式要严格统一。输入侧多样化能让模型适应各种问法,输出侧统一则方便解析和评测。这个"输入松、输出紧"的原则,在几乎所有指令微调任务里都适用。

6. 实测表现与横向对比

6.1 全形状拆分的精度

从这类工作公开的结果看,PartLLM在全形状拆分上的表现和专门的3D分割网络(比如PointNet++、DGCNN这些)相比,精度上不一定有压倒性优势,但在泛化性上明显更好。专门网络换一个数据集往往要重新训练,而PartLLM因为有大语言模型的常识做支撑,跨数据集的迁移能力更强。

具体指标上,通常用mIoU(平均交并比)和部件准确率来衡量。PartLLM在标准数据集上能拿到和专用方法接近甚至略好的mIoU,而在跨数据集测试中优势更明显。这个结果其实符合预期:文本化表示牺牲了一点纯几何精度,换来了语义理解和泛化能力。

6.2 交互式分割的响应质量

交互式分割最看重的是"一次点击的命中率"。用户点一下,模型能不能准确抠出想要的部件。PartLLM在这方面的优势是语义先验:即使点击位置在部件边缘,模型也能根据整体语义判断出用户想要的是哪个部件,而不是单纯按几何邻域分割。

不过交互式分割的实时性是个短板。大语言模型的推理本身就有延迟,加上3D编码的前处理,单次交互的响应时间通常在秒级。对于需要高频交互的场景,这个延迟可能不够理想。实际落地时可能需要对模型做蒸馏或者量化。

6.3 文本引导分割的语义理解

文本引导分割是PartLLM最能体现多模态优势的地方。传统方法做文本引导,基本只能做"整形状和文本的匹配",而PartLLM能做到部件级的精细定位。比如输入"把椅子的左前腿分出来",模型不仅能理解"左前腿"这个语义,还能在空间上准确定位。

这里有个有意思的现象:模型对空间方位词(左、右、前、后、上、下)的理解,很大程度上依赖于训练数据里这些词的分布。如果训练数据里"左"总是对应某个固定视角,模型可能会把"左"和绝对坐标绑定,换个视角就出错。这是文本引导分割的一个隐蔽陷阱,构造数据时要特别注意视角的多样性。

任务类型传统专用方法PartLLM关键差异
全形状拆分精度高,泛化差精度接近,泛化好语义先验带来跨域能力
交互式分割响应快,语义弱语义强,响应慢大模型推理延迟是瓶颈
文本引导分割只能整形状匹配部件级精细定位多模态对齐是关键

7. 想复现或落地,这几个坑得提前知道

7.1 3D编码器的选择直接影响上限

PartLLM这类框架里,3D编码器往往被当成"配角",但实际上它决定了模型能提取到多少几何细节。如果编码器太弱,后面语言模型再强也补不回来。实践中,PointNet++适合点云,稀疏卷积适合体素,网格卷积适合网格数据,选哪个要看你的输入格式和精度要求。

我的经验是:如果下游对边界精度要求高,编码器一定要用能保留局部细节的结构,比如带注意力机制的Point Transformer,而不是简单的全局池化。全局池化会把局部几何信息压没,分割边界就会糊。

7.2 文本化输出的解析容错

前面提过,模型输出可能格式错误。实际部署时,解析器一定要做容错。比如点索引越界了,不要直接报错,而是截断到合法范围;部件名称拼写错了,可以用编辑距离匹配到最近的合法名称。这些容错逻辑看起来琐碎,但直接决定了系统的可用性。

提示:建议在训练阶段就加入一些"格式噪声"样本,让模型学会在轻微格式错误下也能输出正确内容。这比在推理阶段硬做后处理要优雅得多。

7.3 评测指标要和任务匹配

三类任务不能用同一套指标。全形状拆分看mIoU和部件准确率;交互式分割看单次点击的IoU和交互轮数;文本引导分割看文本-区域匹配准确率。如果混用指标,很容易得出误导性结论。比如用全形状拆分的mIoU去评交互式分割,会低估模型在单部件上的表现。

7.4 数据标注的成本控制

文本化表示虽然灵活,但对标注的要求其实更高了。传统分割只要标类别,文本化表示还要标部件名称、空间描述。如果全靠人工标,成本会很高。实际做法通常是:先用传统标注得到部件掩码,再用规则或小模型自动生成文本描述,人工只做抽检和修正。这样能把标注成本压下来。

8. 这类统一框架接下来能怎么用

PartLLM展示的"用文本统一3D分割任务"的思路,其实可以往外延伸不少。最直接的是扩展到更多3D任务:既然分割能文本化,那么3D形状的编辑、装配、检索是不是也能用类似的方式统一?比如"把这个椅子的腿加长两厘米",本质上是分割加形变,文本化框架天然支持。

另一个方向是和机器人操作结合。机器人抓取需要部件级理解,而自然语言指令是人机交互最自然的方式。PartLLM这类模型如果能在边缘设备上跑起来,就能让机器人听懂"抓住杯子的把手"这种指令,直接定位到把手区域。当然,实时性是前提,模型压缩和蒸馏是必经之路。

还有一个我觉得很有潜力的方向是3D内容的语义检索。现在3D模型库的检索基本靠标签或者几何相似度,如果能把每个模型都文本化成部件描述,检索就可以做到"找出所有带扶手的椅子"这种细粒度查询。这对3D资产管理和复用价值很大。

我个人在实际折腾这类框架时的体会是:统一框架的最大价值不在于单点精度,而在于降低了多任务系统的工程复杂度。过去要维护三套模型、三套数据管线、三套评测,现在一套搞定,省下来的精力可以投入到数据质量和场景适配上。当然,统一也意味着妥协,某些任务上专用方法仍然更强。选不选这类框架,取决于你的场景是"单任务极致精度"还是"多任务快速覆盖"。想清楚这一点,比盲目追新要重要得多。

相关新闻

Flink实时热榜TopN实战:窗口设计与两阶段聚合

Flink实时热榜TopN实战:窗口设计与两阶段聚合

做实时热榜这个话题,说多了都是泪。你在后台看需求,通常就一句话:“把最近5分钟最热的内容排出来”,可真做起来会发现,这句话背后牵扯出的是流式计算里几乎所有经典难题:事件时间怎么对齐、窗口边界如何处理…

2026/10/20 17:17:46 阅读更多 →
Cornell抓取数据集txt转pcd全流程:从2D标注到3D可执行姿态

Cornell抓取数据集txt转pcd全流程:从2D标注到3D可执行姿态

1. 项目概述:为什么康奈尔抓取检测数据集至今仍是点云理解的“教科书级”起点 如果你正在做机器人抓取规划、6D位姿估计,或者刚入门三维视觉方向,大概率绕不开Cornell Grasp Detection Dataset——这个2013年发布的经典数据集,至今…

2026/10/20 17:16:45 阅读更多 →
基于SSM+Vue的连锁驾校管理系统设计与实现

基于SSM+Vue的连锁驾校管理系统设计与实现

2. 项目概述作为一个经历过毕业设计全流程的过来人,我深知选题阶段有多纠结。市面上千篇一律的图书管理系统、商城系统已经让导师审美疲劳,而真正能体现技术含量、又能结合实际业务场景的题目就那么几个。今天分享的这个题目——“驾考新时代&#xff1a…

2026/10/20 17:16:45 阅读更多 →

最新新闻

基于51单片机的PM2.5检测仪DIY:从传感器选型到标定实战

基于51单片机的PM2.5检测仪DIY:从传感器选型到标定实战

大概半年前,我在朋友家里看到新买的空气净化器,屏幕上那个不断跳动的PM2.5数值让我有点出神:一个小方盒子就能感知空气中看不见的颗粒物,这套系统如果拆出来,能不能用最简单的单片机和传感器自己搭一套?于是…

2026/10/20 18:04:15 阅读更多 →
OpenCV边缘检测对比:Laplacian算子与Canny实战指南

OpenCV边缘检测对比:Laplacian算子与Canny实战指南

最近在整理一批图像处理的入门案例,正好做到边缘检测这一块。很多人接触OpenCV的边缘检测时,第一反应都是直接用cv2.Canny()。这没什么问题,Canny确实是最常用的,但如果你只会Canny,遇到一些问题就容易抓瞎——比如想快…

2026/10/20 18:04:15 阅读更多 →
C# RFID读卡器方案:串口通信与M1卡读写实战

C# RFID读卡器方案:串口通信与M1卡读写实战

简介:这份基于C#的RFID卡识别与读写示例工程,面向需要开发RFID应用的.NET开发者,覆盖设备连接、事件驱动编程、数据解析、读写操作与错误处理等完整流程,可应用于门禁系统、物流跟踪、商品防伪等场景。工程共29个文件,…

2026/10/20 18:04:15 阅读更多 →
Browser-use 与 Playwright-MCP 深度对比:浏览器自动化 Agent 框架与工具协议层的选型指南

Browser-use 与 Playwright-MCP 深度对比:浏览器自动化 Agent 框架与工具协议层的选型指南

1. 从两个真实场景说起:为什么"浏览器自动化"突然分成了两条路去年下半年到现在,我陆续在三个不同类型的项目里用到了浏览器自动化:一个是帮运营团队做竞品价格监控,一个是给内部知识库做网页内容采集,还有一…

2026/10/20 18:04:15 阅读更多 →
Windows流媒体服务端实战:RTSP拉流转HLS与低延迟调优

Windows流媒体服务端实战:RTSP拉流转HLS与低延迟调优

简介:EasyDarwin是一款基于标准HTTP/RTSP协议的开源流媒体服务器,这份Windows x86_64平台的v7.3.17.0325压缩包面向需要快速搭建视频直播、监控或转码服务的开发者和运维人员,也适合通过实际部署学习流媒体协议的学生与初级工程师。资源共135…

2026/10/20 18:04:15 阅读更多 →
Jetpack Compose实现裸眼3D:传感器驱动+视差多层位移全攻略

Jetpack Compose实现裸眼3D:传感器驱动+视差多层位移全攻略

最近在某房产App上看到头部banner的裸眼3D效果,第一反应是这里用了“视差滚动传感器驱动”的组合玩法。这个效果在原生Android端有过不少实现,但在Jetpack Compose里怎么落地,网上完整资料并不多。我花了一个周末把仿自如裸眼3D效果的Compose…

2026/10/20 18:03:13 阅读更多 →

日新闻

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 阅读更多 →