mmdetection源码笔记(三):创建数据集模型之datasets/coco.py的解读(上)

本文主要解读mmdetection框架中CocoDataset类的源码,它是CustomDataset的子类,用于目标检测任务。内容包括加载图片信息、获取annotation详情、过滤图片以及解析图片annotation等关键方法的详细解释。同时,提到了父类CustomDataset的其他重要函数,并链接了相关系列文章供深入学习。

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

引言

同样,数据集也是需要build模型的。类CocoDataset是CustomDataset类的子类,而CustomDataset是Dataset的子类。(之前的创建模型,都是torch.nn.module的子类,数据集的创建就不是咯,注意一下)
关于CustomDataset的定义和其类方法的代码解读,可以看下面这篇文章:

类CocoDataset依然作为形参,添加到@DATASETS.register_module中,作用就是将其保存到注册表的module中。共有四个方法:

  • load_annotations():加载标注文件中的annotation字典,返回图片信息,比如:info{"filename":"284193,faa9000f2678b5e.jpg"}
  • get_ann_info(self,idx):获得annotation的信息,其实是调用了_parse_ann_info();它的形参是指定的图片id,返回值是个字典:bboxes,bboxes_ignore, labels, masks, mask_polys, poly_lens.
  • _filter_imgs(self, min_size):过滤图片,去除没有annotation标注文件的图片,以及图片尺寸小于min-size的图片。
  • _parse_ann_info(self, ann_info, with_mask=True):解析一张图片的annotation的信息,主要是bbox和mask信息,返回值为:bboxes,bboxes_ignore, labels, masks, mask_polys, poly_lens.(如果没用mask分支,就没用后面的三个返回值了)

在父类中custom.py有其初始化,还有另外的几个重要的函数,比如prepare_train_img()、prepare_test_img()等。因为其代码行数太长,所以在上面的链接里写一篇讲解。
以下是coco.py的代码,如有错误的地方,还请指出,后面博主也会继续修改,增加对各个代码段的理解。

coco.py代码注释
import numpy as np
from pycocotools.coco import COCO
from .custom import CustomDataset
from .registry import DATASETS
@DATASETS.register_module
class CocoDataset(CustomDataset):
""" coco api
self.coco = COCO(ann_file)
create class members
		# 一维数组,值为对应原coco数据集的annotation/images/categories信息
        coco.anns = anns  
        coco.imgs = imgs
        coco.cats = cats
        # 两个默认value为list的字典 比如:imgToAnns{"1":[ann1,ann2,ann3,....]},'1'为image_id = 1,ann1时其为 1 的annotation。
        coco.imgToAnns = imgToAnns
        coco.catToImgs = catToImgs
        以上五个members,在实例化COCO时,被创建
"""
    CLASSES = ('person', 'mask')
    def load_annotations(self, ann_file):
        self.coco = COCO(ann_file)    
        
        #函数 getImgIds()、getCatIds()、getAnnIds(),返回值为integer array of img/cat/ann ids,形参为过滤条件
        self.cat_ids = self.coco.getCatIds()  # [1,2] , integer array of cat ids
        self.cat2label = {
   
       #  dict
            cat_id: i + 1     #  cat_id : cat_id + 1 ??
            for i, cat_id in enumerate(self
根据引用\[1\]中的内容,您在py文件中需要修改数据集的部分。具体来说,您需要修改`data`字典中的一些参数,例如`samples_per_gpu`和`workers_per_gpu`。此外,您还需要在`train`、`val`和`test`的`pipeline`中进行相应的修改。 根据引用\[2\]中的内容,您还需要在`configs/_base_/models/faster_rcnn_r50_fpn.py`文件中将`num_classes`的值从80修改为20。此外,在`configs/_base_/datasets/coco_detection.py`文件中,您还需要将`data_root`改为绝对路径。 根据引用\[3\]中的内容,`custom.py`是`datasets/coco.py`中`CocoDataset`的父类,它包含了一些重要的方法,例如`load_annotations()`、`get_ann_info()`、`_filter_imgs()`、`_set_group_flag()`、`__getitem__()`、`prepare_train_img()`和`prepare_test_img()`。这些方法在数据集的加载和预处理过程中起到了关键作用。 根据您提供的错误信息`FileNotFoundError: class 'CustomDataset' in mmpretrain/datasets/custom.py: \[Errno 2\] No such file or directory: '../data/cats_dogs_dataset/training_set/'`,看起来是找不到`../data/cats_dogs_dataset/training_set/`目录下的`CustomDataset`类。请确保该目录和文件存在,并且路径正确。 综上所述,您需要检查文件路径是否正确,并确保您已经按照引用中的说明进行了相应的修改。 #### 引用[.reference_title] - *1* [mmdet训练中数据集导入](https://blog.csdn.net/ydestspring/article/details/126547437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [linux配置mmdetection2.8训练自定义coco数据集()](https://blog.csdn.net/wulele2/article/details/113468646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mmdetection源码笔记):创建数据集模型datasets/custom.py解读(下)](https://blog.csdn.net/qq_41375609/article/details/100004100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值