【mmdetection】使用kitti数据集进行训练

MMDetection3d对KITT数据集的训练与评估介绍 KITTI数据集中easy、moderate、hard根据标注框是否被遮挡、遮挡程度和框的高度进行定义的简单:最小边界框高度:40像素,最大遮挡级别:完全可见,最大截断:15%中等:最小边界框高度:25像素,最大遮挡水平:部分遮挡,最大截断:30%困难:最小边界框高度:25像素,最大遮挡级别:难以看到,最大截断:50%1. MMDet3d官方文档#1853. KITTI数据集3d目标检测的评价的含义4. 机器学习算法评估指标——3D目标检测5. 点云感知算法面试知识点(一) 阅读详情

目录

一、环境配置

二、Kitti数据集准备

三、仓库中需要修改的文件

3.1 mmdet/datasets中添加kitti.py,内容如下

3.2 修改mmdet/datasets/__init__.py,修改位置已注释标出

3.3 configs/_base_/datasets中添加kitti_detection.py,内容如下

3.4 修改mmdet\core\evaluation文件夹中的class_names.py文件

3.5 修改mmdet\core\evaluation/__init__.py文件,修改位置已注释标出

3.6 修改configs文件夹中需要使用的配置文件

四、训练

五、可视化

5.1 修改mmdet\apis文件夹中的inference.py文件

5.2 使用visualization.py(见下)可视化。(注:需要将visualization.py放在到mmdetection目录下)

5.3 或者使用DetVisGUI可视化

六、参考

七、附录

7.1 kitti标签类别合并

7.2 kitti转voc(可能有问题,不建议使用)


写在前面:官方给了一个demo程序将Kitti转为COCO格式,但是加载数据、修改配置、训练、测试、可视化这些东西都都放在一起总觉得不舒服,用那个比较好,于是把官方的示例改成了一个新的数据集kitti。

一、环境配置

mmdet 2.7.0

mmcv 1.2.1

克隆仓库中的源码,并在目录下创建data文件夹。按照get_started.md文件进行配置,不再赘述。

二、Kitti数据集准备

按照以下文件夹结构准备数据。

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── kitti
│   │   ├── training
│   │   │   ├── image_2
│   │   │   ├── label_2
│   │   ├── train.txt
│   │   ├── val.txt
│   │   ├── trainval.txt

三、仓库中需要修改的文件

3.1 mmdet/datasets中添加kitti.py,内容如下

import os.path as osp

import mmcv
import numpy as np

from mmdet.datasets.builder import DATASETS
from mmdet.datasets.custom import CustomDataset


@DATASETS.register_module()
class KittiDataset(CustomDataset):
    CLASSES = ('Car', 'Pedestrian', 'Cyclist')

    def load_annotations(self, ann_file):
        cat2label = {k: i for i, k in enumerate(self.CLASSES)}
        # load image list from file
        image_list = mmcv.list_from_file(self.ann_file)

        data_infos = []
        # convert annotations to middle format
        for image_id in image_list:
            filename = f'{self.img_prefix}/{image_id}.png'
            image = mmcv.imread(filename)
            height, width = image.shape[:2]

            data_info = dict(filename=f'{image_id}.png', width=width, height=height)

            # load annotations
            label_prefix = self.img_prefix.replace('image_2', 'label_2')
            lines = mmcv.list_from_file(osp.join(label_prefix, f'{image_id}.txt'))

            content = [line.strip().split(' ') for line in lines]
            bbox_names = [x[0] for x in content]
            bboxes = [[float(info) for info in x[4:8]] for x in content]

            gt_bboxes = []
            gt_labels = []
            gt_bboxes_ignore = []
            gt_labels_ignore = []

            # filter 'DontCare'
            for bbox_name, bbox in zip(bbox_names, bboxes):
                if bbox_name in cat2label:
                    gt_labels.append(cat2label[bbox_name])
                    gt_bboxes.append(bbox)
                else:
                    gt_labels_ignore.append(-1)
                    gt_bboxes_ignore.append(bbox)

            data_anno = dict(
                bboxes=np.array(gt_bboxes, dtype=np.float32).reshape(-1, 4),
                labels=np.array(gt_labels, dtype=np.long),
                bboxes_ignore=np.array(gt_bboxes_ignore,
                                       dtype=np.float32).reshape(-1, 4),
                labels_ignore=np.array(gt_labels_ignore, dtype=np.long))

            data_info.update(ann=data_anno)
            data_infos.append(data_info)

        return data_infos

