点云感知
点云数据集(KITTI、NuScene、Lyft、Waymo、PandaSet等)
点云感知算法(point-based、 voxel-based、one-stage/two-stage等)
PCDet是一种用于点云3D对象感知的基于pytorch的代码。
定制化
新增数据集: dataloade
self._getitem_() 中加载自己的数据-送入数据基类提供的 self.prepare_data();
self.generate_prediction_dicts()
数据预处理
data_augmentor与data_processor两个基类可灵活添加、删除各种数据增强与预处理操作
模型-组合、改进旧模型+支持新的模型
PCDet框架中实现其所特有的模块来替换掉原有模块,并修改响应模型配置文件
1.OpenPCDet环境
基础环境
代码下载和python setup.py develop
2. 从官方下载,想要测试的网络模型
3.运行代码
python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml \
--ckpt pv_rcnn_8369.pth \
--data_path ../data/kitti/testing/velodyne/000008.bin
4.demo代码改造示例 demo.py
import os
import json
import datetime
import argparse
import glob
from pathlib import Path
import numpy as np
import torch
from pcdet.config import cfg, cfg_from_yaml_file
from pcdet.datasets import DatasetTemplate
from pcdet.models import build_network, load_data_to_gpu
from pcdet.utils import common_utils
class DemoDataset(DatasetTemplate):
def __init__(self, dataset_cfg, class_names, training=True, root_path=None, logger=None, ext='.bin'):
"""
Args:
root_path: 根目录
dataset_cfg: 数据集配置
class_names: 类别名称
training: 训练模式
logger: 日志
"""
super().__init__(
dataset_cfg=dataset_cfg, class_names=class_names, training=training, root_path=root_path, logger=logger
)
self.root_path = root_path
self.ext = ext
data_file_list = glob.glob(str(root_path / f'*{self.ext}')) if self.root_path.is_dir() else [self.root_path]
data_file_list.sort()
self.sample_file_list = data_file_list
def __len__(self):
return len(self.sample_file_list)
def __getitem__(self, index):
if self.ext == '.bin':
points = np.fromfile(self.sample_file_list[index], dtype=np.float32).reshape(-1, 4)
elif self.ext == '.npy':
points = np.load(self.sample_file_list[index])
else:
raise NotImplementedError
input_dict = {
'points': points,
'frame_id': index,
}
data_dict = self.prepare_data(data_dict=input_dict)
return data_dict
def parse_config():
parser = argparse.ArgumentParser(description='arg parser')
parser.add_argument('--cfg_file', type=str, default='cfgs/kitti_models/second.yaml',
help='specify the config for demo')
parser.add_argument('--data_path', type=str, default='demo_data',
help='specify the point cloud data file or directory')
parser.add_argument('--ckpt', type=str, default=None, help='specify the pretrained model')
parser.add_argument('--ext', type=str, default='.bin', help='specify the extension of your point cloud data file')
args = parser.parse_args()
cfg_from_yaml_file(args.cfg_file, cfg)
return args, cfg
def main():
args, cfg = parse_config()
# 创建日志
logger = common_utils.create_logger()
logger.info('-----------------Quick Demo of OpenPCDet-------------------------')
demo_dataset = DemoDataset(
dataset_cfg=cfg.DATA_CONFIG, class_names=cfg.CLASS_NAMES, training=False,
root_path=Path(args.data_path), ext=args.ext, logger=logger
)
logger.info(f'Total number of samples: \t{len(demo_dataset)}')
model = build_network(model_cfg=cfg.MODEL, num_class=len(cfg.CLASS_NAMES), dataset=demo_dataset)
# 加载权重文件
model.load_params_from_file(filename=args.ckpt, logger=logger, to_cpu=True)
# 将网络放到GPU上
model.cuda()
# 开启评估模式
model.eval()
with torch.no_grad():
for idx, data_dict in enumerate(demo_dataset):
logger.info(f'Visualized sample index: \t{idx + 1}')
data_dict = demo_dataset.collate_batch([data_dict])
load_data_to_gpu(data_dict)
pred_dicts, _ = model.forward(data_dict)
points=data_dict['points'][:, 1:]
ref_boxes=pred_dicts[0]['pred_boxes'],
ref_scores=pred_dicts[0]['pred_scores']
ref_labels=pred_dicts[0]['pred_labels']
points = points.cpu().numpy()
boxes = ref_boxes.cpu().numpy()
labels = ref_labels.cpu().numpy()
scores = ref_scores.cpu().numpy()
boxes_with_label = np.c_[boxes, labels.T]
logger.info('Demo done.')
if __name__ == '__main__':
main()
OpenPCDet 训练的Pipeline
1.生成 kitti infos --》 生成训练数据的字典,保证使用时高效加载。
2.定义 Dataset 及 创建 DataLoader
3.加载Model 并训练
6.说明
接下来
01. OpenPCDet训练篇--自定义数据集
自定义数据集需要重载3个方法:
__init__
__len__: 数据集的长度
__getitem__:取一个样本
02.自定义模型结构
参考
open-mmlab/OpenPCDet https://github.com/open-mmlab/OpenPCDet
3D目标检测(4):OpenPCDet训练篇--自定义数据集 https://zhuanlan.zhihu.com/p/407302009
标签:__,OpenPcdet,框架,cfg,self,file,点云,logger,data
From: https://www.cnblogs.com/ytwang/p/16877914.html