(论文速读)PAConv:通过动态卷积核组装实现点云位置自适应卷积
论文题目PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point CloudsPAConv面向点云的动态卷积核组装位置自适应卷积会议CVPR 2021摘要本文提出位置自适应卷积Position Adaptive ConvolutionPAConv一种用于三维点云处理的通用卷积操作。PAConv 的关键是通过动态组装存储在权重库Weight Bank中的基础权重矩阵来构建卷积核而这些权重矩阵的组合系数由 ScoreNet 根据点的位置自适应学习。这样卷积核便以数据驱动的方式构建使 PAConv 相比二维卷积具有更高的灵活性能够更好地处理点云数据的不规则和无序特性。此外通过组合权重矩阵而不是直接根据点的位置暴力预测卷积核可以降低学习过程的复杂度。进一步地与现有卷积算子往往需要精心设计网络架构不同本文在不改变网络配置的情况下将 PAConv 集成到经典的基于 MLP 的点云处理流程中。即使使用简单网络该方法在分类和分割任务上仍能接近甚至超越当时的先进模型并显著提升基线性能同时保持较好的效率。论文还提供了充分的消融实验和可视化以帮助理解 PAConv。源码GitHub - CVMI-Lab/PAConv: (CVPR 2021) PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds · GitHub一、研究背景与核心问题1.1 为什么普通卷积难以直接用于点云二维图像有规则的像素网格。以 3 × 3 卷积为例上方、下方和对角线等相对位置是固定的因此可以给不同网格位置分配固定卷积权重。但三维点云是不规则、无序且通常稀疏的每个中心点周围的邻居数量和空间分布不固定相对坐标也是连续变化的无法简单套用九宫格式的位置到权重映射。现有做法各有代价。PointNet 一类方法通过共享 MLP 处理点特征虽然易于实现但同一特征映射难以充分区分不同空间位置关系PointConv 等方法根据相对坐标直接预测卷积核表达能力更灵活却容易产生较大的计算与存储开销KPConv 等方法先设置核点再根据手工设计的空间关联规则组合权重效果会受到核点布局和规则选择的影响。论文 Figure 1PointNet、PointConv、KPConv 与 PAConv 的算子结构对比看 Figure 1 的重点不是各网络有多少层而是点的位置怎样影响特征变换。PointNet 的位置相关性较弱PointConv 直接生成核KPConv 借助预定义核点而 PAConv 引入一组共享的基础权重再让每对邻居根据位置决定如何组合它们。1.2 PAConv 要解决的两个矛盾这篇论文的核心问题可以概括为第一如何让点云卷积核随局部空间关系变化而不依赖固定网格或手工核点第二如何获得这种动态性却不必为每一对邻居从零预测完整的高维权重矩阵。作者的关键洞察是动态卷积核不一定要直接生成也可以通过少量可学习基础矩阵的加权组合得到。二、方法整体框架论文 Figure 2二维卷积与 PAConv 的整体机制重点展示 ScoreNet、Weight Bank 和 Kernel GenerationFigure 2(b) 给出了最重要的数据流首先对中心点及其邻居提取位置关系随后ScoreNet 根据几何信息产生每个基础矩阵对应的权重系数再从 Weight Bank 中取出共享的基础矩阵并进行加权求和获得这一点对专属的卷积核最后用动态卷积核变换邻居特征并通过对称操作聚合得到中心点输出。位置关系 → ScoreNet 生成组合系数 → Weight Bank 提供基础矩阵 → 动态组装卷积核 → 邻域特征变换与聚合论文先用一个统一公式描述点卷积其中是中心点是邻居点是邻居点的输入特征表示中心点邻域为根据两点位置关系确定的卷积核则表示 MAX、SUM、AVG 等聚合方式。其输入是邻域几何信息及点特征输出是中心点的新特征。PAConv 不重新定义整个卷积过程而是重点改造其中的如何生成。这也解释了为什么作者强调算子本身而不是另造一套复杂骨干网络在保留局部特征学习与聚合框架的基础上替换固定或共享的特征映射机制就能检验位置自适应卷积是否真正带来收益。三、动态卷积核组装Weight Bank 与 ScoreNet3.1 Weight Bank先准备可以被组合的基础矩阵Weight Bank 是一个包含 M 个可学习矩阵的集合写作。每个负责将输入通道映射到输出通道。它们不是手工指定给某个空间方位的固定卷积核而是训练中共同学习得到的一组基础变换。直观地说传统方式相当于“每遇到一个点对就预测一整套参数”PAConv 则是“先共享存放 M 套基础变换再决定当前点对应该按什么比例使用”。Weight Bank 的容量 M 决定了可用基础变换的数量但 M 越大不代表性能一定单调提升因为也会引入额外计算和潜在冗余。3.2 ScoreNet从位置关系推断组合比例有了基础矩阵还需要决定“哪些矩阵适合当前点对”。为此作者设计 ScoreNet以中心点和邻居点的位置关系为输入通过 MLP 输出 M 个分数再由 Softmax 归一化其中表示 ScoreNet 中的非线性映射是位置相关的组合系数。Softmax 使这些系数为正且总和为 1便于让不同基础矩阵按相对重要性参与组装。这里的分数并不是分类概率而是面向卷积核组合的软权重。值得注意的是ScoreNet 的具体输入并不限于坐标差。论文在 Table 4 中还比较了加入中心点坐标、两点欧氏距离等信息的配置。这说明 PAConv 学到的是由空间关系驱动的权重选择机制而不是仅依赖一个简单距离标量。3.3 Kernel Generation用低维系数组合高维卷积核真正的核心公式非常简洁输入是当前点对的 M 个组合系数和共享的 M 个基础矩阵输出是一个的动态卷积核。由于不同邻居的空间关系不同ScoreNet 输出的系数会变化组装得到的卷积核也相应变化而 Weight Bank 在不同点对之间共享避免了直接预测所有核参数。比如面对位于中心点上方和侧面的两组邻居即使其输入特征相似ScoreNet 也可能给基础矩阵分配不同系数让两组特征经历不同变换。这只是对机制的直观理解并不意味着某个基础矩阵必然对应“上方”或“侧面”空间含义是在训练中形成的论文并未给每个矩阵预先设定方向标签。PAConv 最值得记住的区别是Weight Bank 学“有哪些基础特征变换”ScoreNet 学“当前空间关系该如何组合这些变换”。两者共同构成数据驱动的位置自适应卷积。四、权重去相关与骨干网络适配4.1 为什么还需要 Weight Regularization仅增加 Weight Bank 中的矩阵数量并不能确保矩阵真的彼此不同。如果多个矩阵最终学到相似变换ScoreNet 即使输出不同组合系数也难以产生足够多样的卷积核。因此论文引入相关性正则项惩罚不同权重矩阵之间的相关程度这里把矩阵元素展开后计算内积并用相应范数归一化。数值越小代表两个基础矩阵越不相似。它的目的不是让每个核变得更大或更小而是减少基础变换之间的重复提高可组合性。论文并没有在所有任务中都启用这一项分类和部件分割实验未使用该正则场景分割及相关消融则检验了它的作用。4.2 如何接入 PointNet、DGCNN 和 PointNet作者刻意选择三个经典骨干来验证算子而不是将结果完全建立在复杂的新网络设计上。针对 ModelNet40 分类用 PAConv 替换 PointNet 编码器或 DGCNN 的 EdgeConv 特征变换针对 ShapeNet Parts用它替换 DGCNN 的相关编码操作针对 S3DIS 室内语义分割则替换 PointNet 编码阶段的 MLP保留其编码器—解码器总体框架。需要准确理解论文所谓“不改变网络配置”主要是不重新设计复杂网络层级而非所有实现细节逐字不动。作者在 DGCNN 中把邻域搜索改为三维坐标空间的 KNN在 PointNet 场景分割中也用 KNN 替代球查询并采用简单的单尺度分组SSG。论文还实现了 CUDA 算子来提升执行效率。这些选择使结果更接近对卷积操作本身的比较但不同方法间的预处理、投票策略仍需区分。五、实验结果与消融分析5.1 三项任务与评价方式实验分别覆盖 ModelNet40 物体分类、ShapeNet Parts 部件分割和 S3DIS 室内场景语义分割。分类主要报告 Accuracy部件分割报告类别平均 mIoUCls. mIoU和实例平均 mIoUIns. mIoU场景分割主要报告 mIoU。论文使用 voting 表示测试阶段的多尺度推理有无 voting 的结果不应直接当作完全相同设置进行比较。下面均沿用论文原表中的实验数值性能差值用百分点描述。5.2 ModelNet40简单骨干也能获得明显提升论文 Table 1ModelNet40 分类结果重点比较 PointNet、DGCNN 与 PAConv以及有无 voting 的区别PointNet 基线准确率为 89.2%接入 PAConv 后在不使用 voting 的情况下达到 93.2%提升 4.0 个百分点。DGCNN 基线为 92.9%接入 PAConv 后不使用 voting 达到 93.6%使用 voting 则进一步达到 93.9%。这表明位置自适应卷积不仅适用于较弱的共享 MLP 骨干也能继续提升已有局部关系建模能力的 DGCNN。其中 93.6% 的无 voting 结果值得注意对比依赖多尺度测试增强的结果它更能体现模型本身的效果。不过表内其他方法可能使用不同的点数、法向量或推理策略因此不宜把这一表述扩展为“完全公平地击败所有方法”。5.3 ShapeNet Parts提升的是局部几何区分能力论文 Table 2ShapeNet Parts 部件分割定量结果比较 Cls. mIoU 和 Ins. mIoU在 DGCNN 骨干上原始结果为 Cls. mIoU 82.3%、Ins. mIoU 85.2%PAConv 无 voting 时达到 84.2% 和 86.0%使用 voting 时达到 84.6% 和 86.1%。论文强调的 2.3 和 0.9 个百分点增益对应的是带 voting 的 PAConv 与表中的 DGCNN 基线数值。即使不使用 votingPAConv 在两项指标上也有所提升。论文 Figure 3ShapeNet Parts 部件分割可视化包含摩托车、台灯、飞机、椅子与手枪Figure 3 将真实部件标签与 PAConv 预测结果并排展示。它的作用是提供定性补充当同一物体内部存在复杂边界时不同空间位置需要不同的局部特征响应。图像能够帮助读者理解这一点但不能单独证明模型在所有类别上都优于其他方法。5.4 S3DIS场景分割收益与计算代价论文 Table 3S3DIS Area-5 语义分割结果与 FLOPs注意区分 BLK 和 Grid 预处理在使用块采样BLK的方法中PointNet 的 mIoU 为 57.27%PAConv 加入相关性正则及 voting 后达到 66.58%对应提升 9.31 个百分点。在表中KPConv deform 的 67.1% 和 PosPool 的 66.7% 使用的是 Grid 预处理不宜忽略不同采样机制就断言 PAConv 是整张表的绝对第一。PAConv 最有说服力的结论是在相对朴素的 PointNet 框架和块采样设置下获得明显性能提升并保持较低运算量。同样以 4096 个点为输入Table 3 报告 PAConv 为 1253M FLOPs/sample而 PosPool 为 2041M减少约 38.6%KPConv deform 为 2042M。这里比较的是论文报告的运算量不等于所有设备上的推理耗时也不包含对训练时间的全面结论。论文 Figure 4S3DIS Area-5 场景分割可视化输入、真实标签与预测结果三行对照Figure 4 用室内场景中的语义区域展示分割效果可结合 Table 3 理解PAConv 的性能提升不只出现在独立物体上也延伸到了具有不同尺度和空间布局的真实室内场景。5.5 ScoreNet 消融输入信息和归一化都会影响性能论文 Table 4ScoreNet 的位置输入表示消融检验不同坐标轴与完整几何信息的作用只采用某一个坐标轴及距离信息时mIoU 分别为 63.12%、63.31% 和 64.77%同时输入三轴坐标差、中心点坐标与欧氏距离时达到 65.63%。这说明模型需要的不只是“相隔多远”还包括相对方向以及位置上下文。位置编码越充分ScoreNet 越容易区分复杂的三维邻域关系但表格仅验证了论文测试的几种配置并不意味着特征越多就必然越好。论文 Table 5ScoreNet 分数归一化方式消融比较无归一化、Sigmoid、Tanh 变体与 SoftmaxSoftmax 对应 65.63% mIoU高于 Sigmoid 的 64.91% 和不归一化的 64.28%。这组结果支持作者的设计将多个基础矩阵的组合系数放在一起归一化比独立控制每个分数更适合当前任务。原因可以直观理解为 Softmax 强化了不同基础矩阵之间的相对选择关系但这属于对实验结果的机制解释并非对所有归一化方法的普适定理。5.6 Weight Bank 消融矩阵数量不必一味增大论文 Table 6Weight Bank 的矩阵数量 M 对 S3DIS mIoU 与 FLOPs 的影响M 2 时模型已能得到 65.05% mIoU对应 561.8M FLOPsM 16 时达到本组最高的 65.63%但 FLOPs 增加到 1253M。也就是说增加 14 个基础矩阵只带来 0.58 个百分点提升却显著提高了运算量。M 4 和 M 8 的结果还存在波动说明“更多矩阵”并不等价于“稳定更好”。从工程部署角度看这张表尤其重要较小的 Weight Bank 可能是可接受的性能—计算折中。论文 Table 7相关性正则的有效性比较 mIoU 与不同基础权重矩阵间的 Pearsons R在 Table 7 的消融设置中不使用正则时 mIoU 为 65.63%平均 Pearsons R 为 0.5393加入相关性损失后mIoU 达到 66.58%Pearsons R 降为 -0.0333。相关性下降与分割性能提升同时出现为“基础矩阵应保持差异化”的设计提供了实验证据。不过这里应按 Table 7 的同表设置进行理解不要将其与 Table 3 中含不同 CUDA 实现及 voting 标记的各行混为一谈。论文 Figure 5ScoreNet 在 x-y、x-z、y-z 平面上的分数空间分布可视化Figure 5 展示不同权重矩阵在不同空间平面上的高分区域并不相同某一矩阵在哪些位置更被选中是通过 ScoreNet 学出来的。它直观支撑“矩阵形成不同空间关系偏好”的解释也回应了一个关键疑问为什么有限个基础矩阵能够组合成大量不同的动态卷积核因为不仅基础矩阵可学习选择它们的分数还是连续随空间位置变化的。5.7 鲁棒性对扰动的抵抗能力有边界论文 Table 8S3DIS Area-5 上对点顺序、旋转、平移、缩放与抖动的扰动测试无扰动时表中 PointNet 骨干和 PAConv 分别为 59.75% 与 65.63%随机打乱点顺序后PAConv 为 65.64%几乎不变符合对称聚合操作的置换不变性。面对 0.2 平移扰动PointNet 降至 22.33%PAConv 仍有 55.81%差距非常明显。但 PAConv 在旋转等扰动下同样存在性能下降例如 90° 旋转后为 61.66%所以论文支持的是相对更稳健而非“天然旋转不变”。六、总结与思考如果把 PAConv 压缩成一句话它用共享的 Weight Bank 提供基础特征变换再用 ScoreNet 根据点对的空间位置生成组合系数从而以较低的核预测成本得到位置自适应卷积核。从方法设计看最重要的不是复杂的网络堆叠而是把“核的内容”和“核的选择”拆开前者由可学习的基础矩阵负责后者由几何条件驱动。相关性正则进一步防止基础矩阵学习到重复的变换使动态组装具有实质意义。实验上ModelNet40、ShapeNet Parts 与 S3DIS 的结果分别说明这种机制可以改善物体级识别、部件级理解与场景级语义分割Table 4–7 则解释了输入表示、归一化、矩阵数量和去相关为何重要。从工程角度看可以继续关注两个问题。第一Table 6 已表明 M 2 与 M 16 的性能差距相对有限但计算量相差明显因此部署时值得按设备预算重新寻找组合数量。第二PAConv 的 ScoreNet 主要依靠几何信息生成组合系数其在更强噪声、点密度变化或跨数据集迁移下是否保持优势还需要额外实验验证这属于基于方法设定的后续思考不是论文已经给出的结论。这篇论文真正有启发的地方是面对不规则数据不一定要为每个位置完整预测一套高维参数学习一组可复用的基础变换再学习随位置变化的组合规则也能兼顾灵活性与效率。