3.2 修改mmdet/datasets/__init__.py,修改位置已注释标出

from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset
from .cityscapes import CityscapesDataset
from .coco import CocoDataset
from .custom import CustomDataset
from .dataset_wrappers import (ClassBalancedDataset, ConcatDataset,
                               RepeatDataset)
from .deepfashion import DeepFashionDataset
from .lvis import LVISDataset, LVISV1Dataset, LVISV05Dataset
from .samplers import DistributedGroupSampler, DistributedSampler, GroupSampler
from .utils import replace_ImageToTensor
from .voc import VOCDataset
from .wider_face import WIDERFaceDataset
from .xml_style import XMLDataset
from .kitti import KittiDataset            #新加

__all__ = [
    #下面的KittiDataset为新加
    'KittiDataset','CustomDataset', 'XMLDataset', 'CocoDataset', 'DeepFashionDataset',
    'VOCDataset', 'CityscapesDataset', 'LVISDataset', 'LVISV05Dataset',
    'LVISV1Dataset', 'GroupSampler', 'DistributedGroupSampler',
    'DistributedSampler', 'build_dataloader', 'ConcatDataset', 'RepeatDataset',
    'ClassBalancedDataset', 'WIDERFaceDataset', 'DATASETS', 'PIPELINES',
    'build_dataset', 'replace_ImageToTensor'
]

3.3 configs/_base_/datasets中添加kitti_detection.py,内容如下

# dataset settings
dataset_type = 'KittiDataset'
data_root = 'data/kitti/'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size_divisor=32),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1333, 800),
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='Pad', size_divisor=32),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]
data = dict(
    samples_per_gpu=8,
    workers_per_gpu=8,
    train=dict(
        type=dataset_type,
        ann_file=data_root + 'train.txt',
        img_prefix=data_root + 'training/image_2',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        ann_file=data_root + 'val.txt',
        img_prefix=data_root + 'training/image_2',
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        ann_file=data_root + 'val.txt',
        img_prefix=data_root + 'training/image_2',
        pipeline=test_pipeline))
evaluation = dict(interval=1, metric='mAP')

3.4 修改mmdet\core\evaluation文件夹中的class_names.py文件

###添加一个函数
def kitti_classes():
    return ['Car', 'Pedestrian', 'Cyclist']

###修改dataset_aliases
dataset_aliases = {
    'kitti':['kitti'],        #添加kitti数据集
    'voc': ['voc', 'pascal_voc', 'voc07', 'voc12'],
    'imagenet_det': ['det', 'imagenet_det', 'ilsvrc_det'],
    'imagenet_vid': ['vid', 'imagenet_vid', 'ilsvrc_vid'],
    'coco': ['coco', 'mscoco', 'ms_coco'],
    'wider_face': ['WIDERFaceDataset', 'wider_face', 'WDIERFace'],
    'cityscapes': ['cityscapes']
}

3.5 修改mmdet\core\evaluation/__init__.py文件,修改位置已注释标出

from .class_names import (cityscapes_classes, coco_classes, dataset_aliases,
                          get_classes, imagenet_det_classes,
                          imagenet_vid_classes, voc_classes,
                          kitti_classes)    #新加
from .eval_hooks import DistEvalHook, EvalHook
from .mean_ap import average_precision, eval_map, print_map_summary
from .recall import (eval_recalls, plot_iou_recall, plot_num_recall,
                     print_recall_summary)

__all__ = [
    'kitti_classes',        #新加
    'voc_classes', 'imagenet_det_classes', 'imagenet_vid_classes',
    'coco_classes', 'cityscapes_classes', 'dataset_aliases', 'get_classes',
    'DistEvalHook', 'EvalHook', 'average_precision', 'eval_map',
    'print_map_summary', 'eval_recalls', 'print_recall_summary',
    'plot_num_recall', 'plot_iou_recall'
]

