zoukankan      html  css  js  c++  java
  • Detectron2 代码剖析(一) data 部分

    Detectron2 中data的部分和maskrcnn_benchmark中的不太一样。
    首先,为了实现数据集的调用与实现的分离,在catalog.py中实现了DataCatalogMetadataCatalog两个类,分别存储了各种数据的属性,调用接口等。其中由DataCatalog.get(dataset_name') 返回数据列表,并由comom.py中实现的DatasetFromList生成data.Dataset

    DataCatalogMetadataCatalog两个类使用了类属性存储数据集属性与数据,用于创建data.Dataset,在整个detectron2中可以作为全局变量使用。
    其中DataCatalog中维护了一个_REGISTERED类属性,是一个dict{dataset_name:func},用以支持字符串访问并获得数据集的数据,例如可以通过DatasetCatalog.get('coco_2017_train')调用dataset/register_coco.py文件中的load_coco_json()函数地址。
    MetadataCatalog类维护了一个'_NAME_TO_META类属性,是一个list[Metadata]。 其中Metadata实例中存储了数据集的一些属性,所有数据集的公用属性有class_namesdataset_id_to_contiguous_idstuff_class_names,分别是类别名称,原数据集类别标签到训练用连续标签的映射和相对于目标的环境标签。 并不是所有数据集都有以上三种属性,而且每个数据集会有其他属性,例如coco数据集中会用到image_rootjson_file`等其他属性。

    总之,DataCatalogMetadataCatalog两个类实现了torch.utils.data.Dataset的创建与具体数据集读取的分,提供了使用字符串创建DatasetDataLoader的方法。
    具体DatasetDatasetFromLists创建,然后经过MapDatasetSampler等得到DataLoader

  • 相关阅读:
    C++ 根据对象名字创建对象
    Google是如何测试的(一)
    lex yacc 学习
    C语言宏定义时#(井号)和##(双井号)的用法
    更多编译器对C++11的支持比较
    用C++11替代Boost的实验之三
    最先进的开源游戏引擎KlayGE 4.2发布
    各编译器对C++11的支持比较
    在Android模拟器上的一些小陷阱
    推出KlayGE Foundation Library
  • 原文地址:https://www.cnblogs.com/zi-wang/p/11777207.html
Copyright © 2011-2022 走看看