首页 > 其他分享 >点云_OpenPcdet_框架和使用

点云_OpenPcdet_框架和使用

时间:2022-11-10 18:00:28浏览次数:35  
标签:__ OpenPcdet 框架 cfg self file 点云 logger data

点云感知

点云数据集(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

相关文章

  • SSM框架整合(十五)
    你未看此花时,则此花与汝心同归于寂,你来看此花时,此花颜色一时明白起来,便知此花不在你的心外。上一章简单介绍了SpringMVC的拦截器(十四),如果没有看过,​​请观看上一章​​......
  • Python爬虫的scrapy框架的简单应用
    load_mzitu\mzitu\​​item.py​​#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentationin:#http://doc.scrapy.org/en/latest/......
  • scrapy框架
    什么是框架?就是一个集成了很多功能并且具有很强通用性的一个项目模板如何学习框架?专门学习框架封装的各种功能的详细用法什么是scrapy?爬虫中封装好的一个明星框......
  • 中文书籍对《人月神话》的引用(20211105更新161-165本):大师品软件、JavaScript开发框架
    ​​中文书籍对《人月神话》的引用(第001到160本)>>​​《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。UMLChina摘录......
  • 太全面了!RF接口自动化框架项目实战
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试以码同学V......
  • 从实现一个React到深度理解React框架核心原理
    前言这篇文章循序渐进地介绍实现以下几个概念,遵循本篇文章基本就能搞懂为啥需要fiber,为啥需要commit和phases、reconciliation阶段等原理。本篇文章又不完全和原文一致,这......
  • 支持JDK19虚拟线程的web框架,之四:看源码,了解quarkus如何支持虚拟线程
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos《支持JDK19虚拟线程的web框架》系列文章链接支持JDK19虚拟线......
  • 【前端】学习前端vue框架,了解了什么是v-model
    什么是v-model呢?v-model指令可以在表单input、textarea及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但v-model本......
  • ✳驱动之ic_bus_type框架
      DTS中的i2c设备节点(子节点)(例如:AT24C02)被转化为i2c_client结构体,其所在的i2c控制器节点(父节点)转化为platform_device结构体,匹配到对应的platform_driver结......
  • ZooKeeper : Curator框架之数据缓存与监听CuratorCache
    CuratorCache​​CuratorCache​​​会试图将来自节点的数据保存在本地缓存中。可以缓存指定的单个节点,也可以缓存以指定节点为根的整个子树(默认缓存方案)。可以给​​Curat......