3.6 修改configs文件夹中需要使用的配置文件

这里使用的是configs/fcos/fcos_r50_caffe_fpn_4x4_1x_coco.py,只需要将_base_中的coco_detection.py改成kitti_detection.py,然后将类别数修改为3类即可。

四、训练

训练参考传送门,初步尝试使用的命令如下

CUDA_VISIBLE_DEVICES=6 nohup python tools/train.py configs/fcos/fcos_r50_caffe_fpn_4x4_1x_coco.py --gpus=1 --work-dir=fcos_output/TEST>fcos_r50_caffe_fpn_4x4_1x_coco.log 2>&1 &

五、可视化

5.1 修改mmdet\apis文件夹中的inference.py文件

###将第48行
model.CLASSES = get_classes('coco')
###修改为
model.CLASSES = get_classes('kitti')

5.2 使用visualization.py(见下)可视化。(注:需要将visualization.py放在到mmdetection目录下)

from mmdet.apis import init_detector, inference_detector, show_result_pyplot
import mmcv

config_file = 'configs/fcos/fcos_r50_caffe_fpn_4x4_1x_coco.py'
# download the checkpoint from model zoo and put it in `checkpoints/`
checkpoint_file = 'fcos_output/fcos_r50_caffe_fpn_4x4_1x_coco/epoch_12.pth'

# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:2')

# test a single image
img = 'demo.jpg'
result = inference_detector(model, img)
#print(result)
# show the results
show_result_pyplot(model, img, result)

5.3 或者使用DetVisGUI可视化

我使用的是DetVisGUI_test.py,直接显示模型预测结果,需要做的修改如下所示,然后运行下面命令即可。(注:需要将DetVisGUI_test.py、epoch_9.pth和data中的test_images文件夹拷贝到mmdetection下)

python DetVisGUI_test.py configs/fcos/fcos_r50_caffe_fpn_4x4_1x_coco.py epoch_9.pth data/test_images
###添加类
class KITTI_dataset:

    def __init__(self, cfg, args):
        self.dataset = 'KITTI'
        self.img_root = args.img_root
        self.config_file = args.config
        self.checkpoint_file = args.ckpt
        self.mask = False
        self.device = args.device

        # according json to get category, image list, and annotations.
        self.img_list = self.get_img_list()

        # coco categories
        self.aug_category = aug_category(['Car', 'Pedestrian', 'Cyclist'])


    def get_img_list(self):
        img_list = list()
        for image in sorted(os.listdir(self.img_root)):
            img_list.append(image)

        return img_list

    def get_img_by_name(self, name):
        img = Image.open(os.path.join(self.img_root, name)).convert('RGB')
        return img

    def get_img_by_index(self, idx):
        img = Image.open(os.path.join(self.img_root,
                                      self.img_list[idx])).convert('RGB')
        return img

###vis_tool的init中COCO改为新加的KITTI
#self.data_info = COCO_dataset(cfg, self.args)
self.data_info = KITTI_dataset(cfg, self.args)

六、参考

https://blog.youkuaiyun.com/gaoyi135/article/details/90613895

https://blog.youkuaiyun.com/xiangxianghehe/article/details/89812058#commentsedit

https://blog.youkuaiyun.com/jesse_mx/article/details/65634482

https://blog.youkuaiyun.com/yapifeitu/article/details/105884203?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-5.control

七、附录

7.1 kitti标签类别合并

kitti包括九个类别,分别是'Car', 'Van', 'Truck','Pedestrian', 'Person_sitting', 'Cyclist','Tram',  'Misc' or  'DontCare',这里将 ‘Van’, ‘Truck’, ‘Tram’ 合并到 ‘Car’ 类别中去,将 ‘Person_sitting’ 合并到 ‘Pedestrian’ 类别中去,‘Misc’ 和 ‘Dontcare’ 这两类直接忽略,最终只保留三个类别,分别是'Car', 'Pedestrian'和'Cyclist'。