相关新闻

EMUI8开机执行sh脚本:修改ramdisk与init.rc的完整指南

EMUI8开机执行sh脚本:修改ramdisk与init.rc的完整指南

做 Android 系统定制的人,应该都碰到过这类需求:手上的设备跑的是 EMUI8(某厂商基于 Android 8.x 开源系统深度定制的 ROM),希望在设备每次开机时自动执行一段 sh 脚本。可能是要调整内核参数、挂载额外分区、拉一个本…

2026/10/17 6:51:00 阅读更多 →
使用ftrace 定位显示卡顿问题分析

使用ftrace 定位显示卡顿问题分析

问题背景:在3OS 虚拟化平台下,在安卓系统中(其中一个guest OS),优盘拔掉的时候, 显示界面卡顿。异常情况下:当前usb 的hub event work 在worker0:4 上面runing 状态,此时gpu的work无…

2026/10/17 6:51:00 阅读更多 →
C#读取SQLite日期时间报错:原因剖析与四套解决方案

C#读取SQLite日期时间报错:原因剖析与四套解决方案

1. 报错现场:一个看似简单却让人抓狂的日期时间解析问题如果你在用 C# 操作 SQLite 数据库,大概率在某个时刻见过这么一句话:String was not recognized as a valid DateTime.翻译成人话就是:程序在把一个字符串转成DateTime时&am…

