# adc-perception **Repository Path**: myparadises/adc-perception ## Basic Information - **Project Name**: adc-perception - **Description**: 智驾相关,上手实战,用nuscenes数据集 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-10 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ADC Perception: 自动驾驶感知算法 Demo 项目集 > **对应求职岗位**: 行云新能 · 感知算法工程师 / 感知开发工程师 > **目标**: 快速补齐自动驾驶3D感知项目经验,支撑40-60k面试 > **技术栈**: PyTorch + NumPy + OpenCV + 开源框架 (YOLOv8, ByteTrack, mmdet3d) --- ## ⚠️ 重要声明 **本项目使用开源PyTorch框架验证感知算法链路。** - 你聊天记录里提到的 `mx_driving`、`driving_trainer` **并非华为公开SDK**,不要在面试中说自己已经用DrivingSDK跑过训练。 - **正确话术**: *"我基于开源PyTorch链路透3D感知算法,同时正在了解华为MDC/DrivingSDK的NPU部署和OM模型导出流程。"* --- ## 项目总览 | 项目 | 名称 | 对应JD | 训练/推理 | 运行时间 | |:---:|:---|:---|:---:|:---:| | **P1** | [相机-LiDAR标定与融合可视化](projects/p1_lidar_camera_calibration/) | 职责2(标定)、职责1(融合) | 无需训练 | 1分钟 | | **P2** | [PointPillars 3D目标检测](projects/p2_pointpillars_3d_detection/) | 职责1、任职1(LiDAR)、任职3(BEV/检测) | 轻量化训练 | 30分钟~1小时 | | **P3** | [YOLOv8检测 + ByteTrack跟踪](projects/p3_detection_tracking/) | 任职2(跟踪/状态估计) | 预训练推理 | 5分钟 | | **P4** | [BEV投影与Occupancy Grid](projects/p4_bev_occupancy/) | 任职3(BEV/Occupancy) | 无需训练 | 1分钟 | | **P5** | [昇腾部署链路模拟](projects/p5_ascend_deployment_sim/) | 职责6(MDC平台/推理优化) | 模拟推理 | 2分钟 | --- ## 快速开始 ### 1. 环境准备 (AutoDL) 推荐镜像:`PyTorch 2.x + CUDA 11.8` (或带 mmdetection3d 的镜像) ```bash # 基础依赖 pip install numpy matplotlib opencv-python pillow scipy # P3 检测跟踪 pip install ultralytics supervision # P2 完整版推理 (可选,如果AutoDL有mmdet3d镜像则跳过) pip install openmim mim install mmdet3d ``` ### 2. 数据准备 本项目基于 **KITTI 数据集**(自动驾驶领域最经典的公开数据集)。 **快速方式**:下载3帧样本即可跑通所有项目(约15MB): ```bash python download_kitti_sample.py ``` **完整方式**:下载 KITTI 3D Object Detection 训练集(约12GB): http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d 数据集结构: ``` data/kitti/training/ ├── calib/000000.txt # 标定参数 ├── image_2/000000.png # 前视相机图像 ├── velodyne/000000.bin # LiDAR点云 └── label_2/000000.txt # 3D标注 (P2可视化用) ``` ### 3. 逐个运行项目 #### P1: 标定融合可视化 (⭐ 面试核心) ```bash cd projects/p1_lidar_camera_calibration # 基础投影 uv run python demo_projection.py # 外参偏移分析 (重点!) uv run python demo_extrinsic_shift.py --dz 0.05 --dpitch 0.5 # UV管理器一键分析 (推荐) uv run python uv_manager.py # 或快捷命令: uv run uv-manage ``` #### P3: 检测+跟踪 (⭐ 最快出效果) ```bash cd projects/p3_detection_tracking # 图片检测 uv run python demo_detection.py --input /path/to/image.jpg --output output/det.jpg # 或: uv run detect --input /path/to/image.jpg --output output/det.jpg # 视频跟踪 (需要一段行车视频) uv run python demo_tracking.py --input /path/to/video.mp4 --output output/track.mp4 # 或: uv run track --input /path/to/video.mp4 --output output/track.mp4 ``` #### P4: BEV + Occupancy ```bash cd projects/p4_bev_occupancy uv run python demo_bev_projection.py # 或: uv run bev uv run python demo_occupancy_grid.py # 或: uv run occ ``` #### P2: 3D检测 ```bash cd projects/p2_pointpillars_3d_detection # 路径1: 3D标注可视化 (必跑,零依赖) python tools/kitti_3d_visualize.py \ --calib ../../data/kitti/training/calib/000000.txt \ --image ../../data/kitti/training/image_2/000000.png \ --velo ../../data/kitti/training/velodyne/000000.bin \ --label ../../data/kitti/training/label_2/000000.txt \ --output output/3d_vis # 路径2: 极简PointPillars训练骨架 (展示模型理解) python tools/train_pointpillars_lite.py \ --data_root ../../data/kitti \ --epochs 10 \ --max_samples 100 ``` #### P5: 昇腾部署链路模拟 (⭐ 对口MDC/DrivingSDK) ```bash cd projects/p5_ascend_deployment_sim # Step 1: PyTorch -> ONNX uv run python torch_to_onnx.py # 或: uv run export-onnx # Step 2: ONNX -> OM (ATC模拟,打印真实命令) uv run python onnx_to_om_sim.py --onnx output/bev_sim_model.onnx --output output/bev_sim_model # 或: uv run atc-sim --onnx output/bev_sim_model.onnx --output output/bev_sim_model # Step 3: OM推理 (ACL风格接口模拟) uv run python infer_om_sim.py --model output/bev_sim_model.onnx --input output/dummy_input.npy --bench # 或: uv run infer-sim --model output/bev_sim_model.onnx --input output/dummy_input.npy --bench ``` --- ## 面试话术速查 ### 开场白 (30秒) > "我针对感知算法岗的技术栈,用PyTorch在KITTI数据集上做了4个方向的demo: > 1. 相机-LiDAR联合标定与融合,分析了外参偏移对投影精度的量化影响; > 2. 基于PointPillars的3D目标检测,理解了点云体素化和伪图像特征提取; > 3. YOLOv8+ByteTrack多目标跟踪,实现了稳定ID关联和轨迹预测; > 4. BEV投影与Occupancy Grid,验证了鸟瞰视角下的空间占用感知。 > 同时我在了解华为MDC平台的昇腾NPU部署流程。" ### 标定 (P1) > "标定的核心是让不同传感器'看到同一个东西'。内参矫正镜头畸变,外参计算传感器间的相对位姿。 > 我做了一个偏移实验:当车辆震动导致5cm高度偏移和0.5°俯仰角偏移时,LiDAR投影到图像的像素误差平均增加XX像素。 > 这解释了为什么装车后必须重新标定。" ### 3D检测 (P2) > "PointPillars的核心是把不规则点云转成规则的伪图像:x-y平面划分pillars,每个pillar内做点特征增强和max-pooling, > 得到(C,H,W)的伪图像后接2D CNN,最后SSD Head输出3D框的分类和7自由度回归(x,y,z,w,l,h,theta)。 > 我手写了一个简化版骨架来理解这个pipeline。" ### 跟踪 (P3) > "ByteTrack的关键是高低置信度两次匹配:高置信度框优先匹配已有轨迹,低置信度框二次匹配处理遮挡。 > 相比传统卡尔曼滤波+匈牙利算法,它在遮挡场景下ID切换更少。" ### BEV/Occupancy (P4) > "BEV把多传感器数据统一投影到鸟瞰平面,方便下游规划模块使用。 > Occupancy Grid进一步判断每个空间格子是否被占用,不依赖预定义物体类别,对异形障碍物更鲁棒。 > 我的demo用规则方法实现了概念验证,深度学习方案如BEVFormer需要多摄像头特征+Transformer做cross-attention。" --- ## 文件结构 ``` adc-perception/ ├── README.md # 本文档 ├── download_kitti_sample.py # KITTI样本下载脚本 ├── data/ │ └── kitti/ # KITTI数据集 ├── projects/ │ ├── p1_lidar_camera_calibration/ # 标定+融合 │ ├── p2_pointpillars_3d_detection/ # 3D检测 │ ├── p3_detection_tracking/ # 2D检测+跟踪 │ └── p4_bev_occupancy/ # BEV+Occupancy └── docs/ └── interview_notes.md # 详细面试问答笔记 ``` --- ## 后续建议 (如果入职前还有时间) 1. **跑通 mmdet3d PointPillars 完整训练**: 在KITTI上训练到收敛,拿到真实mAP指标 2. **了解 ROS/Apollo 基础**: 安装ROS2,跑一个pub/sub节点,理解传感器数据流 3. **了解华为昇腾生态**: 阅读官方文档,了解 `torch_npu` 和 `atc` 模型转换工具 4. **C++ 快速入门**: 至少能看懂 detection 后处理的 C++ 代码(NMS、坐标转换)