这里使用的是这位博主博客中的modify_annotations_txt.py工具,源码如下,注意!!!该工具直接在标签txt文件上修改,使用之前做好备份!!!。运行工具之前需要将kitti中的label_2文件夹拷贝到data/VOCdevit/VOC2007当中并重命名为Labels,modify_annotations_txt.py工具同样置于此文件夹下,然后执行如下命令:python modify_annotations_txt.py,就可以将类别合并,该博主博客中有运行前后对比,这里不再附加。

# modify_annotations_txt.py
import glob
import string

txt_list = glob.glob('./Labels/*.txt') # 存储Labels文件夹所有txt文件路径
def show_category(txt_list):
    category_list= []
    for item in txt_list:
        try:
            with open(item) as tdf:
                for each_line in tdf:
                    labeldata = each_line.strip().split(' ') # 去掉前后多余的字符并把其分开
                    category_list.append(labeldata[0]) # 只要第一个字段,即类别
        except IOError as ioerr:
            print('File error:'+str(ioerr))
    print(set(category_list)) # 输出集合

def merge(line):
    each_line=''
    for i in range(len(line)):
        if i!= (len(line)-1):
            each_line=each_line+line[i]+' '
        else:
            each_line=each_line+line[i] # 最后一条字段后面不加空格
    each_line=each_line+'\n'
    return (each_line)

print('before modify categories are:\n')
show_category(txt_list)

for item in txt_list:
    new_txt=[]
    try:
        with open(item, 'r') as r_tdf:
            for each_line in r_tdf:
                labeldata = each_line.strip().split(' ')
                if labeldata[0] in ['Truck','Van','Tram']: # 合并汽车类
                    labeldata[0] = labeldata[0].replace(labeldata[0],'Car')
                if labeldata[0] == 'Person_sitting': # 合并行人类
                    labeldata[0] = labeldata[0].replace(labeldata[0],'Pedestrian')
                if labeldata[0] == 'DontCare': # 忽略Dontcare类
                    continue
                if labeldata[0] == 'Misc': # 忽略Misc类
                    continue
                new_txt.append(merge(labeldata)) # 重新写入新的txt文件
        with open(item,'w+') as w_tdf: # w+是打开原文件将内容删除,另写新内容进去
            for temp in new_txt:
                w_tdf.write(temp)
    except IOError as ioerr:
        print('File error:'+str(ioerr))

print('\nafter modify categories are:\n')
show_category(txt_list)

7.2 kitti转voc(可能有问题,不建议使用)

格式转换参考另一位博主的博客,我只是将JPEGImages中的图片格式由jpg改为了png,另外我的存储标记信息的文件夹是Labels,也在下面代码中有体现。我将其命名为kitti2voc.py,与Labels位于同一目录下,执行以下命令即可完成转换:python kitti2voc.py

'''author:nike hu'''
# -*- coding: utf-8 -*-

import shutil
import os
import cv2

headstr = """\
<annotation>
    <folder>VOC2007</folder>
    <filename>%06d.png</filename>
    <source>
        <database>My Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>NULL</flickrid>
    </source>
    <owner>
        <flickrid>NULL</flickrid>
        <name>company</name>
    </owner>
    <size>
        <width>%d</width>
        <height>%d</height>
        <depth>%d</depth>
    </size>
    <segmented>0</segmented>
"""
objstr = """\
    <object>
        <name>%s</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>%d</xmin>
            <ymin>%d</ymin>
            <xmax>%d</xmax>
            <ymax>%d</ymax>
        </bndbox>
    </object>
"""

tailstr = '''\
</annotation>
'''




def writexml(idx, head, bbxes, tail):
    filename = ("Annotations/%06d.xml" % (idx))
    f = open(filename, "w")
    f.write(head)
    for bbx in bbxes:
        f.write(objstr % (bbx[-1], bbx[0], bbx[1], bbx[0] + bbx[2], bbx[1] + bbx[3]))
    f.write(tail)
    f.close()


def clear_dir():
    if shutil.os.path.exists(('Annotations')):
        shutil.rmtree(('Annotations'))
    if shutil.os.path.exists(('ImageSets')):
        shutil.rmtree(('ImageSets'))
    # if shutil.os.path.exists(('JPEGImages')): # 因为我们已经将所有图片放到这个文件夹里面了,所以不需要再创建了
    #     shutil.rmtree(('JPEGImages'))

    shutil.os.mkdir(('Annotations'))
    shutil.os.makedirs(('ImageSets/Main'))
    # shutil.os.mkdir(('JPEGImages'))