2026/10/17 6:50:00 阅读更多 →

最新新闻

混合检索实战:融合关键词与向量检索,破解RAG精度难题

混合检索实战:融合关键词与向量检索,破解RAG精度难题

做RAG应用的人,大概率都踩过同一个坑:向量检索跑得飞快,召回结果看着也都是“相关话题”,可用户问具体型号、单据编号、法条原文的时候,它完全不在状态;换成纯关键词搜,精确词是能中了&#xff…

2026/10/17 7:16:05 阅读更多 →
React WorkLoop全景解析:从ensureRootIsScheduled到commitRoot

React WorkLoop全景解析:从ensureRootIsScheduled到commitRoot

写 React 源码解析最怕什么?就是只记住几个函数名,比如ensureRootIsScheduled、commitRoot,但不知道它们之间怎么咬合,不知道一条更新从触发到页面真正变掉,中间到底过了多少关。这篇是这个系列的第 3 篇,我…

2026/10/17 7:16:05 阅读更多 →
BGP综合实验拆解:从邻居建立到路由反射与选路控制

BGP综合实验拆解:从邻居建立到路由反射与选路控制

很难找到一个比 BGP 更"基础又劝退"的协议。很多朋友跟我一样,第一次配 BGP 时照着文档敲完 neighbor、看着状态机跳到 Established,就长舒一口气,觉得实验做完了。直到真正面对题目只写着"bgp综合实验"四个字、要求在模…

