diff --git a/docs/EXPORT_MODEL.md b/docs/EXPORT_MODEL.md index 2d06c7604e4a97e8b74a99d07571d2d2878f4ca0..614d87e29c5e5d5685f64c9ee78cf7d1d5192d09 100644 --- a/docs/EXPORT_MODEL.md +++ b/docs/EXPORT_MODEL.md @@ -14,14 +14,14 @@ 使用[训练/评估/推断](GETTING_STARTED_cn.md)中训练得到的模型进行试用,脚本如下 ```bash -# 导出FasterRCNN模型 +# 导出FasterRCNN模型, 模型中data层默认的shape为3x800x1333 python tools/export_model.py -c configs/faster_rcnn_r50_1x.yml \ --output_dir=./inference_model \ -o weights=output/faster_rcnn_r50_1x/model_final \ ``` -- 预测模型会导出到`inference_model/faster_rcnn_r50_1x`目录下,模型名和参数名分别为`__model__`和`__params__`。 +预测模型会导出到`inference_model/faster_rcnn_r50_1x`目录下,模型名和参数名分别为`__model__`和`__params__`。 ## 设置导出模型的输入大小 @@ -46,5 +46,3 @@ python tools/export_model.py -c configs/ssd/ssd_mobilenet_v1_voc.yml \ -o weights= https://paddlemodels.bj.bcebos.com/object_detection/ssd_mobilenet_v1_voc.tar \ SSDTestFeed.image_shape=[3,300,300] ``` - -- 保存FPN系列模型时,需要保证上下采样维度一致,因此image_shape须设置为32的倍数 diff --git a/ppdet/data/data_feed.py b/ppdet/data/data_feed.py index 26bd297a00926ad6e0ff852b3f1fb0de5c6fec3a..0de5ad1ab97a5a42805af3f4664c60d3ac143558 100644 --- a/ppdet/data/data_feed.py +++ b/ppdet/data/data_feed.py @@ -453,7 +453,7 @@ class FasterRCNNTrainFeed(DataFeed): 'image', 'im_info', 'im_id', 'gt_box', 'gt_label', 'is_crowd' ], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), RandomFlipImage(prob=0.5), @@ -505,7 +505,7 @@ class FasterRCNNEvalFeed(DataFeed): COCO_VAL_IMAGE_DIR).__dict__, fields=['image', 'im_info', 'im_id', 'im_shape', 'gt_box', 'gt_label', 'is_difficult'], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), NormalizeImage(mean=[0.485, 0.456, 0.406], @@ -552,7 +552,7 @@ class FasterRCNNTestFeed(DataFeed): dataset=SimpleDataSet(COCO_VAL_ANNOTATION, COCO_VAL_IMAGE_DIR).__dict__, fields=['image', 'im_info', 'im_id', 'im_shape'], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), NormalizeImage(mean=[0.485, 0.456, 0.406], @@ -600,7 +600,7 @@ class MaskRCNNTrainFeed(DataFeed): 'image', 'im_info', 'im_id', 'gt_box', 'gt_label', 'is_crowd', 'gt_mask' ], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), RandomFlipImage(prob=0.5, is_mask_flip=True), @@ -646,7 +646,7 @@ class MaskRCNNEvalFeed(DataFeed): dataset=CocoDataSet(COCO_VAL_ANNOTATION, COCO_VAL_IMAGE_DIR).__dict__, fields=['image', 'im_info', 'im_id', 'im_shape'], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), NormalizeImage(mean=[0.485, 0.456, 0.406], @@ -698,7 +698,7 @@ class MaskRCNNTestFeed(DataFeed): dataset=SimpleDataSet(COCO_VAL_ANNOTATION, COCO_VAL_IMAGE_DIR).__dict__, fields=['image', 'im_info', 'im_id', 'im_shape'], - image_shape=[3, None, None], + image_shape=[3, 800, 1333], sample_transforms=[ DecodeImage(to_rgb=True), NormalizeImage( diff --git a/ppdet/modeling/model_input.py b/ppdet/modeling/model_input.py index 1ded8b20e785097a26be93d782ac7aa2cd64c8a6..0e7e3bf05756ff2fc271336acb7a5be98db2bd88 100644 --- a/ppdet/modeling/model_input.py +++ b/ppdet/modeling/model_input.py @@ -25,22 +25,22 @@ __all__ = ['create_feed'] # yapf: disable feed_var_def = [ - {'name': 'im_info', 'shape': [None, 3], 'dtype': 'float32', 'lod_level': 0}, - {'name': 'im_id', 'shape': [None, 1], 'dtype': 'int32', 'lod_level': 0}, - {'name': 'gt_box', 'shape': [None, 4], 'dtype': 'float32', 'lod_level': 1}, - {'name': 'gt_label', 'shape': [None, 1], 'dtype': 'int32', 'lod_level': 1}, - {'name': 'is_crowd', 'shape': [None, 1], 'dtype': 'int32', 'lod_level': 1}, - {'name': 'gt_mask', 'shape': [None, 2], 'dtype': 'float32', 'lod_level': 3}, - {'name': 'is_difficult', 'shape': [None, 1], 'dtype': 'int32', 'lod_level': 1}, - {'name': 'gt_score', 'shape': [None, 1], 'dtype': 'float32', 'lod_level': 0}, - {'name': 'im_shape', 'shape': [None, 3], 'dtype': 'float32', 'lod_level': 0}, - {'name': 'im_size', 'shape': [None, 2], 'dtype': 'int32', 'lod_level': 0}, + {'name': 'im_info', 'shape': [3], 'dtype': 'float32', 'lod_level': 0}, + {'name': 'im_id', 'shape': [1], 'dtype': 'int32', 'lod_level': 0}, + {'name': 'gt_box', 'shape': [4], 'dtype': 'float32', 'lod_level': 1}, + {'name': 'gt_label', 'shape': [1], 'dtype': 'int32', 'lod_level': 1}, + {'name': 'is_crowd', 'shape': [1], 'dtype': 'int32', 'lod_level': 1}, + {'name': 'gt_mask', 'shape': [2], 'dtype': 'float32', 'lod_level': 3}, + {'name': 'is_difficult', 'shape': [1], 'dtype': 'int32', 'lod_level': 1}, + {'name': 'gt_score', 'shape': [1], 'dtype': 'float32', 'lod_level': 0}, + {'name': 'im_shape', 'shape': [3], 'dtype': 'float32', 'lod_level': 0}, + {'name': 'im_size', 'shape': [2], 'dtype': 'int32', 'lod_level': 0}, ] # yapf: enable def create_feed(feed, iterable=False, sub_prog_feed=False): - image_shape = [None] + feed.image_shape + image_shape = feed.image_shape feed_var_map = {var['name']: var for var in feed_var_def} feed_var_map['image'] = { 'name': 'image', @@ -52,10 +52,10 @@ def create_feed(feed, iterable=False, sub_prog_feed=False): # tensor padding with 0 is used instead of LoD tensor when # num_max_boxes is set if getattr(feed, 'num_max_boxes', None) is not None: - feed_var_map['gt_label']['shape'] = [None, feed.num_max_boxes] - feed_var_map['gt_score']['shape'] = [None, feed.num_max_boxes] - feed_var_map['gt_box']['shape'] = [None, feed.num_max_boxes, 4] - feed_var_map['is_difficult']['shape'] = [None, feed.num_max_boxes] + feed_var_map['gt_label']['shape'] = [feed.num_max_boxes] + feed_var_map['gt_score']['shape'] = [feed.num_max_boxes] + feed_var_map['gt_box']['shape'] = [feed.num_max_boxes, 4] + feed_var_map['is_difficult']['shape'] = [feed.num_max_boxes] feed_var_map['gt_label']['lod_level'] = 0 feed_var_map['gt_score']['lod_level'] = 0 feed_var_map['gt_box']['lod_level'] = 0 @@ -98,14 +98,14 @@ def create_feed(feed, iterable=False, sub_prog_feed=False): 'lod_level': 0 } image_name_list.append(name) - feed_var_map['im_info']['shape'] = [None, feed.num_scale * 3] + feed_var_map['im_info']['shape'] = [feed.num_scale * 3] feed.fields = image_name_list + feed.fields[1:] if sub_prog_feed: box_names = ['bbox', 'bbox_flip'] for box_name in box_names: sub_prog_feed = { 'name': box_name, - 'shape': [None, 6], + 'shape': [6], 'dtype': 'float32', 'lod_level': 1 } @@ -113,7 +113,7 @@ def create_feed(feed, iterable=False, sub_prog_feed=False): feed.fields = feed.fields + [box_name] feed_var_map[box_name] = sub_prog_feed - feed_vars = OrderedDict([(key, fluid.data( + feed_vars = OrderedDict([(key, fluid.layers.data( name=feed_var_map[key]['name'], shape=feed_var_map[key]['shape'], dtype=feed_var_map[key]['dtype'],