CenterNet代码之datasets

本文介绍了CenterNet开源代码中的datasets结构,探讨了其设计目的,即方便任务迁移和自定义数据集的使用。文章详细解释了如何解析COCO数据集,并简化了文件结构,以适应目标检测任务的需求。提供了数据格式提取和Dataset接口的设计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CenterNet(Objects as points)开源代码:https://github.com/xingyizhou/CenterNet

源码的dataset结构如下:

datasets  
  |
  |---dataset  # 解析各数据集(CenterNet共用了下面的数据集)
        |---coco.py     # Coco数据集
        |---coco_hp.py  # Coco human pose
        |---kitti.py    # kitti
        |---pascal.py   # PascalVOC
  |
  |---sample   # 针对不同的网络 提取所需数据
        |---ctdet.py       # CenterNet
        |---ddd.py         # 3D Detection
        |---exdet.py       # ExtremeNet
        |---multi_pose.py  # 
  |
  |---data_factory.py  # 整合dataset和sample,构建完整的pipeline

该结构这样设计的目的是拆分和精细化每一个步骤,看过论文的知道,CenterNet可以很好地在目标检测、3D检测、人体姿态等任务上迁移,所以作者这样设计datasets更方便我们随意结合,同时,如果我们想使用自己的数据集也会很方便。

下文是详细解释,只想直接用懒得细看请移步:https://blog.youkuaiyun.com/weixin_43509263/article/details/100799415

我的任务是目标检测,采用Ccco数据集,使用CenterNet,所以简化文件结构,保留如下:

datasets  
  |---dataset  
        |---coco.py
  |---sample
        |---ctdet.py   # CenterNet
  |---data_factory.py  

'''
实际上,一般构建Dataset我们都会继承torch.utils.data.Dataset, 
       一般都会重写__init__ 、__getitem__ 和 __len__ 三个函数,
这里,__init__、__len__在dataset实现,而 __getitem__在sample中
'''
  • dataset中coco.py解析coco数据集: 
"""
    对coco数据集进行解析
    
    def __init__(self, opt, split): 解析数据集中各属性
    def __len__(self): 返回样本数

    def run_eval(self, results, save_dir): eval接口
       \-- def save_results(self, results, save_dir): 保存结果
              \-- def convert_eval_format(self, all_bboxes): 将自己的结果 转换成coco要求的验证格式
"""
import pycocotools.coco as coco
import pycocotools.cocoeval as COCOeval
import numpy as np
import json
import os

import torch.utils.data as data

class COCO(data.Dataset): 

    num_classes = 80
    default_resolution = [512, 512]
    mean = np.array([0.40789654, 0.44719302, 0.47026115],
                    dtype=np.float32).reshape(1, 1, 3)
    std = np.array([0.28863828, 0.27408164, 0.27809835],
                   dtype=np.float32).reshape(1, 1, 3)

    def __init__(self, opt, split):
        '''
        :param opt: opt是传入的参数对象,在opt.py中
        :param split: train\val\test
        '''
        super(COCO, self).__init__()
        ## self.data_dir、img_dir、annot_dir
        self.data_dir = os.path.join(opt.data_dir, 'coco')
        self.img_dir = os.path.join(self.data_dir, '{}2017'.format(split))
        if split == 'test':
            self.annot_path = os.path.join(
                self.data_dir, 'annotations', 'image_info_test-dec2017.json')
        else:
            self.annot_path = os.path.join(
                    self.data_dir, 'annotations',
                    'instances_{}2017.json').format(split)

        ''' ???????????????????/ '''
        self.max_objs = 128
        # 类别名 加上__background__共81个
        self.class_name = [
            '__background__', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
            'bus', 'train
### CenterNet YAML配置文件示例 对于CenterNet项目而言,`configs/` 目录包含项目的配置文件,例如 `CenterNet2_R50_1x.yaml`。这些配置文件定义了模型的参数、训练设置以及数据集路径等内容[^1]。 #### 配置文件结构概述 以下是典型的 `CenterNet2_R50_1x.yaml` 的部分片段: ```yaml _BASE_: "../Base-RCNN-FPN.yaml" MODEL: WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl" ROI_HEADS: NUM_CLASSES: 80 CENTERNET: FOCAL_LOSS_ALPHA: 2.0 FOCAL_LOSS_BETA: 4.0 REGRESSION_WEIGHTS: [1, 1, 1, 1] DATASETS: TRAIN: ("coco_2017_train",) TEST: ("coco_2017_val",) DATALOADER: FILTER_EMPTY_ANNOTATIONS: True INPUT: MIN_SIZE_TRAIN: (800,) MAX_SIZE_TRAIN: 1333 MIN_SIZE_TEST: 800 MAX_SIZE_TEST: 1333 TEST: DETECTIONS_PER_IMAGE: 100 ``` 此段代码展示了如何通过YAML格式来指定模型权重位置、损失函数超参以及其他重要选项。此外,还指定了用于训练和测试的数据集名称及其大小限制等细节。 #### 关键参数解释 - `_BASE_`: 继承的基础配置文件路径。 - `MODEL.WEIGHTS`: 初始化网络权值所使用的预训练模型链接或本地路径。 - `ROI_HEADS.NUM_CLASSES`: 类别数量(不包括背景),这里设定为COCO数据集中物体检测类别数目的默认值80。 - `CENTERNET.FOCAL_LOSS_ALPHA`, `CENTERNET.FOCAL_LOSS_BETA`: 聚焦损失(Focal Loss)中的两个调节因子α和β。 - `REGRESSION_WEIGHTS`: 边界框回归分支各维度上的加权系数向量。 - `DATASETS.TRAIN`, `DATASETS.TEST`: 训练阶段与验证阶段采用的数据集集合名列表。 - `FILTER_EMPTY_ANNOTATIONS`: 是否过滤掉那些没有任何有效标注信息的对象实例样本。 - `MIN_SIZE_TRAIN`, `MAX_SIZE_TRAIN`, `MIN_SIZE_TEST`, `MAX_SIZE_TEST`: 图像输入尺寸范围,在保持宽高比例不变的情
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值