Created by: qingqing01
数据预处理的operators.py、多线程/进程数据预处理复用原先的,数据解析模块coco, voc等也复用原先的,但接口做了修改,便于在config里配置。
- 主要接口:
class Loader(object):
def __init__(self,
dataset=None,
sample_transforms=None,
batch_transforms=None,
batch_size=None,
fields=None,
shuffle=False,
drop_last=False,
drop_empty=True,
mixup_epoch=-1,
class_aware_sampling=False,
worker_num=-1,
use_process=False,
bufsize=100,
memsize='3G',
inputs_def=None,
**kwargs):
多进程/线程 处理内容: sample_transforms-> 组batch -> batch_transforms.
-
使用可以参考 ppdet/data2/tests
-
会删掉data_feed.py,预先定义系列基础的数据预处理yml配置,在模型config里引用。
用户模型的Config里配置,可以参考configs2里, 可以通过 LOADER 关键字加载一个yml的数据预处理文件
_LOADER_: 'faster_loader.yml'
TrainLoader: # 可更新faster_loader.yml里的内容
inputs_def:
image_shape: [3,800,800]
fields: ['image', 'im_info', 'im_id', 'gt_bbox', 'gt_class', 'is_crowd']
batch_size: 3
- 删掉model_inputs.py,模型architecture里增加
build_inputs
接口:
def _inputs_def(self, image_shape):
im_shape = [None] + image_shape
# yapf: disable
inputs_def = {
'image': {'shape': im_shape, 'dtype': 'float32', 'lod_level': 0},
'im_info': {'shape': [None, 3], 'dtype': 'float32', 'lod_level': 0},
'im_id': {'shape': [None, 1], 'dtype': 'int32', 'lod_level': 0},
'gt_bbox': {'shape': [None, 4], 'dtype': 'float32', 'lod_level': 1},
'gt_class': {'shape': [None, 1], 'dtype': 'int32', 'lod_level': 1},
'is_crowd': {'shape': [None, 1], 'dtype': 'int32', 'lod_level': 1},
}
# yapf: enable
return inputs_def
def build_inputs(
self,
image_shape=[3, None, None],
fields=[
'image', 'im_info', 'im_id', 'gt_bbox', 'gt_class', 'is_crowd'
], # for train
use_dataloader=True,
iterable=False):
inputs_def = self._inputs_def(image_shape)
feed_vars = OrderedDict([(key, fluid.layers.data(
name=key,
shape=inputs_def[key]['shape'],
dtype=inputs_def[key]['dtype'],
lod_level=inputs_def[key]['lod_level'])) for key in fields])
loader = fluid.io.DataLoader.from_generator(
feed_list=list(feed_vars.values()),
capacity=64,
use_double_buffer=True,
iterable=iterable) if use_dataloader else None
return feed_vars, loader