def excute_datasets():
    '''在Main文件夹下面要创建四个文件,trainval是总样本的百分之九十,train是总数据的百分之七十,val是总数据样本的百分之20,剩下的百分之10是测试样本'''
    ftrainval = open(('ImageSets/Main/' + 'trainval' + '.txt'), 'a')
    ftrain = open(('ImageSets/Main/' + 'train' + '.txt'), 'a')
    fval = open(('ImageSets/Main/' + 'val' + '.txt'), 'a')
    ftest = open(('ImageSets/Main/' + 'test' + '.txt'), 'a')
    images = './JPEGImages/' # 这是存储图片的位置
    txtfile = './Labels/' # 这个是是存储标记信息的文件夹
    txtlist = os.listdir(txtfile)
    lenfile = len(txtlist) # 这个是标记的信息的总的文件数量
    count = 1 # 统计正在处理的数量
    for txtname in txtlist:
        txt_path = os.path.join(txtfile, txtname)
        image_path = os.path.join(images, txtname.split('.')[0] + '.png')  # 这里是图片的路径
        im = cv2.imread(image_path)  # 读取图片
        if im is None:  # 如果不存在这张照片,跳过
            continue
        head = headstr % (int(txtname.split('.')[0]), im.shape[1], im.shape[0], im.shape[2]) # xml文件的头部分
        boxes = []
        with open(txt_path, 'r') as f:
            while True:
                txt_content = f.readline().split(' ')
                if txt_content[0] == '':
                    break
                label_name = txt_content[0]
                if label_name == 'Misc' or label_name == 'DontCare': # 如果是这两类就去掉
                    continue
                box = [float(x) for x in txt_content[4:8]] # 这个是坐标
                box.append(label_name) # 把每个坐标对应的标签加入
                boxes.append(box)
        writexml(int(txtname.split('.')[0]), head, boxes, tailstr)
        if count < 0.9 * lenfile: # 总样本的百分之90部分存到trainval
            ftrainval.write('%06d\n' % (int(txtname.split('.')[0])))
            if count < 0.7 * lenfile: # 总样本的百分之70存入train
                ftrain.write('%06d\n' % (int(txtname.split('.')[0])))
            else: # 在0.7到0.9之间的数据存入val文件
                fval.write('%06d\n' % (int(txtname.split('.')[0])))
        else:
            ftest.write('%06d\n' % (int(txtname.split('.')[0])))
        count += 1
    ftrain.close() # 运行的时候出现过没有存进去的情况,原因是数据在内存中,还没有存在磁盘中,一般程序运行完会将数据放到磁盘中,或者用close语句
    ftest.close()
    ftrainval.close()
    fval.close()



if __name__ == '__main__':
    clear_dir()
    idx = excute_datasets()
    print('Complete...')


在MMdetection3D上使用KITTI数据集训练及性能评估 以下是我在MMdetection3D上使用KITTI数据集训练模型和评估模型性能的方法和详细步骤。 阅读详情

相关推荐

【MMDetection3D】环境搭建,使用PointPillers训练&测试&可视化KITTI数据集

MMDetection3D环境搭建,使用PointPillers训练&测试&可视化KITTI数据集

weixin_43799388的博客 2万+

win10 OpenPCDet 训练KITTI以及自己的数据集

win10 OpenPCDet 训练KITTI以及自己的数据集

m0_68312479的博客 1万+

避坑指南:在MMDetection3D上,用KITTI数据集训练CenterPoint模型时,我踩过的那些源码坑

本文分享了在MMDetection3D框架中使用KITTI数据集训练CenterPoint模型时遇到的五个典型问题及其解决方案,包括环境配置、数据维度不匹配、张量尺寸问题等,帮助开发者快速定位和解决源码中的常见错误。

cuanchuwei1207的博客 405

mmdetection3d基于kitti数据集训练pointpillars模型

