MxNet源码解析(5) io

1. 前言

数据的读取很大程度上决定了代码运行的快慢。
先从python端的data io开始。在MXNet的python文件夹中,io.py定义了io需要的函数,其中_init_to_moduel会在我们import该包的时候运行,它的函数体如下:

def _init_io_module():
    """List and add all the data iterators to current module."""
    plist = ctypes.POINTER(ctypes.c_void_p)()
    size = ctypes.c_uint()
    check_call(_LIB.MXListDataIters(ctypes.byref(size), ctypes.byref(plist))) # 查看一共注册了多少个迭代器
    module_obj = sys.modules[__name__]
    for i in range(size.value):
        hdl = ctypes.c_void_p(plist[i])
        dataiter = _make_io_iterator(hdl)
        setattr(module_obj, dataiter.__name__, dataiter) # 将迭代器注册到包名下

该函数会将注册的迭代器都在io的名字空间下注册。注册之前,会使用MXDataIter进行包装,也就是说当我们在调用例如ImageRecordIter的方法的时候,其实调用的是MXDataIter的方法。
在初始化的时候,会调用Init方法,在调用next的时候,会调用对应的Next方法,在调用reset的时候会调用BeforeFirst

2. data.h

定义了迭代器的接口。

  • DataIter:定义了数据迭代器的接口
    • BeforeFirst 开始迭代之前的准备,reset调用。
    • Next 返回下一个数据
    • Value 返回当前数据
  • class Row

3. io.h

MXnet中的迭代器

  • IIterator

  • DataInst:单个数据的结构体表示

  • DataBatch:NDArray的DataBatch表示,由Iterator返回

4. augmenter

MXNet中定义了数据增强的迭代器,在源码中主要定义了两个增强的方法,一个是image_aug_default.cc,一个image_det_aug_default

4.1 image_aug_default.cc

  • struct DefaultImageAugmentParam : public dmlc::Parameter<DefaultImageAugmentParam>:定义了augmentation需要的参数,Parameterdmlc中定义的一个基础结构体,用于定义参数。在文件parameter.h中定义了该结构体,需要了解的是DMLC_REGISTER_PARAMETER, DMLC_DECLARE_PARAMETER, DMLC_DECLARE_FIELD的作用
    • DMLC_DECLARE_PARAMETER:给定parameter的名称,用于定义这个parameter,该宏会创建一个静态函数:static ::dmlc::parameter::ParamManager *__MANAGER__();,这个__MANAGER__函数会返回一个类型为ParamManager的变量。接着,宏会定义另一个函数:__DECLARE__,函数体在后面的括号中。
    • DMLC_DECLARE_FIELD:用于创建参数的一个域,也就是一个具体的参数。调用方法:this->DECLARE(manager, #FieldName, FieldName),这个方法的定义如下:
template<typename DType>
  inline parameter::FieldEntry<DType>& DECLARE(
      parameter::ParamManagerSingleton<PType> *manager,
      const std::string &key, DType &ref) { // NOLINT(*)
    parameter::FieldEntry<DType> *e =
        new parameter::FieldEntry<DType>();
    e->Init(key, this->head(), ref);
    manager->manager.AddEntry(key, e);
    return *e;
  }
  • DMLC_REGISTER_PARAMETER:用于注册这个参数,它会定义__MANAGER__函数
    (//TODO)
  • DefaultImageAugmenter定义了数据增强的方法,它继承自ImageAugmenter

5. iter_image_recordio.cc

5.1 Init

初始化函数会首先初始化未定义的参数,然后使用参数初始化parser_。接着会初始化iter_,它的定义:dmlc::ThreadIter<std::vector<InstVector<DType>> > iter_;

6. inst_vector.h

TensorVector:由一组Tensor组成的vector,支持不同shape

InstVector:由一组(label, example)组成的列表

7. threaditer.h

定义了类:ThreadedIter,在该类的内部定义了内部类:Producer

  • Init

8. im2rec

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容