新闻详情

新闻详情

首页 / 资讯中心 / 详情

SSD+MobileNet+KCF:地铁客流检测复现全指南

发布时间:2026/9/30 9:36:46来源:尧图网络
SSD+MobileNet+KCF:地铁客流检测复现全指南
简介基于深度学习的地铁客流实时监测PDF文档面向轨道交通运营管理人员、智能交通从业者及深度学习目标检测方向的研究人员针对传统人工统计、红外感应、三辊闸等客流监测方式精度低、影响通行等问题提出以SSD算法为核心、MobileNet为主干网络并结合KCF目标跟踪的实时客流检测方案。文档采用量化对比方式分析深度可分离卷积在计算量上的显著优势并给出Ubuntu系统下基于caffe框架、RTX 2080 Ti显卡的实验环境与深圳地铁站口真实视频数据测试结果mAP可达87.9%。资源为单份PDF文件大小1.56MB包含公式推导、算法对比与实验结果分析内容紧凑可直接阅读适合作为课题组参考文献、技术方案设计参考或专业课程辅助材料。已有160人学习文档从方法原理到实验验证的完整链条对提升客流统计精度与系统实时性有实际参考价值。1. 深度学习客流监测这篇 PDF 到底能帮你解决什么问题地铁站台的客流统计表面是计数问题本质是基于深度学习的目标检测与跟踪问题。这篇论文拿 SSD 做检测框架把主干网络从 VGG16 换成 MobileNet再在检测后接 KCF 目标跟踪在深圳地铁站口摄像头数据上把 mAP 做到 87.9%同时保住了实时推算能力。它对应解决的是人工数人主观误差大、红外容易漏数、三辊闸挡通行这三个传统方案都覆盖不了的问题。适合三类人做毕设或课题的在校生需要论证视频客流方案可行性的地铁信息化从业者以及刚接触目标检测落地、想找一条完整技术路线照着走的工程师。下载这份 PDF 拿到的不只是一篇文献还有一条能从算法选型走到训练评估的完整过程值得照着复现一遍。2. 算法选型SSDMobileNet 的真实账本和两个取舍地铁客流检测的难点在于场景固定人流流动每个站的摄像头安装角度、闸机口排队密度差别很大。论文在选型上做了三个决定用 one-stage 的 SSD 而不是 two-stage 的 Faster R-CNN用 MobileNet 替换 VGG16在检测后挂 KCF 跟踪。这三个决定分别对应速度、算力、稳定性三笔账。下面把每一笔账算清楚你才知道复现时哪里能改、哪里不能动。2.1 one-stage 与 two-stage实时性这笔账怎么算目标检测领域把算法分成两大类。two-stage 类算法先提候选区域再对每个候选区做分类和位置精修典型代表是 Faster R-CNN精度高但慢。one-stage 类算法直接在特征图的每个位置预测边界框和类别典型代表是 SSD 和 YOLO速度快但精度上要吃点亏。客流监测量大、路数多每路都要保持实时论文选 one-stage 是合理的这点不用纠结。SSD 的特殊之处在于它融合了两边的优点借鉴 YOLO 的回归思路同时引入 Faster R-CNN 的 Anchor 机制用全图不同位置、不同尺度的特征图做回归。这样既保留了 one-stage 的速度也把窗口预测精度往 two-stage 拉近。更关键的是SSD 在多个不同尺度的特征图上分别做预测大特征图负责小目标小特征图负责大目标这和地铁场景天然契合——站台远端的人很小近处的人很大单一尺度特征图根本接不住这种跨度。算法类型代表速度精度适合场景two-stageFaster R-CNN慢高对实时性要求低的精细检测one-stageSSD / YOLO快中上实时视频流、嵌入式设备YOLO 虽然也能实时但论文点出了它的两个缺陷容易漏检物体尺度变化大时泛化能力下降。换句话讲YOLO 在人挨着人、远近差距大的站台场景里容易翻车SSD 的多尺度特征图设计更稳。所以选 SSD 不是因为它比 YOLO 高级而是因为这个场景里尺度多样性是主要矛盾。2.2 主干网络换血VGG16 到 MobileNet 的计算量对比SSD 原版的主干网络是 VGG16论文明确说它有大约 140M 参数量对内存需求大在追求实时性的场景里表现欠佳。换主干网络是这篇文章的核心改动也是复现时最值得关注的一步。MobileNet 借鉴了 Inception 的思路提出深度可分离卷积。普通卷积是对所有通道同时做卷积深度可分离卷积把它拆成两步第一步叫深度卷积特征图的每一个通道各自用一个卷积核做卷积通道之间互不干扰第二步叫点卷积用 1×1 的卷积核把前面的结果在通道维度上融合起来。效果和标准卷积基本一致但参数量和计算量大幅下降。假设卷积核大小为 Dk输入特征图大小为 Dout通道数为 M卷积核个数为 N论文给出了五条公式核心结论在第 5 条深度可分离卷积和标准卷积的计算量之比约等于卷积核大小平方的倒数。Dk 取 3×3 时计算量降为原来的 1/9。这意味着同样的视频分辨率下网络跑完一次前向的时间大幅缩短GPU 负载和功耗也随之下调。卷积类型计算量公式3×3 核相对计算量标准卷积Dk² × Dout² × M × N9深度卷积Dk² × Dout² × M1点卷积Dout² × M × NN按通道数放大深度可分离卷积深度卷积 点卷积约 1总和复现时要注意MobileNet 替换 VGG16 不是简单换一个网络名字SSD 的默认框配置、特征图层的选择都要跟着调。原版 SSD 用 VGG16 的 conv4_3、conv7、conv8_2 等层做预测换成 MobileNet 后这些层的名称和输出尺寸全部变了需要在 prototxt 里重新指定特征提取层。我一般会先打印每层输出的 shape再对照原版 SSD 的 anchor 设置逐层修改这一步没有捷径纯靠对着日志调。2.3 KCF 跟踪检测后加一层缓存减少漏检和功耗论文在检测之后接了 KCF 目标跟踪这个设计很多人第一次看会觉得多余其实它是实时方案里很关键的一笔。目标检测对每一帧都做全图推理计算量固定而 KCF 是一种相关滤波跟踪算法计算量远小于一次完整的目标检测。常见的做法是检测器每隔若干帧跑一次全图中间帧用 KCF 跟上一步的检测框做跟踪把目标接住。这样做有两个直接收益。第一检测不必每帧都跑系统整体运行时间下降帧率上去实时性更有保障第二当目标被短暂遮挡或检测器偶发漏检时KCF 的预测框能把目标续上防止检测丢失同时降低整个系统的运行功耗。论文原文里明确提到了降低功耗这一点说明这套方案的落点不只是实验室精度而是考虑到实际部署的设备负载。KCF 的局限也要清楚它对目标的尺度变化和形变比较敏感站台上一个人从直立变为弯腰、转身跟踪框就可能漂移。所以它只能当缓存不能当主力。正确姿势是检测定期校正跟踪框跟踪框反馈给检测做关联两者互相兜底。这个设计是后面第四章训练和第五章避坑的重要背景先记住这个结构。3. 复现路径caffe 环境、视频抽帧与 lmdb 数据制作论文的实验环境是 Ubuntu 16.04、caffe 开源框架、GPU 为 RTX 2080 Ti、CPU 为 Intel Xeon E5-2440 v2训练数据来自深圳地铁各站口摄像头的视频。严格复现意味着你得把这一套环境重新搭起来。caffe 现在已经基本不更新了新项目多数转向 PyTorch但既然论文基于 caffe 写的我建议先按原样跑通一遍把数据流程吃透再考虑迁移到别的框架。这里讲的是能直接照做的步骤。3.1 Ubuntu 环境依赖、caffe 编译和两个易错点先装系统依赖Ubuntu 16.04 下用 apt 装齐。NV 驱动和 CUDA 建议按显卡驱动版本配套来2080 Ti 用 CUDA 9.0 或 10.0 都常见但 caffe 对 CUDA 10 的兼容需要验证稳妥起见先上 CUDA 9.0。sudo apt-get update sudo apt-get install -y \ libprotobuf-dev libleveldb-dev libsnappy-dev \ libopencv-dev libhdf5-serial-dev protobuf-compiler \ libgflags-dev libgoogle-glog-dev liblmdb-dev \ libatlas-base-dev装完依赖后进入 caffe 源码目录复制 Makefile.config 模板再改。这里是编译阶段最常翻车的两个点一是没有开启 USE_CUDNNGPU 利用率上不去二是 BLAS 选了 MKL 但机器上只有 ATLAS链接直接报错。cp Makefile.config.example Makefile.config # 打开 Makefile.config确保以下几项被正确配置 # USE_CUDNN : 1 # BLAS : atlas # CUDA_DIR : /usr/local/cuda-9.0 make -j8编译完成后跑一下make runtest确认框架可用再编译 Python 接口make pycaffe后续抽帧脚本要用到 OpenCV 而不一定用到 pycaffe但 val 脚本会用。整个过程如果哪一步缺包报错信息基本会点名到具体库对照 apt 装上再重跑即可。提示caffe 的 Makefile.config 里还有一行OPENCV_VERSION : 3如果用 OpenCV 3.x 必须打开否则编译时接口不匹配会报一堆链接错误。3.2 视频抽帧与打标从站口录像到 Pascal VOC论文说得很简短把视频数据读取为图片数据然后打标制作成 lmdb 格式。实际操作分两步。第一步是抽帧这里的关键是间隔怎么选。站台人流动慢连续帧之间目标位移小10 帧抽 1 帧都有大量冗余如果是早晚高峰、人流快速移动建议 5 帧抽 1 帧。抽太密浪费时间抽太稀会丢掉目标出现和消失的瞬间影响后续跟踪训练。import cv2 import os video_path shenzhen_station_01.mp4 frame_dir frames/st01 os.makedirs(frame_dir, exist_okTrue) cap cv2.VideoCapture(video_path) interval 5 # 人流较快时取 5平峰可取 10 idx 0 saved 0 while True: ret, frame cap.read() if not ret: break if idx % interval 0: cv2.imwrite(f{frame_dir}/st01_{saved:06d}.jpg, frame) saved 1 idx 1 cap.release() print(saved:, saved)抽完帧后用 LabelImg 打标这是最耗时的一步。论文的场景只有一类目标就是人。如果做的是毕设建议只标 person 一类不要顺手把闸机、屏蔽门也标进去类别越多模型需要区分的维度越多收敛越慢。打标导出的是 Pascal VOC 格式的 XML 文件每个 XML 对应一张图片记录目标框的类别和坐标。在密集人群场景里打标的标准要统一。我一般定三条规则遮挡超过一半的不标小于 20 像素的目标不标标了模型也学不到有效特征正在进出画面、只露出一半的也不标避免给模型喂半截样本。规则不统一后面训练出来的模型在同样密集场景下会乱。3.3 生成 lmdbcreate_list.py 与 create_data.sh 的三个改动点打标完成后需要把 VOC 格式转换成 caffe-SSD 需要的 lmdb。先建好 VOC 标准目录结构把图片放进 JPEGImagesXML 放进 Annotations再准备 trainval.txt、test.txt、labelmap 文件。trainval.txt 每行是图片相对路径和 XML 路径labelmap 里定义类别 ID。# 假设数据放在 $CAFFE_ROOT/data/VOCdevkit/VOC2007 下 ./data/VOC2007/create_list.sh ./data/VOC2007/create_data.sh这两个脚本拿来即用基本不行必须改三个地方。第一数据集路径写死了 VOC2007/2012要改成自己的目录名第二labelmap.prototxt 里的类别要改成 person原模板有 airplane、car 等一堆类不改会报类别数不一致第三图片尺寸处理SSD 默认 300×300如果要提速就维持 300要提精度就改 512但算力和显存占用同步上升。item { name: none_of_the_above label: 0 display_name: background } item { name: person label: 1 display_name: person }三个改动点里最容易忽略的是 labelmap 的 label 必须从 0 开始0 固定给 backgroundperson 从 1 开始。如果把 person 写成 0caffe 会把所有人当作背景训练出来的模型对谁都检测不出来。这个错我在早期复现时犯过一次血泪教训后面第五章专门讲这类坑。4. 训练与评估把 mAP 87.9% 拆开看参数怎么设论文给出的最终结果是算法模型的 mAP 达到 87.9%实验在 Ubuntu 16.04 下完成GPU 是 RTX 2080 Ti。要复现这个数字数据构成和训练参数都得对齐。论文没有公开全部超参数下面这套是我按 SSD-MobileNet 常规做法补全的和论文结果可比性最好。4.1 训练集构成与类别设计数据来自深圳地铁各站口摄像头内容决定了模型的眼界。只用一个站的数据训练另一个站直接测精度大概率会掉因为摄像头俯仰角、站台宽度、光照都不同。我一般会在训练时把多个站点的数据混在一起并刻意保留一部分远距离和拥挤场景的样本。类别设计就一个词单类。地铁客流检测只需要人这一个类别。单类的好处是模型不用在人与人、人与物之间做区分梯度更新更集中。打标时把行人都框进来包括排队、行走、站立三种姿态坐轮椅、推行李箱的也属于人要框别漏。漏标太多模型会把这一部分人当背景推理时自然检测不出。论文提到除远距离、过于密集目标检测不出外基本能满足客流统计要求这句话反过来就是数据缺口的主要来源远距离的小目标和过于密集的遮挡目标。补数据时优先补这两类场景比单纯增加样本总量更有效。4.2 solver.prototxt 里的关键超参数caffe 的训练配置集中在 solver.prototxt。我常用的起点配置如下和论文的硬件环境匹配2080 Ti 上 batch size 16 单卡能跑动如果显存小就降到 8。net: models/MobileNet/SSD_300x300/train.prototxt test_iter: 200 test_interval: 2000 base_lr: 0.0005 momentum: 0.9 weight_decay: 0.0005 lr_policy: multistep gamma: 0.1 stepvalue: 40000 stepvalue: 80000 max_iter: 120000 solver_mode: GPU几个参数的选择逻辑说明一下。base_lr 用 0.0005这个值在 SSD 系列里比原版 0.001 略低因为 MobileNet 的参数量小学习率太高容易震荡导致 loss 曲线上下乱跳。stepvalue 分两段降学习率前 4 万步用 5e-4 做粗调4 万到 8 万步降十倍做精调8 万步之后再降十倍收尾。120000 步在单卡 2080 Ti 上大概要跑十八到二十个小时如果时间紧可以把 max_iter 压到 60000但 mAP 会掉 2-3 个点。训练期间要盯的指标不只是 mAPloss 曲线更有诊断价值。如果 loss 前几千步不降先检查数据是不是空的、label 是不是从 0 开始的如果 loss 降得很猛但 mAP 不涨大概率是过拟合或验证集与训练集分布差太多。这一层的排查逻辑比盲目调参重要得多。4.3 评估指标mAP 看整体单类 AP 看场景短板mAP 是各类别 AP 的平均这里只有 person 一类所以 mAP 就等于 person 类的 AP。87.9% 在 VOC 口径下是一个相当能用的数字说明检测框和真实框的 IoU 在 0.5 阈值下能稳定命中。但 mAP 有它的盲区它是一个整体指标一个站台表现 95%、另一个站台表现 70%平均下来还是 87.9%你很难从数字里看出短板在哪。复现时我会额外做两个维度的评估。第一个维度是按距离分组算 AP近景目标单独算中景单独算远景单独算对比哪一组掉得厉害。第二个维度是按人流密度分组算 AP稀疏场景一组拥挤场景一组。这样你就知道该补视频源里面哪一类数据而不是盲目加样本。下表是典型的场景表现分布和论文提的远距离、过于密集检测不出一致场景典型 AP 范围主要失败模式近景单人0.95 以上基本稳定中景小群体0.85 左右相互遮挡导致漏检远景低像素0.70 以下目标太小特征不足密集人流0.75 左右漏检和误检同时出现理解了这层论文里除远距离、过于密集目标检测不出外这句话就不是一句简单的免责说明而是给后续优化划出了方向要么补数据要么调 anchor 的尺度分布要么换更高分辨率输入。后面避坑章节会展开讲。5. 避坑客流检测复现中五个高频翻车点论文里一句话带过的问题往往就是真正动手时卡你一周的坑。以下五条来自我自己的复现经历和同行的交流每一条都按现象、原因、解决的顺序写建议你复现时对照排查。5.1 远距离乘客检测不出训练样本里缺小目标现象近处的乘客框得很稳站台远端的人一个都不出框或者出了框但置信度很低。原因训练数据里远景小目标的占比太低。SSD 在小尺寸特征图上负责预测大目标在大尺寸特征图上负责预测小目标但如果样本里根本没有多少小目标那些大特征图上的 anchor 从来没有学到过小的人长什么样。论文里明确说远距离目标检测不出根源就在这里。解决一是回去补抽帧专门截取站台远端、候车区域的大场景画面让打标样本里小目标占比提高到 20% 以上二是把输入分辨率从 300×300 提到 512×512小目标的像素数变多特征更明显三是检查 train.prototxt 里 anchor 的 min_size 和 max_size 设置确保有足够小的 default box 去匹配小目标。5.2 密集人群漏检严重NMS 阈值一调就崩现象早晚高峰时段模型把人检测成一片框和框重叠率高NMS 一压输出就只剩几个孤零零的框中间的人全没了。原因NMS 阈值设得过高重叠框被大量保留检测结果里全是近似重复的框阈值设得过低密集人群里本来挨得近的真实目标又被误杀。漏检在人群密集时最容易爆发因为站台场景的粘连程度远高于一般行人检测数据集。解决把 NMS 阈值从默认的 0.6 往 0.45 方向调保留靠前排名的框同时在打标阶段把遮挡严重的样本也标进去让模型在训练时见过人被挡住一半仍然是一个框的情况。如果调整后误检变多就把置信度阈值从 0.5 提到 0.6把低分框压掉。密集场景下NMS 和置信度是一对互锁的旋钮要一起调不要只动一边。5.3 KCF 跟踪框漂移把同一个人计了两次现象人从站台一端走向另一端检测框偶尔消失KCF 框漂到背景上等检测框重新出现时系统把同一个人当成新目标计数。原因KCF 是相关滤波跟踪它靠目标外观建模遇到遮挡、快速转身、尺度骤变时跟踪点会漂。论文用 KCF 的本意是防检测丢失但如果你只跟不校跟踪框一旦漂走就再也拉不回来。解决给跟踪加两个约束。第一每一帧计算 KCF 跟踪框和最近一次检测框的 IoU低于 0.3 就判定跟踪丢失强制回归检测结果第二设置跟踪寿命上限比如连续跟踪超过 60 帧且没有新的检测匹配就主动终止避免长漂移积累。计数逻辑上用目标 ID 的首次出现位置和最后消失位置做匹配同一个 ID 只计一次从源头杜绝重复计数。5.4 帧率虚高GPU 没喂饱CPU 解码拖后腿现象模型推理单帧只要 20ms理论上 50 帧每秒但实际视频处理只有十几帧每秒延迟感明显。原因只看模型推理时间忽略了视频解码和图像预处理。OpenCV 读视频依赖 CPU 解码RTSP 流更是如此CPU 解码跟不上 GPU 推理速度GPU 只能在那边空转等待。论文降低功耗的目标没问题但解码这个瓶颈不解决实时性就是纸面数字。解决先确认瓶颈在哪个环节。最简单的办法是把视频抽帧放到独立线程用队列缓冲模型推理线程从队列拿图解码线程只负责填队列。如果瓶颈在解码本身就换硬解码方案。NVIDIA 平台用 Jetson 的硬解单元x86 平台可以试 FFmpeg 的 CUVID 解码。验帧率时不能只看模型侧要看从摄像头到输出计数这个完整链路。5.5 换摄像头视角后 mAP 骤降没有做视角适配现象训练和验证都用一个站的摄像头指标好看换到另一个站测试mAP 直接掉十个点漏检和误检同时出现。原因每个站台的摄像头俯仰角、安装高度、站台宽度、光照方向都不一样模型学的特征和新视角不匹配。论文数据来自深圳地铁多个站口但如果训练集里各站点占比不均模型就会偏向样本多的那一类视角。解决新站点上线前抽半小时视频用现有模型做一次预标注再人工修正把这个站的数据加入训练集做微调。视角差异大的场景建议在训练时加入多角度数据增强上下翻转、小角度旋转、亮度抖动让模型对不同视角更鲁棒。微调时学习率设 0.0001迭代 20000 步以内就够不要从头训。6. 上线验证给模型做一次站台体检的检查清单模型在测试集上 mAP 达标不等于在站台上能用。上线前我会强制自己过一遍体检流程结构就三条必测场景、计数口径、跟踪稳定性每一项都直接对应一个容易翻车的点。必测场景按人流密度分三档。平峰时段站台人少、目标分散重点验证有没有漏检尤其是坐在候车座椅上、身体姿态低的人高峰时段目标密集重点验证 NMS 参数和跟踪丢失率看同一个目标有没有被重复计数早晚逆光时段摄像头画面对比度低重点验证模型在低照度下的表现。这三个场景分别对应论文提到的高精度、实时性和外界因素干扰一个都不能省。计数口径要提前定死。站在运营角度需要的是进入付费区的人数或站台滞留人数而模型输出的是每帧的检测框两者之间隔着一条时间线。我一般会画一条虚拟计数线目标检测和跟踪框的质心跨过这条线才计入一次质心在线的同一侧来回抖动不算。置信度阈值建议设在 0.5 到 0.6 之间定太低误检多定太高漏检多。这套口径在现场要拿人工计数抽检十分钟做校准误差在正负 5% 以内才能算通过。提示置信度阈值和 NMS 阈值是两个不同的参数置信度管这是不是人NMS 管两个框是不是同一人。调参时要分开调混在一起容易越调越乱。最后是跟踪稳定性验证。选一段三分钟高峰视频逐帧回放统计每个目标 ID 的存活时长和跳变次数。正常行走的人ID 应该连续不会在走到一半时突然换成新 ID如果频繁跳变说明检测框和跟踪框的匹配逻辑有问题要先修匹配再谈精度。这套体检做完我才敢把模型接进实际的客流统计系统。从那以后我每换一个新站点的数据都强制自己按这套流程走一遍先体检、再上线不再因为 mAP 数字好看就直接部署。客流计数的准确率不在训练日志里而在每一个真实站台的角落里。希望这套检查清单帮你在复现和落地的路上少踩几个坑。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于JSP的网上投稿系统专家审稿流程设计与实现 2026/9/30 10:29:54

基于JSP的网上投稿系统专家审稿流程设计与实现

简介:这份资源是面向计算机软件专业毕业设计场景的完整论文文档,选题为基于Jsp的网上投稿系统设计与实现,并带有专家审稿版本,适合正在准备毕设选题、需要参考系统设计与论文写作框架的本科生及指导教师。压缩包内共1个doc文件&am…

阅读更多 →
JSP网上投稿系统专家审稿模块:状态机设计与权限隔离实战 2026/9/30 10:29:54

JSP网上投稿系统专家审稿模块:状态机设计与权限隔离实战

简介:这份资源是面向计算机软件专业毕业设计场景的完整论文文档,主题为基于Jsp的网上投稿系统设计与实现,并带有专家审稿版本,适合正在准备毕设选题、需要参考同类系统实现思路的本科生与指导教师。文档围绕传统邮寄与电子邮件投稿…

阅读更多 →
Java内存模型JMM本质:线程间信任协议而非内存布局 2026/9/30 10:29:47

Java内存模型JMM本质:线程间信任协议而非内存布局

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
112G/224G SerDes中CTLE为何不做背景自适应?固定均衡与数字DSP分工解析 2026/9/30 10:29:47

112G/224G SerDes中CTLE为何不做背景自适应?固定均衡与数字DSP分工解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
东方通TongWeb安装部署实战:从环境配置到应用上线全指南 2026/9/30 10:29:47

东方通TongWeb安装部署实战:从环境配置到应用上线全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SpringBoot集成TDengine实战:避坑指南与性能调优 2026/9/30 10:29:47

SpringBoot集成TDengine实战:避坑指南与性能调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