当mmdetection3d环境安装成功后,可看上一篇如何安装mmdetection3d 1 准备工作 kitti数据集下载,下面是我的百度网盘里的kitti数据集,有需要的自取 链接: https://pan.baidu.com/s/1QlgVfl3vBbGEfF0QCo8N6A 提取码: milu 1.1 创建数据目录: mkdir -p data/kitti/ImageSets data/kitti/testing data/kitti/training 也可以不通过终端输入命令,直接

qq_46127597的博客 5706

MMDetection3D实战:从零开始用PointPillars训练KITTI数据集(附可视化避坑指南)

本文详细介绍了如何使用MMDetection3D框架从零开始训练PointPillars模型处理KITTI数据集,包括环境配置、数据预处理、模型训练和结果可视化等关键步骤。通过实战指南和避坑技巧,帮助开发者快速掌握3D目标检测技术,提升在自动驾驶领域的应用能力。

weixin_33724046的博客 649

【mmdetection3d】——3D 目标检测 KITTI 数据集

3D 目标检测 KITTI 数据集 本页提供了有关在 MMDetection3D 中使用 KITTI 数据集的具体教程。 注意:此教程目前仅适用于基于雷达和多模态的 3D 目标检测的相关方法,与基于单目图像的 3D 目标检测相关的内容会在之后进行补充。 数据准备 您可以在这里下载 KITTI 3D 检测数据并解压缩所有 zip 文件。 像准备数据集的一般方法一样,建议将数据集根目录链接到 $MMDETECTION3D/data。 在我们处理之前,文件夹结构应按如下方式组织: mmdetection3d ├─

m0_45388819的博客 6016

基于MMDetection的atss模型在kitti数据集上进行训练

首先先对COCO数据集的格式做一个介绍,coco数据集的目录结构如下:cocoimages:一个list,里面每个元素是一个字典,包含file_name,height,width,id等内容annotations:一个list,里面每个元素也是一个字典,包含segmentation, area, iscrowd, image_id, bbox, category_id, id等内容。其中对于目标检测任务有用的字段有id, image_id, category_id, bbox, area。

kybabcde的博客 1677

mmdetection3d 训练

mmdetection3d 训练 ​ 本节以SECOND算法为例,简要介绍mmdetection3d second算法训练过程,含数据和python源码详细介绍。 1 mmdetection3d环境安装 mmdetection3d环境详细安装和调试请参考:【mmdetection3d】mmdetection3d安装详细步骤_Coding的叶子的博客-优快云博客。 2 KITTI数据集准备 mmdetection3d的kitti原始数据集主要由三部份组成,......

叶子的博客 8365

基于Kitti数据集实现MMDetection3D点云物体检测训练

基于Kitti数据集实现MMDetection3D点云物体检测训练 贵在坚持!

DATABALL 的博客 627

苹果搜索广告ASA开户教程

阅读导航 一、创建账号 1、登录网站 2、填写账号主体信息 3、填写商家和发票信息 4、选择付款方式 二、上传审核材料 1、上传文件 2、请求审批 3、上传文件中的常见问题 一、创建账号 1、用Apple ID登录ASA网站 首先我们进入开户网址:https://app-ads.apple.com/ 如果已拥有Apple ID,直接登录即可,如果没有Apple ID,可以先按照步骤创建Apple ID,再返回登录。 注意,这里登录的Apple ID也有讲究: ① 如果是开发

testflight121的博客 2130

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权报错信息11:39:47.976 安装 .hap 到鸿蒙设备 ...11:39:48.517 运行所需的权限没有签名授权,请参考 配置文档11:39:48.517 安装失败。

weixin_66071584的博客 1350

MMDetection3D框架下KITTI数据集训练技巧:如何优化PointPillars算法性能

本文深入探讨了在MMDetection3D框架下,针对KITTI数据集优化PointPillars算法性能的实战技巧。从数据预处理、体素化参数调优、批次大小与学习率协同,到多GPU训练效率瓶颈分析与高级优化策略(如混合精度训练),提供了系统性的调优指南,旨在帮助开发者显著提升3D目标检测模型的精度与训练效率。

weixin_28235513的博客 401

循环卷积和线性卷积(矩阵视角)

矩阵视角的循环卷积核线性卷积

shengsong 3581