2026/10/17 7:16:05 阅读更多 →
Embedding选型实战:提升RAG检索质量的完整指南

Embedding选型实战:提升RAG检索质量的完整指南

做RAG(检索增强生成)系统的朋友应该都有过这种经历:知识库搭完了,文档切好了,向量库也建起来了,结果一问业务问题,答案总是"差点意思"。要么召回的片段跟问题八竿子打不着&#xff0c…

2026/10/17 7:16:05 阅读更多 →
混合检索实战:BM25与向量召回融合的搜索优化方案

混合检索实战:BM25与向量召回融合的搜索优化方案

1. 混合检索到底解决了什么问题:两套检索逻辑各自的天花板这两年做了好几个搜索相关的项目,从站内商品搜索到文档知识库,一个最直观的感受是:没有一种检索方案能通吃所有查询。传统的关键词检索在专有名词、型号、编号这类精确词上…

2026/10/17 7:16:05 阅读更多 →
拆解供应链体系:核心指标、牛鞭效应与信息流优化实践

拆解供应链体系:核心指标、牛鞭效应与信息流优化实践

做供应链这个领域十几年,每次跟人介绍自己的工作,十次有八次会被理解成“管仓库的”或者“搞运输的”。这也难怪,供应链这个词听起来确实抽象,但它本质上就是一家企业、甚至一个行业能不能赚钱、能不能活下去的底层逻辑。这篇是这…

2026/10/17 7:15:05 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →