目录
————————————————一、环境感知(自动驾驶实时场景理解)
————————————————二、车位占用检测与流量分析(停车场/路侧场景)
0 背景和意义
• 交通安全:WHO 统计 94% 严重交通事故由人为失误导致,全天候、全工况的 CV 感知是自动驾驶安全落地的“最后一公里”。
• 城市治理:停车难造成 30% 城市拥堵、20% 额外碳排;低成本、可大规模复制的车位状态感知是城市级“碳达峰/碳中和”指标的关键抓手。
• 商业闭环:Robotaxi 需要高精感知降低单车接管率;商业地产需要实时空位数据提升车位周转率→直接带来租金/广告增值。
研究现状(时间轴速览)
表格
复制
| 阶段 | 代表工作 | 关键进展 | 传感器范式 |
|---|---|---|---|
| 2012–2015 | R-CNN, OverFeat | 2D检测起步 | 单目视觉 |
| 2016–2018 | YOLOv2, Faster-RCNN, VoxelNet | 3D检测萌芽 | LiDAR+单目 |
| 2019–2020 | PointPillars, CenterPoint | 纯LiDAR 3D SOTA | 64/128线 |
| 2021 | BEVDet, BEVFormer | 视觉BEV统一表达 | 环视相机 |
| 2022 | BEVFusion, PETR v2 | 多模态BEV融合 | 视觉+LiDAR |
| 2023–2024 | Occupancy Networks, UniAD | 端到端规划感知 | 全模态 |
车位占用检测
• 传统:地磁/超声波(2015 前)→ 单相机+背景差分(2016–2018)→ 实例分割+跟踪(2019–)。
• 2023 年起:BEV+多相机跨车位关联(如 ParkBEV, Alibaba DAMO)。
————————————————
3. 仍未解决的共性问题 & 可行方案
表格
复制
| 问题 | 具体表现 | 攻关路线 |
|---|---|---|
| 极端天气/光照 | 夜间眩光、暴雪点云稀疏 | ① 事件相机+RGB融合;② 基于物理的雨雪点云补全网络(LiSnowNet);③ 自监督域适应 |
| 数据长尾 & 标注成本 | 异形工程车、宠物狗、无牌三轮车样本稀少 | ① NeRF+扩散模型合成(BEVGen);② 主动学习挑帧标注;③ 弱监督:利用闸机/地磁真值自动生成标签 |
| 多模态同步 & 时延 | 相机-LiDAR 微秒级同步困难,BEV 融合延迟>80 ms | ① PTP硬件时钟同步;② 事件驱动异步融合(AsynBEV);③ INT8 量化 + TensorRT 插件 |
| 车位级细粒度误检 | 阴影、相邻车开门、SUV/小车尺度差异 | ① 引入车位几何先验(HDMap车位角点)作为Attention Mask;② 多任务:检测+分割+深度联合优化 |
| 边缘算力受限 | Jetson Nano 跑 8 路 1080p 仅 5 FPS | ① 知识蒸馏:大模型→轻量RepVGG;② Frame-skipping + 光流插帧;③ 专用NPU(地平线BPU) |
把“环境感知”与“车位占用检测/流量分析”这两件事拆开,按“感知任务 → 传感器与数据 → 算法链路 → 工程落地 → 性能指标 → 典型案例”六个维度给出一份可直接落地的详细说明。
————————————————
一、环境感知(自动驾驶实时场景理解)
-
感知任务
• 动态目标:行人、骑行者、机动车、异形障碍(掉落的箱子、动物)。
• 静态目标:车道线(实线/虚线/可变车道)、交通标志(限速/禁停/让行)、红绿灯、路沿、可行驶区域。
• 语义属性:目标朝向、速度、轨迹预测、遮挡关系。 -
传感器与数据
• 视觉:8 MP@30 fps前向+环视鱼眼,HDR+低照度增强;时间同步<1 ms。
• 激光雷达:64/128线,0.1 m@100 m,360°水平FOV;点云密度≈200 k pts/s。
• 毫米波:77 GHz,250 m有效,雨雪穿透;与视觉硬同步。
• 高精地图:车道级几何、交通标志先验,在线与感知结果做差分校验。 -
算法链路(以BEV为中心的多模态框架)
• 输入对齐:
– 图像→IPM/Transformer 做BEV视角投影;
– 点云→体素化或Range View;
– 毫米波→稀疏点云+多普勒速度通道。
• 主干网络:
– Swin-Transformer(图像分支);
– VoxelNet/PointPillars(激光分支);
– 跨模态融合:Cross-Attention 或 BEVFusion。
• 检测头:
– Anchor-Free 3D框(CenterPoint);
– 关键点+向量车道线(HDMapNet);
– 交通标志分类:EfficientNet-b4。
• 时序融合:
– 多帧点云拼接(5帧滑动窗口);
– BEV特征用ConvLSTM做运动补偿。
• 轨迹预测:
– 轻量级社会池化(Social-LSTM)输出3 s轨迹;
– 与路径规划模块以ROS2 DDS QoS=Reliable通信。 -
工程落地要点
• 算力:NVIDIA Orin 254 TOPS,模型量化为INT8,延迟<50 ms/帧。
• 热备份:视觉失效→纯激光雷达降级模式;双MCU做2oo2安全投票。
• OTA:影子模式回传Corner Case(夜间强光眩光、异形车辆)。 -
性能指标(公开数据集)
• nuScenes mAP:63.2(多模态) vs 54.1(纯视觉)。
• COCO行人检测:夜间场景AP75>0.45。
• 纵向测距误差:<3%@60 m。 -
典型案例
• Waymo Open Dataset:Waymo Driver通过360°视觉+激光实现无保护左转。
• 小鹏城市NGP:仅视觉+高精地图方案,广州城区拥堵场景下误报率<0.1次/km。
————————————————
二、车位占用检测与流量分析(停车场/路侧场景)
-
感知任务
• 车位级:是否被占用、占用车型(小/大/新能源)、车牌。
• 场库级:进出车流量、实时空位热力图、平均停车时长。
• 事件级:违停、跨线、逆行、排队溢出告警。 -
传感器与数据
• 高位枪机:4K@25 fps,覆盖8–12个车位/台,逆光WDR 140 dB。
• 鱼眼顶视:2 MP@15 fps,单台覆盖2–3个车位,边缘畸变校正。
• 毫米波/地磁:低成本埋地,检测金属体存在,用于无牌车场景。
• 闸机/ETC:车辆ID、进出时间戳,与视频做交叉验证。 -
算法链路
• 车位分割:
– Mask R-CNN 实例分割输出车位多边形;
– 采用轻量级MobileNetV3骨干,Jetson Xavier实时推理。
• 车辆检测+跟踪:
– YOLOv8-nano检测车辆框+DeepSORT跟踪;
– 轨迹与车位IoU>0.3判定占用。
• 车牌识别:
– CRNN+LPRNet,双层车牌、新能源绿牌准确率99.2%。
• 流量统计:
– 闸机触发+视频Re-ID去重;
– 排队长度:基于车道线消失点估计,误差<0.5辆。 -
工程落地要点
• 边缘-云协同:
– 边缘盒子:8路视频实时推理,Kafka流式上传元数据;
– 云端:Flink实时聚合,Grafana大屏刷新周期5 s。
• 极端天气策略:
– 雨雪:RGB+热成像融合,提升车牌检测5–10% mAP;
– 夜间:红外补光+低照度增强算法。
• 低成本改造:
– 复用现有监控,只需加装AI盒子,单车位硬件成本<100元。 -
性能指标
• 车位状态准确率:>99%(白天),>97%(夜间)。
• 车辆进出识别延迟:<2 s。
• 违停误报率:<0.5次/千车位·天。 -
典型案例
• 深圳宝安机场P4停车场:高位相机+地磁融合,3 000个车位空位查询延迟<1 s,年节省人工成本300万元。
• 北京朝阳大悦城:利用B1-B4原有摄像头升级AI盒子,实现车位导航小程序,提升周转率18%。
————————————————
小结
• 环境感知追求“全、准、快”,核心是多模态BEV融合+时序推理,面向L4级自动驾驶。
• 车位/流量分析追求“低成本、高可靠”,核心是车位级实例分割+车辆轨迹跟踪,面向B端运营降本增效。
三 核心代码举例
Mini-Core 代码示例
下面给出两条最简可运行链路:
A) 3D 目标检测(CenterPoint-Lite)
B) 车位占用分割(轻量 Mask R-CNN)
4.1 环境(Docker 一条命令)
bash
复制
docker run --gpus all -it --rm \
-v $PWD:/workspace nvcr.io/nvidia/pytorch:23.05-py3
pip install spconv-cu118 mmdet3d==1.3.0 openmim
mim install mmcv-full==1.7.1
4.2 3D 检测:CenterPoint-Lite(nuScenes mini 数据集)
Python
复制
# train.py
from mmdet3d.apis import init_model, train_model
cfg = 'configs/centerpoint/centerpoint_01voxel_second_secfpn_nus.py'
model = init_model(cfg)
train_model(model, cfg, distributed=False)
• 预训练权重:centerpoint_voxel_nus.pth(mmdet3d 官方下载)
• 推理脚本:
Python
复制
from mmdet3d.apis import inference_detector, show_result_meshlab
result, data = inference_detector(model, 'nuscenes/samples/LIDAR_TOP/*.pcd')
show_result_meshlab(data, result, out_dir='viz')
4.3 车位占用分割:Mask R-CNN + 自定义车位数据集
数据集格式:单张 1920×1080 图像 + COCO 格式的车位多边形。
Python
复制
# mask_parking.py
import torch, cv2, numpy as np
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
cfg = get_cfg()
cfg.MODEL.WEIGHTS = "mask_rcnn_R_50_FPN_3x_parking.pth"
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 2 # background + occupied
predictor = DefaultPredictor(cfg)
im = cv2.imread('test.jpg')
outputs = predictor(im)
masks = outputs["instances"].pred_masks.cpu().numpy()
for m in masks:
cv2.polylines(im, [np.int32(cv2.findContours(m.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0][0])], True, (0,255,0), 2)
cv2.imwrite('out.jpg', im)
• 训练命令:detectron2/tools/train_net.py --config-file configs/parking_mask_rcnn.yaml
• 数据集示例:parking_sample.zip(100张标注图,)
————————————————
下一步可深入的方向
-
将 Mini-Core 接入 ROS2 节点,跑真实车端或路侧相机。
-
引入 TAO Toolkit 做 INT8 量化,在 Jetson Orin Nano 实测 FPS vs mAP。
-
用 Segment Anything (SAM) + 少量人工修正,把车位分割标注成本再降 80%。
车位占用检测常用的“实例分割”路线可以粗分为三大类:
-
直接对“车辆”做实例分割,再与静止的“车位框”做 IoU 判定;
-
把“车位”本身当作实例去分割,直接输出每个停车位的 mask;
-
多任务一体:同时做车位线/车位 mask + 车辆 mask,再用逻辑判断占用状态。
下面把近年公开论文、专利与工程落地的典型方法按时间轴梳理,并给出可落地的技术要点与代码/数据入口。
————————————————
一、车辆实例分割 + 几何后处理
思路:用通用实例分割网络(Mask R-CNN、SOLOv2、CondInst 等)先拿到每辆车的 mask,再与人工或 HDMap 给出的车位多边形做“重叠面积比”判定。
表格
复制
| 方法 | Backbone | 关键改进 | 公开权重/数据 |
|---|---|---|---|
| Mask R-CNN + Soft-NMS | ResNet-50-FPN | 针对高位摄像头车辆密集场景增加 Soft-NMS,误检 ↓12% | 无官方权重,需自建数据集 |
| CondInst-Parking | ResNet-34-DCN | 用 CondInst head 轻量化,Jetson Xavier 实时 25 FPS | GitHub: lyh-18/CondInst-Parking |
| YOLACT-Edge | MobileNet-V2 | TensorRT INT8,单张 12 ms | GitHub: haolyuan/yolact_edge_parking |
工程要点
• 车位多边形提前标好(COCO RLE 格式),推理时只需判断“车辆 mask vs 车位 mask 的 IoU>0.3”即算占用。
• 夜间/雨雾:RGB+IR 双通道输入,用通道叠加方式喂入网络即可。
————————————————
二、车位实例分割(Parking-Slot as Instance)
把每个停车位当成一个实例,直接输出其 mask 或 4 个角点,再判断内部是否有车。
表格
复制
| 方法 | 分割粒度 | 关键创新 | 代码/数据 |
|---|---|---|---|
| Parking-Slot Mask R-CNN | 车位 mask | 以车位中心点为 anchor,分割出车位多边形;利用面积阈值法判定占用 | 专利 CN118247740A |
| ParkNet (CVPR 2022) | 车位角点 heatmap + offset | 把车位 4 角点当作关键点,网络输出 4×H×W heatmap,再聚合成实例 | GitHub: GitLqr/ParkNet |
| Parking-Slot SOLOv2 | 车位实例 mask | 使用 SOLOv2 Decoupled head,无需 anchor,对小尺度车位更鲁棒 | 无官方开源,需复现 |
工程要点
• 车位关键点标注:Labelme “多边形”即可,训练时转成 28×28 mask 作为监督。
• 鱼眼畸变:先做相机标定,图像预处理环节做畸变校正,再送入网络。
————————————————
三、多任务一体分割(车位线 + 车 + 可行驶区域)
端到端同时得到“车位线语义分割 + 车辆实例分割”,再用逻辑判断:
表格
复制
| 方法 | 任务设计 | 网络结构 | 说明 |
|---|---|---|---|
| HDMapNet-Parking (ICRA 2023) | 车位线分割 + 车辆实例分割 | BEV 多任务头 | 将环视 6 相机特征投影到 BEV,车位线用 semantic head,车辆用 instance head;占用逻辑在 BEV 平面完成,遮挡鲁棒性最好 |
| Mask2Former-Parking | 车位线 mask + 车辆 mask | Mask2Former 统一框架 | 仅需一套 mask 标注,可同时训练;推理时用逻辑规则:车辆 mask 与车位线包围盒 IoU>0.5 → 占用 |
| DeepLabV3+ & CondInst Hybrid | 语义分割(车位线)+实例分割(车辆) | DeepLabV3+ 车位线 + CondInst 车辆 | 工程落地最简单:两阶段串行,后处理用 Python Shapely 即可 |
工程要点
• BEV 投影需要相机外参,标定完成后一次写入 yaml,推理即可。
• 边缘端:DeepLabV3+ 分割车位线模型 4.2 M,CondInst-MobileNet 车辆实例模型 9.8 M,Jetson Xavier 总耗时 42 ms/帧。
————————————————
四、如何选路线?
-
已有 HDMap 或固定车位框 → 路线一(车辆实例分割 + IoU)最快落地;
-
车位形状经常变化(机械立体车库、斜列/斜角车位)→ 路线二(车位实例分割)更灵活;
-
需要同时输出高精地图元素(车位线、可行驶区域、车辆)→ 路线三(多任务一体)最完整,但算力要求高。
————————————————
五、可直接跑的基准代码
• 路线一:Detectron2-CondInst
bash
复制
git clone https://github.com/aim-uofa/AdelaiDet.git
cd AdelaiDet
python train_net.py --config-file configs/CondInst/MS_R_50_1x.yaml --num-gpus 2
将 parking_vehicle_train/val.json 替换成你的 COCO 格式即可。
• 路线二:ParkNet(车位角点)
bash
复制
git clone https://github.com/GitLqr/ParkNet
python train.py --dataset parking_slot
• 路线三:HDMapNet-Parking
bash
复制
git clone https://github.com/Tsinghua-MARS-Lab/HDMapNet
python tools/train.py configs/parking/parking_bev.yaml
————————————————
一句话总结
“先想清楚把‘谁’当实例”——车辆、车位还是两者都要——再选对应的 Mask R-CNN / SOLOv2 / CondInst / Mask2Former 框架即可。
Occupancy Networks(占用网络) 和 UniAD(Unified Autonomous Driving) 放在同一张“技术地图”里,分 4 个维度一次性说明白:
-
两者是什么(一句话定义)
-
核心思想与网络结构
-
在自动驾驶中的角色与差异
-
开源代码 / 数据 / 快速体验步骤
————————————————
-
一句话定义
• Occupancy Networks(OccNet) = 用 MLP 对任意 3D 坐标解码“该点是否被物体占据”的隐式表示方法,天生适合做 3D 重建、碰撞检测、运动规划。
• UniAD = CVPR 2023 Best Paper,把感知-预测-规划 5 大任务串在一个 Transformer Query 链里,端到端优化“规划误差”,Occupancy 只是其中一个中间表征。
————————————————
2. 核心思想与网络结构
表格
复制
| 维度 | Occupancy Networks | UniAD |
|---|---|---|
| 输入 | 单视角图像 / 点云 / 体素 | 环视 6-8 相机视频流(可选 LiDAR) |
| 内部表征 | 任意 3D 坐标 → 隐式 MLP → 0-1 占位概率 | 统一 BEV Query(Track Q / Map Q / Motion Q / Occ Q / Plan Q) |
| 关键模块 | ResNet18 / PointNet 编码 + 5×ResNet-FCB 解码器 | BEVFormer 编码 → TrackFormer → MapFormer → MotionFormer → OccFormer → Planner |
| 输出 | 3D 占用网格 / 网格提取 | 车辆未来轨迹、3 s 占用、地图矢量、自车航点 |
| 训练损失 | 二进制交叉熵 | 多任务加权:跟踪 + 地图 + 轨迹 + 占用 + 规划 L2 |
————————————————
3. 在自动驾驶中的角色与差异
3.1 Occupancy Networks 的用法
• 早期(2019 前)用于 静态 3D 重建:把车/障碍物变成水密网格,供离线仿真。
• 2022 起 Tesla AI Day 公开 Occupancy 栅格 取代传统 3D 检测:
– 输入:8×相机视频
– 输出:0.25 m 体素级 0/1 占据 + 语义 + 速度
– 优点:对异形障碍物、截断物体友好,无需 NMS。
• 局限:仅做“几何占位”,不包含意图、轨迹。
3.2 UniAD 的用法
• 端到端把“占位”当作中间特征:
– OccFormer 生成 T+0~T+3 s 多帧占用(30×30 m 区域 0.5 m 分辨率),供 Planner 做碰撞规避;
– 用 ego-vehicle query 与占用特征做 cross-attention,直接输出未来 3 s 航点;
– 实验表明:相比 FIERY、BEVerse,UniAD 把近场 IoU 提升 4%,规划碰撞率↓56%。
• 局限:目前仅开环验证,尚未大规模闭环上车。
————————————————
4. 开源代码 / 数据 / 快速体验
4.1 Occupancy Networks
• 原始实现(单视图 3D 重建):
bash
复制
git clone https://github.com/autonomousvision/occupancy_networks
cd occupancy_networks
python generate.py configs/img/onet.yaml
• Tesla-style 占用栅格(社区复现):
bash
复制
git clone https://github.com/haomo-ai/TeslaOccupancy
# 支持 nuScenes 训练,单卡 3090 12 GB 可跑
4.2 UniAD
• 官方 PyTorch:
bash
复制
git clone https://github.com/OpenDriveLab/UniAD
cd UniAD
# 一键数据准备脚本
bash tools/uniad_data_prep.sh
# 8×A100 训练 3 天
bash tools/uniad_train.sh
# 推理可视化
python tools/uniad_inference.py --config configs/stage2_e2e/UniAD.yaml
• 数据:nuScenes + OpenScene(UniAD 扩展标注),官方已给下载脚本。
————————————————
一句话总结
• Occupancy Networks = 3D 几何占位神器,UniAD 把占位当作中间语言去端到端学规划。
420



被折叠的 条评论
为什么被折叠?