virtuoso-bridge-lite 确定性原理图规划器源码解析:Python 规划层如何实现可复现的器件布局

本文深入解析开源项目 **virtuoso-bridge-lite**(连接 LLM Agent 与 Cadence Virtuoso 的轻量桥梁)中的**确定性原理图规划器**:一个纯 Python 规划层如何把"器件 + 连接 + 布局约束"翻译成可复现的器件布局,让同一份拓扑元数据永远生成同一张原理图。全文基于源码 [src/virtuoso_bridge/virtuoso/schemati

gitblog_01118的博客 415

【深度学习】Progressive Distillation for Fast Sampling of Diffusion Models

这种方法通过迭代地将一个需要较多步骤的模型(称为教师模型)蒸馏成一个需要较少步骤的学生模型,每次迭代都将采样步骤减半,直到达到所需的采样步骤数量。通过渐进式蒸馏,论文将原始需要8192步采样的模型成功蒸馏为只需4步采样就能取得接近的生成质量的新模型,大幅提高了扩散模型的推理效率。这篇论文提出了一种"渐进式蒸馏"(Progressive Distillation)的方法,来大幅降低用于生成对抗网络(GAN)的扩散模型(Diffusion Model)在推理阶段的采样步数,从而提高其推理效率。

q742971636的博客 1788

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏

阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。

sg_knight的专栏 1931

不只是跑Demo:用MMDetection3D和KITTI数据集完成你的第一个3D检测模型训练与可视化分析

本文详细介绍了如何使用MMDetection3D框架和KITTI数据集完成3D目标检测模型的训练与可视化分析。从环境配置、数据预处理到SECOND模型训练与优化,提供全流程实战指南,帮助开发者快速掌握3D检测技术,适用于自动驾驶、机器人导航等领域。

weixin_29073241的博客 372

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3496

win10 mmdetection3d 训练KITTI

win10 mmdetection3d 训练KITTI

m0_68312479的博客 2692

麒麟v10系统安装

麒麟v10系统安装

喜文BLOG 1万+

2025年下半年网络规划设计师综合知识真题及答案解析

1983年,ARPANet完成技术转型,对此后的 Internet发展全关重要,这一转型是指( ) A.电路交换转向分组交换 B.商业化转型 C.民用化转型 D.从 NCP 协议转向 TCP/IP 答案:D 解析:ARPANet 最初使用 NCP (Network Control Protocol)协议进行主机问通信。1983年1月1日,ARPANet 正式切换到TCP/IP 协议族,为后续Internet的发展奠定了统一协议基础。

鹿鸣天涯 931

用MMDetection3D跑通KITTI数据集:从数据下载、预处理到训练PointPillars模型全流程

本文详细介绍了如何使用MMDetection3D框架在KITTI数据集上训练PointPillars模型的全流程,包括环境配置、数据预处理、模型训练与优化。特别针对工程实践中的常见问题提供解决方案,帮助开发者快速掌握3D目标检测技术,提升自动驾驶场景下的检测精度。

weixin_30301449的博客 241

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mmdetection3D系列--(2)数据集准备

mmdetection3d支持很多数据集,比如说kitti,NuScenes,waymo,Lyft,S3DIS、ScanNet 和 SUN RGB-D。这里要根据自己的任务去选择相应的数据集,是作2d/3d检测的,还是作分割的,都是不一样的。但是这些数据由于格式和规则的不同,很可能带来麻烦,所以mmdetection准备了一些脚本,来把下载好的数据转换成训练/测试脚本能识别的格式。从而在该数据集上进行后续的工作。

qq_45783225的博客 2085

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MMDetection3D :openmmlab环境搭建及模拟kitti数据集跑pointpillars模型

openmmlab环境搭建及模拟kitti数据集跑pointpillars模型

qq_42835363的博客 4570

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MMdetection3D学习系列(二)——KITTI数据集训练测试及可视化

mmdet3d对kitti数据集的训练测试及可视化

onepunch_k的博客 3722
上一篇: OpenPCDet在Xavier上的环境配置
下一篇: 目标检测之Label Assignment
阿瓜瓜瓜
博客等级 码龄9年 18粉丝 51原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值