From 5afa83e570e61eb14686d98b03f3acb567bd5623 Mon Sep 17 00:00:00 2001 From: Guanghua Yu <742925032@qq.com> Date: Wed, 13 Jan 2021 17:39:35 +0800 Subject: [PATCH] fix framework warning in solov2 (#2052) --- ppdet/core/workspace.py | 7 ++++++- ppdet/modeling/anchor_heads/solov2_head.py | 16 +++++++++------- ppdet/modeling/backbones/fpn.py | 3 ++- ppdet/modeling/losses/solov2_loss.py | 10 ++++++---- ppdet/modeling/ops.py | 22 ++++++++++++++-------- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/ppdet/core/workspace.py b/ppdet/core/workspace.py index d7074a1f4..93e52eea2 100644 --- a/ppdet/core/workspace.py +++ b/ppdet/core/workspace.py @@ -24,6 +24,11 @@ import yaml import copy import collections +try: + collectionsAbc = collections.abc +except AttributeError: + collectionsAbc = collections + from .config.schema import SchemaDict, SharedConfig, extract_schema from .config.yaml_helpers import serializable @@ -115,7 +120,7 @@ def dict_merge(dct, merge_dct): """ for k, v in merge_dct.items(): if (k in dct and isinstance(dct[k], dict) and - isinstance(merge_dct[k], collections.Mapping)): + isinstance(merge_dct[k], collectionsAbc.Mapping)): dict_merge(dct[k], merge_dct[k]) else: dct[k] = merge_dct[k] diff --git a/ppdet/modeling/anchor_heads/solov2_head.py b/ppdet/modeling/anchor_heads/solov2_head.py index 21cdad729..17473110d 100644 --- a/ppdet/modeling/anchor_heads/solov2_head.py +++ b/ppdet/modeling/anchor_heads/solov2_head.py @@ -132,8 +132,9 @@ class SOLOv2Head(object): def _points_nms(self, heat, kernel=2): hmax = fluid.layers.pool2d( input=heat, pool_size=kernel, pool_type='max', pool_padding=1) - keep = fluid.layers.cast((hmax[:, :, :-1, :-1] == heat), 'float32') - return heat * keep + keep = fluid.layers.cast( + paddle.equal(hmax[:, :, :-1, :-1], heat), 'float32') + return paddle.multiply(heat, keep) def _split_feats(self, feats): return (paddle.nn.functional.interpolate( @@ -376,7 +377,7 @@ class SOLOv2Head(object): strides.append( fluid.layers.fill_constant( shape=[int(size_trans[_ind])], - dtype="int32", + dtype="float32", value=self.segm_strides[_ind])) strides = fluid.layers.concat(strides) strides = fluid.layers.gather(strides, index=inds[:, 0]) @@ -389,7 +390,7 @@ class SOLOv2Head(object): seg_masks = fluid.layers.cast(seg_masks, 'float32') sum_masks = fluid.layers.reduce_sum(seg_masks, dim=[1, 2]) - keep = fluid.layers.where(sum_masks > strides) + keep = fluid.layers.where(paddle.greater_than(sum_masks, strides)) keep = fluid.layers.squeeze(keep, axes=[1]) # Prevent empty and increase fake data keep_other = fluid.layers.concat([ @@ -409,9 +410,10 @@ class SOLOv2Head(object): cate_scores = fluid.layers.gather(cate_scores, index=keep_scores) # mask scoring. - seg_mul = fluid.layers.cast(seg_preds * seg_masks, 'float32') - seg_scores = fluid.layers.reduce_sum(seg_mul, dim=[1, 2]) / sum_masks - cate_scores *= seg_scores + seg_mul = fluid.layers.cast( + paddle.multiply(seg_preds, seg_masks), 'float32') + seg_scores = paddle.divide(paddle.sum(seg_mul, axis=[1, 2]), sum_masks) + cate_scores = paddle.multiply(cate_scores, seg_scores) # Matrix NMS seg_preds, cate_scores, cate_labels = self.mask_nms( diff --git a/ppdet/modeling/backbones/fpn.py b/ppdet/modeling/backbones/fpn.py index a89730f4b..f09e8f8f8 100644 --- a/ppdet/modeling/backbones/fpn.py +++ b/ppdet/modeling/backbones/fpn.py @@ -18,6 +18,7 @@ from __future__ import print_function from collections import OrderedDict import copy +import paddle from paddle import fluid from paddle.fluid.param_attr import ParamAttr from paddle.fluid.initializer import Xavier @@ -105,7 +106,7 @@ class FPN(object): out_shape=[body_input.shape[2], body_input.shape[3]], name=topdown_name) - return lateral + topdown + return paddle.add(lateral, topdown) def get_output(self, body_dict): """ diff --git a/ppdet/modeling/losses/solov2_loss.py b/ppdet/modeling/losses/solov2_loss.py index e3439a860..4e073e518 100644 --- a/ppdet/modeling/losses/solov2_loss.py +++ b/ppdet/modeling/losses/solov2_loss.py @@ -48,10 +48,12 @@ class SOLOv2Loss(object): target = fluid.layers.reshape( target, shape=(fluid.layers.shape(target)[0], -1)) target = fluid.layers.cast(target, 'float32') - a = fluid.layers.reduce_sum(input * target, dim=1) - b = fluid.layers.reduce_sum(input * input, dim=1) + 0.001 - c = fluid.layers.reduce_sum(target * target, dim=1) + 0.001 - d = (2 * a) / (b + c) + a = fluid.layers.reduce_sum(paddle.multiply(input, target), dim=1) + b = fluid.layers.reduce_sum( + paddle.multiply(input, input), dim=1) + 0.001 + c = fluid.layers.reduce_sum( + paddle.multiply(target, target), dim=1) + 0.001 + d = paddle.divide((2 * a), paddle.add(b, c)) return 1 - d def __call__(self, ins_pred_list, ins_label_list, cate_preds, cate_labels, diff --git a/ppdet/modeling/ops.py b/ppdet/modeling/ops.py index 85d1fe17c..00a611348 100644 --- a/ppdet/modeling/ops.py +++ b/ppdet/modeling/ops.py @@ -1642,8 +1642,12 @@ class MaskMatrixNMS(object): sum_masks, expand_times=[n_samples]), shape=[n_samples, n_samples]) # iou. - iou_matrix = (inter_matrix / (sum_masks_x + fluid.layers.transpose( - sum_masks_x, [1, 0]) - inter_matrix)) + iou_matrix = paddle.divide(inter_matrix, + paddle.subtract( + paddle.add(sum_masks_x, + fluid.layers.transpose( + sum_masks_x, [1, 0])), + inter_matrix)) iou_matrix = paddle.triu(iou_matrix, diagonal=1) # label_specific matrix. cate_labels_x = fluid.layers.reshape( @@ -1651,12 +1655,14 @@ class MaskMatrixNMS(object): cate_labels, expand_times=[n_samples]), shape=[n_samples, n_samples]) label_matrix = fluid.layers.cast( - (cate_labels_x == fluid.layers.transpose(cate_labels_x, [1, 0])), + paddle.equal(cate_labels_x, + fluid.layers.transpose(cate_labels_x, [1, 0])), 'float32') label_matrix = paddle.triu(label_matrix, diagonal=1) # IoU compensation - compensate_iou = paddle.max((iou_matrix * label_matrix), axis=0) + compensate_iou = paddle.max(paddle.multiply(iou_matrix, label_matrix), + axis=0) compensate_iou = fluid.layers.reshape( fluid.layers.expand( compensate_iou, expand_times=[n_samples]), @@ -1664,15 +1670,15 @@ class MaskMatrixNMS(object): compensate_iou = fluid.layers.transpose(compensate_iou, [1, 0]) # IoU decay - decay_iou = iou_matrix * label_matrix + decay_iou = paddle.multiply(iou_matrix, label_matrix) # matrix nms if self.kernel == 'gaussian': decay_matrix = fluid.layers.exp(-1 * self.sigma * (decay_iou**2)) compensate_matrix = fluid.layers.exp(-1 * self.sigma * (compensate_iou**2)) - decay_coefficient = paddle.min(decay_matrix / compensate_matrix, - axis=0) + decay_coefficient = paddle.min( + paddle.divide(decay_matrix, compensate_matrix), axis=0) elif self.kernel == 'linear': decay_matrix = (1 - decay_iou) / (1 - compensate_iou) decay_coefficient = paddle.min(decay_matrix, axis=0) @@ -1680,7 +1686,7 @@ class MaskMatrixNMS(object): raise NotImplementedError # update the score. - cate_scores = cate_scores * decay_coefficient + cate_scores = paddle.multiply(cate_scores, decay_coefficient) keep = fluid.layers.where(cate_scores >= self.update_threshold) keep = fluid.layers.squeeze(keep, axes=[1]) -- GitLab