PointPillars(一),跑通OpenPCDet中的demo
特别推荐读读这个。 https://blog.csdn.net/m0_37605642/article/details/128987547
PointPillar 3D目标检测模型详解-CSDN博客
参考链接(一)OpenPCDet 详细完整复现(Pointpillars、Pointrcnn、Second)进行训练,并进行评估和推理可视化
ubuntu20.04安装OpenPcdet,(CUDA版本11.8,显卡4090)(CUDA版本12.1,显卡3060)
Ubuntu安装GPU驱动+CUDA+cuDNN的安装方法
九步完成Pointpillars模型训练
一、环境搭建
1、安装Anaconda
Ubuntu安装Anaconda教程参考链接
中科大镜像源下载
sudo sh Anaconda3-2024.10-1-Linux-x86_64.sh
// 键入密码、按空格、License——>yes、路径选择/home/username/anaconda3、yes
source gedit ~/.bashrc
// 加入路径:export PATH="/home/username/anaconda3/bin:$PATH"
// 激活环境变量
source ~/.bashrc
conda list
// 进入虚拟环境
source ~/anaconda3/bin/activate root
2、cuda版本
torch与cuda对应安装:Previous PyTorch Versions | PyTorch
这里面都没有12.0,但是有12.1,尽量安装官网有的版本。
sudo apt install nvidia-driver-570 #实测520版本各种报错。
# 先查看nvidia-smi硬件型号。找到适合的cuda版本。显示最高版本是12.8。经查最低cuda11.8
nvcc -V # 10.1
当前版本不支持,先删除 环境配置之cuda的卸载(ubuntu)
sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" "*cusolver*" "*cusparse*" "*npp*" "*nvidia*"
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get remove cuda
sudo apt-get remove cuda*
sudo dpkg -l | grep cuda # 这里显示的所有残存都通过下面指令删除
sudo dpkg -P 残留文件
然后,手动删除CUDA的安装目录(通常是/usr/local/cuda-10.1
):
sudo rm -rf /usr/local/cuda-10.1
如果之前设置了CUDA的环境变量(如PATH
和LD_LIBRARY_PATH
),也需要在.bashrc
或.profile
文件中将其删除或更新。
Ubuntu安装GPU驱动+CUDA+cuDNN的安装方法 - 小白跃升坊 - 博客园
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo service lightdm stop
sudo sh cuda_12.1.0_530.30.02_linux.run
因为上面已经安装了570,所以在黑屏下,不要在选择安装525的驱动了。12.1对应530,按照530来装。
然后添加环境变量。
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
就可以nvcc -V了。
3、安装cuda
重新下载安装cuda。CUDA Toolkit 11.8 Downloads | NVIDIA Developer
CUDA Toolkit Archive | NVIDIA Developer
选择自己对应的系统,然后选择哪种安装方式:在线
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-8
离线
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda-repo-ubuntu2004-12-8-local_12.8.1-570.124.06-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2004-12-8-local_12.8.1-570.124.06-1_amd64.deb sudo cp /var/cuda-repo-ubuntu2004-12-8-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda-toolkit-12-8
以上都没用。
安装一定要在黑屏下操作。
【环境搭建】Python、PyTorch与cuda的版本对应表
torch与cuda对应安装:Previous PyTorch Versions | PyTorch
锁定pytorch2.1.0,python=3.9
3、配置cuDNN库
CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
sudo apt-get -y install cudnn-cuda-12cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
sudo cp cudnn-linux-x86_64-8.9.4.25_cuda12-archive/include/cudnn*.h /usr/local/cuda-12.1/include
sudo cp -P cudnn-linux-x86_64-8.9.4.25_cuda12-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64/
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*
cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
4、创建虚拟环境
conda create -n pcdet python=3.9
conda activate pcdet
5、安装pytorch
# CUDA 12.1
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=11.8 -c pytorch -c nvidia
检验:
python
import torch
torch.cuda.is_available()
6、安装spconv
pip install spconv-cu121
检验
import spconv
7、下载OpenPCDet
git clone https://github.com/open-mmlab/OpenPCDet.git
cd OpenPCDet
pip install -r requirements.txt #安装环境
python setup.py develop #安装pcdet
8、运行
python demo.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml --ckpt ../pointpillar_7728.pth --data_path ../../data/data_object_velodyne/training/velodyne/000006.bin
二、训练
1、下载 KITTI 数据集
从 KITTI 官方网站下载以下数据:
-
点云数据:
data_object_velodyne
文件夹,包含.bin
格式的点云数据。 -
标注信息:
data_object_label_2
文件夹,包含目标的标注信息。 -
校准信息:
data_object_calib
文件夹,包含相机和激光雷达的校准参数。 -
图像数据(可选):
data_object_image_2
文件夹,包含彩色图像数据。
2、准备数据
2.1 数据格式转换
如果点云数据不是 .bin
格式,需要将其转换为 .bin
格式。例如,如果数据是 .pcd
格式,可以使用以下 Python 脚本进行转换:
import os
import numpy as npdef pcd2bin(pcdfolder, binfolder, start_idx, end_idx):ori_path = pcdfolderdes_path = binfolderif not os.path.exists(des_path):os.makedirs(des_path)for idx in range(start_idx, end_idx + 1):filename = f"{idx:06d}"velodyne_file = os.path.join(ori_path, filename + '.pcd')if os.path.exists(velodyne_file):pl = read_pcd(velodyne_file)pl = pl.reshape(-1, 4).astype(np.float32)velodyne_file_new = os.path.join(des_path, filename + '.bin')pl.tofile(velodyne_file_new)else:print(f"File not found: {velodyne_file}")def read_pcd(filepath):lidar = []header_passed = Falsewith open(filepath, 'r') as f:for line in f:line = line.strip()if line.startswith('DATA'):header_passed = Truecontinueif header_passed:linestr = line.split()if len(linestr) == 3:linestr_convert = list(map(float, linestr)) + [1.0]elif len(linestr) == 4:linestr_convert = list(map(float, linestr))lidar.append(linestr_convert)return np.array(lidar)if __name__ == "__main__":pcdfolder = "/path/to/pcd/folder"binfolder = "/path/to/bin/folder"start_frame = 1end_frame = 35pcd2bin(pcdfolder, binfolder, start_idx=start_frame, end_idx=end_frame)
2.2 数据集目录结构
确保数据集目录结构如下:
kitti/
├── training/
│ ├── calib/
│ ├── image_2/
│ ├── label_2/
│ ├── velodyne/
├── testing/
│ ├── calib/
│ ├── image_2/
│ ├── velodyne/
├── ImageSets/
│ ├── train.txt
│ ├── val.txt
│ ├── trainval.txt
│ ├── test.txt
我实际的目录是:
.
├── argo2
│ └── ImageSets
├── kitti
│ ├── ImageSets
│ ├── testing
│ │ ├── calib
│ │ └── velodyne
│ └── training
│ ├── calib
│ ├── label_2
│ └── velodyne
├── lyft
│ └── ImageSets
├── once
│ └── ImageSets
└── waymo└── ImageSets
我实际的操作是:
- 把
data_object_velodyne
下的training和testing分别复制到OpenPCDet下的data/kitti下。 把data_object_label_2
下的training和testing分别复制到OpenPCDet下的data/kitti下。- 把
data_object_calib
下的training和testing分别复制到OpenPCDet下的data/kitti下。
2.3 配置训练文件
在 OpenPCDet 的配置文件中,指定 KITTI 数据集的路径和相关参数。例如,修改 tools/cfgs/dataset_configs/kitti_dataset.yaml
文件
DATA_PATH: /path/to/kitti
由于在上述四个kitti数据集中没有添加 ROAD_PLANE 数据集;故而,需要将要训练的yaml文件中的是否选择使用ROAD_PLANE;由True改成False
以kitti数据集为例:
将/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml中代码改为
2.4 数据集预处理
对数据集进行处理;生成对应gt_database文件夹中的.bin格式文件和.pkl格式文件指令如下:
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos ./tools/cfgs/dataset_configs/kitti_dataset.yaml
test sample_idx: 007516
test sample_idx: 007517
Kitti info test file is saved to /home/northlab/Downloads/test/OpenPCDet/data/kitti/kitti_infos_test.pkl
---------------Start create groundtruth database for data augmentation---------------
gt_database sample: 1/3712
gt_database sample: 2/3712......Database Pedestrian: 2207
Database Car: 14357
Database Cyclist: 734
Database Van: 1297
Database Truck: 488
Database Tram: 224
Database Misc: 337
Database Person_sitting: 56
---------------Data preparation Done---------------
3、训练
执行训练指令/OpenPCDet/tools目录下执行
python train.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml
python train.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml 2025-04-25 09:34:54,557 INFO **********************Start logging**********************
2025-04-25 09:34:54,557 INFO CUDA_VISIBLE_DEVICES=ALL
2025-04-25 09:34:54,557 INFO Training with a single process
2025-04-25 09:34:54,557 INFO cfg_file ./cfgs/kitti_models/pointpillar.yaml
2025-04-25 09:34:54,557 INFO batch_size 4
2025-04-25 09:34:54,557 INFO epochs 80
2025-04-25 09:34:54,557 INFO workers 4
2025-04-25 09:34:54,557 INFO extra_tag default
2025-04-25 09:34:54,557 INFO ckpt None
2025-04-25 09:34:54,557 INFO pretrained_model None
2025-04-25 09:34:54,557 INFO launcher none
2025-04-25 09:34:54,557 INFO tcp_port 18888
2025-04-25 09:34:54,557 INFO sync_bn False
2025-04-25 09:34:54,557 INFO fix_random_seed False
2025-04-25 09:34:54,557 INFO ckpt_save_interval 1
2025-04-25 09:34:54,557 INFO local_rank None
2025-04-25 09:34:54,557 INFO max_ckpt_save_num 30
2025-04-25 09:34:54,557 INFO merge_all_iters_to_one_epoch False
2025-04-25 09:34:54,557 INFO set_cfgs None
2025-04-25 09:34:54,557 INFO max_waiting_mins 0
2025-04-25 09:34:54,557 INFO start_epoch 0
2025-04-25 09:34:54,557 INFO num_epochs_to_eval 0
2025-04-25 09:34:54,557 INFO save_to_file False
2025-04-25 09:34:54,557 INFO use_tqdm_to_record False
2025-04-25 09:34:54,557 INFO logger_iter_interval 50
2025-04-25 09:34:54,557 INFO ckpt_save_time_interval 300
2025-04-25 09:34:54,557 INFO wo_gpu_stat False
2025-04-25 09:34:54,557 INFO use_amp False
2025-04-25 09:34:54,557 INFO cfg.ROOT_DIR: /home/northlab/Downloads/test/OpenPCDet
2025-04-25 09:34:54,557 INFO cfg.LOCAL_RANK: 0
2025-04-25 09:34:54,557 INFO cfg.CLASS_NAMES: ['Car', 'Pedestrian', 'Cyclist']
2025-04-25 09:34:54,557 INFO ----------- DATA_CONFIG -----------
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATASET: KittiDataset
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_PATH: ../data/kitti
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.POINT_CLOUD_RANGE: [0, -39.68, -3, 69.12, 39.68, 1]
2025-04-25 09:34:54,557 INFO ----------- DATA_SPLIT -----------
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_SPLIT.train: train
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_SPLIT.test: val
2025-04-25 09:34:54,557 INFO ----------- INFO_PATH -----------
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.INFO_PATH.train: ['kitti_infos_train.pkl']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.INFO_PATH.test: ['kitti_infos_val.pkl']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.GET_ITEM_LIST: ['points']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.FOV_POINTS_ONLY: True
2025-04-25 09:34:54,557 INFO ----------- DATA_AUGMENTOR -----------
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_AUGMENTOR.DISABLE_AUG_LIST: ['placeholder']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_AUGMENTOR.AUG_CONFIG_LIST: [{'NAME': 'gt_sampling', 'USE_ROAD_PLANE': False, 'DB_INFO_PATH': ['kitti_dbinfos_train.pkl'], 'PREPARE': {'filter_by_min_points': ['Car:5', 'Pedestrian:5', 'Cyclist:5'], 'filter_by_difficulty': [-1]}, 'SAMPLE_GROUPS': ['Car:15', 'Pedestrian:15', 'Cyclist:15'], 'NUM_POINT_FEATURES': 4, 'DATABASE_WITH_FAKELIDAR': False, 'REMOVE_EXTRA_WIDTH': [0.0, 0.0, 0.0], 'LIMIT_WHOLE_SCENE': False}, {'NAME': 'random_world_flip', 'ALONG_AXIS_LIST': ['x']}, {'NAME': 'random_world_rotation', 'WORLD_ROT_ANGLE': [-0.78539816, 0.78539816]}, {'NAME': 'random_world_scaling', 'WORLD_SCALE_RANGE': [0.95, 1.05]}]
2025-04-25 09:34:54,557 INFO ----------- POINT_FEATURE_ENCODING -----------
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.POINT_FEATURE_ENCODING.encoding_type: absolute_coordinates_encoding
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.POINT_FEATURE_ENCODING.used_feature_list: ['x', 'y', 'z', 'intensity']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.POINT_FEATURE_ENCODING.src_feature_list: ['x', 'y', 'z', 'intensity']
2025-04-25 09:34:54,557 INFO cfg.DATA_CONFIG.DATA_PROCESSOR: [{'NAME': 'mask_points_and_boxes_outside_range', 'REMOVE_OUTSIDE_BOXES': True}, {'NAME': 'shuffle_points', 'SHUFFLE_ENABLED': {'train': True, 'test': False}}, {'NAME': 'transform_points_to_voxels', 'VOXEL_SIZE': [0.16, 0.16, 4], 'MAX_POINTS_PER_VOXEL': 32, 'MAX_NUMBER_OF_VOXELS': {'train': 16000, 'test': 40000}}]
2025-04-25 09:34:54,558 INFO cfg.DATA_CONFIG._BASE_CONFIG_: cfgs/dataset_configs/kitti_dataset.yaml
2025-04-25 09:34:54,558 INFO ----------- MODEL -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.NAME: PointPillar
2025-04-25 09:34:54,558 INFO ----------- VFE -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.VFE.NAME: PillarVFE
2025-04-25 09:34:54,558 INFO cfg.MODEL.VFE.WITH_DISTANCE: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.VFE.USE_ABSLOTE_XYZ: True
2025-04-25 09:34:54,558 INFO cfg.MODEL.VFE.USE_NORM: True
2025-04-25 09:34:54,558 INFO cfg.MODEL.VFE.NUM_FILTERS: [64]
2025-04-25 09:34:54,558 INFO ----------- MAP_TO_BEV -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.MAP_TO_BEV.NAME: PointPillarScatter
2025-04-25 09:34:54,558 INFO cfg.MODEL.MAP_TO_BEV.NUM_BEV_FEATURES: 64
2025-04-25 09:34:54,558 INFO ----------- BACKBONE_2D -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.NAME: BaseBEVBackbone
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.LAYER_NUMS: [3, 5, 5]
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.LAYER_STRIDES: [2, 2, 2]
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.NUM_FILTERS: [64, 128, 256]
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.UPSAMPLE_STRIDES: [1, 2, 4]
2025-04-25 09:34:54,558 INFO cfg.MODEL.BACKBONE_2D.NUM_UPSAMPLE_FILTERS: [128, 128, 128]
2025-04-25 09:34:54,558 INFO ----------- DENSE_HEAD -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.NAME: AnchorHeadSingle
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.CLASS_AGNOSTIC: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.USE_DIRECTION_CLASSIFIER: True
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.DIR_OFFSET: 0.78539
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.DIR_LIMIT_OFFSET: 0.0
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.NUM_DIR_BINS: 2
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.ANCHOR_GENERATOR_CONFIG: [{'class_name': 'Car', 'anchor_sizes': [[3.9, 1.6, 1.56]], 'anchor_rotations': [0, 1.57], 'anchor_bottom_heights': [-1.78], 'align_center': False, 'feature_map_stride': 2, 'matched_threshold': 0.6, 'unmatched_threshold': 0.45}, {'class_name': 'Pedestrian', 'anchor_sizes': [[0.8, 0.6, 1.73]], 'anchor_rotations': [0, 1.57], 'anchor_bottom_heights': [-0.6], 'align_center': False, 'feature_map_stride': 2, 'matched_threshold': 0.5, 'unmatched_threshold': 0.35}, {'class_name': 'Cyclist', 'anchor_sizes': [[1.76, 0.6, 1.73]], 'anchor_rotations': [0, 1.57], 'anchor_bottom_heights': [-0.6], 'align_center': False, 'feature_map_stride': 2, 'matched_threshold': 0.5, 'unmatched_threshold': 0.35}]
2025-04-25 09:34:54,558 INFO ----------- TARGET_ASSIGNER_CONFIG -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.NAME: AxisAlignedTargetAssigner
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.POS_FRACTION: -1.0
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.SAMPLE_SIZE: 512
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.NORM_BY_NUM_EXAMPLES: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.MATCH_HEIGHT: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.TARGET_ASSIGNER_CONFIG.BOX_CODER: ResidualCoder
2025-04-25 09:34:54,558 INFO ----------- LOSS_CONFIG -----------
2025-04-25 09:34:54,558 INFO ----------- LOSS_WEIGHTS -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.LOSS_CONFIG.LOSS_WEIGHTS.cls_weight: 1.0
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.LOSS_CONFIG.LOSS_WEIGHTS.loc_weight: 2.0
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.LOSS_CONFIG.LOSS_WEIGHTS.dir_weight: 0.2
2025-04-25 09:34:54,558 INFO cfg.MODEL.DENSE_HEAD.LOSS_CONFIG.LOSS_WEIGHTS.code_weights: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
2025-04-25 09:34:54,558 INFO ----------- POST_PROCESSING -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.RECALL_THRESH_LIST: [0.3, 0.5, 0.7]
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.SCORE_THRESH: 0.1
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.OUTPUT_RAW_SCORE: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.EVAL_METRIC: kitti
2025-04-25 09:34:54,558 INFO ----------- NMS_CONFIG -----------
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.NMS_CONFIG.MULTI_CLASSES_NMS: False
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.NMS_CONFIG.NMS_TYPE: nms_gpu
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.NMS_CONFIG.NMS_THRESH: 0.01
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.NMS_CONFIG.NMS_PRE_MAXSIZE: 4096
2025-04-25 09:34:54,558 INFO cfg.MODEL.POST_PROCESSING.NMS_CONFIG.NMS_POST_MAXSIZE: 500
2025-04-25 09:34:54,558 INFO ----------- OPTIMIZATION -----------
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.BATCH_SIZE_PER_GPU: 4
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.NUM_EPOCHS: 80
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.OPTIMIZER: adam_onecycle
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.LR: 0.003
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.WEIGHT_DECAY: 0.01
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.MOMENTUM: 0.9
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.MOMS: [0.95, 0.85]
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.PCT_START: 0.4
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.DIV_FACTOR: 10
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.DECAY_STEP_LIST: [35, 45]
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.LR_DECAY: 0.1
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.LR_CLIP: 1e-07
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.LR_WARMUP: False
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.WARMUP_EPOCH: 1
2025-04-25 09:34:54,558 INFO cfg.OPTIMIZATION.GRAD_NORM_CLIP: 10
2025-04-25 09:34:54,558 INFO cfg.TAG: pointpillar
2025-04-25 09:34:54,558 INFO cfg.EXP_GROUP_PATH: cfgs/kitti_models
2025-04-25 09:34:54,561 INFO ----------- Create dataloader & network & optimizer -----------
2025-04-25 09:34:54,625 INFO Database filter by min points Car: 14357 => 13532
2025-04-25 09:34:54,625 INFO Database filter by min points Pedestrian: 2207 => 2168
2025-04-25 09:34:54,625 INFO Database filter by min points Cyclist: 734 => 705
2025-04-25 09:34:54,635 INFO Database filter by difficulty Car: 13532 => 10759
2025-04-25 09:34:54,637 INFO Database filter by difficulty Pedestrian: 2168 => 2075
2025-04-25 09:34:54,637 INFO Database filter by difficulty Cyclist: 705 => 581
2025-04-25 09:34:54,640 INFO Loading KITTI dataset
2025-04-25 09:34:54,696 INFO Total samples for KITTI dataset: 3712
/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /opt/conda/conda-bld/pytorch_1695392035629/work/aten/src/ATen/native/TensorShape.cpp:3526.)return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
2025-04-25 09:34:54,862 INFO ----------- Model PointPillar created, param count: 4834888 -----------
2025-04-25 09:34:54,863 INFO PointPillar((vfe): PillarVFE((pfn_layers): ModuleList((0): PFNLayer((linear): Linear(in_features=10, out_features=64, bias=False)(norm): BatchNorm1d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True))))(backbone_3d): None(map_to_bev_module): PointPillarScatter()(pfe): None(backbone_2d): BaseBEVBackbone((blocks): ModuleList((0): Sequential((0): ZeroPad2d((1, 1, 1, 1))(1): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), bias=False)(2): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(3): ReLU()(4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(5): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(6): ReLU()(7): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(8): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(9): ReLU()(10): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(11): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(12): ReLU())(1): Sequential((0): ZeroPad2d((1, 1, 1, 1))(1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), bias=False)(2): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(3): ReLU()(4): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(5): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(6): ReLU()(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(8): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(9): ReLU()(10): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(11): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(12): ReLU()(13): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(14): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(15): ReLU()(16): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(17): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(18): ReLU())(2): Sequential((0): ZeroPad2d((1, 1, 1, 1))(1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), bias=False)(2): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(3): ReLU()(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(5): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(6): ReLU()(7): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(8): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(9): ReLU()(10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(11): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(12): ReLU()(13): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(14): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(15): ReLU()(16): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(17): BatchNorm2d(256, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(18): ReLU()))(deblocks): ModuleList((0): Sequential((0): ConvTranspose2d(64, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(1): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(2): ReLU())(1): Sequential((0): ConvTranspose2d(128, 128, kernel_size=(2, 2), stride=(2, 2), bias=False)(1): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(2): ReLU())(2): Sequential((0): ConvTranspose2d(256, 128, kernel_size=(4, 4), stride=(4, 4), bias=False)(1): BatchNorm2d(128, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)(2): ReLU())))(dense_head): AnchorHeadSingle((cls_loss_func): SigmoidFocalClassificationLoss()(reg_loss_func): WeightedSmoothL1Loss()(dir_loss_func): WeightedCrossEntropyLoss()(conv_cls): Conv2d(384, 18, kernel_size=(1, 1), stride=(1, 1))(conv_box): Conv2d(384, 42, kernel_size=(1, 1), stride=(1, 1))(conv_dir_cls): Conv2d(384, 12, kernel_size=(1, 1), stride=(1, 1)))(point_head): None(roi_head): None
)
2025-04-25 09:34:54,863 INFO **********************Start training cfgs/kitti_models/pointpillar(default)**********************
epochs: 0%| | 0/80 [00:00<?, ?it/s2025-04-25 09:34:57,317 INFO Train: 1/80 ( 1%) [ 0/928 ( 0%)] Loss: 3.386 (3.39) LR: 3.000e-04 Time cost: 00:02/34:54 [00:02/46:32:02] Acc_iter 1 Data time: 0.96(0.96) Forward time: 1.30(1.30) Batch time: 2.26(2.26)
2025-04-25 09:35:10,943 INFO Train: 1/80 ( 1%) [ 49/928 ( 5%)] Loss: 1.838 (2.14) LR: 3.000e-04 Time cost: 00:15/04:39 [00:16/6:32:45] Acc_iter 50 Data time: 0.02(0.03) Forward time: 0.31(0.28) Batch time: 0.33(0.32)
2025-04-25 09:35:25,516 INFO Train: 1/80 ( 1%) [ 99/928 ( 11%)] Loss: 1.653 (1.93) LR: 3.001e-04 Time cost: 00:30/04:12 [00:30/6:16:20] Acc_iter 100 Data time: 0.02(0.03) Forward time: 0.28(0.28) Batch time: 0.30(0.30)
Fri Apr 25 09:42:04 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.05 Driver Version: 560.35.05 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti Off | 00000000:01:00.0 On | N/A |
| 33% 53C P0 87W / 160W | 5971MiB / 8188MiB | 92% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1228 G /usr/lib/xorg/Xorg 95MiB |
| 0 N/A N/A 11991 G /usr/bin/gnome-shell 41MiB |
| 0 N/A N/A 551092 C+G /opt/todesk/bin/ToDesk_Session 223MiB |
| 0 N/A N/A 572376 C python 5576MiB |
+-----------------------------------------------------------------------------------------+
训练结束:用一张4060TI 8G显卡,通过 5个半小时 完成了训练。单卡训练kitti数据。
2025-04-25 15:07:02,213 INFO Train: 80/80 (100%) [ 687/928 ( 74%)] Loss: 0.2662 (0.287) LR: 2.467e-07 Time cost: 03:08/01:05 [5:32:07/01:05] Acc_iter 74000 Data time: 0.01(0.02) Forward time: 0.24(0.26) Batch time: 0.25(0.27)
2025-04-25 15:07:15,216 INFO Train: 80/80 (100%) [ 737/928 ( 79%)] Loss: 0.3089 (0.287) LR: 1.661e-07 Time cost: 03:21/00:52 [5:32:20/00:52] Acc_iter 74050 Data time: 0.01(0.02) Forward time: 0.30(0.26) Batch time: 0.31(0.27)
2025-04-25 15:07:28,005 INFO Train: 80/80 (100%) [ 787/928 ( 85%)] Loss: 0.1848 (0.286) LR: 1.042e-07 Time cost: 03:33/00:38 [5:32:33/00:38] Acc_iter 74100 Data time: 0.01(0.02) Forward time: 0.22(0.26) Batch time: 0.23(0.27)
/bin/sh: 1: gpustat: not found
2025-04-25 15:07:28,035 INFO
2025-04-25 15:07:41,415 INFO Train: 80/80 (100%) [ 837/928 ( 90%)] Loss: 0.2778 (0.286) LR: 6.089e-08 Time cost: 03:47/00:24 [5:32:46/00:24] Acc_iter 74150 Data time: 0.01(0.02) Forward time: 0.22(0.26) Batch time: 0.24(0.27)
2025-04-25 15:07:54,417 INFO Train: 80/80 (100%) [ 887/928 ( 96%)] Loss: 0.3030 (0.286) LR: 3.627e-08 Time cost: 04:00/00:11 [5:32:59/00:11] Acc_iter 74200 Data time: 0.02(0.02) Forward time: 0.28(0.26) Batch time: 0.29(0.27)
2025-04-25 15:08:04,368 INFO Train: 80/80 (100%) [ 927/928 (100%)] Loss: 0.3080 (0.286) LR: 3.000e-08 Time cost: 04:10/00:00 [5:33:09/00:00] Acc_iter 74240 Data time: 0.02(0.02) Forward time: 0.19(0.25) Batch time: 0.21(0.27)
train: 0%| | 0/928 [04:10<?, ?it/s]
epochs: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [5:33:09<00:00, 249.87s/it]
2025-04-25 15:08:04,458 INFO **********************End training cfgs/kitti_models/pointpillar(default)**********************2025-04-25 15:08:04,458 INFO **********************Start evaluation cfgs/kitti_models/pointpillar(default)**********************
2025-04-25 15:08:04,459 INFO Loading KITTI dataset
2025-04-25 15:08:04,521 INFO Total samples for KITTI dataset: 3769
2025-04-25 15:08:04,523 INFO ==> Loading parameters from checkpoint /home/northlab/Downloads/test/OpenPCDet/output/cfgs/kitti_models/pointpillar/default/ckpt/checkpoint_epoch_80.pth to GPU
2025-04-25 15:08:04,545 INFO ==> Checkpoint trained from version: pcdet+0.6.0+0000000
2025-04-25 15:08:04,547 INFO ==> Done (loaded 127/127)
2025-04-25 15:08:04,548 INFO *************** EPOCH 80 EVALUATION *****************
eval: 0%| | 0/943 [00:00<?, ?it/s]/home/northlab/Downloads/test/OpenPCDet/tools/../pcdet/ops/iou3d_nms/iou3d_nms_utils.py:66: UserWarning: The torch.cuda.*DtypeTensor constructors are no longer recommended. It's best to use methods such as torch.tensor(data, dtype=*, device='cuda') to create tensors. (Triggered internally at /opt/conda/conda-bld/pytorch_1695392035629/work/torch/csrc/tensor/python_tensor.cpp:83.)overlaps_bev = torch.cuda.FloatTensor(torch.Size((boxes_a.shape[0], boxes_b.shape[0]))).zero_() # (N, M)
eval: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 943/943 [02:13<00:00, 7.07it/s, recall_0.3=(0, 16352) / 17558]
2025-04-25 15:10:17,959 INFO *************** Performance of EPOCH 80 *****************
2025-04-25 15:10:17,959 INFO Generate label finished(sec_per_example: 0.0354 second).
2025-04-25 15:10:17,959 INFO recall_roi_0.3: 0.000000
2025-04-25 15:10:17,960 INFO recall_rcnn_0.3: 0.931313
2025-04-25 15:10:17,960 INFO recall_roi_0.5: 0.000000
2025-04-25 15:10:17,960 INFO recall_rcnn_0.5: 0.862684
2025-04-25 15:10:17,960 INFO recall_roi_0.7: 0.000000
2025-04-25 15:10:17,960 INFO recall_rcnn_0.7: 0.618351
2025-04-25 15:10:17,961 INFO Average predicted number of objects(3769 samples): 18.109
Traceback (most recent call last):
2025-04-25 15:10:17,961 INFO Average predicted number of objects(3769 samples): 18.109
Traceback (most recent call last):File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/cudadrv/nvvm.py", line 139, in __new__inst.driver = open_cudalib('nvvm')File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/cudadrv/libs.py", line 65, in open_cudalibreturn ctypes.CDLL(path)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/ctypes/__init__.py", line 382, in __init__self._handle = _dlopen(self._name, mode)
OSError: libnvvm.so: cannot open shared object file: No such file or directoryDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "/home/northlab/Downloads/test/OpenPCDet/tools/train.py", line 233, in <module>main()File "/home/northlab/Downloads/test/OpenPCDet/tools/train.py", line 223, in mainrepeat_eval_ckpt(File "/home/northlab/Downloads/test/OpenPCDet/tools/test.py", line 123, in repeat_eval_ckpttb_dict = eval_utils.eval_one_epoch(File "/home/northlab/Downloads/test/OpenPCDet/tools/eval_utils/eval_utils.py", line 125, in eval_one_epochresult_str, result_dict = dataset.evaluation(File "/home/northlab/Downloads/test/OpenPCDet/tools/../pcdet/datasets/kitti/kitti_dataset.py", line 357, in evaluationfrom .kitti_object_eval_python import eval as kitti_evalFile "/home/northlab/Downloads/test/OpenPCDet/tools/../pcdet/datasets/kitti/kitti_object_eval_python/eval.py", line 6, in <module>from .rotate_iou import rotate_iou_gpu_evalFile "/home/northlab/Downloads/test/OpenPCDet/tools/../pcdet/datasets/kitti/kitti_object_eval_python/rotate_iou.py", line 18, in <module>def trangle_area(a, b, c):File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/decorators.py", line 131, in _jitdisp.compile_device(argtypes, restype)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/dispatcher.py", line 883, in compile_devicecres = compile_cuda(self.py_func, return_type, args,File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lockreturn func(*args, **kwargs)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/compiler.py", line 196, in compile_cudacres = compiler.compile_extra(typingctx=typingctx,File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler.py", line 744, in compile_extrareturn pipeline.compile_extra(func)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler.py", line 438, in compile_extrareturn self._compile_bytecode()File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler.py", line 506, in _compile_bytecodereturn self._compile_core()File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler.py", line 481, in _compile_coreraise eFile "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler.py", line 472, in _compile_corepm.run(self.state)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_machinery.py", line 364, in runraise eFile "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_machinery.py", line 356, in runself._runPass(idx, pass_inst, state)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lockreturn func(*args, **kwargs)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_machinery.py", line 311, in _runPassmutated |= check(pss.run_pass, internal_state)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/compiler_machinery.py", line 273, in checkmangled = func(compiler_state)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/typed_passes.py", line 466, in run_passlower = self.lowering_class(targetctx, library, fndesc, interp,File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/lowering.py", line 39, in __init__self.module = self.library.create_ir_module(self.fndesc.unique_name)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/core/codegen.py", line 574, in create_ir_moduleir_module = self._codegen._create_empty_module(name)File "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/codegen.py", line 365, in _create_empty_moduleir_module.data_layout = nvvm.NVVM().data_layoutFile "/home/northlab/.conda/envs/pcdet/lib/python3.9/site-packages/numba/cuda/cudadrv/nvvm.py", line 144, in __new__raise NvvmSupportError(errmsg % e)
numba.cuda.cudadrv.error.NvvmSupportError: libNVVM cannot be found. Do `conda install cudatoolkit`:
libnvvm.so: cannot open shared object file: No such file or directory
环境变量设置有问题:
echo $PATH
查看环境变量时,出现两个cuda版本。删除不用的那个版本,然后编辑~/.bashrc,删除不用的路径。
安装:
conda install cudatoolkit
2025-04-27 09:33:06,963 INFO Car AP@0.70, 0.70, 0.70:
bbox AP:90.6418, 89.2522, 87.9356
bev AP:89.9796, 87.2635, 83.7364
3d AP:85.5829, 76.5766, 72.4278
aos AP:90.62, 89.03, 87.57
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:95.2599, 91.6314, 88.9747
bev AP:92.2387, 88.1922, 85.5264
3d AP:87.1086, 76.2278, 73.2124
aos AP:95.23, 91.39, 88.60
Car AP@0.70, 0.50, 0.50:
bbox AP:90.6418, 89.2522, 87.9356
bev AP:90.7472, 89.9649, 89.2076
3d AP:90.7438, 89.8806, 89.0023
aos AP:90.62, 89.03, 87.57
Car AP_R40@0.70, 0.50, 0.50:
bbox AP:95.2599, 91.6314, 88.9747
bev AP:95.4996, 94.4433, 93.4814
3d AP:95.4659, 94.0998, 91.6416
aos AP:95.23, 91.39, 88.60
Pedestrian AP@0.50, 0.50, 0.50:
bbox AP:65.9998, 61.3019, 58.2591
bev AP:57.2505, 52.2800, 48.3284
3d AP:50.2389, 44.4176, 40.1442
aos AP:51.92, 47.95, 45.42
Pedestrian AP_R40@0.50, 0.50, 0.50:
bbox AP:66.1529, 60.8869, 57.9689
bev AP:57.0789, 50.8879, 46.6875
3d AP:49.5027, 42.8520, 38.4644
aos AP:50.26, 45.55, 43.03
Pedestrian AP@0.50, 0.25, 0.25:
bbox AP:65.9998, 61.3019, 58.2591
bev AP:71.6627, 67.2751, 64.8829
3d AP:71.4750, 67.0294, 64.6982
aos AP:51.92, 47.95, 45.42
Pedestrian AP_R40@0.50, 0.25, 0.25:
bbox AP:66.1529, 60.8869, 57.9689
bev AP:72.6106, 68.0727, 64.8807
3d AP:72.4042, 67.5711, 64.5940
aos AP:50.26, 45.55, 43.03
Cyclist AP@0.50, 0.50, 0.50:
bbox AP:85.0482, 73.6622, 69.8498
bev AP:82.5451, 64.8697, 62.0130
3d AP:80.9018, 62.7737, 58.6206
aos AP:84.06, 71.26, 67.32
Cyclist AP_R40@0.50, 0.50, 0.50:
bbox AP:87.0750, 74.7558, 70.4033
bev AP:83.1838, 65.7656, 61.5345
3d AP:82.0442, 62.8353, 58.6378
aos AP:86.00, 72.07, 67.66
Cyclist AP@0.50, 0.25, 0.25:
bbox AP:85.0482, 73.6622, 69.8498
bev AP:85.3858, 72.5705, 68.9060
3d AP:85.3858, 72.2795, 68.8692
aos AP:84.06, 71.26, 67.32
Cyclist AP_R40@0.50, 0.25, 0.25:
bbox AP:87.0750, 74.7558, 70.4033
bev AP:88.6372, 73.5900, 69.6997
3d AP:88.6309, 73.4494, 69.6359
aos AP:86.00, 72.07, 67.662025-04-27 09:33:06,968 INFO Result is saved to /home/northlab/Downloads/test/OpenPCDet/output/cfgs/kitti_models/pointpillar/default/eval/eval_with_train/epoch_80/val
2025-04-27 09:33:06,968 INFO ****************Evaluation done.*****************
2025-04-27 09:33:06,984 INFO Epoch 80 has been evaluated
Wait 30 seconds for next check (progress: 0.0 / 0 minutes): /home/northlab/Downl2025-04-27 09:33:37,013 INFO **********************End evaluation cfgs/kitti_models/pointpillar(default)**********************
4、test测试
python test.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml --batch_size 4 --ckpt ../output/cfgs/kitti_models/pointpillar/default/ckpt/checkpoint_epoch_80.pth
5、Demo可视化
python demo.py --cfg_file ~/Downloads/test/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml --ckpt ~/Downloads/test/OpenPCDet/output/cfgs/kitti_models/pointpillar/default/ckpt/checkpoint_epoch_80.pth --data_path ~/Downloads/test/OpenPCDet/data/kitti/testing/velodyne/000010.bin
三、工程实施
工程(三)——多激光雷达标定、融合、聚类
1、把当前跑通的conda环境复制出来。
conda activate pcdet
conda env export > environment.yml
# 将这个yml文件拷贝到新的Anaconda环境中。然后基于这个文件,创建新的conda环境。
conda env create -f environment.yml
conda activate pcdet
conda list
conda env list
或者手动复制~/anaconda3/envs/myenv
(Linux/Mac)
2、如何训练自己的训练集
3D目标检测(4):OpenPCDet训练篇--自定义数据集(二十五)实践出真知——OpenPCDet 制作pointpillars自定义数据集 - 梦里寻梦的文章 - 知乎
自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)_tensorrt pointpillars-CSDN博客
3、只有激光雷达坐标系如何变换。
kitti这个标注,它是以相机2坐标系为基准的。
4、如何训练。
5、如何连续检测。
6、检测结果如何通过ros2的topic形式发送出去。
7、显示问题。如何把检测框体,通过汽车模型的方式替换掉。
8、如何筛选可行驶区域。
9、如何渲染整个环境。
10、地面问题处理。
基于Kitti数据集的智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv5模型) - 哔哩哔哩