From 59cc4efdc5552123d707a7ba84e0dee48c373aa5 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Thu, 22 Jul 2021 19:58:14 +0800 Subject: [PATCH 01/42] add for SEED --- configs/rec/rec_resnet_stn_bilstm_att.yml | 101 +++ ppocr/data/imaug/label_ops.py | 64 +- ppocr/data/simple_dataset.py | 1 + ppocr/losses/__init__.py | 5 +- ppocr/losses/rec_aster_loss.py | 79 ++ ppocr/losses/rec_att_loss.py | 2 + ppocr/modeling/backbones/__init__.py | 4 +- ppocr/modeling/backbones/levit.py | 707 ++++++++++++++++++ ppocr/modeling/backbones/rec_resnet_aster.py | 147 ++++ ppocr/modeling/heads/__init__.py | 6 +- ppocr/modeling/heads/rec_aster_head.py | 258 +++++++ ppocr/modeling/heads/rec_att_head.py | 5 + ppocr/modeling/transforms/__init__.py | 3 +- ppocr/modeling/transforms/stn.py | 121 +++ ppocr/modeling/transforms/tps.py | 29 +- .../transforms/tps_spatial_transformer.py | 178 +++++ ppocr/modeling/transforms/tps_torch.py | 149 ++++ ppocr/postprocess/rec_postprocess.py | 29 +- ppocr/utils/save_load.py | 17 +- tools/program.py | 15 +- tools/train.py | 2 + 21 files changed, 1868 insertions(+), 54 deletions(-) create mode 100644 configs/rec/rec_resnet_stn_bilstm_att.yml create mode 100644 ppocr/losses/rec_aster_loss.py create mode 100644 ppocr/modeling/backbones/levit.py create mode 100644 ppocr/modeling/backbones/rec_resnet_aster.py create mode 100644 ppocr/modeling/heads/rec_aster_head.py create mode 100644 ppocr/modeling/transforms/stn.py create mode 100644 ppocr/modeling/transforms/tps_spatial_transformer.py create mode 100644 ppocr/modeling/transforms/tps_torch.py diff --git a/configs/rec/rec_resnet_stn_bilstm_att.yml b/configs/rec/rec_resnet_stn_bilstm_att.yml new file mode 100644 index 0000000000..f705f1e23d --- /dev/null +++ b/configs/rec/rec_resnet_stn_bilstm_att.yml @@ -0,0 +1,101 @@ +Global: + use_gpu: False + epoch_num: 400 + log_smooth_window: 20 + print_batch_step: 10 + save_model_dir: ./output/rec/b3_rare_r34_none_gru/ + save_epoch_step: 3 + # evaluation is run every 5000 iterations after the 4000th iteration + eval_batch_step: [0, 2000] + cal_metric_during_train: True + pretrained_model: + checkpoints: + save_inference_dir: + use_visualdl: False + infer_img: doc/imgs_words/ch/word_1.jpg + # for data or label process + character_dict_path: + character_type: EN_symbol + max_text_length: 25 + infer_mode: False + use_space_char: False + save_res_path: ./output/rec/predicts_b3_rare_r34_none_gru.txt + + +Optimizer: + name: Adam + beta1: 0.9 + beta2: 0.999 + lr: + learning_rate: 0.0005 + regularizer: + name: 'L2' + factor: 0.00000 + +Architecture: + model_type: rec + algorithm: ASTER + Transform: + name: STN_ON + tps_inputsize: [32, 64] + tps_outputsize: [32, 100] + num_control_points: 20 + tps_margins: [0.05,0.05] + stn_activation: none + Backbone: + name: ResNet_ASTER + Head: + name: AsterHead # AttentionHead + sDim: 512 + attDim: 512 + max_len_labels: 100 + +Loss: + name: AsterLoss + +PostProcess: + name: AttnLabelDecode + +Metric: + name: RecMetric + main_indicator: acc + +Train: + dataset: + name: SimpleDataSet + data_dir: ./train_data/ic15_data/ + label_file_list: ["./train_data/ic15_data/1.txt"] + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - AttnLabelEncode: # Class handling label + - RecResizeImg: + image_shape: [3, 32, 100] + - KeepKeys: + keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order + loader: + shuffle: True + batch_size_per_card: 2 + drop_last: True + num_workers: 8 + +Eval: + dataset: + name: SimpleDataSet + data_dir: ./train_data/ic15_data/ + label_file_list: ["./train_data/ic15_data/1.txt"] + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - AttnLabelEncode: # Class handling label + - RecResizeImg: + image_shape: [3, 32, 100] + - KeepKeys: + keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order + loader: + shuffle: False + drop_last: False + batch_size_per_card: 2 + num_workers: 8 diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index e25cce79b5..0e1d4939d6 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -104,6 +104,7 @@ class BaseRecLabelEncode(object): self.max_text_len = max_text_length self.beg_str = "sos" self.end_str = "eos" + self.unknown = "UNKNOWN" if character_type == "en": self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz" dict_character = list(self.character_str) @@ -275,7 +276,9 @@ class AttnLabelEncode(BaseRecLabelEncode): def add_special_char(self, dict_character): self.beg_str = "sos" self.end_str = "eos" - dict_character = [self.beg_str] + dict_character + [self.end_str] + self.unknown = "UNKNOWN" + dict_character = [self.beg_str] + dict_character + [self.end_str + ] + [self.unknown] return dict_character def __call__(self, data): @@ -288,6 +291,7 @@ class AttnLabelEncode(BaseRecLabelEncode): data['length'] = np.array(len(text)) text = [0] + text + [len(self.character) - 1] + [0] * (self.max_text_len - len(text) - 2) + data['label'] = np.array(text) return data @@ -352,19 +356,22 @@ class SRNLabelEncode(BaseRecLabelEncode): % beg_or_end return idx + class TableLabelEncode(object): """ Convert between text-label and text-index """ - def __init__(self, - max_text_length, - max_elem_length, - max_cell_num, - character_dict_path, - span_weight = 1.0, - **kwargs): + + def __init__(self, + max_text_length, + max_elem_length, + max_cell_num, + character_dict_path, + span_weight=1.0, + **kwargs): self.max_text_length = max_text_length self.max_elem_length = max_elem_length self.max_cell_num = max_cell_num - list_character, list_elem = self.load_char_elem_dict(character_dict_path) + list_character, list_elem = self.load_char_elem_dict( + character_dict_path) list_character = self.add_special_char(list_character) list_elem = self.add_special_char(list_elem) self.dict_character = {} @@ -374,7 +381,7 @@ class TableLabelEncode(object): for i, elem in enumerate(list_elem): self.dict_elem[elem] = i self.span_weight = span_weight - + def load_char_elem_dict(self, character_dict_path): list_character = [] list_elem = [] @@ -383,27 +390,27 @@ class TableLabelEncode(object): substr = lines[0].decode('utf-8').strip("\n").split("\t") character_num = int(substr[0]) elem_num = int(substr[1]) - for cno in range(1, 1+character_num): + for cno in range(1, 1 + character_num): character = lines[cno].decode('utf-8').strip("\n") list_character.append(character) - for eno in range(1+character_num, 1+character_num+elem_num): + for eno in range(1 + character_num, 1 + character_num + elem_num): elem = lines[eno].decode('utf-8').strip("\n") list_elem.append(elem) return list_character, list_elem - + def add_special_char(self, list_character): self.beg_str = "sos" self.end_str = "eos" list_character = [self.beg_str] + list_character + [self.end_str] return list_character - + def get_span_idx_list(self): span_idx_list = [] for elem in self.dict_elem: if 'span' in elem: span_idx_list.append(self.dict_elem[elem]) return span_idx_list - + def __call__(self, data): cells = data['cells'] structure = data['structure']['tokens'] @@ -412,18 +419,22 @@ class TableLabelEncode(object): return None elem_num = len(structure) structure = [0] + structure + [len(self.dict_elem) - 1] - structure = structure + [0] * (self.max_elem_length + 2 - len(structure)) + structure = structure + [0] * (self.max_elem_length + 2 - len(structure) + ) structure = np.array(structure) data['structure'] = structure elem_char_idx1 = self.dict_elem[''] elem_char_idx2 = self.dict_elem[' 0: span_weight = len(td_idx_list) * 1.0 / len(span_idx_list) @@ -450,9 +461,11 @@ class TableLabelEncode(object): char_end_idx = self.get_beg_end_flag_idx('end', 'char') elem_beg_idx = self.get_beg_end_flag_idx('beg', 'elem') elem_end_idx = self.get_beg_end_flag_idx('end', 'elem') - data['sp_tokens'] = np.array([char_beg_idx, char_end_idx, elem_beg_idx, - elem_end_idx, elem_char_idx1, elem_char_idx2, self.max_text_length, - self.max_elem_length, self.max_cell_num, elem_num]) + data['sp_tokens'] = np.array([ + char_beg_idx, char_end_idx, elem_beg_idx, elem_end_idx, + elem_char_idx1, elem_char_idx2, self.max_text_length, + self.max_elem_length, self.max_cell_num, elem_num + ]) return data def encode(self, text, char_or_elem): @@ -504,9 +517,8 @@ class TableLabelEncode(object): idx = np.array(self.dict_elem[self.end_str]) else: assert False, "Unsupport type %s in get_beg_end_flag_idx of elem" \ - % beg_or_end + % beg_or_end else: assert False, "Unsupport type %s in char_or_elem" \ - % char_or_elem + % char_or_elem return idx - \ No newline at end of file diff --git a/ppocr/data/simple_dataset.py b/ppocr/data/simple_dataset.py index ce9e1b3867..b519f4fdea 100644 --- a/ppocr/data/simple_dataset.py +++ b/ppocr/data/simple_dataset.py @@ -22,6 +22,7 @@ from .imaug import transform, create_operators class SimpleDataSet(Dataset): def __init__(self, config, mode, logger, seed=None): + print("===== simpledataset ========") super(SimpleDataSet, self).__init__() self.logger = logger self.mode = mode.lower() diff --git a/ppocr/losses/__init__.py b/ppocr/losses/__init__.py index 025ae7ca5c..2a67377454 100755 --- a/ppocr/losses/__init__.py +++ b/ppocr/losses/__init__.py @@ -41,10 +41,13 @@ from .combined_loss import CombinedLoss # table loss from .table_att_loss import TableAttentionLoss +from .rec_aster_loss import AsterLoss + + def build_loss(config): support_dict = [ 'DBLoss', 'EASTLoss', 'SASTLoss', 'CTCLoss', 'ClsLoss', 'AttentionLoss', - 'SRNLoss', 'PGLoss', 'CombinedLoss', 'TableAttentionLoss' + 'SRNLoss', 'PGLoss', 'CombinedLoss', 'TableAttentionLoss', 'AsterLoss' ] config = copy.deepcopy(config) module_name = config.pop('name') diff --git a/ppocr/losses/rec_aster_loss.py b/ppocr/losses/rec_aster_loss.py new file mode 100644 index 0000000000..858fadc021 --- /dev/null +++ b/ppocr/losses/rec_aster_loss.py @@ -0,0 +1,79 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import paddle +from paddle import nn +import fasttext + + +class AsterLoss(nn.Layer): + def __init__(self, + weight=None, + size_average=True, + ignore_index=-100, + sequence_normalize=False, + sample_normalize=True, + **kwargs): + super(AsterLoss, self).__init__() + self.weight = weight + self.size_average = size_average + self.ignore_index = ignore_index + self.sequence_normalize = sequence_normalize + self.sample_normalize = sample_normalize + self.loss_func = paddle.nn.CosineSimilarity() + + def forward(self, predicts, batch): + targets = batch[1].astype("int64") + label_lengths = batch[2].astype('int64') + # sem_target = batch[3].astype('float32') + embedding_vectors = predicts['embedding_vectors'] + rec_pred = predicts['rec_pred'] + + # semantic loss + # print(embedding_vectors) + # print(embedding_vectors.shape) + # targets = fasttext[targets] + # sem_loss = 1 - self.loss_func(embedding_vectors, targets) + + # rec loss + batch_size, num_steps, num_classes = rec_pred.shape[0], rec_pred.shape[ + 1], rec_pred.shape[2] + assert len(targets.shape) == len(list(rec_pred.shape)) - 1, \ + "The target's shape and inputs's shape is [N, d] and [N, num_steps]" + + mask = paddle.zeros([batch_size, num_steps]) + for i in range(batch_size): + mask[i, :label_lengths[i]] = 1 + mask = paddle.cast(mask, "float32") + max_length = max(label_lengths) + assert max_length == rec_pred.shape[1] + targets = targets[:, :max_length] + mask = mask[:, :max_length] + rec_pred = paddle.reshape(rec_pred, [-1, rec_pred.shape[-1]]) + input = nn.functional.log_softmax(rec_pred, axis=1) + targets = paddle.reshape(targets, [-1, 1]) + mask = paddle.reshape(mask, [-1, 1]) + # print("input:", input) + output = -paddle.gather(input, index=targets, axis=1) * mask + output = paddle.sum(output) + if self.sequence_normalize: + output = output / paddle.sum(mask) + if self.sample_normalize: + output = output / batch_size + loss = output + return {'loss': loss} # , 'sem_loss':sem_loss} diff --git a/ppocr/losses/rec_att_loss.py b/ppocr/losses/rec_att_loss.py index 6e2f67483c..2d8d64b9d2 100644 --- a/ppocr/losses/rec_att_loss.py +++ b/ppocr/losses/rec_att_loss.py @@ -35,5 +35,7 @@ class AttentionLoss(nn.Layer): inputs = paddle.reshape(predicts, [-1, predicts.shape[-1]]) targets = paddle.reshape(targets, [-1]) + print("input:", paddle.argmax(inputs, axis=1)) + print("targets:", targets) return {'loss': paddle.sum(self.loss_func(inputs, targets))} diff --git a/ppocr/modeling/backbones/__init__.py b/ppocr/modeling/backbones/__init__.py index f4fe8c76be..e0bc45b476 100755 --- a/ppocr/modeling/backbones/__init__.py +++ b/ppocr/modeling/backbones/__init__.py @@ -26,8 +26,10 @@ def build_backbone(config, model_type): from .rec_resnet_vd import ResNet from .rec_resnet_fpn import ResNetFPN from .rec_mv1_enhance import MobileNetV1Enhance + from .rec_resnet_aster import ResNet_ASTER support_dict = [ - "MobileNetV1Enhance", "MobileNetV3", "ResNet", "ResNetFPN" + "MobileNetV1Enhance", "MobileNetV3", "ResNet", "ResNetFPN", + "ResNet_ASTER" ] elif model_type == "e2e": from .e2e_resnet_vd_pg import ResNet diff --git a/ppocr/modeling/backbones/levit.py b/ppocr/modeling/backbones/levit.py new file mode 100644 index 0000000000..8b04e9def9 --- /dev/null +++ b/ppocr/modeling/backbones/levit.py @@ -0,0 +1,707 @@ +# Copyright (c) 2015-present, Facebook, Inc. +# All rights reserved. + +# Modified from +# https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/vision_transformer.py +# Copyright 2020 Ross Wightman, Apache-2.0 License + +import paddle +import itertools +#import utils +import math +import warnings +import paddle.nn.functional as F +from paddle.nn.initializer import TruncatedNormal, Constant + +#from timm.models.vision_transformer import trunc_normal_ +#from timm.models.registry import register_model + +specification = { + 'LeViT_128S': { + 'C': '128_256_384', + 'D': 16, + 'N': '4_6_8', + 'X': '2_3_4', + 'drop_path': 0, + 'weights': + 'https://dl.fbaipublicfiles.com/LeViT/LeViT-128S-96703c44.pth' + }, + 'LeViT_128': { + 'C': '128_256_384', + 'D': 16, + 'N': '4_8_12', + 'X': '4_4_4', + 'drop_path': 0, + 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-128-b88c2750.pth' + }, + 'LeViT_192': { + 'C': '192_288_384', + 'D': 32, + 'N': '3_5_6', + 'X': '4_4_4', + 'drop_path': 0, + 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-192-92712e41.pth' + }, + 'LeViT_256': { + 'C': '256_384_512', + 'D': 32, + 'N': '4_6_8', + 'X': '4_4_4', + 'drop_path': 0, + 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-256-13b5763e.pth' + }, + 'LeViT_384': { + 'C': '384_512_768', + 'D': 32, + 'N': '6_9_12', + 'X': '4_4_4', + 'drop_path': 0.1, + 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-384-9bdaf2e2.pth' + }, +} + +__all__ = [specification.keys()] + +trunc_normal_ = TruncatedNormal(std=.02) +zeros_ = Constant(value=0.) +ones_ = Constant(value=1.) + + +#@register_model +def LeViT_128S(class_dim=1000, distillation=True, pretrained=False, fuse=False): + return model_factory( + **specification['LeViT_128S'], + class_dim=class_dim, + distillation=distillation, + pretrained=pretrained, + fuse=fuse) + + +#@register_model +def LeViT_128(class_dim=1000, distillation=True, pretrained=False, fuse=False): + return model_factory( + **specification['LeViT_128'], + class_dim=class_dim, + distillation=distillation, + pretrained=pretrained, + fuse=fuse) + + +#@register_model +def LeViT_192(class_dim=1000, distillation=True, pretrained=False, fuse=False): + return model_factory( + **specification['LeViT_192'], + class_dim=class_dim, + distillation=distillation, + pretrained=pretrained, + fuse=fuse) + + +#@register_model +def LeViT_256(class_dim=1000, distillation=False, pretrained=False, fuse=False): + return model_factory( + **specification['LeViT_256'], + class_dim=class_dim, + distillation=distillation, + pretrained=pretrained, + fuse=fuse) + + +#@register_model +def LeViT_384(class_dim=1000, distillation=True, pretrained=False, fuse=False): + return model_factory( + **specification['LeViT_384'], + class_dim=class_dim, + distillation=distillation, + pretrained=pretrained, + fuse=fuse) + + +FLOPS_COUNTER = 0 + + +class Conv2d_BN(paddle.nn.Sequential): + def __init__(self, + a, + b, + ks=1, + stride=1, + pad=0, + dilation=1, + groups=1, + bn_weight_init=1, + resolution=-10000): + super().__init__() + self.add_sublayer( + 'c', + paddle.nn.Conv2D( + a, b, ks, stride, pad, dilation, groups, bias_attr=False)) + bn = paddle.nn.BatchNorm2D(b) + ones_(bn.weight) + zeros_(bn.bias) + self.add_sublayer('bn', bn) + + global FLOPS_COUNTER + output_points = ( + (resolution + 2 * pad - dilation * (ks - 1) - 1) // stride + 1)**2 + FLOPS_COUNTER += a * b * output_points * (ks**2) + + @paddle.no_grad() + def fuse(self): + c, bn = self._modules.values() + w = bn.weight / (bn.running_var + bn.eps)**0.5 + w = c.weight * w[:, None, None, None] + b = bn.bias - bn.running_mean * bn.weight / \ + (bn.running_var + bn.eps)**0.5 + m = paddle.nn.Conv2D( + w.size(1), + w.size(0), + w.shape[2:], + stride=self.c.stride, + padding=self.c.padding, + dilation=self.c.dilation, + groups=self.c.groups) + m.weight.data.copy_(w) + m.bias.data.copy_(b) + return m + + +class Linear_BN(paddle.nn.Sequential): + def __init__(self, a, b, bn_weight_init=1, resolution=-100000): + super().__init__() + self.add_sublayer('c', paddle.nn.Linear(a, b, bias_attr=False)) + bn = paddle.nn.BatchNorm1D(b) + ones_(bn.weight) + zeros_(bn.bias) + self.add_sublayer('bn', bn) + + global FLOPS_COUNTER + output_points = resolution**2 + FLOPS_COUNTER += a * b * output_points + + @paddle.no_grad() + def fuse(self): + l, bn = self._modules.values() + w = bn.weight / (bn.running_var + bn.eps)**0.5 + w = l.weight * w[:, None] + b = bn.bias - bn.running_mean * bn.weight / \ + (bn.running_var + bn.eps)**0.5 + m = paddle.nn.Linear(w.size(1), w.size(0)) + m.weight.data.copy_(w) + m.bias.data.copy_(b) + return m + + def forward(self, x): + l, bn = self._sub_layers.values() + x = l(x) + return paddle.reshape(bn(x.flatten(0, 1)), x.shape) + + +class BN_Linear(paddle.nn.Sequential): + def __init__(self, a, b, bias=True, std=0.02): + super().__init__() + self.add_sublayer('bn', paddle.nn.BatchNorm1D(a)) + l = paddle.nn.Linear(a, b, bias_attr=bias) + trunc_normal_(l.weight) + if bias: + zeros_(l.bias) + self.add_sublayer('l', l) + global FLOPS_COUNTER + FLOPS_COUNTER += a * b + + @paddle.no_grad() + def fuse(self): + bn, l = self._modules.values() + w = bn.weight / (bn.running_var + bn.eps)**0.5 + b = bn.bias - self.bn.running_mean * \ + self.bn.weight / (bn.running_var + bn.eps)**0.5 + w = l.weight * w[None, :] + if l.bias is None: + b = b @self.l.weight.T + else: + b = (l.weight @b[:, None]).view(-1) + self.l.bias + m = paddle.nn.Linear(w.size(1), w.size(0)) + m.weight.data.copy_(w) + m.bias.data.copy_(b) + return m + + +def b16(n, activation, resolution=224): + return paddle.nn.Sequential( + Conv2d_BN( + 3, n // 8, 3, 2, 1, resolution=resolution), + activation(), + Conv2d_BN( + n // 8, n // 4, 3, 2, 1, resolution=resolution // 2), + activation(), + Conv2d_BN( + n // 4, n // 2, 3, 2, 1, resolution=resolution // 4), + activation(), + Conv2d_BN( + n // 2, n, 3, 2, 1, resolution=resolution // 8)) + + +class Residual(paddle.nn.Layer): + def __init__(self, m, drop): + super().__init__() + self.m = m + self.drop = drop + + def forward(self, x): + if self.training and self.drop > 0: + return x + self.m(x) * paddle.rand( + x.size(0), 1, 1, + device=x.device).ge_(self.drop).div(1 - self.drop).detach() + else: + return x + self.m(x) + + +class Attention(paddle.nn.Layer): + def __init__(self, + dim, + key_dim, + num_heads=8, + attn_ratio=4, + activation=None, + resolution=14): + super().__init__() + self.num_heads = num_heads + self.scale = key_dim**-0.5 + self.key_dim = key_dim + self.nh_kd = nh_kd = key_dim * num_heads + self.d = int(attn_ratio * key_dim) + self.dh = int(attn_ratio * key_dim) * num_heads + self.attn_ratio = attn_ratio + self.h = self.dh + nh_kd * 2 + self.qkv = Linear_BN(dim, self.h, resolution=resolution) + self.proj = paddle.nn.Sequential( + activation(), + Linear_BN( + self.dh, dim, bn_weight_init=0, resolution=resolution)) + points = list(itertools.product(range(resolution), range(resolution))) + N = len(points) + attention_offsets = {} + idxs = [] + for p1 in points: + for p2 in points: + offset = (abs(p1[0] - p2[0]), abs(p1[1] - p2[1])) + if offset not in attention_offsets: + attention_offsets[offset] = len(attention_offsets) + idxs.append(attention_offsets[offset]) + self.attention_biases = self.create_parameter( + shape=(num_heads, len(attention_offsets)), + default_initializer=zeros_) + tensor_idxs = paddle.to_tensor(idxs, dtype='int64') + self.register_buffer('attention_bias_idxs', + paddle.reshape(tensor_idxs, [N, N])) + + global FLOPS_COUNTER + #queries * keys + FLOPS_COUNTER += num_heads * (resolution**4) * key_dim + # softmax + FLOPS_COUNTER += num_heads * (resolution**4) + #attention * v + FLOPS_COUNTER += num_heads * self.d * (resolution**4) + + @paddle.no_grad() + def train(self, mode=True): + if mode: + super().train() + else: + super().eval() + if mode and hasattr(self, 'ab'): + del self.ab + else: + gather_list = [] + attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) + for idx in self.attention_bias_idxs: + gather = paddle.gather(attention_bias_t, idx) + gather_list.append(gather) + attention_biases = paddle.transpose( + paddle.concat(gather_list), (1, 0)).reshape( + (0, self.attention_bias_idxs.shape[0], + self.attention_bias_idxs.shape[1])) + self.ab = attention_biases + #self.ab = self.attention_biases[:, self.attention_bias_idxs] + + def forward(self, x): # x (B,N,C) + self.training = True + B, N, C = x.shape + qkv = self.qkv(x) + qkv = paddle.reshape(qkv, + [B, N, self.num_heads, self.h // self.num_heads]) + q, k, v = paddle.split( + qkv, [self.key_dim, self.key_dim, self.d], axis=3) + q = paddle.transpose(q, perm=[0, 2, 1, 3]) + k = paddle.transpose(k, perm=[0, 2, 1, 3]) + v = paddle.transpose(v, perm=[0, 2, 1, 3]) + k_transpose = paddle.transpose(k, perm=[0, 1, 3, 2]) + + if self.training: + gather_list = [] + attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) + for idx in self.attention_bias_idxs: + gather = paddle.gather(attention_bias_t, idx) + gather_list.append(gather) + attention_biases = paddle.transpose( + paddle.concat(gather_list), (1, 0)).reshape( + (0, self.attention_bias_idxs.shape[0], + self.attention_bias_idxs.shape[1])) + else: + attention_biases = self.ab + #np_ = paddle.to_tensor(self.attention_biases.numpy()[:, self.attention_bias_idxs.numpy()]) + #print(self.attention_bias_idxs.shape) + #print(attention_biases.shape) + #print(np_.shape) + #print(np_.equal(attention_biases)) + #exit() + + attn = ((q @k_transpose) * self.scale + attention_biases) + attn = F.softmax(attn) + x = paddle.transpose(attn @v, perm=[0, 2, 1, 3]) + x = paddle.reshape(x, [B, N, self.dh]) + x = self.proj(x) + return x + + +class Subsample(paddle.nn.Layer): + def __init__(self, stride, resolution): + super().__init__() + self.stride = stride + self.resolution = resolution + + def forward(self, x): + B, N, C = x.shape + x = paddle.reshape(x, [B, self.resolution, self.resolution, + C])[:, ::self.stride, ::self.stride] + x = paddle.reshape(x, [B, -1, C]) + return x + + +class AttentionSubsample(paddle.nn.Layer): + def __init__(self, + in_dim, + out_dim, + key_dim, + num_heads=8, + attn_ratio=2, + activation=None, + stride=2, + resolution=14, + resolution_=7): + super().__init__() + self.num_heads = num_heads + self.scale = key_dim**-0.5 + self.key_dim = key_dim + self.nh_kd = nh_kd = key_dim * num_heads + self.d = int(attn_ratio * key_dim) + self.dh = int(attn_ratio * key_dim) * self.num_heads + self.attn_ratio = attn_ratio + self.resolution_ = resolution_ + self.resolution_2 = resolution_**2 + self.training = True + h = self.dh + nh_kd + self.kv = Linear_BN(in_dim, h, resolution=resolution) + + self.q = paddle.nn.Sequential( + Subsample(stride, resolution), + Linear_BN( + in_dim, nh_kd, resolution=resolution_)) + self.proj = paddle.nn.Sequential( + activation(), Linear_BN( + self.dh, out_dim, resolution=resolution_)) + + self.stride = stride + self.resolution = resolution + points = list(itertools.product(range(resolution), range(resolution))) + points_ = list( + itertools.product(range(resolution_), range(resolution_))) + + N = len(points) + N_ = len(points_) + attention_offsets = {} + idxs = [] + i = 0 + j = 0 + for p1 in points_: + i += 1 + for p2 in points: + j += 1 + size = 1 + offset = (abs(p1[0] * stride - p2[0] + (size - 1) / 2), + abs(p1[1] * stride - p2[1] + (size - 1) / 2)) + if offset not in attention_offsets: + attention_offsets[offset] = len(attention_offsets) + idxs.append(attention_offsets[offset]) + self.attention_biases = self.create_parameter( + shape=(num_heads, len(attention_offsets)), + default_initializer=zeros_) + + tensor_idxs_ = paddle.to_tensor(idxs, dtype='int64') + self.register_buffer('attention_bias_idxs', + paddle.reshape(tensor_idxs_, [N_, N])) + + global FLOPS_COUNTER + #queries * keys + FLOPS_COUNTER += num_heads * \ + (resolution**2) * (resolution_**2) * key_dim + # softmax + FLOPS_COUNTER += num_heads * (resolution**2) * (resolution_**2) + #attention * v + FLOPS_COUNTER += num_heads * \ + (resolution**2) * (resolution_**2) * self.d + + @paddle.no_grad() + def train(self, mode=True): + if mode: + super().train() + else: + super().eval() + if mode and hasattr(self, 'ab'): + del self.ab + else: + gather_list = [] + attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) + for idx in self.attention_bias_idxs: + gather = paddle.gather(attention_bias_t, idx) + gather_list.append(gather) + attention_biases = paddle.transpose( + paddle.concat(gather_list), (1, 0)).reshape( + (0, self.attention_bias_idxs.shape[0], + self.attention_bias_idxs.shape[1])) + self.ab = attention_biases + #self.ab = self.attention_biases[:, self.attention_bias_idxs] + + def forward(self, x): + self.training = True + B, N, C = x.shape + kv = self.kv(x) + kv = paddle.reshape(kv, [B, N, self.num_heads, -1]) + k, v = paddle.split(kv, [self.key_dim, self.d], axis=3) + k = paddle.transpose(k, perm=[0, 2, 1, 3]) # BHNC + v = paddle.transpose(v, perm=[0, 2, 1, 3]) + q = paddle.reshape( + self.q(x), [B, self.resolution_2, self.num_heads, self.key_dim]) + q = paddle.transpose(q, perm=[0, 2, 1, 3]) + + if self.training: + gather_list = [] + attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) + for idx in self.attention_bias_idxs: + gather = paddle.gather(attention_bias_t, idx) + gather_list.append(gather) + attention_biases = paddle.transpose( + paddle.concat(gather_list), (1, 0)).reshape( + (0, self.attention_bias_idxs.shape[0], + self.attention_bias_idxs.shape[1])) + else: + attention_biases = self.ab + + attn = (q @paddle.transpose( + k, perm=[0, 1, 3, 2])) * self.scale + attention_biases + attn = F.softmax(attn) + + x = paddle.reshape( + paddle.transpose( + (attn @v), perm=[0, 2, 1, 3]), [B, -1, self.dh]) + x = self.proj(x) + return x + + +class LeViT(paddle.nn.Layer): + """ Vision Transformer with support for patch or hybrid CNN input stage + """ + + def __init__(self, + img_size=224, + patch_size=16, + in_chans=3, + class_dim=1000, + embed_dim=[192], + key_dim=[64], + depth=[12], + num_heads=[3], + attn_ratio=[2], + mlp_ratio=[2], + hybrid_backbone=None, + down_ops=[], + attention_activation=paddle.nn.Hardswish, + mlp_activation=paddle.nn.Hardswish, + distillation=True, + drop_path=0): + super().__init__() + global FLOPS_COUNTER + + self.class_dim = class_dim + self.num_features = embed_dim[-1] + self.embed_dim = embed_dim + self.distillation = distillation + + self.patch_embed = hybrid_backbone + + self.blocks = [] + down_ops.append(['']) + resolution = img_size // patch_size + for i, (ed, kd, dpth, nh, ar, mr, do) in enumerate( + zip(embed_dim, key_dim, depth, num_heads, attn_ratio, mlp_ratio, + down_ops)): + for _ in range(dpth): + self.blocks.append( + Residual( + Attention( + ed, + kd, + nh, + attn_ratio=ar, + activation=attention_activation, + resolution=resolution, ), + drop_path)) + if mr > 0: + h = int(ed * mr) + self.blocks.append( + Residual( + paddle.nn.Sequential( + Linear_BN( + ed, h, resolution=resolution), + mlp_activation(), + Linear_BN( + h, + ed, + bn_weight_init=0, + resolution=resolution), ), + drop_path)) + if do[0] == 'Subsample': + #('Subsample',key_dim, num_heads, attn_ratio, mlp_ratio, stride) + resolution_ = (resolution - 1) // do[5] + 1 + self.blocks.append( + AttentionSubsample( + *embed_dim[i:i + 2], + key_dim=do[1], + num_heads=do[2], + attn_ratio=do[3], + activation=attention_activation, + stride=do[5], + resolution=resolution, + resolution_=resolution_)) + resolution = resolution_ + if do[4] > 0: # mlp_ratio + h = int(embed_dim[i + 1] * do[4]) + self.blocks.append( + Residual( + paddle.nn.Sequential( + Linear_BN( + embed_dim[i + 1], h, resolution=resolution), + mlp_activation(), + Linear_BN( + h, + embed_dim[i + 1], + bn_weight_init=0, + resolution=resolution), ), + drop_path)) + self.blocks = paddle.nn.Sequential(*self.blocks) + + # Classifier head + self.head = BN_Linear( + embed_dim[-1], class_dim) if class_dim > 0 else paddle.nn.Identity() + if distillation: + self.head_dist = BN_Linear( + embed_dim[-1], + class_dim) if class_dim > 0 else paddle.nn.Identity() + + self.FLOPS = FLOPS_COUNTER + FLOPS_COUNTER = 0 + + def no_weight_decay(self): + return {x for x in self.state_dict().keys() if 'attention_biases' in x} + + def forward(self, x): + x = self.patch_embed(x) + x = x.flatten(2) + x = paddle.transpose(x, perm=[0, 2, 1]) + x = self.blocks(x) + x = x.mean(1) + if self.distillation: + x = self.head(x), self.head_dist(x) + if not self.training: + x = (x[0] + x[1]) / 2 + else: + x = self.head(x) + return x + + +def model_factory(C, D, X, N, drop_path, weights, class_dim, distillation, + pretrained, fuse): + embed_dim = [int(x) for x in C.split('_')] + num_heads = [int(x) for x in N.split('_')] + depth = [int(x) for x in X.split('_')] + act = paddle.nn.Hardswish + model = LeViT( + patch_size=16, + embed_dim=embed_dim, + num_heads=num_heads, + key_dim=[D] * 3, + depth=depth, + attn_ratio=[2, 2, 2], + mlp_ratio=[2, 2, 2], + down_ops=[ + #('Subsample',key_dim, num_heads, attn_ratio, mlp_ratio, stride) + ['Subsample', D, embed_dim[0] // D, 4, 2, 2], + ['Subsample', D, embed_dim[1] // D, 4, 2, 2], + ], + attention_activation=act, + mlp_activation=act, + hybrid_backbone=b16(embed_dim[0], activation=act), + class_dim=class_dim, + drop_path=drop_path, + distillation=distillation) + # if pretrained: + # checkpoint = torch.hub.load_state_dict_from_url( + # weights, map_location='cpu') + # model.load_state_dict(checkpoint['model']) + if fuse: + utils.replace_batchnorm(model) + + return model + + +if __name__ == '__main__': + ''' + import torch + checkpoint = torch.load('../LeViT/pretrained256.pth') + torch_dict = checkpoint['net'] + paddle_dict = {} + fc_names = ["c.weight", "l.weight", "qkv.weight", "fc1.weight", "fc2.weight", "downsample.reduction.weight", "head.weight", "attn.proj.weight"] + rename_dict = {"running_mean": "_mean", "running_var": "_variance"} + range_tuple = (0, 502) + idx = 0 + for key in torch_dict: + idx += 1 + weight = torch_dict[key].cpu().numpy() + flag = [i in key for i in fc_names] + if any(flag): + if "emb" not in key: + print("weight {} need to be trans".format(key)) + weight = weight.transpose() + key = key.replace("running_mean", "_mean") + key = key.replace("running_var", "_variance") + paddle_dict[key]=weight + ''' + import numpy as np + net = globals()['LeViT_256'](fuse=False, + pretrained=False, + distillation=False) + load_layer_state_dict = paddle.load( + "./LeViT_256_official_nodistillation_paddle.pdparams") + #net.set_state_dict(paddle_dict) + net.set_state_dict(load_layer_state_dict) + net.eval() + #paddle.save(net.state_dict(), "./LeViT_256_official_paddle.pdparams") + #model = paddle.jit.to_static(net,input_spec=[paddle.static.InputSpec(shape=[None, 3, 224, 224], dtype='float32')]) + #paddle.jit.save(model, "./LeViT_256_official_inference/inference") + #exit() + np.random.seed(123) + img = np.random.rand(1, 3, 224, 224).astype('float32') + img = paddle.to_tensor(img) + outputs = net(img).numpy() + print(outputs[0][:10]) + #print(outputs.shape) diff --git a/ppocr/modeling/backbones/rec_resnet_aster.py b/ppocr/modeling/backbones/rec_resnet_aster.py new file mode 100644 index 0000000000..5bb5803575 --- /dev/null +++ b/ppocr/modeling/backbones/rec_resnet_aster.py @@ -0,0 +1,147 @@ +# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import paddle +import paddle.nn as nn + +import sys +import math + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2D( + in_planes, + out_planes, + kernel_size=3, + stride=stride, + padding=1, + bias_attr=False) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2D( + in_planes, out_planes, kernel_size=1, stride=stride, bias_attr=False) + + +def get_sinusoid_encoding(n_position, feat_dim, wave_length=10000): + # [n_position] + positions = paddle.arange(0, n_position) + # [feat_dim] + dim_range = paddle.arange(0, feat_dim) + dim_range = paddle.pow(wave_length, 2 * (dim_range // 2) / feat_dim) + # [n_position, feat_dim] + angles = paddle.unsqueeze( + positions, axis=1) / paddle.unsqueeze( + dim_range, axis=0) + angles = paddle.cast(angles, "float32") + angles[:, 0::2] = paddle.sin(angles[:, 0::2]) + angles[:, 1::2] = paddle.cos(angles[:, 1::2]) + return angles + + +class AsterBlock(nn.Layer): + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(AsterBlock, self).__init__() + self.conv1 = conv1x1(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2D(planes) + self.relu = nn.ReLU() + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2D(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + residual = self.downsample(x) + out += residual + out = self.relu(out) + return out + + +class ResNet_ASTER(nn.Layer): + """For aster or crnn""" + + def __init__(self, with_lstm=True, n_group=1, in_channels=3): + super(ResNet_ASTER, self).__init__() + self.with_lstm = with_lstm + self.n_group = n_group + + self.layer0 = nn.Sequential( + nn.Conv2D( + in_channels, + 32, + kernel_size=(3, 3), + stride=1, + padding=1, + bias_attr=False), + nn.BatchNorm2D(32), + nn.ReLU()) + + self.inplanes = 32 + self.layer1 = self._make_layer(32, 3, [2, 2]) # [16, 50] + self.layer2 = self._make_layer(64, 4, [2, 2]) # [8, 25] + self.layer3 = self._make_layer(128, 6, [2, 1]) # [4, 25] + self.layer4 = self._make_layer(256, 6, [2, 1]) # [2, 25] + self.layer5 = self._make_layer(512, 3, [2, 1]) # [1, 25] + + if with_lstm: + self.rnn = nn.LSTM(512, 256, direction="bidirect", num_layers=2) + self.out_channels = 2 * 256 + else: + self.out_channels = 512 + + def _make_layer(self, planes, blocks, stride): + downsample = None + if stride != [1, 1] or self.inplanes != planes: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes, stride), nn.BatchNorm2D(planes)) + + layers = [] + layers.append(AsterBlock(self.inplanes, planes, stride, downsample)) + self.inplanes = planes + for _ in range(1, blocks): + layers.append(AsterBlock(self.inplanes, planes)) + return nn.Sequential(*layers) + + def forward(self, x): + x0 = self.layer0(x) + x1 = self.layer1(x0) + x2 = self.layer2(x1) + x3 = self.layer3(x2) + x4 = self.layer4(x3) + x5 = self.layer5(x4) + + cnn_feat = x5.squeeze(2) # [N, c, w] + cnn_feat = paddle.transpose(cnn_feat, perm=[0, 2, 1]) + if self.with_lstm: + rnn_feat, _ = self.rnn(cnn_feat) + return rnn_feat + else: + return cnn_feat + + +if __name__ == "__main__": + x = paddle.randn([3, 3, 32, 100]) + net = ResNet_ASTER() + encoder_feat = net(x) + print(encoder_feat.shape) diff --git a/ppocr/modeling/heads/__init__.py b/ppocr/modeling/heads/__init__.py index 5096479415..cd923d78be 100755 --- a/ppocr/modeling/heads/__init__.py +++ b/ppocr/modeling/heads/__init__.py @@ -26,12 +26,15 @@ def build_head(config): from .rec_ctc_head import CTCHead from .rec_att_head import AttentionHead from .rec_srn_head import SRNHead + from .rec_aster_head import AttentionRecognitionHead, AsterHead # cls head from .cls_head import ClsHead support_dict = [ 'DBHead', 'EASTHead', 'SASTHead', 'CTCHead', 'ClsHead', 'AttentionHead', - 'SRNHead', 'PGHead', 'TableAttentionHead'] + 'SRNHead', 'PGHead', 'TableAttentionHead', 'AttentionRecognitionHead', + 'AsterHead' + ] #table head from .table_att_head import TableAttentionHead @@ -39,5 +42,6 @@ def build_head(config): module_name = config.pop('name') assert module_name in support_dict, Exception('head only support {}'.format( support_dict)) + print(config) module_class = eval(module_name)(**config) return module_class diff --git a/ppocr/modeling/heads/rec_aster_head.py b/ppocr/modeling/heads/rec_aster_head.py new file mode 100644 index 0000000000..055b109730 --- /dev/null +++ b/ppocr/modeling/heads/rec_aster_head.py @@ -0,0 +1,258 @@ +# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import sys + +import paddle +from paddle import nn +from paddle.nn import functional as F + + +class AsterHead(nn.Layer): + def __init__(self, + in_channels, + out_channels, + sDim, + attDim, + max_len_labels, + time_step=25, + beam_width=5, + **kwargs): + super(AsterHead, self).__init__() + self.num_classes = out_channels + self.in_planes = in_channels + self.sDim = sDim + self.attDim = attDim + self.max_len_labels = max_len_labels + self.decoder = AttentionRecognitionHead(in_channels, out_channels, sDim, + attDim, max_len_labels) + self.time_step = time_step + self.embeder = Embedding(self.time_step, in_channels) + self.beam_width = beam_width + + def forward(self, x, targets=None, embed=None): + return_dict = {} + embedding_vectors = self.embeder(x) + rec_targets, rec_lengths = targets + + if self.training: + rec_pred = self.decoder([x, rec_targets, rec_lengths], + embedding_vectors) + return_dict['rec_pred'] = rec_pred + return_dict['embedding_vectors'] = embedding_vectors + else: + rec_pred, rec_pred_scores = self.decoder.beam_search( + x, self.beam_width, self.eos, embedding_vectors) + return_dict['rec_pred'] = rec_pred + return_dict['rec_pred_scores'] = rec_pred_scores + return_dict['embedding_vectors'] = embedding_vectors + + return return_dict + + +class Embedding(nn.Layer): + def __init__(self, in_timestep, in_planes, mid_dim=4096, embed_dim=300): + super(Embedding, self).__init__() + self.in_timestep = in_timestep + self.in_planes = in_planes + self.embed_dim = embed_dim + self.mid_dim = mid_dim + self.eEmbed = nn.Linear( + in_timestep * in_planes, + self.embed_dim) # Embed encoder output to a word-embedding like + + def forward(self, x): + x = paddle.reshape(x, [paddle.shape(x)[0], -1]) + x = self.eEmbed(x) + return x + + +class AttentionRecognitionHead(nn.Layer): + """ + input: [b x 16 x 64 x in_planes] + output: probability sequence: [b x T x num_classes] + """ + + def __init__(self, in_channels, out_channels, sDim, attDim, max_len_labels): + super(AttentionRecognitionHead, self).__init__() + self.num_classes = out_channels # this is the output classes. So it includes the . + self.in_planes = in_channels + self.sDim = sDim + self.attDim = attDim + self.max_len_labels = max_len_labels + + self.decoder = DecoderUnit( + sDim=sDim, xDim=in_channels, yDim=self.num_classes, attDim=attDim) + + def forward(self, x, embed): + x, targets, lengths = x + batch_size = paddle.shape(x)[0] + # Decoder + state = self.decoder.get_initial_state(embed) + outputs = [] + + for i in range(max(lengths)): + if i == 0: + y_prev = paddle.full( + shape=[batch_size], fill_value=self.num_classes) + else: + y_prev = targets[:, i - 1] + + output, state = self.decoder(x, state, y_prev) + outputs.append(output) + outputs = paddle.concat([_.unsqueeze(1) for _ in outputs], 1) + return outputs + + # inference stage. + def sample(self, x): + x, _, _ = x + batch_size = x.size(0) + # Decoder + state = paddle.zeros([1, batch_size, self.sDim]) + + predicted_ids, predicted_scores = [], [] + for i in range(self.max_len_labels): + if i == 0: + y_prev = paddle.full( + shape=[batch_size], fill_value=self.num_classes) + else: + y_prev = predicted + + output, state = self.decoder(x, state, y_prev) + output = F.softmax(output, axis=1) + score, predicted = output.max(1) + predicted_ids.append(predicted.unsqueeze(1)) + predicted_scores.append(score.unsqueeze(1)) + predicted_ids = paddle.concat([predicted_ids, 1]) + predicted_scores = paddle.concat([predicted_scores, 1]) + # return predicted_ids.squeeze(), predicted_scores.squeeze() + return predicted_ids, predicted_scores + + +class AttentionUnit(nn.Layer): + def __init__(self, sDim, xDim, attDim): + super(AttentionUnit, self).__init__() + + self.sDim = sDim + self.xDim = xDim + self.attDim = attDim + + self.sEmbed = nn.Linear( + sDim, + attDim, + weight_attr=paddle.nn.initializer.Normal(std=0.01), + bias_attr=paddle.nn.initializer.Constant(0.0)) + self.xEmbed = nn.Linear( + xDim, + attDim, + weight_attr=paddle.nn.initializer.Normal(std=0.01), + bias_attr=paddle.nn.initializer.Constant(0.0)) + self.wEmbed = nn.Linear( + attDim, + 1, + weight_attr=paddle.nn.initializer.Normal(std=0.01), + bias_attr=paddle.nn.initializer.Constant(0.0)) + + def forward(self, x, sPrev): + batch_size, T, _ = x.shape # [b x T x xDim] + x = paddle.reshape(x, [-1, self.xDim]) # [(b x T) x xDim] + xProj = self.xEmbed(x) # [(b x T) x attDim] + xProj = paddle.reshape(xProj, [batch_size, T, -1]) # [b x T x attDim] + + sPrev = sPrev.squeeze(0) + sProj = self.sEmbed(sPrev) # [b x attDim] + sProj = paddle.unsqueeze(sProj, 1) # [b x 1 x attDim] + sProj = paddle.expand(sProj, + [batch_size, T, self.attDim]) # [b x T x attDim] + + sumTanh = paddle.tanh(sProj + xProj) + sumTanh = paddle.reshape(sumTanh, [-1, self.attDim]) + + vProj = self.wEmbed(sumTanh) # [(b x T) x 1] + vProj = paddle.reshape(vProj, [batch_size, T]) + + alpha = F.softmax( + vProj, axis=1) # attention weights for each sample in the minibatch + + return alpha + + +class DecoderUnit(nn.Layer): + def __init__(self, sDim, xDim, yDim, attDim): + super(DecoderUnit, self).__init__() + self.sDim = sDim + self.xDim = xDim + self.yDim = yDim + self.attDim = attDim + self.emdDim = attDim + + self.attention_unit = AttentionUnit(sDim, xDim, attDim) + self.tgt_embedding = nn.Embedding( + yDim + 1, self.emdDim, weight_attr=nn.initializer.Normal( + std=0.01)) # the last is used for + self.gru = nn.GRUCell(input_size=xDim + self.emdDim, hidden_size=sDim) + self.fc = nn.Linear( + sDim, + yDim, + weight_attr=nn.initializer.Normal(std=0.01), + bias_attr=nn.initializer.Constant(value=0)) + self.embed_fc = nn.Linear(300, self.sDim) + + def get_initial_state(self, embed, tile_times=1): + assert embed.shape[1] == 300 + state = self.embed_fc(embed) # N * sDim + if tile_times != 1: + state = state.unsqueeze(1) + trans_state = paddle.transpose(state, perm=[1, 0, 2]) + state = paddle.tile(trans_state, repeat_times=[tile_times, 1, 1]) + trans_state = paddle.transpose(state, perm=[1, 0, 2]) + state = paddle.reshape(trans_state, shape=[-1, self.sDim]) + state = state.unsqueeze(0) # 1 * N * sDim + return state + + def forward(self, x, sPrev, yPrev): + # x: feature sequence from the image decoder. + batch_size, T, _ = x.shape + alpha = self.attention_unit(x, sPrev) + context = paddle.squeeze(paddle.matmul(alpha.unsqueeze(1), x), axis=1) + yPrev = paddle.cast(yPrev, dtype="int64") + yProj = self.tgt_embedding(yPrev) + + concat_context = paddle.concat([yProj, context], 1) + concat_context = paddle.squeeze(concat_context, 1) + sPrev = paddle.squeeze(sPrev, 0) + output, state = self.gru(concat_context, sPrev) + output = paddle.squeeze(output, axis=1) + output = self.fc(output) + return output, state + + +if __name__ == "__main__": + model = AttentionRecognitionHead( + num_classes=20, + in_channels=30, + sDim=512, + attDim=512, + max_len_labels=25, + out_channels=38) + + data = paddle.ones([16, 64, 3]) + targets = paddle.ones([16, 25]) + length = paddle.to_tensor(20) + x = [data, targets, length] + output = model(x) + print(output.shape) diff --git a/ppocr/modeling/heads/rec_att_head.py b/ppocr/modeling/heads/rec_att_head.py index 4286d7691d..79f112f723 100644 --- a/ppocr/modeling/heads/rec_att_head.py +++ b/ppocr/modeling/heads/rec_att_head.py @@ -44,10 +44,13 @@ class AttentionHead(nn.Layer): hidden = paddle.zeros((batch_size, self.hidden_size)) output_hiddens = [] + targets = targets[0] + print(targets) if targets is not None: for i in range(num_steps): char_onehots = self._char_to_onehot( targets[:, i], onehot_dim=self.num_classes) + # print("char_onehots:", char_onehots) (outputs, hidden), alpha = self.attention_cell(hidden, inputs, char_onehots) output_hiddens.append(paddle.unsqueeze(outputs, axis=1)) @@ -104,6 +107,8 @@ class AttentionGRUCell(nn.Layer): alpha = paddle.transpose(alpha, [0, 2, 1]) context = paddle.squeeze(paddle.mm(alpha, batch_H), axis=1) concat_context = paddle.concat([context, char_onehots], 1) + # print("concat_context:", concat_context.shape) + # print("prev_hidden:", prev_hidden.shape) cur_hidden = self.rnn(concat_context, prev_hidden) diff --git a/ppocr/modeling/transforms/__init__.py b/ppocr/modeling/transforms/__init__.py index 78eaecccc5..0e02a1c0cf 100755 --- a/ppocr/modeling/transforms/__init__.py +++ b/ppocr/modeling/transforms/__init__.py @@ -17,8 +17,9 @@ __all__ = ['build_transform'] def build_transform(config): from .tps import TPS + from .tps import STN_ON - support_dict = ['TPS'] + support_dict = ['TPS', 'STN_ON'] module_name = config.pop('name') assert module_name in support_dict, Exception( diff --git a/ppocr/modeling/transforms/stn.py b/ppocr/modeling/transforms/stn.py new file mode 100644 index 0000000000..0b26e27aea --- /dev/null +++ b/ppocr/modeling/transforms/stn.py @@ -0,0 +1,121 @@ +# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import paddle +from paddle import nn, ParamAttr +from paddle.nn import functional as F +import numpy as np + + +def conv3x3_block(in_channels, out_channels, stride=1): + n = 3 * 3 * out_channels + w = math.sqrt(2. / n) + conv_layer = nn.Conv2D( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + weight_attr=nn.initializer.Normal( + mean=0.0, std=w), + bias_attr=nn.initializer.Constant(0)) + block = nn.Sequential(conv_layer, nn.BatchNorm2D(out_channels), nn.ReLU()) + return block + + +class STN(nn.Layer): + def __init__(self, in_channels, num_ctrlpoints, activation='none'): + super(STN, self).__init__() + self.in_channels = in_channels + self.num_ctrlpoints = num_ctrlpoints + self.activation = activation + self.stn_convnet = nn.Sequential( + conv3x3_block(in_channels, 32), #32x64 + nn.MaxPool2D( + kernel_size=2, stride=2), + conv3x3_block(32, 64), #16x32 + nn.MaxPool2D( + kernel_size=2, stride=2), + conv3x3_block(64, 128), # 8*16 + nn.MaxPool2D( + kernel_size=2, stride=2), + conv3x3_block(128, 256), # 4*8 + nn.MaxPool2D( + kernel_size=2, stride=2), + conv3x3_block(256, 256), # 2*4, + nn.MaxPool2D( + kernel_size=2, stride=2), + conv3x3_block(256, 256)) # 1*2 + self.stn_fc1 = nn.Sequential( + nn.Linear( + 2 * 256, + 512, + weight_attr=nn.initializer.Normal(0, 0.001), + bias_attr=nn.initializer.Constant(0)), + nn.BatchNorm1D(512), + nn.ReLU()) + fc2_bias = self.init_stn() + self.stn_fc2 = nn.Linear( + 512, + num_ctrlpoints * 2, + weight_attr=nn.initializer.Constant(0.0), + bias_attr=nn.initializer.Assign(fc2_bias)) + + def init_stn(self): + margin = 0.01 + sampling_num_per_side = int(self.num_ctrlpoints / 2) + ctrl_pts_x = np.linspace(margin, 1. - margin, sampling_num_per_side) + ctrl_pts_y_top = np.ones(sampling_num_per_side) * margin + ctrl_pts_y_bottom = np.ones(sampling_num_per_side) * (1 - margin) + ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) + ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) + ctrl_points = np.concatenate( + [ctrl_pts_top, ctrl_pts_bottom], axis=0).astype(np.float32) + if self.activation == 'none': + pass + elif self.activation == 'sigmoid': + ctrl_points = -np.log(1. / ctrl_points - 1.) + ctrl_points = paddle.to_tensor(ctrl_points) + fc2_bias = paddle.reshape( + ctrl_points, shape=[ctrl_points.shape[0] * ctrl_points.shape[1]]) + return fc2_bias + + def forward(self, x): + x = self.stn_convnet(x) + batch_size, _, h, w = x.shape + x = paddle.reshape(x, shape=(batch_size, -1)) + img_feat = self.stn_fc1(x) + x = self.stn_fc2(0.1 * img_feat) + if self.activation == 'sigmoid': + x = F.sigmoid(x) + x = paddle.reshape(x, shape=[-1, self.num_ctrlpoints, 2]) + return img_feat, x + + +if __name__ == "__main__": + in_planes = 3 + num_ctrlpoints = 20 + np.random.seed(100) + activation = 'none' # 'sigmoid' + stn_head = STN(in_planes, num_ctrlpoints, activation) + data = np.random.randn(10, 3, 32, 64).astype("float32") + print("data:", np.sum(data)) + input = paddle.to_tensor(data) + #input = paddle.randn([10, 3, 32, 64]) + control_points = stn_head(input) diff --git a/ppocr/modeling/transforms/tps.py b/ppocr/modeling/transforms/tps.py index dcce6246ac..fc46210071 100644 --- a/ppocr/modeling/transforms/tps.py +++ b/ppocr/modeling/transforms/tps.py @@ -22,6 +22,9 @@ from paddle import nn, ParamAttr from paddle.nn import functional as F import numpy as np +from .tps_spatial_transformer import TPSSpatialTransformer +from .stn import STN + class ConvBNLayer(nn.Layer): def __init__(self, @@ -231,7 +234,8 @@ class GridGenerator(nn.Layer): """ Return inv_delta_C which is needed to calculate T """ F = self.F hat_eye = paddle.eye(F, dtype='float64') # F x F - hat_C = paddle.norm(C.reshape([1, F, 2]) - C.reshape([F, 1, 2]), axis=2) + hat_eye + hat_C = paddle.norm( + C.reshape([1, F, 2]) - C.reshape([F, 1, 2]), axis=2) + hat_eye hat_C = (hat_C**2) * paddle.log(hat_C) delta_C = paddle.concat( # F+3 x F+3 [ @@ -301,3 +305,26 @@ class TPS(nn.Layer): [-1, image.shape[2], image.shape[3], 2]) batch_I_r = F.grid_sample(x=image, grid=batch_P_prime) return batch_I_r + + +class STN_ON(nn.Layer): + def __init__(self, in_channels, tps_inputsize, tps_outputsize, + num_control_points, tps_margins, stn_activation): + super(STN_ON, self).__init__() + self.tps = TPSSpatialTransformer( + output_image_size=tuple(tps_outputsize), + num_control_points=num_control_points, + margins=tuple(tps_margins)) + self.stn_head = STN(in_channels=in_channels, + num_ctrlpoints=num_control_points, + activation=stn_activation) + self.tps_inputsize = tps_inputsize + self.out_channels = in_channels + + def forward(self, image): + stn_input = paddle.nn.functional.interpolate( + image, self.tps_inputsize, mode="bilinear", align_corners=True) + stn_img_feat, ctrl_points = self.stn_head(stn_input) + x, _ = self.tps(image, ctrl_points) + # print(x.shape) + return x diff --git a/ppocr/modeling/transforms/tps_spatial_transformer.py b/ppocr/modeling/transforms/tps_spatial_transformer.py new file mode 100644 index 0000000000..da54ffb786 --- /dev/null +++ b/ppocr/modeling/transforms/tps_spatial_transformer.py @@ -0,0 +1,178 @@ +# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import paddle +from paddle import nn, ParamAttr +from paddle.nn import functional as F +import numpy as np +import itertools + + +def grid_sample(input, grid, canvas=None): + input.stop_gradient = False + output = F.grid_sample(input, grid) + if canvas is None: + return output + else: + input_mask = paddle.ones(shape=input.shape) + output_mask = F.grid_sample(input_mask, grid) + padded_output = output * output_mask + canvas * (1 - output_mask) + return padded_output + + +# phi(x1, x2) = r^2 * log(r), where r = ||x1 - x2||_2 +def compute_partial_repr(input_points, control_points): + N = input_points.shape[0] + M = control_points.shape[0] + pairwise_diff = paddle.reshape( + input_points, shape=[N, 1, 2]) - paddle.reshape( + control_points, shape=[1, M, 2]) + # original implementation, very slow + # pairwise_dist = torch.sum(pairwise_diff ** 2, dim = 2) # square of distance + pairwise_diff_square = pairwise_diff * pairwise_diff + pairwise_dist = pairwise_diff_square[:, :, 0] + pairwise_diff_square[:, :, + 1] + repr_matrix = 0.5 * pairwise_dist * paddle.log(pairwise_dist) + # fix numerical error for 0 * log(0), substitute all nan with 0 + mask = repr_matrix != repr_matrix + repr_matrix[mask] = 0 + return repr_matrix + + +# output_ctrl_pts are specified, according to our task. +def build_output_control_points(num_control_points, margins): + margin_x, margin_y = margins + num_ctrl_pts_per_side = num_control_points // 2 + ctrl_pts_x = np.linspace(margin_x, 1.0 - margin_x, num_ctrl_pts_per_side) + ctrl_pts_y_top = np.ones(num_ctrl_pts_per_side) * margin_y + ctrl_pts_y_bottom = np.ones(num_ctrl_pts_per_side) * (1.0 - margin_y) + ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) + ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) + # ctrl_pts_top = ctrl_pts_top[1:-1,:] + # ctrl_pts_bottom = ctrl_pts_bottom[1:-1,:] + output_ctrl_pts_arr = np.concatenate( + [ctrl_pts_top, ctrl_pts_bottom], axis=0) + output_ctrl_pts = paddle.to_tensor(output_ctrl_pts_arr) + return output_ctrl_pts + + +class TPSSpatialTransformer(nn.Layer): + def __init__(self, + output_image_size=None, + num_control_points=None, + margins=None): + super(TPSSpatialTransformer, self).__init__() + self.output_image_size = output_image_size + self.num_control_points = num_control_points + self.margins = margins + + self.target_height, self.target_width = output_image_size + target_control_points = build_output_control_points(num_control_points, + margins) + N = num_control_points + # N = N - 4 + + # create padded kernel matrix + forward_kernel = paddle.zeros(shape=[N + 3, N + 3]) + target_control_partial_repr = compute_partial_repr( + target_control_points, target_control_points) + target_control_partial_repr = paddle.cast(target_control_partial_repr, + forward_kernel.dtype) + forward_kernel[:N, :N] = target_control_partial_repr + forward_kernel[:N, -3] = 1 + forward_kernel[-3, :N] = 1 + target_control_points = paddle.cast(target_control_points, + forward_kernel.dtype) + forward_kernel[:N, -2:] = target_control_points + forward_kernel[-2:, :N] = paddle.transpose( + target_control_points, perm=[1, 0]) + # compute inverse matrix + inverse_kernel = paddle.inverse(forward_kernel) + + # create target cordinate matrix + HW = self.target_height * self.target_width + target_coordinate = list( + itertools.product( + range(self.target_height), range(self.target_width))) + target_coordinate = paddle.to_tensor(target_coordinate) # HW x 2 + Y, X = paddle.split( + target_coordinate, target_coordinate.shape[1], axis=1) + #Y, X = target_coordinate.split(1, dim = 1) + Y = Y / (self.target_height - 1) + X = X / (self.target_width - 1) + target_coordinate = paddle.concat( + [X, Y], axis=1) # convert from (y, x) to (x, y) + target_coordinate_partial_repr = compute_partial_repr( + target_coordinate, target_control_points) + target_coordinate_repr = paddle.concat( + [ + target_coordinate_partial_repr, paddle.ones(shape=[HW, 1]), + target_coordinate + ], + axis=1) + + # register precomputed matrices + self.inverse_kernel = inverse_kernel + self.padding_matrix = paddle.zeros(shape=[3, 2]) + self.target_coordinate_repr = target_coordinate_repr + self.target_control_points = target_control_points + + def forward(self, input, source_control_points): + assert source_control_points.ndimension() == 3 + assert source_control_points.shape[1] == self.num_control_points + assert source_control_points.shape[2] == 2 + batch_size = source_control_points.shape[0] + + self.padding_matrix = paddle.expand( + self.padding_matrix, shape=[batch_size, 3, 2]) + Y = paddle.concat([source_control_points, self.padding_matrix], 1) + mapping_matrix = paddle.matmul(self.inverse_kernel, Y) + source_coordinate = paddle.matmul(self.target_coordinate_repr, + mapping_matrix) + + grid = paddle.reshape( + source_coordinate, + shape=[-1, self.target_height, self.target_width, 2]) + grid = paddle.clip(grid, 0, + 1) # the source_control_points may be out of [0, 1]. + # the input to grid_sample is normalized [-1, 1], but what we get is [0, 1] + # grid = 2.0 * grid - 1.0 + output_maps = grid_sample(input, grid, canvas=None) + return output_maps, source_coordinate + + +if __name__ == "__main__": + from stn import STN + in_planes = 3 + num_ctrlpoints = 20 + np.random.seed(100) + activation = 'none' # 'sigmoid' + stn_head = STN(in_planes, num_ctrlpoints, activation) + data = np.random.randn(10, 3, 32, 64).astype("float32") + input = paddle.to_tensor(data) + #input = paddle.randn([10, 3, 32, 64]) + control_points = stn_head(input) + #print("control points:", control_points) + #input = paddle.randn(shape=[10,3,32,100]) + tps = TPSSpatialTransformer( + output_image_size=[32, 320], + num_control_points=20, + margins=[0.05, 0.05]) + out = tps(input, control_points[1]) + print("out 0 :", out[0].shape) + print("out 1:", out[1].shape) diff --git a/ppocr/modeling/transforms/tps_torch.py b/ppocr/modeling/transforms/tps_torch.py new file mode 100644 index 0000000000..7aee133ae3 --- /dev/null +++ b/ppocr/modeling/transforms/tps_torch.py @@ -0,0 +1,149 @@ +from __future__ import absolute_import + +import numpy as np +import itertools + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +def grid_sample(input, grid, canvas=None): + output = F.grid_sample(input, grid) + if canvas is None: + return output + else: + input_mask = input.data.new(input.size()).fill_(1) + output_mask = F.grid_sample(input_mask, grid) + padded_output = output * output_mask + canvas * (1 - output_mask) + return padded_output + + +# phi(x1, x2) = r^2 * log(r), where r = ||x1 - x2||_2 +def compute_partial_repr(input_points, control_points): + N = input_points.size(0) + M = control_points.size(0) + pairwise_diff = input_points.view(N, 1, 2) - control_points.view(1, M, 2) + # original implementation, very slow + # pairwise_dist = torch.sum(pairwise_diff ** 2, dim = 2) # square of distance + pairwise_diff_square = pairwise_diff * pairwise_diff + pairwise_dist = pairwise_diff_square[:, :, 0] + pairwise_diff_square[:, :, + 1] + repr_matrix = 0.5 * pairwise_dist * torch.log(pairwise_dist) + # fix numerical error for 0 * log(0), substitute all nan with 0 + mask = repr_matrix != repr_matrix + repr_matrix.masked_fill_(mask, 0) + return repr_matrix + + +# output_ctrl_pts are specified, according to our task. +def build_output_control_points(num_control_points, margins): + margin_x, margin_y = margins + num_ctrl_pts_per_side = num_control_points // 2 + ctrl_pts_x = np.linspace(margin_x, 1.0 - margin_x, num_ctrl_pts_per_side) + ctrl_pts_y_top = np.ones(num_ctrl_pts_per_side) * margin_y + ctrl_pts_y_bottom = np.ones(num_ctrl_pts_per_side) * (1.0 - margin_y) + ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) + ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) + # ctrl_pts_top = ctrl_pts_top[1:-1,:] + # ctrl_pts_bottom = ctrl_pts_bottom[1:-1,:] + output_ctrl_pts_arr = np.concatenate( + [ctrl_pts_top, ctrl_pts_bottom], axis=0) + output_ctrl_pts = torch.Tensor(output_ctrl_pts_arr) + return output_ctrl_pts + + +# demo: ~/test/models/test_tps_transformation.py +class TPSSpatialTransformer(nn.Module): + def __init__(self, + output_image_size=None, + num_control_points=None, + margins=None): + super(TPSSpatialTransformer, self).__init__() + self.output_image_size = output_image_size + self.num_control_points = num_control_points + self.margins = margins + + self.target_height, self.target_width = output_image_size + target_control_points = build_output_control_points(num_control_points, + margins) + N = num_control_points + # N = N - 4 + + # create padded kernel matrix + forward_kernel = torch.zeros(N + 3, N + 3) + target_control_partial_repr = compute_partial_repr( + target_control_points, target_control_points) + forward_kernel[:N, :N].copy_(target_control_partial_repr) + forward_kernel[:N, -3].fill_(1) + forward_kernel[-3, :N].fill_(1) + forward_kernel[:N, -2:].copy_(target_control_points) + forward_kernel[-2:, :N].copy_(target_control_points.transpose(0, 1)) + # compute inverse matrix + inverse_kernel = torch.inverse(forward_kernel) + + # create target cordinate matrix + HW = self.target_height * self.target_width + target_coordinate = list( + itertools.product( + range(self.target_height), range(self.target_width))) + target_coordinate = torch.Tensor(target_coordinate) # HW x 2 + Y, X = target_coordinate.split(1, dim=1) + Y = Y / (self.target_height - 1) + X = X / (self.target_width - 1) + target_coordinate = torch.cat([X, Y], + dim=1) # convert from (y, x) to (x, y) + target_coordinate_partial_repr = compute_partial_repr( + target_coordinate, target_control_points) + target_coordinate_repr = torch.cat([ + target_coordinate_partial_repr, torch.ones(HW, 1), target_coordinate + ], + dim=1) + + # register precomputed matrices + self.register_buffer('inverse_kernel', inverse_kernel) + self.register_buffer('padding_matrix', torch.zeros(3, 2)) + self.register_buffer('target_coordinate_repr', target_coordinate_repr) + self.register_buffer('target_control_points', target_control_points) + + def forward(self, input, source_control_points): + assert source_control_points.ndimension() == 3 + assert source_control_points.size(1) == self.num_control_points + assert source_control_points.size(2) == 2 + batch_size = source_control_points.size(0) + + Y = torch.cat([ + source_control_points, self.padding_matrix.expand(batch_size, 3, 2) + ], 1) + mapping_matrix = torch.matmul(self.inverse_kernel, Y) + source_coordinate = torch.matmul(self.target_coordinate_repr, + mapping_matrix) + + grid = source_coordinate.view(-1, self.target_height, self.target_width, + 2) + grid = torch.clamp(grid, 0, + 1) # the source_control_points may be out of [0, 1]. + # the input to grid_sample is normalized [-1, 1], but what we get is [0, 1] + grid = 2.0 * grid - 1.0 + output_maps = grid_sample(input, grid, canvas=None) + return output_maps, source_coordinate + + +if __name__ == "__main__": + from stn_torch import STNHead + in_planes = 3 + num_ctrlpoints = 20 + torch.manual_seed(10) + activation = 'none' # 'sigmoid' + stn_head = STNHead(in_planes, num_ctrlpoints, activation) + np.random.seed(100) + data = np.random.randn(10, 3, 32, 64).astype("float32") + input = torch.tensor(data) + control_points = stn_head(input) + tps = TPSSpatialTransformer( + output_image_size=[32, 320], + num_control_points=20, + margins=[0.05, 0.05]) + out = tps(input, control_points[1]) + print("out 0 :", out[0].shape) + print("out 1:", out[1].shape) diff --git a/ppocr/postprocess/rec_postprocess.py b/ppocr/postprocess/rec_postprocess.py index 8426bcf2b9..17fc7e461c 100644 --- a/ppocr/postprocess/rec_postprocess.py +++ b/ppocr/postprocess/rec_postprocess.py @@ -170,8 +170,10 @@ class AttnLabelDecode(BaseRecLabelDecode): def add_special_char(self, dict_character): self.beg_str = "sos" self.end_str = "eos" + self.unkonwn = "UNKNOWN" dict_character = dict_character - dict_character = [self.beg_str] + dict_character + [self.end_str] + dict_character = [self.beg_str] + dict_character + [self.end_str + ] + [self.unkonwn] return dict_character def decode(self, text_index, text_prob=None, is_remove_duplicate=False): @@ -212,6 +214,7 @@ class AttnLabelDecode(BaseRecLabelDecode): label = self.decode(label, is_remove_duplicate=False) return text, label """ + preds = preds["rec_pred"] if isinstance(preds, paddle.Tensor): preds = preds.numpy() @@ -324,10 +327,9 @@ class SRNLabelDecode(BaseRecLabelDecode): class TableLabelDecode(object): """ """ - def __init__(self, - character_dict_path, - **kwargs): - list_character, list_elem = self.load_char_elem_dict(character_dict_path) + def __init__(self, character_dict_path, **kwargs): + list_character, list_elem = self.load_char_elem_dict( + character_dict_path) list_character = self.add_special_char(list_character) list_elem = self.add_special_char(list_elem) self.dict_character = {} @@ -366,14 +368,14 @@ class TableLabelDecode(object): def __call__(self, preds): structure_probs = preds['structure_probs'] loc_preds = preds['loc_preds'] - if isinstance(structure_probs,paddle.Tensor): + if isinstance(structure_probs, paddle.Tensor): structure_probs = structure_probs.numpy() - if isinstance(loc_preds,paddle.Tensor): + if isinstance(loc_preds, paddle.Tensor): loc_preds = loc_preds.numpy() structure_idx = structure_probs.argmax(axis=2) structure_probs = structure_probs.max(axis=2) - structure_str, structure_pos, result_score_list, result_elem_idx_list = self.decode(structure_idx, - structure_probs, 'elem') + structure_str, structure_pos, result_score_list, result_elem_idx_list = self.decode( + structure_idx, structure_probs, 'elem') res_html_code_list = [] res_loc_list = [] batch_num = len(structure_str) @@ -388,8 +390,13 @@ class TableLabelDecode(object): res_loc = np.array(res_loc) res_html_code_list.append(res_html_code) res_loc_list.append(res_loc) - return {'res_html_code': res_html_code_list, 'res_loc': res_loc_list, 'res_score_list': result_score_list, - 'res_elem_idx_list': result_elem_idx_list,'structure_str_list':structure_str} + return { + 'res_html_code': res_html_code_list, + 'res_loc': res_loc_list, + 'res_score_list': result_score_list, + 'res_elem_idx_list': result_elem_idx_list, + 'structure_str_list': structure_str + } def decode(self, text_index, structure_probs, char_or_elem): """convert text-label into text-index. diff --git a/ppocr/utils/save_load.py b/ppocr/utils/save_load.py index 1d760e983a..0453509c7b 100644 --- a/ppocr/utils/save_load.py +++ b/ppocr/utils/save_load.py @@ -105,13 +105,16 @@ def load_dygraph_params(config, model, logger, optimizer): params = paddle.load(pm) state_dict = model.state_dict() new_state_dict = {} - for k1, k2 in zip(state_dict.keys(), params.keys()): - if list(state_dict[k1].shape) == list(params[k2].shape): - new_state_dict[k1] = params[k2] - else: - logger.info( - f"The shape of model params {k1} {state_dict[k1].shape} not matched with loaded params {k2} {params[k2].shape} !" - ) + # for k1, k2 in zip(state_dict.keys(), params.keys()): + for k1 in state_dict.keys(): + if k1 not in params: + continue + if list(state_dict[k1].shape) == list(params[k1].shape): + new_state_dict[k1] = params[k1] + else: + logger.info( + f"The shape of model params {k1} {state_dict[k1].shape} not matched with loaded params {k1} {params[k1].shape} !" + ) model.set_state_dict(new_state_dict) logger.info(f"loaded pretrained_model successful from {pm}") return {} diff --git a/tools/program.py b/tools/program.py index 2d99f2968a..920cf417ce 100755 --- a/tools/program.py +++ b/tools/program.py @@ -187,6 +187,7 @@ def train(config, use_srn = config['Architecture']['algorithm'] == "SRN" model_type = config['Architecture']['model_type'] + algorithm = config['Architecture']['algorithm'] if 'start_epoch' in best_model_dict: start_epoch = best_model_dict['start_epoch'] @@ -210,10 +211,14 @@ def train(config, images = batch[0] if use_srn: model_average = True - if use_srn or model_type == 'table': - preds = model(images, data=batch[1:]) - else: - preds = model(images) + # if use_srn or model_type == 'table' or algorithm == "ASTER": + # preds = model(images, data=batch[1:]) + # else: + # preds = model(images) + preds = model(images, data=batch[1:]) + state_dict = model.state_dict() + # for key in state_dict: + # print(key) loss = loss_class(preds, batch) avg_loss = loss['loss'] avg_loss.backward() @@ -395,7 +400,7 @@ def preprocess(is_train=False): alg = config['Architecture']['algorithm'] assert alg in [ 'EAST', 'DB', 'SAST', 'Rosetta', 'CRNN', 'STARNet', 'RARE', 'SRN', - 'CLS', 'PGNet', 'Distillation', 'TableAttn' + 'CLS', 'PGNet', 'Distillation', 'TableAttn', 'ASTER' ] device = 'gpu:{}'.format(dist.ParallelEnv().dev_id) if use_gpu else 'cpu' diff --git a/tools/train.py b/tools/train.py index 20f5a670d5..e1515f57c9 100755 --- a/tools/train.py +++ b/tools/train.py @@ -72,6 +72,8 @@ def main(config, device, logger, vdl_writer): # for rec algorithm if hasattr(post_process_class, 'character'): char_num = len(getattr(post_process_class, 'character')) + character = getattr(post_process_class, 'character') + print("getattr character:", character) if config['Architecture']["algorithm"] in ["Distillation", ]: # distillation model for key in config['Architecture']["Models"]: From c9e1077daac3efb2e5c42ebf879aa363d4c59db4 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Mon, 30 Aug 2021 06:32:54 +0000 Subject: [PATCH 02/42] polish code --- configs/rec/rec_resnet_stn_bilstm_att.yml | 65 +- ppocr/data/imaug/__init__.py | 2 +- ppocr/data/imaug/label_ops.py | 38 +- ppocr/data/imaug/operators.py | 16 +- ppocr/data/imaug/rec_img_aug.py | 23 + ppocr/data/simple_dataset.py | 1 - ppocr/losses/rec_aster_loss.py | 55 +- ppocr/losses/rec_att_loss.py | 2 - ppocr/metrics/rec_metric.py | 12 +- ppocr/modeling/backbones/__init__.py | 7 +- ppocr/modeling/backbones/levit.py | 707 ------------------ ppocr/modeling/heads/__init__.py | 1 - ppocr/modeling/heads/rec_aster_head.py | 208 +++++- ppocr/modeling/heads/rec_att_head.py | 5 - ppocr/modeling/transforms/stn.py | 13 - ppocr/modeling/transforms/tps.py | 1 + .../transforms/tps_spatial_transformer.py | 27 +- ppocr/modeling/transforms/tps_torch.py | 149 ---- ppocr/optimizer/optimizer.py | 31 + ppocr/postprocess/__init__.py | 4 +- ppocr/postprocess/rec_postprocess.py | 87 ++- ppocr/utils/save_load.py | 17 +- tools/program.py | 10 +- 23 files changed, 461 insertions(+), 1020 deletions(-) delete mode 100644 ppocr/modeling/backbones/levit.py delete mode 100644 ppocr/modeling/transforms/tps_torch.py diff --git a/configs/rec/rec_resnet_stn_bilstm_att.yml b/configs/rec/rec_resnet_stn_bilstm_att.yml index f705f1e23d..7b5a9c7117 100644 --- a/configs/rec/rec_resnet_stn_bilstm_att.yml +++ b/configs/rec/rec_resnet_stn_bilstm_att.yml @@ -1,9 +1,9 @@ Global: - use_gpu: False + use_gpu: True epoch_num: 400 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: ./output/rec/b3_rare_r34_none_gru/ + save_model_dir: ./output/rec/seed save_epoch_step: 3 # evaluation is run every 5000 iterations after the 4000th iteration eval_batch_step: [0, 2000] @@ -12,28 +12,32 @@ Global: checkpoints: save_inference_dir: use_visualdl: False - infer_img: doc/imgs_words/ch/word_1.jpg + infer_img: doc/imgs_words_en/word_10.png # for data or label process character_dict_path: character_type: EN_symbol - max_text_length: 25 + max_text_length: 100 infer_mode: False use_space_char: False - save_res_path: ./output/rec/predicts_b3_rare_r34_none_gru.txt + eval_filter: True + save_res_path: ./output/rec/predicts_seed.txt Optimizer: - name: Adam - beta1: 0.9 - beta2: 0.999 + name: Adadelta + weight_deacy: 0.0 + momentum: 0.9 lr: - learning_rate: 0.0005 + name: Piecewise + decay_epochs: [4,5,8] + values: [1.0, 0.1, 0.01] regularizer: name: 'L2' - factor: 0.00000 + factor: 2.0e-05 + Architecture: - model_type: rec + model_type: seed algorithm: ASTER Transform: name: STN_ON @@ -54,48 +58,49 @@ Loss: name: AsterLoss PostProcess: - name: AttnLabelDecode + name: SEEDLabelDecode Metric: name: RecMetric main_indicator: acc + is_filter: True Train: dataset: - name: SimpleDataSet - data_dir: ./train_data/ic15_data/ - label_file_list: ["./train_data/ic15_data/1.txt"] + name: LMDBDataSet + data_dir: ./train_data/data_lmdb_release/training/ transforms: + - Fasttext: + path: "./cc.en.300.bin" - DecodeImage: # load image img_mode: BGR channel_first: False - - AttnLabelEncode: # Class handling label - - RecResizeImg: - image_shape: [3, 32, 100] + - SEEDLabelEncode: # Class handling label + - SEEDResize: + image_shape: [3, 64, 256] - KeepKeys: - keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order + keep_keys: ['image', 'label', 'length', 'fast_label'] # dataloader will return list in this order loader: shuffle: True - batch_size_per_card: 2 + batch_size_per_card: 256 drop_last: True - num_workers: 8 + num_workers: 6 Eval: dataset: - name: SimpleDataSet - data_dir: ./train_data/ic15_data/ - label_file_list: ["./train_data/ic15_data/1.txt"] + name: LMDBDataSet + data_dir: ./train_data/data_lmdb_release/evaluation/ transforms: - DecodeImage: # load image img_mode: BGR channel_first: False - - AttnLabelEncode: # Class handling label - - RecResizeImg: - image_shape: [3, 32, 100] + - SEEDLabelEncode: # Class handling label + - SEEDResize: + image_shape: [3, 64, 256] - KeepKeys: keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order loader: shuffle: False - drop_last: False - batch_size_per_card: 2 - num_workers: 8 + drop_last: True + batch_size_per_card: 256 + num_workers: 4 diff --git a/ppocr/data/imaug/__init__.py b/ppocr/data/imaug/__init__.py index 52194eb964..7a792c2fe7 100644 --- a/ppocr/data/imaug/__init__.py +++ b/ppocr/data/imaug/__init__.py @@ -21,7 +21,7 @@ from .make_border_map import MakeBorderMap from .make_shrink_map import MakeShrinkMap from .random_crop_data import EastRandomCropData, PSERandomCrop -from .rec_img_aug import RecAug, RecResizeImg, ClsResizeImg, SRNRecResizeImg +from .rec_img_aug import RecAug, RecResizeImg, ClsResizeImg, SRNRecResizeImg, SEEDResize from .randaugment import RandAugment from .copy_paste import CopyPaste from .operators import * diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index 0e1d4939d6..21d910304e 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -276,9 +276,7 @@ class AttnLabelEncode(BaseRecLabelEncode): def add_special_char(self, dict_character): self.beg_str = "sos" self.end_str = "eos" - self.unknown = "UNKNOWN" - dict_character = [self.beg_str] + dict_character + [self.end_str - ] + [self.unknown] + dict_character = [self.beg_str] + dict_character + [self.end_str] return dict_character def __call__(self, data): @@ -291,7 +289,6 @@ class AttnLabelEncode(BaseRecLabelEncode): data['length'] = np.array(len(text)) text = [0] + text + [len(self.character) - 1] + [0] * (self.max_text_len - len(text) - 2) - data['label'] = np.array(text) return data @@ -311,6 +308,39 @@ class AttnLabelEncode(BaseRecLabelEncode): return idx +class SEEDLabelEncode(BaseRecLabelEncode): + """ Convert between text-label and text-index """ + + def __init__(self, + max_text_length, + character_dict_path=None, + character_type='ch', + use_space_char=False, + **kwargs): + super(SEEDLabelEncode, + self).__init__(max_text_length, character_dict_path, + character_type, use_space_char) + + def add_special_char(self, dict_character): + self.beg_str = "sos" + self.end_str = "eos" + dict_character = dict_character + [self.end_str] + return dict_character + + def __call__(self, data): + text = data['label'] + text = self.encode(text) + if text is None: + return None + if len(text) >= self.max_text_len: + return None + data['length'] = np.array(len(text)) + 1 # conclue eos + text = text + [len(self.character) - 1] * (self.max_text_len - len(text) + ) + data['label'] = np.array(text) + return data + + class SRNLabelEncode(BaseRecLabelEncode): """ Convert between text-label and text-index """ diff --git a/ppocr/data/imaug/operators.py b/ppocr/data/imaug/operators.py index 2535b4420c..ba5f01b4ec 100644 --- a/ppocr/data/imaug/operators.py +++ b/ppocr/data/imaug/operators.py @@ -23,6 +23,7 @@ import sys import six import cv2 import numpy as np +import fasttext class DecodeImage(object): @@ -81,7 +82,7 @@ class NormalizeImage(object): assert isinstance(img, np.ndarray), "invalid input 'img' in NormalizeImage" data['image'] = ( - img.astype('float32') * self.scale - self.mean) / self.std + img.astype('float32') * self.scale - self.mean) / self.std return data @@ -101,6 +102,17 @@ class ToCHWImage(object): return data +class Fasttext(object): + def __init__(self, path="None", **kwargs): + self.fast_model = fasttext.load_model(path) + + def __call__(self, data): + label = data['label'] + fast_label = self.fast_model[label] + data['fast_label'] = fast_label + return data + + class KeepKeys(object): def __init__(self, keep_keys, **kwargs): self.keep_keys = keep_keys @@ -183,7 +195,7 @@ class DetResizeForTest(object): else: ratio = 1. elif self.limit_type == 'resize_long': - ratio = float(limit_side_len) / max(h,w) + ratio = float(limit_side_len) / max(h, w) else: raise Exception('not support limit type, image ') resize_h = int(h * ratio) diff --git a/ppocr/data/imaug/rec_img_aug.py b/ppocr/data/imaug/rec_img_aug.py index 28e6bd0bce..ed5b7a52c6 100644 --- a/ppocr/data/imaug/rec_img_aug.py +++ b/ppocr/data/imaug/rec_img_aug.py @@ -63,6 +63,18 @@ class RecResizeImg(object): return data +class SEEDResize(object): + def __init__(self, image_shape, infer_mode=False, **kwargs): + self.image_shape = image_shape + self.infer_mode = infer_mode + + def __call__(self, data): + img = data['image'] + norm_img = resize_no_padding_img(img, self.image_shape) + data['image'] = norm_img + return data + + class SRNRecResizeImg(object): def __init__(self, image_shape, num_heads, max_text_length, **kwargs): self.image_shape = image_shape @@ -106,6 +118,17 @@ def resize_norm_img(img, image_shape): return padding_im +def resize_no_padding_img(img, image_shape): + imgC, imgH, imgW = image_shape + resized_image = cv2.resize( + img, (imgW, imgH), interpolation=cv2.INTER_LINEAR) + resized_image = resized_image.astype('float32') + resized_image = resized_image.transpose((2, 0, 1)) / 255 + resized_image -= 0.5 + resized_image /= 0.5 + return resized_image + + def resize_norm_img_chinese(img, image_shape): imgC, imgH, imgW = image_shape # todo: change to 0 and modified image shape diff --git a/ppocr/data/simple_dataset.py b/ppocr/data/simple_dataset.py index b519f4fdea..ce9e1b3867 100644 --- a/ppocr/data/simple_dataset.py +++ b/ppocr/data/simple_dataset.py @@ -22,7 +22,6 @@ from .imaug import transform, create_operators class SimpleDataSet(Dataset): def __init__(self, config, mode, logger, seed=None): - print("===== simpledataset ========") super(SimpleDataSet, self).__init__() self.logger = logger self.mode = mode.lower() diff --git a/ppocr/losses/rec_aster_loss.py b/ppocr/losses/rec_aster_loss.py index 858fadc021..d900617ffd 100644 --- a/ppocr/losses/rec_aster_loss.py +++ b/ppocr/losses/rec_aster_loss.py @@ -18,7 +18,26 @@ from __future__ import print_function import paddle from paddle import nn -import fasttext + + +class CosineEmbeddingLoss(nn.Layer): + def __init__(self, margin=0.): + super(CosineEmbeddingLoss, self).__init__() + self.margin = margin + + def forward(self, x1, x2, target): + similarity = paddle.fluid.layers.reduce_sum( + x1 * x2, dim=-1) / (paddle.norm( + x1, axis=-1) * paddle.norm( + x2, axis=-1)) + one_list = paddle.full_like(target, fill_value=1) + out = paddle.fluid.layers.reduce_mean( + paddle.where( + paddle.equal(target, one_list), 1. - similarity, + paddle.maximum( + paddle.zeros_like(similarity), similarity - self.margin))) + + return out class AsterLoss(nn.Layer): @@ -35,28 +54,28 @@ class AsterLoss(nn.Layer): self.ignore_index = ignore_index self.sequence_normalize = sequence_normalize self.sample_normalize = sample_normalize - self.loss_func = paddle.nn.CosineSimilarity() + self.loss_sem = CosineEmbeddingLoss() + self.is_cosin_loss = True + self.loss_func_rec = nn.CrossEntropyLoss(weight=None, reduction='none') def forward(self, predicts, batch): targets = batch[1].astype("int64") label_lengths = batch[2].astype('int64') - # sem_target = batch[3].astype('float32') + sem_target = batch[3].astype('float32') embedding_vectors = predicts['embedding_vectors'] rec_pred = predicts['rec_pred'] - # semantic loss - # print(embedding_vectors) - # print(embedding_vectors.shape) - # targets = fasttext[targets] - # sem_loss = 1 - self.loss_func(embedding_vectors, targets) + if not self.is_cosin_loss: + sem_loss = paddle.sum(self.loss_sem(embedding_vectors, sem_target)) + else: + label_target = paddle.ones([embedding_vectors.shape[0]]) + sem_loss = paddle.sum( + self.loss_sem(embedding_vectors, sem_target, label_target)) # rec loss - batch_size, num_steps, num_classes = rec_pred.shape[0], rec_pred.shape[ - 1], rec_pred.shape[2] - assert len(targets.shape) == len(list(rec_pred.shape)) - 1, \ - "The target's shape and inputs's shape is [N, d] and [N, num_steps]" + batch_size, def_max_length = targets.shape[0], targets.shape[1] - mask = paddle.zeros([batch_size, num_steps]) + mask = paddle.zeros([batch_size, def_max_length]) for i in range(batch_size): mask[i, :label_lengths[i]] = 1 mask = paddle.cast(mask, "float32") @@ -64,16 +83,16 @@ class AsterLoss(nn.Layer): assert max_length == rec_pred.shape[1] targets = targets[:, :max_length] mask = mask[:, :max_length] - rec_pred = paddle.reshape(rec_pred, [-1, rec_pred.shape[-1]]) + rec_pred = paddle.reshape(rec_pred, [-1, rec_pred.shape[2]]) input = nn.functional.log_softmax(rec_pred, axis=1) targets = paddle.reshape(targets, [-1, 1]) mask = paddle.reshape(mask, [-1, 1]) - # print("input:", input) - output = -paddle.gather(input, index=targets, axis=1) * mask + output = -paddle.index_sample(input, index=targets) * mask output = paddle.sum(output) if self.sequence_normalize: output = output / paddle.sum(mask) if self.sample_normalize: output = output / batch_size - loss = output - return {'loss': loss} # , 'sem_loss':sem_loss} + + loss = output + sem_loss * 0.1 + return {'loss': loss} diff --git a/ppocr/losses/rec_att_loss.py b/ppocr/losses/rec_att_loss.py index 2d8d64b9d2..6e2f67483c 100644 --- a/ppocr/losses/rec_att_loss.py +++ b/ppocr/losses/rec_att_loss.py @@ -35,7 +35,5 @@ class AttentionLoss(nn.Layer): inputs = paddle.reshape(predicts, [-1, predicts.shape[-1]]) targets = paddle.reshape(targets, [-1]) - print("input:", paddle.argmax(inputs, axis=1)) - print("targets:", targets) return {'loss': paddle.sum(self.loss_func(inputs, targets))} diff --git a/ppocr/metrics/rec_metric.py b/ppocr/metrics/rec_metric.py index 66c084d771..db2f41c3a1 100644 --- a/ppocr/metrics/rec_metric.py +++ b/ppocr/metrics/rec_metric.py @@ -13,13 +13,20 @@ # limitations under the License. import Levenshtein +import string class RecMetric(object): - def __init__(self, main_indicator='acc', **kwargs): + def __init__(self, main_indicator='acc', is_filter=False, **kwargs): self.main_indicator = main_indicator + self.is_filter = is_filter self.reset() + def _normalize_text(self, text): + text = ''.join( + filter(lambda x: x in (string.digits + string.ascii_letters), text)) + return text.lower() + def __call__(self, pred_label, *args, **kwargs): preds, labels = pred_label correct_num = 0 @@ -28,6 +35,9 @@ class RecMetric(object): for (pred, pred_conf), (target, _) in zip(preds, labels): pred = pred.replace(" ", "") target = target.replace(" ", "") + if self.is_filter: + pred = self._normalize_text(pred) + target = self._normalize_text(target) norm_edit_dis += Levenshtein.distance(pred, target) / max( len(pred), len(target), 1) if pred == target: diff --git a/ppocr/modeling/backbones/__init__.py b/ppocr/modeling/backbones/__init__.py index e0bc45b476..25cedb1624 100755 --- a/ppocr/modeling/backbones/__init__.py +++ b/ppocr/modeling/backbones/__init__.py @@ -26,10 +26,8 @@ def build_backbone(config, model_type): from .rec_resnet_vd import ResNet from .rec_resnet_fpn import ResNetFPN from .rec_mv1_enhance import MobileNetV1Enhance - from .rec_resnet_aster import ResNet_ASTER support_dict = [ - "MobileNetV1Enhance", "MobileNetV3", "ResNet", "ResNetFPN", - "ResNet_ASTER" + "MobileNetV1Enhance", "MobileNetV3", "ResNet", "ResNetFPN" ] elif model_type == "e2e": from .e2e_resnet_vd_pg import ResNet @@ -38,6 +36,9 @@ def build_backbone(config, model_type): from .table_resnet_vd import ResNet from .table_mobilenet_v3 import MobileNetV3 support_dict = ["ResNet", "MobileNetV3"] + elif model_type == "seed": + from .rec_resnet_aster import ResNet_ASTER + support_dict = ["ResNet_ASTER"] else: raise NotImplementedError diff --git a/ppocr/modeling/backbones/levit.py b/ppocr/modeling/backbones/levit.py deleted file mode 100644 index 8b04e9def9..0000000000 --- a/ppocr/modeling/backbones/levit.py +++ /dev/null @@ -1,707 +0,0 @@ -# Copyright (c) 2015-present, Facebook, Inc. -# All rights reserved. - -# Modified from -# https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/vision_transformer.py -# Copyright 2020 Ross Wightman, Apache-2.0 License - -import paddle -import itertools -#import utils -import math -import warnings -import paddle.nn.functional as F -from paddle.nn.initializer import TruncatedNormal, Constant - -#from timm.models.vision_transformer import trunc_normal_ -#from timm.models.registry import register_model - -specification = { - 'LeViT_128S': { - 'C': '128_256_384', - 'D': 16, - 'N': '4_6_8', - 'X': '2_3_4', - 'drop_path': 0, - 'weights': - 'https://dl.fbaipublicfiles.com/LeViT/LeViT-128S-96703c44.pth' - }, - 'LeViT_128': { - 'C': '128_256_384', - 'D': 16, - 'N': '4_8_12', - 'X': '4_4_4', - 'drop_path': 0, - 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-128-b88c2750.pth' - }, - 'LeViT_192': { - 'C': '192_288_384', - 'D': 32, - 'N': '3_5_6', - 'X': '4_4_4', - 'drop_path': 0, - 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-192-92712e41.pth' - }, - 'LeViT_256': { - 'C': '256_384_512', - 'D': 32, - 'N': '4_6_8', - 'X': '4_4_4', - 'drop_path': 0, - 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-256-13b5763e.pth' - }, - 'LeViT_384': { - 'C': '384_512_768', - 'D': 32, - 'N': '6_9_12', - 'X': '4_4_4', - 'drop_path': 0.1, - 'weights': 'https://dl.fbaipublicfiles.com/LeViT/LeViT-384-9bdaf2e2.pth' - }, -} - -__all__ = [specification.keys()] - -trunc_normal_ = TruncatedNormal(std=.02) -zeros_ = Constant(value=0.) -ones_ = Constant(value=1.) - - -#@register_model -def LeViT_128S(class_dim=1000, distillation=True, pretrained=False, fuse=False): - return model_factory( - **specification['LeViT_128S'], - class_dim=class_dim, - distillation=distillation, - pretrained=pretrained, - fuse=fuse) - - -#@register_model -def LeViT_128(class_dim=1000, distillation=True, pretrained=False, fuse=False): - return model_factory( - **specification['LeViT_128'], - class_dim=class_dim, - distillation=distillation, - pretrained=pretrained, - fuse=fuse) - - -#@register_model -def LeViT_192(class_dim=1000, distillation=True, pretrained=False, fuse=False): - return model_factory( - **specification['LeViT_192'], - class_dim=class_dim, - distillation=distillation, - pretrained=pretrained, - fuse=fuse) - - -#@register_model -def LeViT_256(class_dim=1000, distillation=False, pretrained=False, fuse=False): - return model_factory( - **specification['LeViT_256'], - class_dim=class_dim, - distillation=distillation, - pretrained=pretrained, - fuse=fuse) - - -#@register_model -def LeViT_384(class_dim=1000, distillation=True, pretrained=False, fuse=False): - return model_factory( - **specification['LeViT_384'], - class_dim=class_dim, - distillation=distillation, - pretrained=pretrained, - fuse=fuse) - - -FLOPS_COUNTER = 0 - - -class Conv2d_BN(paddle.nn.Sequential): - def __init__(self, - a, - b, - ks=1, - stride=1, - pad=0, - dilation=1, - groups=1, - bn_weight_init=1, - resolution=-10000): - super().__init__() - self.add_sublayer( - 'c', - paddle.nn.Conv2D( - a, b, ks, stride, pad, dilation, groups, bias_attr=False)) - bn = paddle.nn.BatchNorm2D(b) - ones_(bn.weight) - zeros_(bn.bias) - self.add_sublayer('bn', bn) - - global FLOPS_COUNTER - output_points = ( - (resolution + 2 * pad - dilation * (ks - 1) - 1) // stride + 1)**2 - FLOPS_COUNTER += a * b * output_points * (ks**2) - - @paddle.no_grad() - def fuse(self): - c, bn = self._modules.values() - w = bn.weight / (bn.running_var + bn.eps)**0.5 - w = c.weight * w[:, None, None, None] - b = bn.bias - bn.running_mean * bn.weight / \ - (bn.running_var + bn.eps)**0.5 - m = paddle.nn.Conv2D( - w.size(1), - w.size(0), - w.shape[2:], - stride=self.c.stride, - padding=self.c.padding, - dilation=self.c.dilation, - groups=self.c.groups) - m.weight.data.copy_(w) - m.bias.data.copy_(b) - return m - - -class Linear_BN(paddle.nn.Sequential): - def __init__(self, a, b, bn_weight_init=1, resolution=-100000): - super().__init__() - self.add_sublayer('c', paddle.nn.Linear(a, b, bias_attr=False)) - bn = paddle.nn.BatchNorm1D(b) - ones_(bn.weight) - zeros_(bn.bias) - self.add_sublayer('bn', bn) - - global FLOPS_COUNTER - output_points = resolution**2 - FLOPS_COUNTER += a * b * output_points - - @paddle.no_grad() - def fuse(self): - l, bn = self._modules.values() - w = bn.weight / (bn.running_var + bn.eps)**0.5 - w = l.weight * w[:, None] - b = bn.bias - bn.running_mean * bn.weight / \ - (bn.running_var + bn.eps)**0.5 - m = paddle.nn.Linear(w.size(1), w.size(0)) - m.weight.data.copy_(w) - m.bias.data.copy_(b) - return m - - def forward(self, x): - l, bn = self._sub_layers.values() - x = l(x) - return paddle.reshape(bn(x.flatten(0, 1)), x.shape) - - -class BN_Linear(paddle.nn.Sequential): - def __init__(self, a, b, bias=True, std=0.02): - super().__init__() - self.add_sublayer('bn', paddle.nn.BatchNorm1D(a)) - l = paddle.nn.Linear(a, b, bias_attr=bias) - trunc_normal_(l.weight) - if bias: - zeros_(l.bias) - self.add_sublayer('l', l) - global FLOPS_COUNTER - FLOPS_COUNTER += a * b - - @paddle.no_grad() - def fuse(self): - bn, l = self._modules.values() - w = bn.weight / (bn.running_var + bn.eps)**0.5 - b = bn.bias - self.bn.running_mean * \ - self.bn.weight / (bn.running_var + bn.eps)**0.5 - w = l.weight * w[None, :] - if l.bias is None: - b = b @self.l.weight.T - else: - b = (l.weight @b[:, None]).view(-1) + self.l.bias - m = paddle.nn.Linear(w.size(1), w.size(0)) - m.weight.data.copy_(w) - m.bias.data.copy_(b) - return m - - -def b16(n, activation, resolution=224): - return paddle.nn.Sequential( - Conv2d_BN( - 3, n // 8, 3, 2, 1, resolution=resolution), - activation(), - Conv2d_BN( - n // 8, n // 4, 3, 2, 1, resolution=resolution // 2), - activation(), - Conv2d_BN( - n // 4, n // 2, 3, 2, 1, resolution=resolution // 4), - activation(), - Conv2d_BN( - n // 2, n, 3, 2, 1, resolution=resolution // 8)) - - -class Residual(paddle.nn.Layer): - def __init__(self, m, drop): - super().__init__() - self.m = m - self.drop = drop - - def forward(self, x): - if self.training and self.drop > 0: - return x + self.m(x) * paddle.rand( - x.size(0), 1, 1, - device=x.device).ge_(self.drop).div(1 - self.drop).detach() - else: - return x + self.m(x) - - -class Attention(paddle.nn.Layer): - def __init__(self, - dim, - key_dim, - num_heads=8, - attn_ratio=4, - activation=None, - resolution=14): - super().__init__() - self.num_heads = num_heads - self.scale = key_dim**-0.5 - self.key_dim = key_dim - self.nh_kd = nh_kd = key_dim * num_heads - self.d = int(attn_ratio * key_dim) - self.dh = int(attn_ratio * key_dim) * num_heads - self.attn_ratio = attn_ratio - self.h = self.dh + nh_kd * 2 - self.qkv = Linear_BN(dim, self.h, resolution=resolution) - self.proj = paddle.nn.Sequential( - activation(), - Linear_BN( - self.dh, dim, bn_weight_init=0, resolution=resolution)) - points = list(itertools.product(range(resolution), range(resolution))) - N = len(points) - attention_offsets = {} - idxs = [] - for p1 in points: - for p2 in points: - offset = (abs(p1[0] - p2[0]), abs(p1[1] - p2[1])) - if offset not in attention_offsets: - attention_offsets[offset] = len(attention_offsets) - idxs.append(attention_offsets[offset]) - self.attention_biases = self.create_parameter( - shape=(num_heads, len(attention_offsets)), - default_initializer=zeros_) - tensor_idxs = paddle.to_tensor(idxs, dtype='int64') - self.register_buffer('attention_bias_idxs', - paddle.reshape(tensor_idxs, [N, N])) - - global FLOPS_COUNTER - #queries * keys - FLOPS_COUNTER += num_heads * (resolution**4) * key_dim - # softmax - FLOPS_COUNTER += num_heads * (resolution**4) - #attention * v - FLOPS_COUNTER += num_heads * self.d * (resolution**4) - - @paddle.no_grad() - def train(self, mode=True): - if mode: - super().train() - else: - super().eval() - if mode and hasattr(self, 'ab'): - del self.ab - else: - gather_list = [] - attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) - for idx in self.attention_bias_idxs: - gather = paddle.gather(attention_bias_t, idx) - gather_list.append(gather) - attention_biases = paddle.transpose( - paddle.concat(gather_list), (1, 0)).reshape( - (0, self.attention_bias_idxs.shape[0], - self.attention_bias_idxs.shape[1])) - self.ab = attention_biases - #self.ab = self.attention_biases[:, self.attention_bias_idxs] - - def forward(self, x): # x (B,N,C) - self.training = True - B, N, C = x.shape - qkv = self.qkv(x) - qkv = paddle.reshape(qkv, - [B, N, self.num_heads, self.h // self.num_heads]) - q, k, v = paddle.split( - qkv, [self.key_dim, self.key_dim, self.d], axis=3) - q = paddle.transpose(q, perm=[0, 2, 1, 3]) - k = paddle.transpose(k, perm=[0, 2, 1, 3]) - v = paddle.transpose(v, perm=[0, 2, 1, 3]) - k_transpose = paddle.transpose(k, perm=[0, 1, 3, 2]) - - if self.training: - gather_list = [] - attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) - for idx in self.attention_bias_idxs: - gather = paddle.gather(attention_bias_t, idx) - gather_list.append(gather) - attention_biases = paddle.transpose( - paddle.concat(gather_list), (1, 0)).reshape( - (0, self.attention_bias_idxs.shape[0], - self.attention_bias_idxs.shape[1])) - else: - attention_biases = self.ab - #np_ = paddle.to_tensor(self.attention_biases.numpy()[:, self.attention_bias_idxs.numpy()]) - #print(self.attention_bias_idxs.shape) - #print(attention_biases.shape) - #print(np_.shape) - #print(np_.equal(attention_biases)) - #exit() - - attn = ((q @k_transpose) * self.scale + attention_biases) - attn = F.softmax(attn) - x = paddle.transpose(attn @v, perm=[0, 2, 1, 3]) - x = paddle.reshape(x, [B, N, self.dh]) - x = self.proj(x) - return x - - -class Subsample(paddle.nn.Layer): - def __init__(self, stride, resolution): - super().__init__() - self.stride = stride - self.resolution = resolution - - def forward(self, x): - B, N, C = x.shape - x = paddle.reshape(x, [B, self.resolution, self.resolution, - C])[:, ::self.stride, ::self.stride] - x = paddle.reshape(x, [B, -1, C]) - return x - - -class AttentionSubsample(paddle.nn.Layer): - def __init__(self, - in_dim, - out_dim, - key_dim, - num_heads=8, - attn_ratio=2, - activation=None, - stride=2, - resolution=14, - resolution_=7): - super().__init__() - self.num_heads = num_heads - self.scale = key_dim**-0.5 - self.key_dim = key_dim - self.nh_kd = nh_kd = key_dim * num_heads - self.d = int(attn_ratio * key_dim) - self.dh = int(attn_ratio * key_dim) * self.num_heads - self.attn_ratio = attn_ratio - self.resolution_ = resolution_ - self.resolution_2 = resolution_**2 - self.training = True - h = self.dh + nh_kd - self.kv = Linear_BN(in_dim, h, resolution=resolution) - - self.q = paddle.nn.Sequential( - Subsample(stride, resolution), - Linear_BN( - in_dim, nh_kd, resolution=resolution_)) - self.proj = paddle.nn.Sequential( - activation(), Linear_BN( - self.dh, out_dim, resolution=resolution_)) - - self.stride = stride - self.resolution = resolution - points = list(itertools.product(range(resolution), range(resolution))) - points_ = list( - itertools.product(range(resolution_), range(resolution_))) - - N = len(points) - N_ = len(points_) - attention_offsets = {} - idxs = [] - i = 0 - j = 0 - for p1 in points_: - i += 1 - for p2 in points: - j += 1 - size = 1 - offset = (abs(p1[0] * stride - p2[0] + (size - 1) / 2), - abs(p1[1] * stride - p2[1] + (size - 1) / 2)) - if offset not in attention_offsets: - attention_offsets[offset] = len(attention_offsets) - idxs.append(attention_offsets[offset]) - self.attention_biases = self.create_parameter( - shape=(num_heads, len(attention_offsets)), - default_initializer=zeros_) - - tensor_idxs_ = paddle.to_tensor(idxs, dtype='int64') - self.register_buffer('attention_bias_idxs', - paddle.reshape(tensor_idxs_, [N_, N])) - - global FLOPS_COUNTER - #queries * keys - FLOPS_COUNTER += num_heads * \ - (resolution**2) * (resolution_**2) * key_dim - # softmax - FLOPS_COUNTER += num_heads * (resolution**2) * (resolution_**2) - #attention * v - FLOPS_COUNTER += num_heads * \ - (resolution**2) * (resolution_**2) * self.d - - @paddle.no_grad() - def train(self, mode=True): - if mode: - super().train() - else: - super().eval() - if mode and hasattr(self, 'ab'): - del self.ab - else: - gather_list = [] - attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) - for idx in self.attention_bias_idxs: - gather = paddle.gather(attention_bias_t, idx) - gather_list.append(gather) - attention_biases = paddle.transpose( - paddle.concat(gather_list), (1, 0)).reshape( - (0, self.attention_bias_idxs.shape[0], - self.attention_bias_idxs.shape[1])) - self.ab = attention_biases - #self.ab = self.attention_biases[:, self.attention_bias_idxs] - - def forward(self, x): - self.training = True - B, N, C = x.shape - kv = self.kv(x) - kv = paddle.reshape(kv, [B, N, self.num_heads, -1]) - k, v = paddle.split(kv, [self.key_dim, self.d], axis=3) - k = paddle.transpose(k, perm=[0, 2, 1, 3]) # BHNC - v = paddle.transpose(v, perm=[0, 2, 1, 3]) - q = paddle.reshape( - self.q(x), [B, self.resolution_2, self.num_heads, self.key_dim]) - q = paddle.transpose(q, perm=[0, 2, 1, 3]) - - if self.training: - gather_list = [] - attention_bias_t = paddle.transpose(self.attention_biases, (1, 0)) - for idx in self.attention_bias_idxs: - gather = paddle.gather(attention_bias_t, idx) - gather_list.append(gather) - attention_biases = paddle.transpose( - paddle.concat(gather_list), (1, 0)).reshape( - (0, self.attention_bias_idxs.shape[0], - self.attention_bias_idxs.shape[1])) - else: - attention_biases = self.ab - - attn = (q @paddle.transpose( - k, perm=[0, 1, 3, 2])) * self.scale + attention_biases - attn = F.softmax(attn) - - x = paddle.reshape( - paddle.transpose( - (attn @v), perm=[0, 2, 1, 3]), [B, -1, self.dh]) - x = self.proj(x) - return x - - -class LeViT(paddle.nn.Layer): - """ Vision Transformer with support for patch or hybrid CNN input stage - """ - - def __init__(self, - img_size=224, - patch_size=16, - in_chans=3, - class_dim=1000, - embed_dim=[192], - key_dim=[64], - depth=[12], - num_heads=[3], - attn_ratio=[2], - mlp_ratio=[2], - hybrid_backbone=None, - down_ops=[], - attention_activation=paddle.nn.Hardswish, - mlp_activation=paddle.nn.Hardswish, - distillation=True, - drop_path=0): - super().__init__() - global FLOPS_COUNTER - - self.class_dim = class_dim - self.num_features = embed_dim[-1] - self.embed_dim = embed_dim - self.distillation = distillation - - self.patch_embed = hybrid_backbone - - self.blocks = [] - down_ops.append(['']) - resolution = img_size // patch_size - for i, (ed, kd, dpth, nh, ar, mr, do) in enumerate( - zip(embed_dim, key_dim, depth, num_heads, attn_ratio, mlp_ratio, - down_ops)): - for _ in range(dpth): - self.blocks.append( - Residual( - Attention( - ed, - kd, - nh, - attn_ratio=ar, - activation=attention_activation, - resolution=resolution, ), - drop_path)) - if mr > 0: - h = int(ed * mr) - self.blocks.append( - Residual( - paddle.nn.Sequential( - Linear_BN( - ed, h, resolution=resolution), - mlp_activation(), - Linear_BN( - h, - ed, - bn_weight_init=0, - resolution=resolution), ), - drop_path)) - if do[0] == 'Subsample': - #('Subsample',key_dim, num_heads, attn_ratio, mlp_ratio, stride) - resolution_ = (resolution - 1) // do[5] + 1 - self.blocks.append( - AttentionSubsample( - *embed_dim[i:i + 2], - key_dim=do[1], - num_heads=do[2], - attn_ratio=do[3], - activation=attention_activation, - stride=do[5], - resolution=resolution, - resolution_=resolution_)) - resolution = resolution_ - if do[4] > 0: # mlp_ratio - h = int(embed_dim[i + 1] * do[4]) - self.blocks.append( - Residual( - paddle.nn.Sequential( - Linear_BN( - embed_dim[i + 1], h, resolution=resolution), - mlp_activation(), - Linear_BN( - h, - embed_dim[i + 1], - bn_weight_init=0, - resolution=resolution), ), - drop_path)) - self.blocks = paddle.nn.Sequential(*self.blocks) - - # Classifier head - self.head = BN_Linear( - embed_dim[-1], class_dim) if class_dim > 0 else paddle.nn.Identity() - if distillation: - self.head_dist = BN_Linear( - embed_dim[-1], - class_dim) if class_dim > 0 else paddle.nn.Identity() - - self.FLOPS = FLOPS_COUNTER - FLOPS_COUNTER = 0 - - def no_weight_decay(self): - return {x for x in self.state_dict().keys() if 'attention_biases' in x} - - def forward(self, x): - x = self.patch_embed(x) - x = x.flatten(2) - x = paddle.transpose(x, perm=[0, 2, 1]) - x = self.blocks(x) - x = x.mean(1) - if self.distillation: - x = self.head(x), self.head_dist(x) - if not self.training: - x = (x[0] + x[1]) / 2 - else: - x = self.head(x) - return x - - -def model_factory(C, D, X, N, drop_path, weights, class_dim, distillation, - pretrained, fuse): - embed_dim = [int(x) for x in C.split('_')] - num_heads = [int(x) for x in N.split('_')] - depth = [int(x) for x in X.split('_')] - act = paddle.nn.Hardswish - model = LeViT( - patch_size=16, - embed_dim=embed_dim, - num_heads=num_heads, - key_dim=[D] * 3, - depth=depth, - attn_ratio=[2, 2, 2], - mlp_ratio=[2, 2, 2], - down_ops=[ - #('Subsample',key_dim, num_heads, attn_ratio, mlp_ratio, stride) - ['Subsample', D, embed_dim[0] // D, 4, 2, 2], - ['Subsample', D, embed_dim[1] // D, 4, 2, 2], - ], - attention_activation=act, - mlp_activation=act, - hybrid_backbone=b16(embed_dim[0], activation=act), - class_dim=class_dim, - drop_path=drop_path, - distillation=distillation) - # if pretrained: - # checkpoint = torch.hub.load_state_dict_from_url( - # weights, map_location='cpu') - # model.load_state_dict(checkpoint['model']) - if fuse: - utils.replace_batchnorm(model) - - return model - - -if __name__ == '__main__': - ''' - import torch - checkpoint = torch.load('../LeViT/pretrained256.pth') - torch_dict = checkpoint['net'] - paddle_dict = {} - fc_names = ["c.weight", "l.weight", "qkv.weight", "fc1.weight", "fc2.weight", "downsample.reduction.weight", "head.weight", "attn.proj.weight"] - rename_dict = {"running_mean": "_mean", "running_var": "_variance"} - range_tuple = (0, 502) - idx = 0 - for key in torch_dict: - idx += 1 - weight = torch_dict[key].cpu().numpy() - flag = [i in key for i in fc_names] - if any(flag): - if "emb" not in key: - print("weight {} need to be trans".format(key)) - weight = weight.transpose() - key = key.replace("running_mean", "_mean") - key = key.replace("running_var", "_variance") - paddle_dict[key]=weight - ''' - import numpy as np - net = globals()['LeViT_256'](fuse=False, - pretrained=False, - distillation=False) - load_layer_state_dict = paddle.load( - "./LeViT_256_official_nodistillation_paddle.pdparams") - #net.set_state_dict(paddle_dict) - net.set_state_dict(load_layer_state_dict) - net.eval() - #paddle.save(net.state_dict(), "./LeViT_256_official_paddle.pdparams") - #model = paddle.jit.to_static(net,input_spec=[paddle.static.InputSpec(shape=[None, 3, 224, 224], dtype='float32')]) - #paddle.jit.save(model, "./LeViT_256_official_inference/inference") - #exit() - np.random.seed(123) - img = np.random.rand(1, 3, 224, 224).astype('float32') - img = paddle.to_tensor(img) - outputs = net(img).numpy() - print(outputs[0][:10]) - #print(outputs.shape) diff --git a/ppocr/modeling/heads/__init__.py b/ppocr/modeling/heads/__init__.py index cd923d78be..c04ff81adf 100755 --- a/ppocr/modeling/heads/__init__.py +++ b/ppocr/modeling/heads/__init__.py @@ -42,6 +42,5 @@ def build_head(config): module_name = config.pop('name') assert module_name in support_dict, Exception('head only support {}'.format( support_dict)) - print(config) module_class = eval(module_name)(**config) return module_class diff --git a/ppocr/modeling/heads/rec_aster_head.py b/ppocr/modeling/heads/rec_aster_head.py index 055b109730..ed520669e3 100644 --- a/ppocr/modeling/heads/rec_aster_head.py +++ b/ppocr/modeling/heads/rec_aster_head.py @@ -43,13 +43,14 @@ class AsterHead(nn.Layer): self.time_step = time_step self.embeder = Embedding(self.time_step, in_channels) self.beam_width = beam_width + self.eos = self.num_classes - 1 def forward(self, x, targets=None, embed=None): return_dict = {} embedding_vectors = self.embeder(x) - rec_targets, rec_lengths = targets if self.training: + rec_targets, rec_lengths, _ = targets rec_pred = self.decoder([x, rec_targets, rec_lengths], embedding_vectors) return_dict['rec_pred'] = rec_pred @@ -104,14 +105,12 @@ class AttentionRecognitionHead(nn.Layer): # Decoder state = self.decoder.get_initial_state(embed) outputs = [] - for i in range(max(lengths)): if i == 0: y_prev = paddle.full( shape=[batch_size], fill_value=self.num_classes) else: y_prev = targets[:, i - 1] - output, state = self.decoder(x, state, y_prev) outputs.append(output) outputs = paddle.concat([_.unsqueeze(1) for _ in outputs], 1) @@ -142,6 +141,170 @@ class AttentionRecognitionHead(nn.Layer): # return predicted_ids.squeeze(), predicted_scores.squeeze() return predicted_ids, predicted_scores + def beam_search(self, x, beam_width, eos, embed): + def _inflate(tensor, times, dim): + repeat_dims = [1] * tensor.dim() + repeat_dims[dim] = times + output = paddle.tile(tensor, repeat_dims) + return output + + # https://github.com/IBM/pytorch-seq2seq/blob/fede87655ddce6c94b38886089e05321dc9802af/seq2seq/models/TopKDecoder.py + batch_size, l, d = x.shape + # inflated_encoder_feats = _inflate(encoder_feats, beam_width, 0) # ABC --> AABBCC -/-> ABCABC + x = paddle.tile( + paddle.transpose( + x.unsqueeze(1), perm=[1, 0, 2, 3]), [beam_width, 1, 1, 1]) + inflated_encoder_feats = paddle.reshape( + paddle.transpose( + x, perm=[1, 0, 2, 3]), [-1, l, d]) + + # Initialize the decoder + state = self.decoder.get_initial_state(embed, tile_times=beam_width) + + pos_index = paddle.reshape( + paddle.arange(batch_size) * beam_width, shape=[-1, 1]) + + # Initialize the scores + sequence_scores = paddle.full( + shape=[batch_size * beam_width, 1], fill_value=-float('Inf')) + index = [i * beam_width for i in range(0, batch_size)] + sequence_scores[index] = 0.0 + + # Initialize the input vector + y_prev = paddle.full( + shape=[batch_size * beam_width], fill_value=self.num_classes) + + # Store decisions for backtracking + stored_scores = list() + stored_predecessors = list() + stored_emitted_symbols = list() + + for i in range(self.max_len_labels): + output, state = self.decoder(inflated_encoder_feats, state, y_prev) + state = paddle.unsqueeze(state, axis=0) + log_softmax_output = paddle.nn.functional.log_softmax( + output, axis=1) + + sequence_scores = _inflate(sequence_scores, self.num_classes, 1) + sequence_scores += log_softmax_output + scores, candidates = paddle.topk( + paddle.reshape(sequence_scores, [batch_size, -1]), + beam_width, + axis=1) + + # Reshape input = (bk, 1) and sequence_scores = (bk, 1) + y_prev = paddle.reshape( + candidates % self.num_classes, shape=[batch_size * beam_width]) + sequence_scores = paddle.reshape( + scores, shape=[batch_size * beam_width, 1]) + + # Update fields for next timestep + pos_index = paddle.expand_as(pos_index, candidates) + predecessors = paddle.cast( + candidates / self.num_classes + pos_index, dtype='int64') + predecessors = paddle.reshape( + predecessors, shape=[batch_size * beam_width, 1]) + state = paddle.index_select( + state, index=predecessors.squeeze(), axis=1) + + # Update sequence socres and erase scores for symbol so that they aren't expanded + stored_scores.append(sequence_scores.clone()) + y_prev = paddle.reshape(y_prev, shape=[-1, 1]) + eos_prev = paddle.full_like(y_prev, fill_value=eos) + mask = eos_prev == y_prev + mask = paddle.nonzero(mask) + if mask.dim() > 0: + sequence_scores = sequence_scores.numpy() + mask = mask.numpy() + sequence_scores[mask] = -float('inf') + sequence_scores = paddle.to_tensor(sequence_scores) + + # Cache results for backtracking + stored_predecessors.append(predecessors) + y_prev = paddle.squeeze(y_prev) + stored_emitted_symbols.append(y_prev) + + # Do backtracking to return the optimal values + #====== backtrak ======# + # Initialize return variables given different types + p = list() + l = [[self.max_len_labels] * beam_width for _ in range(batch_size) + ] # Placeholder for lengths of top-k sequences + + # the last step output of the beams are not sorted + # thus they are sorted here + sorted_score, sorted_idx = paddle.topk( + paddle.reshape( + stored_scores[-1], shape=[batch_size, beam_width]), + beam_width) + + # initialize the sequence scores with the sorted last step beam scores + s = sorted_score.clone() + + batch_eos_found = [0] * batch_size # the number of EOS found + # in the backward loop below for each batch + t = self.max_len_labels - 1 + # initialize the back pointer with the sorted order of the last step beams. + # add pos_index for indexing variable with b*k as the first dimension. + t_predecessors = paddle.reshape( + sorted_idx + pos_index.expand_as(sorted_idx), + shape=[batch_size * beam_width]) + while t >= 0: + # Re-order the variables with the back pointer + current_symbol = paddle.index_select( + stored_emitted_symbols[t], index=t_predecessors, axis=0) + t_predecessors = paddle.index_select( + stored_predecessors[t].squeeze(), index=t_predecessors, axis=0) + eos_indices = stored_emitted_symbols[t] == eos + eos_indices = paddle.nonzero(eos_indices) + + if eos_indices.dim() > 0: + for i in range(eos_indices.shape[0] - 1, -1, -1): + # Indices of the EOS symbol for both variables + # with b*k as the first dimension, and b, k for + # the first two dimensions + idx = eos_indices[i] + b_idx = int(idx[0] / beam_width) + # The indices of the replacing position + # according to the replacement strategy noted above + res_k_idx = beam_width - (batch_eos_found[b_idx] % + beam_width) - 1 + batch_eos_found[b_idx] += 1 + res_idx = b_idx * beam_width + res_k_idx + + # Replace the old information in return variables + # with the new ended sequence information + t_predecessors[res_idx] = stored_predecessors[t][idx[0]] + current_symbol[res_idx] = stored_emitted_symbols[t][idx[0]] + s[b_idx, res_k_idx] = stored_scores[t][idx[0], 0] + l[b_idx][res_k_idx] = t + 1 + + # record the back tracked results + p.append(current_symbol) + t -= 1 + + # Sort and re-order again as the added ended sequences may change + # the order (very unlikely) + s, re_sorted_idx = s.topk(beam_width) + for b_idx in range(batch_size): + l[b_idx] = [ + l[b_idx][k_idx.item()] for k_idx in re_sorted_idx[b_idx, :] + ] + + re_sorted_idx = paddle.reshape( + re_sorted_idx + pos_index.expand_as(re_sorted_idx), + [batch_size * beam_width]) + + # Reverse the sequences and re-order at the same time + # It is reversed because the backtracking happens in reverse time order + p = [ + paddle.reshape( + paddle.index_select(step, re_sorted_idx, 0), + shape=[batch_size, beam_width, -1]) for step in reversed(p) + ] + p = paddle.concat(p, -1)[:, 0, :] + return p, paddle.ones_like(p) + class AttentionUnit(nn.Layer): def __init__(self, sDim, xDim, attDim): @@ -151,21 +314,9 @@ class AttentionUnit(nn.Layer): self.xDim = xDim self.attDim = attDim - self.sEmbed = nn.Linear( - sDim, - attDim, - weight_attr=paddle.nn.initializer.Normal(std=0.01), - bias_attr=paddle.nn.initializer.Constant(0.0)) - self.xEmbed = nn.Linear( - xDim, - attDim, - weight_attr=paddle.nn.initializer.Normal(std=0.01), - bias_attr=paddle.nn.initializer.Constant(0.0)) - self.wEmbed = nn.Linear( - attDim, - 1, - weight_attr=paddle.nn.initializer.Normal(std=0.01), - bias_attr=paddle.nn.initializer.Constant(0.0)) + self.sEmbed = nn.Linear(sDim, attDim) + self.xEmbed = nn.Linear(xDim, attDim) + self.wEmbed = nn.Linear(attDim, 1) def forward(self, x, sPrev): batch_size, T, _ = x.shape # [b x T x xDim] @@ -184,10 +335,8 @@ class AttentionUnit(nn.Layer): vProj = self.wEmbed(sumTanh) # [(b x T) x 1] vProj = paddle.reshape(vProj, [batch_size, T]) - alpha = F.softmax( vProj, axis=1) # attention weights for each sample in the minibatch - return alpha @@ -238,21 +387,4 @@ class DecoderUnit(nn.Layer): output, state = self.gru(concat_context, sPrev) output = paddle.squeeze(output, axis=1) output = self.fc(output) - return output, state - - -if __name__ == "__main__": - model = AttentionRecognitionHead( - num_classes=20, - in_channels=30, - sDim=512, - attDim=512, - max_len_labels=25, - out_channels=38) - - data = paddle.ones([16, 64, 3]) - targets = paddle.ones([16, 25]) - length = paddle.to_tensor(20) - x = [data, targets, length] - output = model(x) - print(output.shape) + return output, state \ No newline at end of file diff --git a/ppocr/modeling/heads/rec_att_head.py b/ppocr/modeling/heads/rec_att_head.py index 79f112f723..4286d7691d 100644 --- a/ppocr/modeling/heads/rec_att_head.py +++ b/ppocr/modeling/heads/rec_att_head.py @@ -44,13 +44,10 @@ class AttentionHead(nn.Layer): hidden = paddle.zeros((batch_size, self.hidden_size)) output_hiddens = [] - targets = targets[0] - print(targets) if targets is not None: for i in range(num_steps): char_onehots = self._char_to_onehot( targets[:, i], onehot_dim=self.num_classes) - # print("char_onehots:", char_onehots) (outputs, hidden), alpha = self.attention_cell(hidden, inputs, char_onehots) output_hiddens.append(paddle.unsqueeze(outputs, axis=1)) @@ -107,8 +104,6 @@ class AttentionGRUCell(nn.Layer): alpha = paddle.transpose(alpha, [0, 2, 1]) context = paddle.squeeze(paddle.mm(alpha, batch_H), axis=1) concat_context = paddle.concat([context, char_onehots], 1) - # print("concat_context:", concat_context.shape) - # print("prev_hidden:", prev_hidden.shape) cur_hidden = self.rnn(concat_context, prev_hidden) diff --git a/ppocr/modeling/transforms/stn.py b/ppocr/modeling/transforms/stn.py index 0b26e27aea..23bd21891f 100644 --- a/ppocr/modeling/transforms/stn.py +++ b/ppocr/modeling/transforms/stn.py @@ -106,16 +106,3 @@ class STN(nn.Layer): x = F.sigmoid(x) x = paddle.reshape(x, shape=[-1, self.num_ctrlpoints, 2]) return img_feat, x - - -if __name__ == "__main__": - in_planes = 3 - num_ctrlpoints = 20 - np.random.seed(100) - activation = 'none' # 'sigmoid' - stn_head = STN(in_planes, num_ctrlpoints, activation) - data = np.random.randn(10, 3, 32, 64).astype("float32") - print("data:", np.sum(data)) - input = paddle.to_tensor(data) - #input = paddle.randn([10, 3, 32, 64]) - control_points = stn_head(input) diff --git a/ppocr/modeling/transforms/tps.py b/ppocr/modeling/transforms/tps.py index fc46210071..de4bb7a686 100644 --- a/ppocr/modeling/transforms/tps.py +++ b/ppocr/modeling/transforms/tps.py @@ -326,5 +326,6 @@ class STN_ON(nn.Layer): image, self.tps_inputsize, mode="bilinear", align_corners=True) stn_img_feat, ctrl_points = self.stn_head(stn_input) x, _ = self.tps(image, ctrl_points) + #print("x:", np.sum(x.numpy())) # print(x.shape) return x diff --git a/ppocr/modeling/transforms/tps_spatial_transformer.py b/ppocr/modeling/transforms/tps_spatial_transformer.py index da54ffb786..731e3ee9f0 100644 --- a/ppocr/modeling/transforms/tps_spatial_transformer.py +++ b/ppocr/modeling/transforms/tps_spatial_transformer.py @@ -136,7 +136,8 @@ class TPSSpatialTransformer(nn.Layer): assert source_control_points.ndimension() == 3 assert source_control_points.shape[1] == self.num_control_points assert source_control_points.shape[2] == 2 - batch_size = source_control_points.shape[0] + #batch_size = source_control_points.shape[0] + batch_size = paddle.shape(source_control_points)[0] self.padding_matrix = paddle.expand( self.padding_matrix, shape=[batch_size, 3, 2]) @@ -151,28 +152,6 @@ class TPSSpatialTransformer(nn.Layer): grid = paddle.clip(grid, 0, 1) # the source_control_points may be out of [0, 1]. # the input to grid_sample is normalized [-1, 1], but what we get is [0, 1] - # grid = 2.0 * grid - 1.0 + grid = 2.0 * grid - 1.0 output_maps = grid_sample(input, grid, canvas=None) return output_maps, source_coordinate - - -if __name__ == "__main__": - from stn import STN - in_planes = 3 - num_ctrlpoints = 20 - np.random.seed(100) - activation = 'none' # 'sigmoid' - stn_head = STN(in_planes, num_ctrlpoints, activation) - data = np.random.randn(10, 3, 32, 64).astype("float32") - input = paddle.to_tensor(data) - #input = paddle.randn([10, 3, 32, 64]) - control_points = stn_head(input) - #print("control points:", control_points) - #input = paddle.randn(shape=[10,3,32,100]) - tps = TPSSpatialTransformer( - output_image_size=[32, 320], - num_control_points=20, - margins=[0.05, 0.05]) - out = tps(input, control_points[1]) - print("out 0 :", out[0].shape) - print("out 1:", out[1].shape) diff --git a/ppocr/modeling/transforms/tps_torch.py b/ppocr/modeling/transforms/tps_torch.py deleted file mode 100644 index 7aee133ae3..0000000000 --- a/ppocr/modeling/transforms/tps_torch.py +++ /dev/null @@ -1,149 +0,0 @@ -from __future__ import absolute_import - -import numpy as np -import itertools - -import torch -import torch.nn as nn -import torch.nn.functional as F - - -def grid_sample(input, grid, canvas=None): - output = F.grid_sample(input, grid) - if canvas is None: - return output - else: - input_mask = input.data.new(input.size()).fill_(1) - output_mask = F.grid_sample(input_mask, grid) - padded_output = output * output_mask + canvas * (1 - output_mask) - return padded_output - - -# phi(x1, x2) = r^2 * log(r), where r = ||x1 - x2||_2 -def compute_partial_repr(input_points, control_points): - N = input_points.size(0) - M = control_points.size(0) - pairwise_diff = input_points.view(N, 1, 2) - control_points.view(1, M, 2) - # original implementation, very slow - # pairwise_dist = torch.sum(pairwise_diff ** 2, dim = 2) # square of distance - pairwise_diff_square = pairwise_diff * pairwise_diff - pairwise_dist = pairwise_diff_square[:, :, 0] + pairwise_diff_square[:, :, - 1] - repr_matrix = 0.5 * pairwise_dist * torch.log(pairwise_dist) - # fix numerical error for 0 * log(0), substitute all nan with 0 - mask = repr_matrix != repr_matrix - repr_matrix.masked_fill_(mask, 0) - return repr_matrix - - -# output_ctrl_pts are specified, according to our task. -def build_output_control_points(num_control_points, margins): - margin_x, margin_y = margins - num_ctrl_pts_per_side = num_control_points // 2 - ctrl_pts_x = np.linspace(margin_x, 1.0 - margin_x, num_ctrl_pts_per_side) - ctrl_pts_y_top = np.ones(num_ctrl_pts_per_side) * margin_y - ctrl_pts_y_bottom = np.ones(num_ctrl_pts_per_side) * (1.0 - margin_y) - ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) - ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) - # ctrl_pts_top = ctrl_pts_top[1:-1,:] - # ctrl_pts_bottom = ctrl_pts_bottom[1:-1,:] - output_ctrl_pts_arr = np.concatenate( - [ctrl_pts_top, ctrl_pts_bottom], axis=0) - output_ctrl_pts = torch.Tensor(output_ctrl_pts_arr) - return output_ctrl_pts - - -# demo: ~/test/models/test_tps_transformation.py -class TPSSpatialTransformer(nn.Module): - def __init__(self, - output_image_size=None, - num_control_points=None, - margins=None): - super(TPSSpatialTransformer, self).__init__() - self.output_image_size = output_image_size - self.num_control_points = num_control_points - self.margins = margins - - self.target_height, self.target_width = output_image_size - target_control_points = build_output_control_points(num_control_points, - margins) - N = num_control_points - # N = N - 4 - - # create padded kernel matrix - forward_kernel = torch.zeros(N + 3, N + 3) - target_control_partial_repr = compute_partial_repr( - target_control_points, target_control_points) - forward_kernel[:N, :N].copy_(target_control_partial_repr) - forward_kernel[:N, -3].fill_(1) - forward_kernel[-3, :N].fill_(1) - forward_kernel[:N, -2:].copy_(target_control_points) - forward_kernel[-2:, :N].copy_(target_control_points.transpose(0, 1)) - # compute inverse matrix - inverse_kernel = torch.inverse(forward_kernel) - - # create target cordinate matrix - HW = self.target_height * self.target_width - target_coordinate = list( - itertools.product( - range(self.target_height), range(self.target_width))) - target_coordinate = torch.Tensor(target_coordinate) # HW x 2 - Y, X = target_coordinate.split(1, dim=1) - Y = Y / (self.target_height - 1) - X = X / (self.target_width - 1) - target_coordinate = torch.cat([X, Y], - dim=1) # convert from (y, x) to (x, y) - target_coordinate_partial_repr = compute_partial_repr( - target_coordinate, target_control_points) - target_coordinate_repr = torch.cat([ - target_coordinate_partial_repr, torch.ones(HW, 1), target_coordinate - ], - dim=1) - - # register precomputed matrices - self.register_buffer('inverse_kernel', inverse_kernel) - self.register_buffer('padding_matrix', torch.zeros(3, 2)) - self.register_buffer('target_coordinate_repr', target_coordinate_repr) - self.register_buffer('target_control_points', target_control_points) - - def forward(self, input, source_control_points): - assert source_control_points.ndimension() == 3 - assert source_control_points.size(1) == self.num_control_points - assert source_control_points.size(2) == 2 - batch_size = source_control_points.size(0) - - Y = torch.cat([ - source_control_points, self.padding_matrix.expand(batch_size, 3, 2) - ], 1) - mapping_matrix = torch.matmul(self.inverse_kernel, Y) - source_coordinate = torch.matmul(self.target_coordinate_repr, - mapping_matrix) - - grid = source_coordinate.view(-1, self.target_height, self.target_width, - 2) - grid = torch.clamp(grid, 0, - 1) # the source_control_points may be out of [0, 1]. - # the input to grid_sample is normalized [-1, 1], but what we get is [0, 1] - grid = 2.0 * grid - 1.0 - output_maps = grid_sample(input, grid, canvas=None) - return output_maps, source_coordinate - - -if __name__ == "__main__": - from stn_torch import STNHead - in_planes = 3 - num_ctrlpoints = 20 - torch.manual_seed(10) - activation = 'none' # 'sigmoid' - stn_head = STNHead(in_planes, num_ctrlpoints, activation) - np.random.seed(100) - data = np.random.randn(10, 3, 32, 64).astype("float32") - input = torch.tensor(data) - control_points = stn_head(input) - tps = TPSSpatialTransformer( - output_image_size=[32, 320], - num_control_points=20, - margins=[0.05, 0.05]) - out = tps(input, control_points[1]) - print("out 0 :", out[0].shape) - print("out 1:", out[1].shape) diff --git a/ppocr/optimizer/optimizer.py b/ppocr/optimizer/optimizer.py index 8215b92d8c..34098c0fad 100644 --- a/ppocr/optimizer/optimizer.py +++ b/ppocr/optimizer/optimizer.py @@ -127,3 +127,34 @@ class RMSProp(object): grad_clip=self.grad_clip, parameters=parameters) return opt + + +class Adadelta(object): + def __init__(self, + learning_rate=0.001, + epsilon=1e-08, + rho=0.95, + parameter_list=None, + weight_decay=None, + grad_clip=None, + name=None, + **kwargs): + self.learning_rate = learning_rate + self.epsilon = epsilon + self.rho = rho + self.parameter_list = parameter_list + self.learning_rate = learning_rate + self.weight_decay = weight_decay + self.grad_clip = grad_clip + self.name = name + + def __call__(self, parameters): + opt = optim.Adadelta( + learning_rate=self.learning_rate, + epsilon=self.epsilon, + rho=self.rho, + weight_decay=self.weight_decay, + grad_clip=self.grad_clip, + name=self.name, + parameters=parameters) + return opt diff --git a/ppocr/postprocess/__init__.py b/ppocr/postprocess/__init__.py index 2f5bdc3b13..ba7e06db29 100644 --- a/ppocr/postprocess/__init__.py +++ b/ppocr/postprocess/__init__.py @@ -25,7 +25,7 @@ from .db_postprocess import DBPostProcess from .east_postprocess import EASTPostProcess from .sast_postprocess import SASTPostProcess from .rec_postprocess import CTCLabelDecode, AttnLabelDecode, SRNLabelDecode, DistillationCTCLabelDecode, \ - TableLabelDecode + TableLabelDecode, SEEDLabelDecode from .cls_postprocess import ClsPostProcess from .pg_postprocess import PGPostProcess @@ -34,7 +34,7 @@ def build_post_process(config, global_config=None): support_dict = [ 'DBPostProcess', 'EASTPostProcess', 'SASTPostProcess', 'CTCLabelDecode', 'AttnLabelDecode', 'ClsPostProcess', 'SRNLabelDecode', 'PGPostProcess', - 'DistillationCTCLabelDecode', 'TableLabelDecode' + 'DistillationCTCLabelDecode', 'TableLabelDecode', 'SEEDLabelDecode' ] config = copy.deepcopy(config) diff --git a/ppocr/postprocess/rec_postprocess.py b/ppocr/postprocess/rec_postprocess.py index 17fc7e461c..921d619a36 100644 --- a/ppocr/postprocess/rec_postprocess.py +++ b/ppocr/postprocess/rec_postprocess.py @@ -170,10 +170,8 @@ class AttnLabelDecode(BaseRecLabelDecode): def add_special_char(self, dict_character): self.beg_str = "sos" self.end_str = "eos" - self.unkonwn = "UNKNOWN" dict_character = dict_character - dict_character = [self.beg_str] + dict_character + [self.end_str - ] + [self.unkonwn] + dict_character = [self.beg_str] + dict_character + [self.end_str] return dict_character def decode(self, text_index, text_prob=None, is_remove_duplicate=False): @@ -214,7 +212,6 @@ class AttnLabelDecode(BaseRecLabelDecode): label = self.decode(label, is_remove_duplicate=False) return text, label """ - preds = preds["rec_pred"] if isinstance(preds, paddle.Tensor): preds = preds.numpy() @@ -242,6 +239,88 @@ class AttnLabelDecode(BaseRecLabelDecode): return idx +class SEEDLabelDecode(BaseRecLabelDecode): + """ Convert between text-label and text-index """ + + def __init__(self, + character_dict_path=None, + character_type='ch', + use_space_char=False, + **kwargs): + super(SEEDLabelDecode, self).__init__(character_dict_path, + character_type, use_space_char) + + def add_special_char(self, dict_character): + self.beg_str = "sos" + self.end_str = "eos" + dict_character = dict_character + dict_character = dict_character + [self.end_str] + return dict_character + + def get_ignored_tokens(self): + end_idx = self.get_beg_end_flag_idx("eos") + return [end_idx] + + def get_beg_end_flag_idx(self, beg_or_end): + if beg_or_end == "sos": + idx = np.array(self.dict[self.beg_str]) + elif beg_or_end == "eos": + idx = np.array(self.dict[self.end_str]) + else: + assert False, "unsupport type %s in get_beg_end_flag_idx" % beg_or_end + return idx + + def decode(self, text_index, text_prob=None, is_remove_duplicate=False): + """ convert text-index into text-label. """ + result_list = [] + [end_idx] = self.get_ignored_tokens() + batch_size = len(text_index) + for batch_idx in range(batch_size): + char_list = [] + conf_list = [] + for idx in range(len(text_index[batch_idx])): + if int(text_index[batch_idx][idx]) == int(end_idx): + break + if is_remove_duplicate: + # only for predict + if idx > 0 and text_index[batch_idx][idx - 1] == text_index[ + batch_idx][idx]: + continue + char_list.append(self.character[int(text_index[batch_idx][ + idx])]) + if text_prob is not None: + conf_list.append(text_prob[batch_idx][idx]) + else: + conf_list.append(1) + text = ''.join(char_list) + result_list.append((text, np.mean(conf_list))) + return result_list + + def __call__(self, preds, label=None, *args, **kwargs): + """ + text = self.decode(text) + if label is None: + return text + else: + label = self.decode(label, is_remove_duplicate=False) + return text, label + """ + preds_idx = preds["rec_pred"] + if isinstance(preds_idx, paddle.Tensor): + preds_idx = preds_idx.numpy() + if "rec_pred_scores" in preds: + preds_idx = preds["rec_pred"] + preds_prob = preds["rec_pred_scores"] + else: + preds_idx = preds["rec_pred"].argmax(axis=2) + preds_prob = preds["rec_pred"].max(axis=2) + text = self.decode(preds_idx, preds_prob, is_remove_duplicate=False) + if label is None: + return text + label = self.decode(label, is_remove_duplicate=False) + return text, label + + class SRNLabelDecode(BaseRecLabelDecode): """ Convert between text-label and text-index """ diff --git a/ppocr/utils/save_load.py b/ppocr/utils/save_load.py index 0453509c7b..1d760e983a 100644 --- a/ppocr/utils/save_load.py +++ b/ppocr/utils/save_load.py @@ -105,16 +105,13 @@ def load_dygraph_params(config, model, logger, optimizer): params = paddle.load(pm) state_dict = model.state_dict() new_state_dict = {} - # for k1, k2 in zip(state_dict.keys(), params.keys()): - for k1 in state_dict.keys(): - if k1 not in params: - continue - if list(state_dict[k1].shape) == list(params[k1].shape): - new_state_dict[k1] = params[k1] - else: - logger.info( - f"The shape of model params {k1} {state_dict[k1].shape} not matched with loaded params {k1} {params[k1].shape} !" - ) + for k1, k2 in zip(state_dict.keys(), params.keys()): + if list(state_dict[k1].shape) == list(params[k2].shape): + new_state_dict[k1] = params[k2] + else: + logger.info( + f"The shape of model params {k1} {state_dict[k1].shape} not matched with loaded params {k2} {params[k2].shape} !" + ) model.set_state_dict(new_state_dict) logger.info(f"loaded pretrained_model successful from {pm}") return {} diff --git a/tools/program.py b/tools/program.py index 920cf417ce..3479ff26fc 100755 --- a/tools/program.py +++ b/tools/program.py @@ -211,11 +211,10 @@ def train(config, images = batch[0] if use_srn: model_average = True - # if use_srn or model_type == 'table' or algorithm == "ASTER": - # preds = model(images, data=batch[1:]) - # else: - # preds = model(images) - preds = model(images, data=batch[1:]) + if use_srn or model_type == 'table' or model_type == "seed": + preds = model(images, data=batch[1:]) + else: + preds = model(images) state_dict = model.state_dict() # for key in state_dict: # print(key) @@ -415,6 +414,7 @@ def preprocess(is_train=False): yaml.dump( dict(config), f, default_flow_style=False, sort_keys=False) log_file = '{}/train.log'.format(save_model_dir) + print("log has save in {}/train.log".format(save_model_dir)) else: log_file = None logger = get_logger(name='root', log_file=log_file) From 1b2ca6e641fb8c5e2ac5171f38fb5f37cbdee785 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Mon, 30 Aug 2021 06:37:26 +0000 Subject: [PATCH 03/42] polish code --- ppocr/modeling/transforms/tps.py | 2 -- tools/program.py | 4 ---- tools/train.py | 2 -- 3 files changed, 8 deletions(-) diff --git a/ppocr/modeling/transforms/tps.py b/ppocr/modeling/transforms/tps.py index de4bb7a686..81221b0351 100644 --- a/ppocr/modeling/transforms/tps.py +++ b/ppocr/modeling/transforms/tps.py @@ -326,6 +326,4 @@ class STN_ON(nn.Layer): image, self.tps_inputsize, mode="bilinear", align_corners=True) stn_img_feat, ctrl_points = self.stn_head(stn_input) x, _ = self.tps(image, ctrl_points) - #print("x:", np.sum(x.numpy())) - # print(x.shape) return x diff --git a/tools/program.py b/tools/program.py index 3479ff26fc..f77c69f88f 100755 --- a/tools/program.py +++ b/tools/program.py @@ -215,9 +215,6 @@ def train(config, preds = model(images, data=batch[1:]) else: preds = model(images) - state_dict = model.state_dict() - # for key in state_dict: - # print(key) loss = loss_class(preds, batch) avg_loss = loss['loss'] avg_loss.backward() @@ -414,7 +411,6 @@ def preprocess(is_train=False): yaml.dump( dict(config), f, default_flow_style=False, sort_keys=False) log_file = '{}/train.log'.format(save_model_dir) - print("log has save in {}/train.log".format(save_model_dir)) else: log_file = None logger = get_logger(name='root', log_file=log_file) diff --git a/tools/train.py b/tools/train.py index e1515f57c9..20f5a670d5 100755 --- a/tools/train.py +++ b/tools/train.py @@ -72,8 +72,6 @@ def main(config, device, logger, vdl_writer): # for rec algorithm if hasattr(post_process_class, 'character'): char_num = len(getattr(post_process_class, 'character')) - character = getattr(post_process_class, 'character') - print("getattr character:", character) if config['Architecture']["algorithm"] in ["Distillation", ]: # distillation model for key in config['Architecture']["Models"]: From 07006b8674c5edce709ab11272c40c7c045b22a2 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Thu, 23 Sep 2021 19:25:11 +0800 Subject: [PATCH 04/42] add det benchmark --- benchmark/run_benchmark_det.sh | 54 ++++++++++++++++++++++++++++++++++ benchmark/run_det.sh | 28 ++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 benchmark/run_benchmark_det.sh create mode 100644 benchmark/run_det.sh diff --git a/benchmark/run_benchmark_det.sh b/benchmark/run_benchmark_det.sh new file mode 100644 index 0000000000..36228adcf4 --- /dev/null +++ b/benchmark/run_benchmark_det.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +set -xe +# 运行示例:CUDA_VISIBLE_DEVICES=0 bash run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 500 ${model_mode} +# 参数说明 +function _set_params(){ + run_mode=${1:-"sp"} # 单卡sp|多卡mp + batch_size=${2:-"64"} + fp_item=${3:-"fp32"} # fp32|fp16 + max_iter=${4:-"500"} # 可选,如果需要修改代码提前中断 + model_name=${5:-"model_name"} + run_log_path=${TRAIN_LOG_DIR:-$(pwd)} # TRAIN_LOG_DIR 后续QA设置该参数 + +# 以下不用修改 + device=${CUDA_VISIBLE_DEVICES//,/ } + arr=(${device}) + num_gpu_devices=${#arr[*]} + log_file=${run_log_path}/${model_name}_${run_mode}_bs${batch_size}_${fp_item}_${num_gpu_devices} +} +function _train(){ + echo "Train on ${num_gpu_devices} GPUs" + echo "current CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES, gpus=$num_gpu_devices, batch_size=$batch_size" + + train_cmd="-c configs/det/${model_name}.yml + -o Train.loader.batch_size_per_card=${batch_size} + -o Global.epoch_num=${max_iter} " + case ${run_mode} in + sp) + train_cmd="python3.7 tools/train.py "${train_cmd}"" + ;; + mp) + train_cmd="python3.7 -m paddle.distributed.launch --log_dir=./mylog --gpus=$CUDA_VISIBLE_DEVICES tools/train.py ${train_cmd}" + ;; + *) echo "choose run_mode(sp or mp)"; exit 1; + esac +# 以下不用修改 + timeout 15m ${train_cmd} > ${log_file} 2>&1 + if [ $? -ne 0 ];then + echo -e "${model_name}, FAIL" + export job_fail_flag=1 + else + echo -e "${model_name}, SUCCESS" + export job_fail_flag=0 + fi + kill -9 `ps -ef|grep 'python3.7'|awk '{print $2}'` + + if [ $run_mode = "mp" -a -d mylog ]; then + rm ${log_file} + cp mylog/workerlog.0 ${log_file} + fi +} + +_set_params $@ +_train + diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh new file mode 100644 index 0000000000..4631f6ff0a --- /dev/null +++ b/benchmark/run_det.sh @@ -0,0 +1,28 @@ +# 提供可稳定复现性能的脚本,默认在标准docker环境内py37执行: paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7 paddle=2.1.2 py=37 +# 执行目录:需说明 +# cd PaddleOCR +# 1 安装该模型需要的依赖 (如需开启优化策略请注明) +# python3.7 -m pip install -r requirements.txt +# 2 拷贝该模型需要数据、预训练模型 +# wget -p ./tain_data/ xxxxx +# 3 批量运行(如不方便批量,1,2需放到单个模型中) + +model_mode_list=(det_mv3_db det_r50_vd_east) +fp_item_list=(fp32) +bs_list=(256 128) +for model_mode in ${model_mode_list[@]}; do + for fp_item in ${fp_item_list[@]}; do + for bs_item in ${bs_list[@]}; do + echo "index is speed, 1gpus, begin, ${model_name}" + run_mode=sp + CUDA_VISIBLE_DEVICES=7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) + sleep 60 + echo "index is speed, 8gpus, run_mode is multi_process, begin, ${model_name}" + run_mode=mp + CUDA_VISIBLE_DEVICES=6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} + sleep 60 + done + done +done + + From 49fba3e876a287d34a776fca564e077f7690039d Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Thu, 23 Sep 2021 19:42:27 +0800 Subject: [PATCH 05/42] fix comment --- benchmark/run_det.sh | 11 ++++++----- configs/det/det_r50_vd_east.yml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh index 4631f6ff0a..c94af85c36 100644 --- a/benchmark/run_det.sh +++ b/benchmark/run_det.sh @@ -1,10 +1,11 @@ # 提供可稳定复现性能的脚本,默认在标准docker环境内py37执行: paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7 paddle=2.1.2 py=37 # 执行目录:需说明 -# cd PaddleOCR +cd PaddleOCR # 1 安装该模型需要的依赖 (如需开启优化策略请注明) -# python3.7 -m pip install -r requirements.txt +python3.7 -m pip install -r requirements.txt # 2 拷贝该模型需要数据、预训练模型 -# wget -p ./tain_data/ xxxxx +wget -p ./tain_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar && cd train_data && tar xf icdar2015.tar && cd ../ +wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams # 3 批量运行(如不方便批量,1,2需放到单个模型中) model_mode_list=(det_mv3_db det_r50_vd_east) @@ -15,11 +16,11 @@ for model_mode in ${model_mode_list[@]}; do for bs_item in ${bs_list[@]}; do echo "index is speed, 1gpus, begin, ${model_name}" run_mode=sp - CUDA_VISIBLE_DEVICES=7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) + CUDA_VISIBLE_DEVICES=0 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) sleep 60 echo "index is speed, 8gpus, run_mode is multi_process, begin, ${model_name}" run_mode=mp - CUDA_VISIBLE_DEVICES=6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} + CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} sleep 60 done done diff --git a/configs/det/det_r50_vd_east.yml b/configs/det/det_r50_vd_east.yml index 0253c5bd99..e84a5fa7a7 100644 --- a/configs/det/det_r50_vd_east.yml +++ b/configs/det/det_r50_vd_east.yml @@ -8,7 +8,7 @@ Global: # evaluation is run every 5000 iterations after the 4000th iteration eval_batch_step: [4000, 5000] cal_metric_during_train: False - pretrained_model: ./pretrain_models/ResNet50_vd_pretrained/ + pretrained_model: ./pretrain_models/ResNet50_vd_pretrained checkpoints: save_inference_dir: use_visualdl: False From 6e6ae26a3d5a60967e52603cf10ed2299f7077c0 Mon Sep 17 00:00:00 2001 From: MissPenguin Date: Fri, 24 Sep 2021 11:11:03 +0000 Subject: [PATCH 06/42] fix rec cpp infer with trt --- deploy/cpp_infer/src/ocr_rec.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/deploy/cpp_infer/src/ocr_rec.cpp b/deploy/cpp_infer/src/ocr_rec.cpp index b64dcea5ae..3739a66ad8 100644 --- a/deploy/cpp_infer/src/ocr_rec.cpp +++ b/deploy/cpp_infer/src/ocr_rec.cpp @@ -112,12 +112,16 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) { 1 << 20, 10, 3, precision, false, false); + std::map> min_input_shape = { - {"x", {1, 3, 32, 10}}}; + {"x", {1, 3, 32, 10}}, + {"lstm_0.tmp_0", {10, 1, 96}}}; std::map> max_input_shape = { - {"x", {1, 3, 32, 2000}}}; + {"x", {1, 3, 32, 2000}}, + {"lstm_0.tmp_0", {1000, 1, 96}}}; std::map> opt_input_shape = { - {"x", {1, 3, 32, 320}}}; + {"x", {1, 3, 32, 320}}, + {"lstm_0.tmp_0", {25, 1, 96}}}; config.SetTRTDynamicShapeInfo(min_input_shape, max_input_shape, opt_input_shape); @@ -139,7 +143,7 @@ void CRNNRecognizer::LoadModel(const std::string &model_dir) { config.SwitchIrOptim(true); config.EnableMemoryOptim(); - config.DisableGlogInfo(); +// config.DisableGlogInfo(); this->predictor_ = CreatePredictor(config); } From 9dba4a12146d672541b96390666c53120a2a850f Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Sun, 26 Sep 2021 15:09:48 +0800 Subject: [PATCH 07/42] optimize the prune --- deploy/slim/prune/sensitivity_anal.py | 51 ++++++++++++++++++--------- tools/program.py | 2 +- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/deploy/slim/prune/sensitivity_anal.py b/deploy/slim/prune/sensitivity_anal.py index f80ddd9fb4..0f0492af2f 100644 --- a/deploy/slim/prune/sensitivity_anal.py +++ b/deploy/slim/prune/sensitivity_anal.py @@ -110,25 +110,42 @@ def main(config, device, logger, vdl_writer): logger.info("metric['hmean']: {}".format(metric['hmean'])) return metric['hmean'] - params_sensitive = pruner.sensitive( - eval_func=eval_fn, - sen_file="./sen.pickle", - skip_vars=[ - "conv2d_57.w_0", "conv2d_transpose_2.w_0", "conv2d_transpose_3.w_0" - ]) + run_sensitive_analysis = False + """ + run_sensitive_analysis=True: + Automatically compute the sensitivities of convolutions in a model. + The sensitivity of a convolution is the losses of accuracy on test dataset in + differenct pruned ratios. The sensitivities can be used to get a group of best + ratios with some condition. + + run_sensitive_analysis=False: + Set prune trim ratio to a fixed value, such as 10%. The larger the value, + the more convolution weights will be cropped. - logger.info( - "The sensitivity analysis results of model parameters saved in sen.pickle" - ) - # calculate pruned params's ratio - params_sensitive = pruner._get_ratios_by_loss(params_sensitive, loss=0.02) - for key in params_sensitive.keys(): - logger.info("{}, {}".format(key, params_sensitive[key])) + """ - #params_sensitive = {} - #for param in model.parameters(): - # if 'transpose' not in param.name and 'linear' not in param.name: - # params_sensitive[param.name] = 0.1 + if run_sensitive_analysis: + params_sensitive = pruner.sensitive( + eval_func=eval_fn, + sen_file="./deploy/slim/prune/sen.pickle", + skip_vars=[ + "conv2d_57.w_0", "conv2d_transpose_2.w_0", + "conv2d_transpose_3.w_0" + ]) + logger.info( + "The sensitivity analysis results of model parameters saved in sen.pickle" + ) + # calculate pruned params's ratio + params_sensitive = pruner._get_ratios_by_loss( + params_sensitive, loss=0.02) + for key in params_sensitive.keys(): + logger.info("{}, {}".format(key, params_sensitive[key])) + else: + params_sensitive = {} + for param in model.parameters(): + if 'transpose' not in param.name and 'linear' not in param.name: + # set prune ratio as 10%. The larger the value, the more convolution weights will be cropped + params_sensitive[param.name] = 0.1 plan = pruner.prune_vars(params_sensitive, [0]) diff --git a/tools/program.py b/tools/program.py index f484cf4a1f..2015a0fa74 100755 --- a/tools/program.py +++ b/tools/program.py @@ -351,7 +351,7 @@ def eval(model, valid_dataloader, post_process_class, eval_class, - model_type, + model_type=None, use_srn=False, use_sar=False): model.eval() From 1effa5f3fea6b99561812b77e7ef39f0c7d4e280 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Mon, 27 Sep 2021 15:21:27 +0800 Subject: [PATCH 08/42] rm anno --- ppocr/data/imaug/label_ops.py | 2 +- ppocr/modeling/backbones/rec_resnet_aster.py | 7 ------- ppocr/modeling/heads/rec_aster_head.py | 1 - ppocr/modeling/transforms/tps_spatial_transformer.py | 5 ----- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index 17fee02d7f..45bb2a1fcb 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -369,7 +369,7 @@ class SEEDLabelEncode(BaseRecLabelEncode): return None if len(text) >= self.max_text_len: return None - data['length'] = np.array(len(text)) + 1 # conclue eos + data['length'] = np.array(len(text)) + 1 # conclude eos text = text + [len(self.character) - 1] * (self.max_text_len - len(text) ) data['label'] = np.array(text) diff --git a/ppocr/modeling/backbones/rec_resnet_aster.py b/ppocr/modeling/backbones/rec_resnet_aster.py index 5bb5803575..bdecaf46af 100644 --- a/ppocr/modeling/backbones/rec_resnet_aster.py +++ b/ppocr/modeling/backbones/rec_resnet_aster.py @@ -138,10 +138,3 @@ class ResNet_ASTER(nn.Layer): return rnn_feat else: return cnn_feat - - -if __name__ == "__main__": - x = paddle.randn([3, 3, 32, 100]) - net = ResNet_ASTER() - encoder_feat = net(x) - print(encoder_feat.shape) diff --git a/ppocr/modeling/heads/rec_aster_head.py b/ppocr/modeling/heads/rec_aster_head.py index ed520669e3..4961897b40 100644 --- a/ppocr/modeling/heads/rec_aster_head.py +++ b/ppocr/modeling/heads/rec_aster_head.py @@ -150,7 +150,6 @@ class AttentionRecognitionHead(nn.Layer): # https://github.com/IBM/pytorch-seq2seq/blob/fede87655ddce6c94b38886089e05321dc9802af/seq2seq/models/TopKDecoder.py batch_size, l, d = x.shape - # inflated_encoder_feats = _inflate(encoder_feats, beam_width, 0) # ABC --> AABBCC -/-> ABCABC x = paddle.tile( paddle.transpose( x.unsqueeze(1), perm=[1, 0, 2, 3]), [beam_width, 1, 1, 1]) diff --git a/ppocr/modeling/transforms/tps_spatial_transformer.py b/ppocr/modeling/transforms/tps_spatial_transformer.py index 731e3ee9f0..b510acb0d4 100644 --- a/ppocr/modeling/transforms/tps_spatial_transformer.py +++ b/ppocr/modeling/transforms/tps_spatial_transformer.py @@ -63,8 +63,6 @@ def build_output_control_points(num_control_points, margins): ctrl_pts_y_bottom = np.ones(num_ctrl_pts_per_side) * (1.0 - margin_y) ctrl_pts_top = np.stack([ctrl_pts_x, ctrl_pts_y_top], axis=1) ctrl_pts_bottom = np.stack([ctrl_pts_x, ctrl_pts_y_bottom], axis=1) - # ctrl_pts_top = ctrl_pts_top[1:-1,:] - # ctrl_pts_bottom = ctrl_pts_bottom[1:-1,:] output_ctrl_pts_arr = np.concatenate( [ctrl_pts_top, ctrl_pts_bottom], axis=0) output_ctrl_pts = paddle.to_tensor(output_ctrl_pts_arr) @@ -85,7 +83,6 @@ class TPSSpatialTransformer(nn.Layer): target_control_points = build_output_control_points(num_control_points, margins) N = num_control_points - # N = N - 4 # create padded kernel matrix forward_kernel = paddle.zeros(shape=[N + 3, N + 3]) @@ -112,7 +109,6 @@ class TPSSpatialTransformer(nn.Layer): target_coordinate = paddle.to_tensor(target_coordinate) # HW x 2 Y, X = paddle.split( target_coordinate, target_coordinate.shape[1], axis=1) - #Y, X = target_coordinate.split(1, dim = 1) Y = Y / (self.target_height - 1) X = X / (self.target_width - 1) target_coordinate = paddle.concat( @@ -136,7 +132,6 @@ class TPSSpatialTransformer(nn.Layer): assert source_control_points.ndimension() == 3 assert source_control_points.shape[1] == self.num_control_points assert source_control_points.shape[2] == 2 - #batch_size = source_control_points.shape[0] batch_size = paddle.shape(source_control_points)[0] self.padding_matrix = paddle.expand( From b6a9f5d2daea025a96084e9f100684065c7185ae Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Mon, 27 Sep 2021 19:43:36 +0800 Subject: [PATCH 09/42] add pse to windows_not_support_list --- ppocr/postprocess/__init__.py | 7 ++++++- tools/program.py | 35 +++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/ppocr/postprocess/__init__.py b/ppocr/postprocess/__init__.py index 3eb5e28da3..80d926a212 100644 --- a/ppocr/postprocess/__init__.py +++ b/ppocr/postprocess/__init__.py @@ -18,8 +18,10 @@ from __future__ import print_function from __future__ import unicode_literals import copy +import platform __all__ = ['build_post_process'] +from ppocr.utils.logging import get_logger from .db_postprocess import DBPostProcess, DistillationDBPostProcess from .east_postprocess import EASTPostProcess @@ -28,7 +30,10 @@ from .rec_postprocess import CTCLabelDecode, AttnLabelDecode, SRNLabelDecode, Di TableLabelDecode, SARLabelDecode from .cls_postprocess import ClsPostProcess from .pg_postprocess import PGPostProcess -from .pse_postprocess import PSEPostProcess + +if platform.system() != "Windows": + # pse is not support in Windows + from .pse_postprocess import PSEPostProcess def build_post_process(config, global_config=None): diff --git a/tools/program.py b/tools/program.py index f484cf4a1f..10eb246a60 100755 --- a/tools/program.py +++ b/tools/program.py @@ -395,20 +395,6 @@ def preprocess(is_train=False): config = load_config(FLAGS.config) merge_config(FLAGS.opt) - # check if set use_gpu=True in paddlepaddle cpu version - use_gpu = config['Global']['use_gpu'] - check_gpu(use_gpu) - - alg = config['Architecture']['algorithm'] - assert alg in [ - 'EAST', 'DB', 'SAST', 'Rosetta', 'CRNN', 'STARNet', 'RARE', 'SRN', - 'CLS', 'PGNet', 'Distillation', 'NRTR', 'TableAttn', 'SAR', 'PSE' - ] - - device = 'gpu:{}'.format(dist.ParallelEnv().dev_id) if use_gpu else 'cpu' - device = paddle.set_device(device) - - config['Global']['distributed'] = dist.get_world_size() != 1 if is_train: # save_config save_model_dir = config['Global']['save_model_dir'] @@ -420,6 +406,27 @@ def preprocess(is_train=False): else: log_file = None logger = get_logger(name='root', log_file=log_file) + + # check if set use_gpu=True in paddlepaddle cpu version + use_gpu = config['Global']['use_gpu'] + check_gpu(use_gpu) + + alg = config['Architecture']['algorithm'] + assert alg in [ + 'EAST', 'DB', 'SAST', 'Rosetta', 'CRNN', 'STARNet', 'RARE', 'SRN', + 'CLS', 'PGNet', 'Distillation', 'NRTR', 'TableAttn', 'SAR', 'PSE' + ] + windows_not_support_list = ['PSE'] + if platform.system() == "Windows" and alg in windows_not_support_list: + logger.warning('{} is not support in Windows now'.format( + windows_not_support_list)) + sys.exit() + + device = 'gpu:{}'.format(dist.ParallelEnv().dev_id) if use_gpu else 'cpu' + device = paddle.set_device(device) + + config['Global']['distributed'] = dist.get_world_size() != 1 + if config['Global']['use_visualdl']: from visualdl import LogWriter save_model_dir = config['Global']['save_model_dir'] From d89c6b43088f1be31ec3f436b7f26d0d262309df Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 28 Sep 2021 10:01:37 +0800 Subject: [PATCH 10/42] add profile --- tools/program.py | 14 ++++++++++++-- tools/train.py | 11 +++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/tools/program.py b/tools/program.py index 2015a0fa74..c89d7e3c99 100755 --- a/tools/program.py +++ b/tools/program.py @@ -42,6 +42,13 @@ class ArgsParser(ArgumentParser): self.add_argument("-c", "--config", help="configuration file to use") self.add_argument( "-o", "--opt", nargs='+', help="set configuration options") + self.add_argument( + '-p', + '--profiler_options', + type=str, + default=None, + help='The option of profiler, which should be in format \"key1=value1;key2=value2;key3=value3\".' + ) def parse_args(self, argv=None): args = super(ArgsParser, self).parse_args(argv) @@ -151,7 +158,8 @@ def train(config, eval_class, pre_best_model_dict, logger, - vdl_writer=None): + vdl_writer=None, + profiler_options=None): cal_metric_during_train = config['Global'].get('cal_metric_during_train', False) log_smooth_window = config['Global']['log_smooth_window'] @@ -208,6 +216,7 @@ def train(config, max_iter = len(train_dataloader) - 1 if platform.system( ) == "Windows" else len(train_dataloader) for idx, batch in enumerate(train_dataloader): + profiler.add_profiler_step(profiler_options) train_reader_cost += time.time() - batch_start if idx >= max_iter: break @@ -392,6 +401,7 @@ def eval(model, def preprocess(is_train=False): FLAGS = ArgsParser().parse_args() + profiler_options = FLAGS.profiler_options config = load_config(FLAGS.config) merge_config(FLAGS.opt) @@ -431,4 +441,4 @@ def preprocess(is_train=False): print_dict(config, logger) logger.info('train with paddle {} and device {}'.format(paddle.__version__, device)) - return config, device, logger, vdl_writer + return config, device, logger, vdl_writer, profiler_options diff --git a/tools/train.py b/tools/train.py index 05d295aa99..17a1239040 100755 --- a/tools/train.py +++ b/tools/train.py @@ -41,7 +41,7 @@ import tools.program as program dist.get_world_size() -def main(config, device, logger, vdl_writer): +def main(config, device, logger, vdl_writer, profiler_options): # init dist environment if config['Global']['distributed']: dist.init_parallel_env() @@ -105,7 +105,8 @@ def main(config, device, logger, vdl_writer): # start train program.train(config, train_dataloader, valid_dataloader, device, model, loss_class, optimizer, lr_scheduler, post_process_class, - eval_class, pre_best_model_dict, logger, vdl_writer) + eval_class, pre_best_model_dict, logger, vdl_writer, + profiler_options) def test_reader(config, device, logger): @@ -127,6 +128,8 @@ def test_reader(config, device, logger): if __name__ == '__main__': - config, device, logger, vdl_writer = program.preprocess(is_train=True) - main(config, device, logger, vdl_writer) + config, device, logger, vdl_writer, profiler_options = program.preprocess( + is_train=True) + main(config, device, logger, vdl_writer, profiler_options) + # test_reader(config, device, logger) # test_reader(config, device, logger) From f906f849812060fb225dbd1c379279a418db8c1b Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 28 Sep 2021 02:28:25 +0000 Subject: [PATCH 11/42] opt benchmark --- benchmark/run_det.sh | 16 +++--- ppocr/utils/profiler.py | 110 ++++++++++++++++++++++++++++++++++++++++ tools/program.py | 1 + 3 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 ppocr/utils/profiler.py diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh index c94af85c36..cf1abab0dd 100644 --- a/benchmark/run_det.sh +++ b/benchmark/run_det.sh @@ -1,27 +1,27 @@ # 提供可稳定复现性能的脚本,默认在标准docker环境内py37执行: paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7 paddle=2.1.2 py=37 # 执行目录:需说明 -cd PaddleOCR +#cd PaddleOCR # 1 安装该模型需要的依赖 (如需开启优化策略请注明) python3.7 -m pip install -r requirements.txt # 2 拷贝该模型需要数据、预训练模型 -wget -p ./tain_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar && cd train_data && tar xf icdar2015.tar && cd ../ -wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams +#wget -p ./tain_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar && cd train_data && tar xf icdar2015.tar && cd ../ +#wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams # 3 批量运行(如不方便批量,1,2需放到单个模型中) model_mode_list=(det_mv3_db det_r50_vd_east) fp_item_list=(fp32) -bs_list=(256 128) +bs_list=(4 8) for model_mode in ${model_mode_list[@]}; do for fp_item in ${fp_item_list[@]}; do for bs_item in ${bs_list[@]}; do echo "index is speed, 1gpus, begin, ${model_name}" run_mode=sp - CUDA_VISIBLE_DEVICES=0 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) + CUDA_VISIBLE_DEVICES=3 bash benchmark/run_benchmark_det.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) sleep 60 echo "index is speed, 8gpus, run_mode is multi_process, begin, ${model_name}" - run_mode=mp - CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} - sleep 60 + #run_mode=mp + #CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} + #sleep 60 done done done diff --git a/ppocr/utils/profiler.py b/ppocr/utils/profiler.py new file mode 100644 index 0000000000..c4e28bc6be --- /dev/null +++ b/ppocr/utils/profiler.py @@ -0,0 +1,110 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import paddle + +# A global variable to record the number of calling times for profiler +# functions. It is used to specify the tracing range of training steps. +_profiler_step_id = 0 + +# A global variable to avoid parsing from string every time. +_profiler_options = None + + +class ProfilerOptions(object): + ''' + Use a string to initialize a ProfilerOptions. + The string should be in the format: "key1=value1;key2=value;key3=value3". + For example: + "profile_path=model.profile" + "batch_range=[50, 60]; profile_path=model.profile" + "batch_range=[50, 60]; tracer_option=OpDetail; profile_path=model.profile" + ProfilerOptions supports following key-value pair: + batch_range - a integer list, e.g. [100, 110]. + state - a string, the optional values are 'CPU', 'GPU' or 'All'. + sorted_key - a string, the optional values are 'calls', 'total', + 'max', 'min' or 'ave. + tracer_option - a string, the optional values are 'Default', 'OpDetail', + 'AllOpDetail'. + profile_path - a string, the path to save the serialized profile data, + which can be used to generate a timeline. + exit_on_finished - a boolean. + ''' + + def __init__(self, options_str): + assert isinstance(options_str, str) + + self._options = { + 'batch_range': [10, 20], + 'state': 'All', + 'sorted_key': 'total', + 'tracer_option': 'Default', + 'profile_path': '/tmp/profile', + 'exit_on_finished': True + } + self._parse_from_string(options_str) + + def _parse_from_string(self, options_str): + for kv in options_str.replace(' ', '').split(';'): + key, value = kv.split('=') + if key == 'batch_range': + value_list = value.replace('[', '').replace(']', '').split(',') + value_list = list(map(int, value_list)) + if len(value_list) >= 2 and value_list[0] >= 0 and value_list[ + 1] > value_list[0]: + self._options[key] = value_list + elif key == 'exit_on_finished': + self._options[key] = value.lower() in ("yes", "true", "t", "1") + elif key in [ + 'state', 'sorted_key', 'tracer_option', 'profile_path' + ]: + self._options[key] = value + + def __getitem__(self, name): + if self._options.get(name, None) is None: + raise ValueError( + "ProfilerOptions does not have an option named %s." % name) + return self._options[name] + + +def add_profiler_step(options_str=None): + ''' + Enable the operator-level timing using PaddlePaddle's profiler. + The profiler uses a independent variable to count the profiler steps. + One call of this function is treated as a profiler step. + + Args: + profiler_options - a string to initialize the ProfilerOptions. + Default is None, and the profiler is disabled. + ''' + if options_str is None: + return + + global _profiler_step_id + global _profiler_options + + if _profiler_options is None: + _profiler_options = ProfilerOptions(options_str) + + if _profiler_step_id == _profiler_options['batch_range'][0]: + paddle.utils.profiler.start_profiler( + _profiler_options['state'], _profiler_options['tracer_option']) + elif _profiler_step_id == _profiler_options['batch_range'][1]: + paddle.utils.profiler.stop_profiler(_profiler_options['sorted_key'], + _profiler_options['profile_path']) + if _profiler_options['exit_on_finished']: + sys.exit(0) + + _profiler_step_id += 1 diff --git a/tools/program.py b/tools/program.py index c89d7e3c99..d941e71760 100755 --- a/tools/program.py +++ b/tools/program.py @@ -31,6 +31,7 @@ from ppocr.utils.stats import TrainingStats from ppocr.utils.save_load import save_model from ppocr.utils.utility import print_dict from ppocr.utils.logging import get_logger +from ppocr.utils import profiler from ppocr.data import build_dataloader import numpy as np From a14f8da961cba7d418dae0bbd6a7c42436b7dd07 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Tue, 28 Sep 2021 11:51:01 +0800 Subject: [PATCH 12/42] polish seed code --- configs/rec/rec_resnet_stn_bilstm_att.yml | 13 ++++--- ppocr/data/imaug/label_ops.py | 2 -- ppocr/data/imaug/rec_img_aug.py | 42 +++++++---------------- ppocr/modeling/transforms/__init__.py | 2 +- ppocr/modeling/transforms/stn.py | 24 +++++++++++++ ppocr/modeling/transforms/tps.py | 25 -------------- ppocr/postprocess/rec_postprocess.py | 1 - requirements.txt | 3 +- tools/program.py | 15 ++++---- 9 files changed, 54 insertions(+), 73 deletions(-) diff --git a/configs/rec/rec_resnet_stn_bilstm_att.yml b/configs/rec/rec_resnet_stn_bilstm_att.yml index 7b5a9c7117..b18bb68573 100644 --- a/configs/rec/rec_resnet_stn_bilstm_att.yml +++ b/configs/rec/rec_resnet_stn_bilstm_att.yml @@ -19,7 +19,6 @@ Global: max_text_length: 100 infer_mode: False use_space_char: False - eval_filter: True save_res_path: ./output/rec/predicts_seed.txt @@ -37,8 +36,8 @@ Optimizer: Architecture: - model_type: seed - algorithm: ASTER + model_type: rec + algorithm: seed Transform: name: STN_ON tps_inputsize: [32, 64] @@ -76,8 +75,10 @@ Train: img_mode: BGR channel_first: False - SEEDLabelEncode: # Class handling label - - SEEDResize: + - RecResizeImg: + character_type: en image_shape: [3, 64, 256] + padding: False - KeepKeys: keep_keys: ['image', 'label', 'length', 'fast_label'] # dataloader will return list in this order loader: @@ -95,8 +96,10 @@ Eval: img_mode: BGR channel_first: False - SEEDLabelEncode: # Class handling label - - SEEDResize: + - RecResizeImg: + character_type: en image_shape: [3, 64, 256] + padding: False - KeepKeys: keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order loader: diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index 45bb2a1fcb..f761eaf669 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -106,7 +106,6 @@ class BaseRecLabelEncode(object): self.max_text_len = max_text_length self.beg_str = "sos" self.end_str = "eos" - self.unknown = "UNKNOWN" if character_type == "en": self.character_str = "0123456789abcdefghijklmnopqrstuvwxyz" dict_character = list(self.character_str) @@ -357,7 +356,6 @@ class SEEDLabelEncode(BaseRecLabelEncode): character_type, use_space_char) def add_special_char(self, dict_character): - self.beg_str = "sos" self.end_str = "eos" dict_character = dict_character + [self.end_str] return dict_character diff --git a/ppocr/data/imaug/rec_img_aug.py b/ppocr/data/imaug/rec_img_aug.py index 6904d38e6d..71ed8976db 100644 --- a/ppocr/data/imaug/rec_img_aug.py +++ b/ppocr/data/imaug/rec_img_aug.py @@ -88,29 +88,19 @@ class RecResizeImg(object): image_shape, infer_mode=False, character_type='ch', + padding=True, **kwargs): self.image_shape = image_shape self.infer_mode = infer_mode self.character_type = character_type + self.padding = padding def __call__(self, data): img = data['image'] if self.infer_mode and self.character_type == "ch": norm_img = resize_norm_img_chinese(img, self.image_shape) else: - norm_img = resize_norm_img(img, self.image_shape) - data['image'] = norm_img - return data - - -class SEEDResize(object): - def __init__(self, image_shape, infer_mode=False, **kwargs): - self.image_shape = image_shape - self.infer_mode = infer_mode - - def __call__(self, data): - img = data['image'] - norm_img = resize_no_padding_img(img, self.image_shape) + norm_img = resize_norm_img(img, self.image_shape, self.padding) data['image'] = norm_img return data @@ -186,16 +176,21 @@ def resize_norm_img_sar(img, image_shape, width_downsample_ratio=0.25): return padding_im, resize_shape, pad_shape, valid_ratio -def resize_norm_img(img, image_shape): +def resize_norm_img(img, image_shape, padding=True): imgC, imgH, imgW = image_shape h = img.shape[0] w = img.shape[1] - ratio = w / float(h) - if math.ceil(imgH * ratio) > imgW: + if not padding: + resized_image = cv2.resize( + img, (imgW, imgH), interpolation=cv2.INTER_LINEAR) resized_w = imgW else: - resized_w = int(math.ceil(imgH * ratio)) - resized_image = cv2.resize(img, (resized_w, imgH)) + ratio = w / float(h) + if math.ceil(imgH * ratio) > imgW: + resized_w = imgW + else: + resized_w = int(math.ceil(imgH * ratio)) + resized_image = cv2.resize(img, (resized_w, imgH)) resized_image = resized_image.astype('float32') if image_shape[0] == 1: resized_image = resized_image / 255 @@ -209,17 +204,6 @@ def resize_norm_img(img, image_shape): return padding_im -def resize_no_padding_img(img, image_shape): - imgC, imgH, imgW = image_shape - resized_image = cv2.resize( - img, (imgW, imgH), interpolation=cv2.INTER_LINEAR) - resized_image = resized_image.astype('float32') - resized_image = resized_image.transpose((2, 0, 1)) / 255 - resized_image -= 0.5 - resized_image /= 0.5 - return resized_image - - def resize_norm_img_chinese(img, image_shape): imgC, imgH, imgW = image_shape # todo: change to 0 and modified image shape diff --git a/ppocr/modeling/transforms/__init__.py b/ppocr/modeling/transforms/__init__.py index 0e02a1c0cf..405ab3cc6c 100755 --- a/ppocr/modeling/transforms/__init__.py +++ b/ppocr/modeling/transforms/__init__.py @@ -17,7 +17,7 @@ __all__ = ['build_transform'] def build_transform(config): from .tps import TPS - from .tps import STN_ON + from .stn import STN_ON support_dict = ['TPS', 'STN_ON'] diff --git a/ppocr/modeling/transforms/stn.py b/ppocr/modeling/transforms/stn.py index 23bd21891f..215895f4c4 100644 --- a/ppocr/modeling/transforms/stn.py +++ b/ppocr/modeling/transforms/stn.py @@ -22,6 +22,8 @@ from paddle import nn, ParamAttr from paddle.nn import functional as F import numpy as np +from .tps_spatial_transformer import TPSSpatialTransformer + def conv3x3_block(in_channels, out_channels, stride=1): n = 3 * 3 * out_channels @@ -106,3 +108,25 @@ class STN(nn.Layer): x = F.sigmoid(x) x = paddle.reshape(x, shape=[-1, self.num_ctrlpoints, 2]) return img_feat, x + + +class STN_ON(nn.Layer): + def __init__(self, in_channels, tps_inputsize, tps_outputsize, + num_control_points, tps_margins, stn_activation): + super(STN_ON, self).__init__() + self.tps = TPSSpatialTransformer( + output_image_size=tuple(tps_outputsize), + num_control_points=num_control_points, + margins=tuple(tps_margins)) + self.stn_head = STN(in_channels=in_channels, + num_ctrlpoints=num_control_points, + activation=stn_activation) + self.tps_inputsize = tps_inputsize + self.out_channels = in_channels + + def forward(self, image): + stn_input = paddle.nn.functional.interpolate( + image, self.tps_inputsize, mode="bilinear", align_corners=True) + stn_img_feat, ctrl_points = self.stn_head(stn_input) + x, _ = self.tps(image, ctrl_points) + return x diff --git a/ppocr/modeling/transforms/tps.py b/ppocr/modeling/transforms/tps.py index 81221b0351..6cd6855536 100644 --- a/ppocr/modeling/transforms/tps.py +++ b/ppocr/modeling/transforms/tps.py @@ -22,9 +22,6 @@ from paddle import nn, ParamAttr from paddle.nn import functional as F import numpy as np -from .tps_spatial_transformer import TPSSpatialTransformer -from .stn import STN - class ConvBNLayer(nn.Layer): def __init__(self, @@ -305,25 +302,3 @@ class TPS(nn.Layer): [-1, image.shape[2], image.shape[3], 2]) batch_I_r = F.grid_sample(x=image, grid=batch_P_prime) return batch_I_r - - -class STN_ON(nn.Layer): - def __init__(self, in_channels, tps_inputsize, tps_outputsize, - num_control_points, tps_margins, stn_activation): - super(STN_ON, self).__init__() - self.tps = TPSSpatialTransformer( - output_image_size=tuple(tps_outputsize), - num_control_points=num_control_points, - margins=tuple(tps_margins)) - self.stn_head = STN(in_channels=in_channels, - num_ctrlpoints=num_control_points, - activation=stn_activation) - self.tps_inputsize = tps_inputsize - self.out_channels = in_channels - - def forward(self, image): - stn_input = paddle.nn.functional.interpolate( - image, self.tps_inputsize, mode="bilinear", align_corners=True) - stn_img_feat, ctrl_points = self.stn_head(stn_input) - x, _ = self.tps(image, ctrl_points) - return x diff --git a/ppocr/postprocess/rec_postprocess.py b/ppocr/postprocess/rec_postprocess.py index 6c28e2b7a9..16f7f76596 100644 --- a/ppocr/postprocess/rec_postprocess.py +++ b/ppocr/postprocess/rec_postprocess.py @@ -322,7 +322,6 @@ class SEEDLabelDecode(BaseRecLabelDecode): def add_special_char(self, dict_character): self.beg_str = "sos" self.end_str = "eos" - dict_character = dict_character dict_character = dict_character + [self.end_str] return dict_character diff --git a/requirements.txt b/requirements.txt index 0b2366c5cd..311030f65f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,5 @@ opencv-contrib-python==4.4.0.46 cython lxml premailer -openpyxl \ No newline at end of file +openpyxl +fasttext==0.9.1 \ No newline at end of file diff --git a/tools/program.py b/tools/program.py index 8a405d7d4f..8750dd9adc 100755 --- a/tools/program.py +++ b/tools/program.py @@ -186,9 +186,8 @@ def train(config, model.train() use_srn = config['Architecture']['algorithm'] == "SRN" - use_nrtr = config['Architecture']['algorithm'] == "NRTR" - use_sar = config['Architecture']['algorithm'] == 'SAR' - use_seed = config['Architecture']['algorithm'] == 'SEED' + extra_input = config['Architecture'][ + 'algorithm'] in ["SRN", "NRTR", "SAR", "SEED"] try: model_type = config['Architecture']['model_type'] except: @@ -217,7 +216,7 @@ def train(config, images = batch[0] if use_srn: model_average = True - if use_srn or model_type == 'table' or use_nrtr or use_sar or use_seed: + if model_type == 'table' or extra_input: preds = model(images, data=batch[1:]) else: preds = model(images) @@ -281,8 +280,7 @@ def train(config, post_process_class, eval_class, model_type, - use_srn=use_srn, - use_sar=use_sar) + extra_input=extra_input) cur_metric_str = 'cur metric, {}'.format(', '.join( ['{}: {}'.format(k, v) for k, v in cur_metric.items()])) logger.info(cur_metric_str) @@ -354,8 +352,7 @@ def eval(model, post_process_class, eval_class, model_type=None, - use_srn=False, - use_sar=False): + extra_input=False): model.eval() with paddle.no_grad(): total_frame = 0.0 @@ -368,7 +365,7 @@ def eval(model, break images = batch[0] start = time.time() - if use_srn or model_type == 'table' or use_sar: + if model_type == 'table' or extra_input: preds = model(images, data=batch[1:]) else: preds = model(images) From e885b57ea5a6cec66982935db9f34ad8ad329820 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Tue, 28 Sep 2021 15:05:02 +0800 Subject: [PATCH 13/42] add doc for seed --- doc/doc_ch/algorithm_overview.md | 3 ++- doc/doc_ch/recognition.md | 5 +++-- ppocr/data/imaug/__init__.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/doc_ch/algorithm_overview.md b/doc/doc_ch/algorithm_overview.md index 6daacaf7f0..af883de86c 100755 --- a/doc/doc_ch/algorithm_overview.md +++ b/doc/doc_ch/algorithm_overview.md @@ -50,6 +50,7 @@ PaddleOCR基于动态图开源的文本识别算法列表: - [x] SRN([paper](https://arxiv.org/abs/2003.12294)) - [x] NRTR([paper](https://arxiv.org/abs/1806.00926v2)) - [x] SAR([paper](https://arxiv.org/abs/1811.00751v2)) +- [x] SEED([paper](https://arxiv.org/pdf/2005.10977.pdf)) 参考[DTRB](https://arxiv.org/abs/1904.01906) 文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下: @@ -66,5 +67,5 @@ PaddleOCR基于动态图开源的文本识别算法列表: |SRN|Resnet50_vd_fpn| 88.52% | rec_r50fpn_vd_none_srn | [下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r50_vd_srn_train.tar) | |NRTR|NRTR_MTB| 84.3% | rec_mtb_nrtr | [下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mtb_nrtr_train.tar) | |SAR|Resnet31| 87.2% | rec_r31_sar | [下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_r31_sar_train.tar) | - +|SEED| Aster_Resnet | 85.2% | rec_resnet_stn_bilstm_att | [下载链接](https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_resnet_stn_bilstm_att.tar)| PaddleOCR文本识别算法的训练和使用请参考文档教程中[模型训练/评估中的文本识别部分](./recognition.md)。 diff --git a/doc/doc_ch/recognition.md b/doc/doc_ch/recognition.md index c9fd63f71f..52f978a734 100644 --- a/doc/doc_ch/recognition.md +++ b/doc/doc_ch/recognition.md @@ -234,6 +234,9 @@ PaddleOCR支持训练和评估交替进行, 可以在 `configs/rec/rec_icdar15_t | rec_r50fpn_vd_none_srn.yml | SRN | Resnet50_fpn_vd | None | rnn | srn | | rec_mtb_nrtr.yml | NRTR | nrtr_mtb | None | transformer encoder | transformer decoder | | rec_r31_sar.yml | SAR | ResNet31 | None | LSTM encoder | LSTM decoder | +| rec_resnet_stn_bilstm_att.yml | SEED | Aster_Resnet | STN | BiLSTM | att | + +*其中SEED模型需要额外加载FastText训练好的[语言模型](https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.en.300.bin.gz) 训练中文数据,推荐使用[rec_chinese_lite_train_v2.0.yml](../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml),如您希望尝试其他算法在中文数据集上的效果,请参考下列说明修改配置文件: @@ -460,5 +463,3 @@ python3 tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_trai ``` python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words_en/word_336.png" --rec_model_dir="./your inference model" --rec_image_shape="3, 32, 100" --rec_char_type="ch" --rec_char_dict_path="your text dict path" ``` - - diff --git a/ppocr/data/imaug/__init__.py b/ppocr/data/imaug/__init__.py index 5888029ebb..5aaa1cd71e 100644 --- a/ppocr/data/imaug/__init__.py +++ b/ppocr/data/imaug/__init__.py @@ -22,7 +22,7 @@ from .make_shrink_map import MakeShrinkMap from .random_crop_data import EastRandomCropData, RandomCropImgMask from .make_pse_gt import MakePseGt -from .rec_img_aug import RecAug, RecResizeImg, ClsResizeImg, SRNRecResizeImg, NRTRRecResizeImg, SARRecResizeImg, SEEDResize +from .rec_img_aug import RecAug, RecResizeImg, ClsResizeImg, SRNRecResizeImg, NRTRRecResizeImg, SARRecResizeImg from .randaugment import RandAugment from .copy_paste import CopyPaste from .ColorJitter import ColorJitter From 560f2f49848657d8f268126bdbee08f4428de88a Mon Sep 17 00:00:00 2001 From: tink2123 Date: Tue, 28 Sep 2021 16:25:43 +0800 Subject: [PATCH 14/42] fix eval --- tools/eval.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/eval.py b/tools/eval.py index 39a26ffeff..28247bc574 100755 --- a/tools/eval.py +++ b/tools/eval.py @@ -54,8 +54,7 @@ def main(): config['Architecture']["Head"]['out_channels'] = char_num model = build_model(config['Architecture']) - use_srn = config['Architecture']['algorithm'] == "SRN" - use_sar = config['Architecture']['algorithm'] == "SAR" + extra_input = config['Architecture']['algorithm'] in ["SRN", "SAR"] if "model_type" in config['Architecture'].keys(): model_type = config['Architecture']['model_type'] else: @@ -72,7 +71,7 @@ def main(): # start eval metric = program.eval(model, valid_dataloader, post_process_class, - eval_class, model_type, use_srn, use_sar) + eval_class, model_type, extra_input) logger.info('metric eval ***************') for k, v in metric.items(): logger.info('{}:{}'.format(k, v)) From ca24d38622c5e66875ed5fc256c88b16c07bb346 Mon Sep 17 00:00:00 2001 From: WenmuZhou Date: Tue, 28 Sep 2021 17:14:49 +0800 Subject: [PATCH 15/42] remove logger import --- ppocr/postprocess/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ppocr/postprocess/__init__.py b/ppocr/postprocess/__init__.py index 80d926a212..8c43c9f16f 100644 --- a/ppocr/postprocess/__init__.py +++ b/ppocr/postprocess/__init__.py @@ -21,7 +21,6 @@ import copy import platform __all__ = ['build_post_process'] -from ppocr.utils.logging import get_logger from .db_postprocess import DBPostProcess, DistillationDBPostProcess from .east_postprocess import EASTPostProcess From 5613e21d860da9e50dbacae6686b2df49152d692 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Tue, 28 Sep 2021 18:27:44 +0800 Subject: [PATCH 16/42] fix map name (#4191) --- ppocr/losses/distillation_loss.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ppocr/losses/distillation_loss.py b/ppocr/losses/distillation_loss.py index 73d3ae2ad2..06aa7fa845 100644 --- a/ppocr/losses/distillation_loss.py +++ b/ppocr/losses/distillation_loss.py @@ -112,7 +112,7 @@ class DistillationDMLLoss(DMLLoss): if isinstance(loss, dict): for key in loss: loss_dict["{}_{}_{}_{}_{}".format(key, pair[ - 0], pair[1], map_name, idx)] = loss[key] + 0], pair[1], self.maps_name, idx)] = loss[key] else: loss_dict["{}_{}_{}".format(self.name, self.maps_name[ _c], idx)] = loss From 222c08446a2759b9a7f6bc5995c1cd1f825b9291 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 28 Sep 2021 11:44:17 +0000 Subject: [PATCH 17/42] add benchmark --- benchmark/analysis.py | 273 ++++++++++++++++++++++++++++++ benchmark/run_benchmark_det.sh | 4 +- benchmark/run_det.sh | 12 +- configs/det/det_res18_db_v2.0.yml | 131 ++++++++++++++ 4 files changed, 411 insertions(+), 9 deletions(-) create mode 100644 benchmark/analysis.py create mode 100644 configs/det/det_res18_db_v2.0.yml diff --git a/benchmark/analysis.py b/benchmark/analysis.py new file mode 100644 index 0000000000..c4189b99d8 --- /dev/null +++ b/benchmark/analysis.py @@ -0,0 +1,273 @@ +# copyright (c) 2019 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import argparse +import json +import os +import re +import traceback + + +def parse_args(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--filename", type=str, help="The name of log which need to analysis.") + parser.add_argument( + "--log_with_profiler", type=str, help="The path of train log with profiler") + parser.add_argument( + "--profiler_path", type=str, help="The path of profiler timeline log.") + parser.add_argument( + "--keyword", type=str, help="Keyword to specify analysis data") + parser.add_argument( + "--separator", type=str, default=None, help="Separator of different field in log") + parser.add_argument( + '--position', type=int, default=None, help='The position of data field') + parser.add_argument( + '--range', type=str, default="", help='The range of data field to intercept') + parser.add_argument( + '--base_batch_size', type=int, help='base_batch size on gpu') + parser.add_argument( + '--skip_steps', type=int, default=0, help='The number of steps to be skipped') + parser.add_argument( + '--model_mode', type=int, default=-1, help='Analysis mode, default value is -1') + parser.add_argument( + '--ips_unit', type=str, default=None, help='IPS unit') + parser.add_argument( + '--model_name', type=str, default=0, help='training model_name, transformer_base') + parser.add_argument( + '--mission_name', type=str, default=0, help='training mission name') + parser.add_argument( + '--direction_id', type=int, default=0, help='training direction_id') + parser.add_argument( + '--run_mode', type=str, default="sp", help='multi process or single process') + parser.add_argument( + '--index', type=int, default=1, help='{1: speed, 2:mem, 3:profiler, 6:max_batch_size}') + parser.add_argument( + '--gpu_num', type=int, default=1, help='nums of training gpus') + args = parser.parse_args() + args.separator = None if args.separator == "None" else args.separator + return args + + +def _is_number(num): + pattern = re.compile(r'^[-+]?[-0-9]\d*\.\d*|[-+]?\.?[0-9]\d*$') + result = pattern.match(num) + if result: + return True + else: + return False + + +class TimeAnalyzer(object): + def __init__(self, filename, keyword=None, separator=None, position=None, range="-1"): + if filename is None: + raise Exception("Please specify the filename!") + + if keyword is None: + raise Exception("Please specify the keyword!") + + self.filename = filename + self.keyword = keyword + self.separator = separator + self.position = position + self.range = range + self.records = None + self._distil() + + def _distil(self): + self.records = [] + with open(self.filename, "r") as f_object: + lines = f_object.readlines() + for line in lines: + if self.keyword not in line: + continue + try: + result = None + + # Distil the string from a line. + line = line.strip() + line_words = line.split(self.separator) if self.separator else line.split() + if args.position: + result = line_words[self.position] + else: + # Distil the string following the keyword. + for i in range(len(line_words) - 1): + if line_words[i] == self.keyword: + result = line_words[i + 1] + break + + # Distil the result from the picked string. + if not self.range: + result = result[0:] + elif _is_number(self.range): + result = result[0: int(self.range)] + else: + result = result[int(self.range.split(":")[0]): int(self.range.split(":")[1])] + self.records.append(float(result)) + except Exception as exc: + print("line is: {}; separator={}; position={}".format(line, self.separator, self.position)) + + print("Extract {} records: separator={}; position={}".format(len(self.records), self.separator, self.position)) + + def _get_fps(self, mode, batch_size, gpu_num, avg_of_records, run_mode, unit=None): + if mode == -1 and run_mode == 'sp': + assert unit, "Please set the unit when mode is -1." + fps = gpu_num * avg_of_records + elif mode == -1 and run_mode == 'mp': + assert unit, "Please set the unit when mode is -1." + fps = gpu_num * avg_of_records #temporarily, not used now + print("------------this is mp") + elif mode == 0: + # s/step -> samples/s + fps = (batch_size * gpu_num) / avg_of_records + unit = "samples/s" + elif mode == 1: + # steps/s -> steps/s + fps = avg_of_records + unit = "steps/s" + elif mode == 2: + # s/step -> steps/s + fps = 1 / avg_of_records + unit = "steps/s" + elif mode == 3: + # steps/s -> samples/s + fps = batch_size * gpu_num * avg_of_records + unit = "samples/s" + elif mode == 4: + # s/epoch -> s/epoch + fps = avg_of_records + unit = "s/epoch" + else: + ValueError("Unsupported analysis mode.") + + return fps, unit + + def analysis(self, batch_size, gpu_num=1, skip_steps=0, mode=-1, run_mode='sp', unit=None): + if batch_size <= 0: + print("base_batch_size should larger than 0.") + return 0, '' + + if len(self.records) <= skip_steps: # to address the condition which item of log equals to skip_steps + print("no records") + return 0, '' + + sum_of_records = 0 + sum_of_records_skipped = 0 + skip_min = self.records[skip_steps] + skip_max = self.records[skip_steps] + + count = len(self.records) + for i in range(count): + sum_of_records += self.records[i] + if i >= skip_steps: + sum_of_records_skipped += self.records[i] + if self.records[i] < skip_min: + skip_min = self.records[i] + if self.records[i] > skip_max: + skip_max = self.records[i] + + avg_of_records = sum_of_records / float(count) + avg_of_records_skipped = sum_of_records_skipped / float(count - skip_steps) + + fps, fps_unit = self._get_fps(mode, batch_size, gpu_num, avg_of_records, run_mode, unit) + fps_skipped, _ = self._get_fps(mode, batch_size, gpu_num, avg_of_records_skipped, run_mode, unit) + if mode == -1: + print("average ips of %d steps, skip 0 step:" % count) + print("\tAvg: %.3f %s" % (avg_of_records, fps_unit)) + print("\tFPS: %.3f %s" % (fps, fps_unit)) + if skip_steps > 0: + print("average ips of %d steps, skip %d steps:" % (count, skip_steps)) + print("\tAvg: %.3f %s" % (avg_of_records_skipped, fps_unit)) + print("\tMin: %.3f %s" % (skip_min, fps_unit)) + print("\tMax: %.3f %s" % (skip_max, fps_unit)) + print("\tFPS: %.3f %s" % (fps_skipped, fps_unit)) + elif mode == 1 or mode == 3: + print("average latency of %d steps, skip 0 step:" % count) + print("\tAvg: %.3f steps/s" % avg_of_records) + print("\tFPS: %.3f %s" % (fps, fps_unit)) + if skip_steps > 0: + print("average latency of %d steps, skip %d steps:" % (count, skip_steps)) + print("\tAvg: %.3f steps/s" % avg_of_records_skipped) + print("\tMin: %.3f steps/s" % skip_min) + print("\tMax: %.3f steps/s" % skip_max) + print("\tFPS: %.3f %s" % (fps_skipped, fps_unit)) + elif mode == 0 or mode == 2: + print("average latency of %d steps, skip 0 step:" % count) + print("\tAvg: %.3f s/step" % avg_of_records) + print("\tFPS: %.3f %s" % (fps, fps_unit)) + if skip_steps > 0: + print("average latency of %d steps, skip %d steps:" % (count, skip_steps)) + print("\tAvg: %.3f s/step" % avg_of_records_skipped) + print("\tMin: %.3f s/step" % skip_min) + print("\tMax: %.3f s/step" % skip_max) + print("\tFPS: %.3f %s" % (fps_skipped, fps_unit)) + + return round(fps_skipped, 3), fps_unit + + +if __name__ == "__main__": + args = parse_args() + run_info = dict() + run_info["log_file"] = args.filename + run_info["model_name"] = args.model_name + run_info["mission_name"] = args.mission_name + run_info["direction_id"] = args.direction_id + run_info["run_mode"] = args.run_mode + run_info["index"] = args.index + run_info["gpu_num"] = args.gpu_num + run_info["FINAL_RESULT"] = 0 + run_info["JOB_FAIL_FLAG"] = 0 + + try: + if args.index == 1: + if args.gpu_num == 1: + run_info["log_with_profiler"] = args.log_with_profiler + run_info["profiler_path"] = args.profiler_path + analyzer = TimeAnalyzer(args.filename, args.keyword, args.separator, args.position, args.range) + run_info["FINAL_RESULT"], run_info["UNIT"] = analyzer.analysis( + batch_size=args.base_batch_size, + gpu_num=args.gpu_num, + skip_steps=args.skip_steps, + mode=args.model_mode, + run_mode=args.run_mode, + unit=args.ips_unit) + try: + if int(os.getenv('job_fail_flag')) == 1 or int(run_info["FINAL_RESULT"]) == 0: + run_info["JOB_FAIL_FLAG"] = 1 + except: + pass + elif args.index == 3: + run_info["FINAL_RESULT"] = {} + records_fo_total = TimeAnalyzer(args.filename, 'Framework overhead', None, 3, '').records + records_fo_ratio = TimeAnalyzer(args.filename, 'Framework overhead', None, 5).records + records_ct_total = TimeAnalyzer(args.filename, 'Computation time', None, 3, '').records + records_gm_total = TimeAnalyzer(args.filename, 'GpuMemcpy Calls', None, 4, '').records + records_gm_ratio = TimeAnalyzer(args.filename, 'GpuMemcpy Calls', None, 6).records + records_gmas_total = TimeAnalyzer(args.filename, 'GpuMemcpyAsync Calls', None, 4, '').records + records_gms_total = TimeAnalyzer(args.filename, 'GpuMemcpySync Calls', None, 4, '').records + run_info["FINAL_RESULT"]["Framework_Total"] = records_fo_total[0] if records_fo_total else 0 + run_info["FINAL_RESULT"]["Framework_Ratio"] = records_fo_ratio[0] if records_fo_ratio else 0 + run_info["FINAL_RESULT"]["ComputationTime_Total"] = records_ct_total[0] if records_ct_total else 0 + run_info["FINAL_RESULT"]["GpuMemcpy_Total"] = records_gm_total[0] if records_gm_total else 0 + run_info["FINAL_RESULT"]["GpuMemcpy_Ratio"] = records_gm_ratio[0] if records_gm_ratio else 0 + run_info["FINAL_RESULT"]["GpuMemcpyAsync_Total"] = records_gmas_total[0] if records_gmas_total else 0 + run_info["FINAL_RESULT"]["GpuMemcpySync_Total"] = records_gms_total[0] if records_gms_total else 0 + else: + print("Not support!") + except Exception: + traceback.print_exc() + print("{}".format(json.dumps(run_info))) # it's required, for the log file path insert to the database + diff --git a/benchmark/run_benchmark_det.sh b/benchmark/run_benchmark_det.sh index 36228adcf4..0deede00a5 100644 --- a/benchmark/run_benchmark_det.sh +++ b/benchmark/run_benchmark_det.sh @@ -20,9 +20,7 @@ function _train(){ echo "Train on ${num_gpu_devices} GPUs" echo "current CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES, gpus=$num_gpu_devices, batch_size=$batch_size" - train_cmd="-c configs/det/${model_name}.yml - -o Train.loader.batch_size_per_card=${batch_size} - -o Global.epoch_num=${max_iter} " + train_cmd="-c configs/det/${model_name}.yml -o Train.loader.batch_size_per_card=${batch_size} Global.epoch_num=${max_iter} " case ${run_mode} in sp) train_cmd="python3.7 tools/train.py "${train_cmd}"" diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh index cf1abab0dd..d664b7f881 100644 --- a/benchmark/run_det.sh +++ b/benchmark/run_det.sh @@ -8,20 +8,20 @@ python3.7 -m pip install -r requirements.txt #wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams # 3 批量运行(如不方便批量,1,2需放到单个模型中) -model_mode_list=(det_mv3_db det_r50_vd_east) +model_mode_list=(ch_ppocr_v2.0/ch_det_res18_db_v2.0 det_r50_vd_east) fp_item_list=(fp32) -bs_list=(4 8) +bs_list=(8 16) for model_mode in ${model_mode_list[@]}; do for fp_item in ${fp_item_list[@]}; do for bs_item in ${bs_list[@]}; do echo "index is speed, 1gpus, begin, ${model_name}" run_mode=sp - CUDA_VISIBLE_DEVICES=3 bash benchmark/run_benchmark_det.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) + CUDA_VISIBLE_DEVICES=0 bash benchmark/run_benchmark_det.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} # (5min) sleep 60 echo "index is speed, 8gpus, run_mode is multi_process, begin, ${model_name}" - #run_mode=mp - #CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash benchmark/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} - #sleep 60 + run_mode=mp + CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash benchmark/run_benchmark_det.sh ${run_mode} ${bs_item} ${fp_item} 10 ${model_mode} + sleep 60 done done done diff --git a/configs/det/det_res18_db_v2.0.yml b/configs/det/det_res18_db_v2.0.yml new file mode 100644 index 0000000000..7b07ef9964 --- /dev/null +++ b/configs/det/det_res18_db_v2.0.yml @@ -0,0 +1,131 @@ +Global: + use_gpu: true + epoch_num: 1200 + log_smooth_window: 20 + print_batch_step: 2 + save_model_dir: ./output/ch_db_res18/ + save_epoch_step: 1200 + # evaluation is run every 5000 iterations after the 4000th iteration + eval_batch_step: [3000, 2000] + cal_metric_during_train: False + pretrained_model: ./pretrain_models/ResNet18_vd_pretrained + checkpoints: + save_inference_dir: + use_visualdl: False + infer_img: doc/imgs_en/img_10.jpg + save_res_path: ./output/det_db/predicts_db.txt + +Architecture: + model_type: det + algorithm: DB + Transform: + Backbone: + name: ResNet + layers: 18 + disable_se: True + Neck: + name: DBFPN + out_channels: 256 + Head: + name: DBHead + k: 50 + +Loss: + name: DBLoss + balance_loss: true + main_loss_type: DiceLoss + alpha: 5 + beta: 10 + ohem_ratio: 3 + +Optimizer: + name: Adam + beta1: 0.9 + beta2: 0.999 + lr: + name: Cosine + learning_rate: 0.001 + warmup_epoch: 2 + regularizer: + name: 'L2' + factor: 0 + +PostProcess: + name: DBPostProcess + thresh: 0.3 + box_thresh: 0.6 + max_candidates: 1000 + unclip_ratio: 1.5 + +Metric: + name: DetMetric + main_indicator: hmean + +Train: + dataset: + name: SimpleDataSet + data_dir: ./train_data/icdar2015/text_localization/ + label_file_list: + - ./train_data/icdar2015/text_localization/train_icdar2015_label.txt + ratio_list: [1.0] + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - DetLabelEncode: # Class handling label + - IaaAugment: + augmenter_args: + - { 'type': Fliplr, 'args': { 'p': 0.5 } } + - { 'type': Affine, 'args': { 'rotate': [-10, 10] } } + - { 'type': Resize, 'args': { 'size': [0.5, 3] } } + - EastRandomCropData: + size: [960, 960] + max_tries: 50 + keep_ratio: true + - MakeBorderMap: + shrink_ratio: 0.4 + thresh_min: 0.3 + thresh_max: 0.7 + - MakeShrinkMap: + shrink_ratio: 0.4 + min_text_size: 8 + - NormalizeImage: + scale: 1./255. + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: 'hwc' + - ToCHWImage: + - KeepKeys: + keep_keys: ['image', 'threshold_map', 'threshold_mask', 'shrink_map', 'shrink_mask'] # the order of the dataloader list + loader: + shuffle: True + drop_last: False + batch_size_per_card: 8 + num_workers: 4 + +Eval: + dataset: + name: SimpleDataSet + data_dir: ./train_data/icdar2015/text_localization/ + label_file_list: + - ./train_data/icdar2015/text_localization/test_icdar2015_label.txt + transforms: + - DecodeImage: # load image + img_mode: BGR + channel_first: False + - DetLabelEncode: # Class handling label + - DetResizeForTest: +# image_shape: [736, 1280] + - NormalizeImage: + scale: 1./255. + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: 'hwc' + - ToCHWImage: + - KeepKeys: + keep_keys: ['image', 'shape', 'polys', 'ignore_tags'] + loader: + shuffle: False + drop_last: False + batch_size_per_card: 1 # must be 1 + num_workers: 2 From 05a7ca248037cc38118fcd6d5129cef70252d1c6 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 28 Sep 2021 11:47:32 +0000 Subject: [PATCH 18/42] add analysis --- benchmark/run_benchmark_det.sh | 4 ++++ benchmark/run_det.sh | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/benchmark/run_benchmark_det.sh b/benchmark/run_benchmark_det.sh index 0deede00a5..26bcda5d20 100644 --- a/benchmark/run_benchmark_det.sh +++ b/benchmark/run_benchmark_det.sh @@ -45,6 +45,10 @@ function _train(){ rm ${log_file} cp mylog/workerlog.0 ${log_file} fi + + # run log analysis + analysis_cmd="python3.7 benchmark/analysis.py --filename ${log_file} --mission_name ${model_name} --run_mode ${mode} --direction_id 0 --keyword 'ips:' --base_batch_size ${batch_szie} --skip_steps 1 --gpu_num ${num_gpu_devices} --index 1 --model_mode=-1 --ips_unit=samples/sec" + eval $analysis_cmd } _set_params $@ diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh index d664b7f881..582ac9b560 100644 --- a/benchmark/run_det.sh +++ b/benchmark/run_det.sh @@ -8,7 +8,7 @@ python3.7 -m pip install -r requirements.txt #wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams # 3 批量运行(如不方便批量,1,2需放到单个模型中) -model_mode_list=(ch_ppocr_v2.0/ch_det_res18_db_v2.0 det_r50_vd_east) +model_mode_list=(det_res18_db_v2.0 det_r50_vd_east) fp_item_list=(fp32) bs_list=(8 16) for model_mode in ${model_mode_list[@]}; do From 8dd147991b60d3de61aa16176539a82eb895d4fa Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 28 Sep 2021 12:22:13 +0000 Subject: [PATCH 19/42] add readme --- benchmark/readme.md | 34 ++++++++++++++++++++++++++++++++++ benchmark/run_det.sh | 7 +++---- 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 benchmark/readme.md diff --git a/benchmark/readme.md b/benchmark/readme.md new file mode 100644 index 0000000000..7f7704cca5 --- /dev/null +++ b/benchmark/readme.md @@ -0,0 +1,34 @@ + +# PaddleOCR DB/EAST 算法训练benchmark测试 + +PaddleOCR/benchmark目录下的文件用于获取并分析训练日志。 +训练采用icdar2015数据集,包括1000张训练图像和500张测试图像。模型配置采用resnet18_vd作为backbone,分别训练batch_size=8和batch_size=16的情况。 + +## 运行训练benchmark + +benchmark/run_det.sh 中包含了三个过程: +- 安装依赖 +- 下载数据 +- 执行训练 +- 日志分析获取IPS + +在执行训练部分,会执行单机单卡(默认0号卡)单机多卡训练,并分别执行batch_size=8和batch_size=16的情况。所以执行完后,每种模型会得到4个日志文件。 + +run_det.sh 执行方式如下: + +``` +# cd PaddleOCR/ +bash benchmark/run_det.sh +``` + +以DB为例,将得到四个日志文件,如下: +``` +det_res18_db_v2.0_sp_bs16_fp32_1 +det_res18_db_v2.0_sp_bs8_fp32_1 +det_res18_db_v2.0_mp_bs16_fp32_1 +det_res18_db_v2.0_mp_bs8_fp32_1 +``` + + + + diff --git a/benchmark/run_det.sh b/benchmark/run_det.sh index 582ac9b560..c507510c61 100644 --- a/benchmark/run_det.sh +++ b/benchmark/run_det.sh @@ -1,11 +1,10 @@ # 提供可稳定复现性能的脚本,默认在标准docker环境内py37执行: paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7 paddle=2.1.2 py=37 -# 执行目录:需说明 -#cd PaddleOCR +# 执行目录: ./PaddleOCR # 1 安装该模型需要的依赖 (如需开启优化策略请注明) python3.7 -m pip install -r requirements.txt # 2 拷贝该模型需要数据、预训练模型 -#wget -p ./tain_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar && cd train_data && tar xf icdar2015.tar && cd ../ -#wget -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams +wget -c -p ./tain_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar && cd train_data && tar xf icdar2015.tar && cd ../ +wget -c -p ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams # 3 批量运行(如不方便批量,1,2需放到单个模型中) model_mode_list=(det_res18_db_v2.0 det_r50_vd_east) From b40ffdd45c8e5bf65aab1ff54a08f3be4849c4d3 Mon Sep 17 00:00:00 2001 From: Topdu <784990967@qq.com> Date: Wed, 29 Sep 2021 01:50:24 +0000 Subject: [PATCH 20/42] fix sar export inference model --- tools/export_model.py | 6 ++++ tools/infer/predict_rec.py | 71 +++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/tools/export_model.py b/tools/export_model.py index d8fe297235..64a0d40363 100755 --- a/tools/export_model.py +++ b/tools/export_model.py @@ -49,6 +49,12 @@ def export_single_model(model, arch_config, save_path, logger): ] ] model = to_static(model, input_spec=other_shape) + elif arch_config["algorithm"] == "SAR": + other_shape = [ + paddle.static.InputSpec( + shape=[None, 3, 48, 160], dtype="float32"), + ] + model = to_static(model, input_spec=other_shape) else: infer_shape = [3, -1, -1] if arch_config["model_type"] == "rec": diff --git a/tools/infer/predict_rec.py b/tools/infer/predict_rec.py index 332cffd539..dad70281ef 100755 --- a/tools/infer/predict_rec.py +++ b/tools/infer/predict_rec.py @@ -68,6 +68,13 @@ class TextRecognizer(object): "character_dict_path": args.rec_char_dict_path, "use_space_char": args.use_space_char } + elif self.rec_algorithm == "SAR": + postprocess_params = { + 'name': 'SARLabelDecode', + "character_type": args.rec_char_type, + "character_dict_path": args.rec_char_dict_path, + "use_space_char": args.use_space_char + } self.postprocess_op = build_post_process(postprocess_params) self.predictor, self.input_tensor, self.output_tensors, self.config = \ utility.create_predictor(args, 'rec', logger) @@ -194,6 +201,41 @@ class TextRecognizer(object): return (norm_img, encoder_word_pos, gsrm_word_pos, gsrm_slf_attn_bias1, gsrm_slf_attn_bias2) + def resize_norm_img_sar(self, img, image_shape, + width_downsample_ratio=0.25): + imgC, imgH, imgW_min, imgW_max = image_shape + h = img.shape[0] + w = img.shape[1] + valid_ratio = 1.0 + # make sure new_width is an integral multiple of width_divisor. + width_divisor = int(1 / width_downsample_ratio) + # resize + ratio = w / float(h) + resize_w = math.ceil(imgH * ratio) + if resize_w % width_divisor != 0: + resize_w = round(resize_w / width_divisor) * width_divisor + if imgW_min is not None: + resize_w = max(imgW_min, resize_w) + if imgW_max is not None: + valid_ratio = min(1.0, 1.0 * resize_w / imgW_max) + resize_w = min(imgW_max, resize_w) + resized_image = cv2.resize(img, (resize_w, imgH)) + resized_image = resized_image.astype('float32') + # norm + if image_shape[0] == 1: + resized_image = resized_image / 255 + resized_image = resized_image[np.newaxis, :] + else: + resized_image = resized_image.transpose((2, 0, 1)) / 255 + resized_image -= 0.5 + resized_image /= 0.5 + resize_shape = resized_image.shape + padding_im = -1.0 * np.ones((imgC, imgH, imgW_max), dtype=np.float32) + padding_im[:, :, 0:resize_w] = resized_image + pad_shape = padding_im.shape + + return padding_im, resize_shape, pad_shape, valid_ratio + def __call__(self, img_list): img_num = len(img_list) # Calculate the aspect ratio of all text bars @@ -216,11 +258,19 @@ class TextRecognizer(object): wh_ratio = w * 1.0 / h max_wh_ratio = max(max_wh_ratio, wh_ratio) for ino in range(beg_img_no, end_img_no): - if self.rec_algorithm != "SRN": + if self.rec_algorithm != "SRN" and self.rec_algorithm != "SAR": norm_img = self.resize_norm_img(img_list[indices[ino]], max_wh_ratio) norm_img = norm_img[np.newaxis, :] norm_img_batch.append(norm_img) + elif self.rec_algorithm == "SAR": + norm_img, _, _, valid_ratio = self.resize_norm_img_sar( + img_list[indices[ino]], self.rec_image_shape) + norm_img = norm_img[np.newaxis, :] + valid_ratio = np.expand_dims(valid_ratio, axis=0) + valid_ratios = [] + valid_ratios.append(valid_ratio) + norm_img_batch.append(norm_img) else: norm_img = self.process_image_srn( img_list[indices[ino]], self.rec_image_shape, 8, 25) @@ -266,6 +316,25 @@ class TextRecognizer(object): if self.benchmark: self.autolog.times.stamp() preds = {"predict": outputs[2]} + elif self.rec_algorithm == "SAR": + valid_ratios = np.concatenate(valid_ratios) + inputs = [ + norm_img_batch, + valid_ratios, + ] + input_names = self.predictor.get_input_names() + for i in range(len(input_names)): + input_tensor = self.predictor.get_input_handle(input_names[ + i]) + input_tensor.copy_from_cpu(inputs[i]) + self.predictor.run() + outputs = [] + for output_tensor in self.output_tensors: + output = output_tensor.copy_to_cpu() + outputs.append(output) + if self.benchmark: + self.autolog.times.stamp() + preds = outputs[0] else: self.input_tensor.copy_from_cpu(norm_img_batch) self.predictor.run() From 9cf6c4e8340b16c568721db914ab05c79216dbdd Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 29 Sep 2021 01:59:43 +0000 Subject: [PATCH 21/42] fix profile_options --- tools/program.py | 9 ++++++--- tools/train.py | 11 +++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tools/program.py b/tools/program.py index d941e71760..18fead8ba8 100755 --- a/tools/program.py +++ b/tools/program.py @@ -159,8 +159,7 @@ def train(config, eval_class, pre_best_model_dict, logger, - vdl_writer=None, - profiler_options=None): + vdl_writer=None): cal_metric_during_train = config['Global'].get('cal_metric_during_train', False) log_smooth_window = config['Global']['log_smooth_window'] @@ -168,6 +167,8 @@ def train(config, print_batch_step = config['Global']['print_batch_step'] eval_batch_step = config['Global']['eval_batch_step'] + profiler_options = config['profiler_options'] + global_step = 0 if 'global_step' in pre_best_model_dict: global_step = pre_best_model_dict['global_step'] @@ -405,6 +406,8 @@ def preprocess(is_train=False): profiler_options = FLAGS.profiler_options config = load_config(FLAGS.config) merge_config(FLAGS.opt) + profile_dic = {"profiler_options": FLAGS.profiler_options} + merge_config(profile_dic) # check if set use_gpu=True in paddlepaddle cpu version use_gpu = config['Global']['use_gpu'] @@ -442,4 +445,4 @@ def preprocess(is_train=False): print_dict(config, logger) logger.info('train with paddle {} and device {}'.format(paddle.__version__, device)) - return config, device, logger, vdl_writer, profiler_options + return config, device, logger, vdl_writer diff --git a/tools/train.py b/tools/train.py index 17a1239040..ee81961414 100755 --- a/tools/train.py +++ b/tools/train.py @@ -41,7 +41,7 @@ import tools.program as program dist.get_world_size() -def main(config, device, logger, vdl_writer, profiler_options): +def main(config, device, logger, vdl_writer): # init dist environment if config['Global']['distributed']: dist.init_parallel_env() @@ -105,8 +105,7 @@ def main(config, device, logger, vdl_writer, profiler_options): # start train program.train(config, train_dataloader, valid_dataloader, device, model, loss_class, optimizer, lr_scheduler, post_process_class, - eval_class, pre_best_model_dict, logger, vdl_writer, - profiler_options) + eval_class, pre_best_model_dict, logger, vdl_writer) def test_reader(config, device, logger): @@ -128,8 +127,8 @@ def test_reader(config, device, logger): if __name__ == '__main__': - config, device, logger, vdl_writer, profiler_options = program.preprocess( + config, device, logger, vdl_writer = program.preprocess( is_train=True) - main(config, device, logger, vdl_writer, profiler_options) - # test_reader(config, device, logger) + logger.info(f"config.profiler_options: {config.profiler_options}") + main(config, device, logger, vdl_writer) # test_reader(config, device, logger) From 54207e82eb69b791855127e439582cb368f41109 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 29 Sep 2021 02:01:56 +0000 Subject: [PATCH 22/42] delete debug --- tools/program.py | 1 - tools/train.py | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/program.py b/tools/program.py index 18fead8ba8..2f8b0e4adb 100755 --- a/tools/program.py +++ b/tools/program.py @@ -166,7 +166,6 @@ def train(config, epoch_num = config['Global']['epoch_num'] print_batch_step = config['Global']['print_batch_step'] eval_batch_step = config['Global']['eval_batch_step'] - profiler_options = config['profiler_options'] global_step = 0 diff --git a/tools/train.py b/tools/train.py index ee81961414..05d295aa99 100755 --- a/tools/train.py +++ b/tools/train.py @@ -127,8 +127,6 @@ def test_reader(config, device, logger): if __name__ == '__main__': - config, device, logger, vdl_writer = program.preprocess( - is_train=True) - logger.info(f"config.profiler_options: {config.profiler_options}") + config, device, logger, vdl_writer = program.preprocess(is_train=True) main(config, device, logger, vdl_writer) # test_reader(config, device, logger) From 27b6346c955e546422ab17b4d545b5eefdbfe2b3 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Wed, 29 Sep 2021 10:30:09 +0800 Subject: [PATCH 23/42] add center loss cod and cfg (#4165) * add center loss cod and cfg * fix name --- .../ch_PP-OCRv2_rec_enhanced_ctc_loss.yml | 126 ++++++++++++++++++ ppocr/data/imaug/label_ops.py | 5 + ppocr/losses/__init__.py | 1 - ppocr/losses/ace_loss.py | 50 +++++++ ppocr/losses/center_loss.py | 89 +++++++++++++ ppocr/losses/combined_loss.py | 4 + ppocr/losses/rec_ctc_loss.py | 10 +- ppocr/modeling/heads/rec_ctc_head.py | 17 ++- ppocr/postprocess/rec_postprocess.py | 2 + 9 files changed, 298 insertions(+), 6 deletions(-) create mode 100644 configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_enhanced_ctc_loss.yml create mode 100644 ppocr/losses/ace_loss.py create mode 100644 ppocr/losses/center_loss.py diff --git a/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_enhanced_ctc_loss.yml b/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_enhanced_ctc_loss.yml new file mode 100644 index 0000000000..8b568637a1 --- /dev/null +++ b/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_enhanced_ctc_loss.yml @@ -0,0 +1,126 @@ +Global: + debug: false + use_gpu: true + epoch_num: 800 + log_smooth_window: 20 + print_batch_step: 10 + save_model_dir: ./output/rec_mobile_pp-OCRv2_enhanced_ctc_loss + save_epoch_step: 3 + eval_batch_step: [0, 2000] + cal_metric_during_train: true + pretrained_model: + checkpoints: + save_inference_dir: + use_visualdl: false + infer_img: doc/imgs_words/ch/word_1.jpg + character_dict_path: ppocr/utils/ppocr_keys_v1.txt + character_type: ch + max_text_length: 25 + infer_mode: false + use_space_char: true + distributed: true + save_res_path: ./output/rec/predicts_mobile_pp-OCRv2_enhanced_ctc_loss.txt + + +Optimizer: + name: Adam + beta1: 0.9 + beta2: 0.999 + lr: + name: Piecewise + decay_epochs : [700, 800] + values : [0.001, 0.0001] + warmup_epoch: 5 + regularizer: + name: L2 + factor: 2.0e-05 + + +Architecture: + model_type: rec + algorithm: CRNN + Transform: + Backbone: + name: MobileNetV1Enhance + scale: 0.5 + Neck: + name: SequenceEncoder + encoder_type: rnn + hidden_size: 64 + Head: + name: CTCHead + mid_channels: 96 + fc_decay: 0.00002 + return_feats: true + +Loss: + name: CombinedLoss + loss_config_list: + - CTCLoss: + use_focal_loss: false + weight: 1.0 + - CenterLoss: + weight: 0.05 + num_classes: 6625 + feat_dim: 96 + init_center: false + center_file_path: "./train_center.pkl" + # you can also try to add ace loss on your own dataset + # - ACELoss: + # weight: 0.1 + +PostProcess: + name: CTCLabelDecode + +Metric: + name: RecMetric + main_indicator: acc + +Train: + dataset: + name: SimpleDataSet + data_dir: ./train_data/ + label_file_list: + - ./train_data/train_list.txt + transforms: + - DecodeImage: + img_mode: BGR + channel_first: false + - RecAug: + - CTCLabelEncode: + - RecResizeImg: + image_shape: [3, 32, 320] + - KeepKeys: + keep_keys: + - image + - label + - length + - label_ace + loader: + shuffle: true + batch_size_per_card: 128 + drop_last: true + num_workers: 8 +Eval: + dataset: + name: SimpleDataSet + data_dir: ./train_data + label_file_list: + - ./train_data/val_list.txt + transforms: + - DecodeImage: + img_mode: BGR + channel_first: false + - CTCLabelEncode: + - RecResizeImg: + image_shape: [3, 32, 320] + - KeepKeys: + keep_keys: + - image + - label + - length + loader: + shuffle: false + drop_last: false + batch_size_per_card: 128 + num_workers: 8 diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index f761eaf669..ebf52ec4e1 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -215,6 +215,11 @@ class CTCLabelEncode(BaseRecLabelEncode): data['length'] = np.array(len(text)) text = text + [0] * (self.max_text_len - len(text)) data['label'] = np.array(text) + + label = [0] * len(self.character) + for x in text: + label[x] += 1 + data['label_ace'] = np.array(label) return data def add_special_char(self, dict_character): diff --git a/ppocr/losses/__init__.py b/ppocr/losses/__init__.py index a6c2a9f6d1..f3f4cd4933 100755 --- a/ppocr/losses/__init__.py +++ b/ppocr/losses/__init__.py @@ -52,7 +52,6 @@ def build_loss(config): 'AttentionLoss', 'SRNLoss', 'PGLoss', 'CombinedLoss', 'NRTRLoss', 'TableAttentionLoss', 'SARLoss', 'AsterLoss' ] - config = copy.deepcopy(config) module_name = config.pop('name') assert module_name in support_dict, Exception('loss only support {}'.format( diff --git a/ppocr/losses/ace_loss.py b/ppocr/losses/ace_loss.py new file mode 100644 index 0000000000..9c868520e5 --- /dev/null +++ b/ppocr/losses/ace_loss.py @@ -0,0 +1,50 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import paddle +import paddle.nn as nn + + +class ACELoss(nn.Layer): + def __init__(self, **kwargs): + super().__init__() + self.loss_func = nn.CrossEntropyLoss( + weight=None, + ignore_index=0, + reduction='none', + soft_label=True, + axis=-1) + + def __call__(self, predicts, batch): + if isinstance(predicts, (list, tuple)): + predicts = predicts[-1] + B, N = predicts.shape[:2] + div = paddle.to_tensor([N]).astype('float32') + + predicts = nn.functional.softmax(predicts, axis=-1) + aggregation_preds = paddle.sum(predicts, axis=1) + aggregation_preds = paddle.divide(aggregation_preds, div) + + length = batch[2].astype("float32") + batch = batch[3].astype("float32") + batch[:, 0] = paddle.subtract(div, length) + + batch = paddle.divide(batch, div) + + loss = self.loss_func(aggregation_preds, batch) + + return {"loss_ace": loss} diff --git a/ppocr/losses/center_loss.py b/ppocr/losses/center_loss.py new file mode 100644 index 0000000000..72149df19f --- /dev/null +++ b/ppocr/losses/center_loss.py @@ -0,0 +1,89 @@ +#copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +#Licensed under the Apache License, Version 2.0 (the "License"); +#you may not use this file except in compliance with the License. +#You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +#Unless required by applicable law or agreed to in writing, software +#distributed under the License is distributed on an "AS IS" BASIS, +#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#See the License for the specific language governing permissions and +#limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +import os +import pickle + +import paddle +import paddle.nn as nn +import paddle.nn.functional as F + + +class CenterLoss(nn.Layer): + """ + Reference: Wen et al. A Discriminative Feature Learning Approach for Deep Face Recognition. ECCV 2016. + """ + + def __init__(self, + num_classes=6625, + feat_dim=96, + init_center=False, + center_file_path=None): + super().__init__() + self.num_classes = num_classes + self.feat_dim = feat_dim + self.centers = paddle.randn( + shape=[self.num_classes, self.feat_dim]).astype( + "float64") #random center + + if init_center: + assert os.path.exists( + center_file_path + ), f"center path({center_file_path}) must exist when init_center is set as True." + with open(center_file_path, 'rb') as f: + char_dict = pickle.load(f) + for key in char_dict.keys(): + self.centers[key] = paddle.to_tensor(char_dict[key]) + + def __call__(self, predicts, batch): + assert isinstance(predicts, (list, tuple)) + features, predicts = predicts + + feats_reshape = paddle.reshape( + features, [-1, features.shape[-1]]).astype("float64") + label = paddle.argmax(predicts, axis=2) + label = paddle.reshape(label, [label.shape[0] * label.shape[1]]) + + batch_size = feats_reshape.shape[0] + + #calc feat * feat + dist1 = paddle.sum(paddle.square(feats_reshape), axis=1, keepdim=True) + dist1 = paddle.expand(dist1, [batch_size, self.num_classes]) + + #dist2 of centers + dist2 = paddle.sum(paddle.square(self.centers), axis=1, + keepdim=True) #num_classes + dist2 = paddle.expand(dist2, + [self.num_classes, batch_size]).astype("float64") + dist2 = paddle.transpose(dist2, [1, 0]) + + #first x * x + y * y + distmat = paddle.add(dist1, dist2) + tmp = paddle.matmul(feats_reshape, + paddle.transpose(self.centers, [1, 0])) + distmat = distmat - 2.0 * tmp + + #generate the mask + classes = paddle.arange(self.num_classes).astype("int64") + label = paddle.expand( + paddle.unsqueeze(label, 1), (batch_size, self.num_classes)) + mask = paddle.equal( + paddle.expand(classes, [batch_size, self.num_classes]), + label).astype("float64") #get mask + dist = paddle.multiply(distmat, mask) + loss = paddle.sum(paddle.clip(dist, min=1e-12, max=1e+12)) / batch_size + return {'loss_center': loss} diff --git a/ppocr/losses/combined_loss.py b/ppocr/losses/combined_loss.py index f3bb36cf5a..72f706e37d 100644 --- a/ppocr/losses/combined_loss.py +++ b/ppocr/losses/combined_loss.py @@ -15,6 +15,10 @@ import paddle import paddle.nn as nn +from .rec_ctc_loss import CTCLoss +from .center_loss import CenterLoss +from .ace_loss import ACELoss + from .distillation_loss import DistillationCTCLoss from .distillation_loss import DistillationDMLLoss from .distillation_loss import DistillationDistanceLoss, DistillationDBLoss, DistillationDilaDBLoss diff --git a/ppocr/losses/rec_ctc_loss.py b/ppocr/losses/rec_ctc_loss.py index 6c0b56ff84..5d09802b46 100755 --- a/ppocr/losses/rec_ctc_loss.py +++ b/ppocr/losses/rec_ctc_loss.py @@ -21,16 +21,24 @@ from paddle import nn class CTCLoss(nn.Layer): - def __init__(self, **kwargs): + def __init__(self, use_focal_loss=False, **kwargs): super(CTCLoss, self).__init__() self.loss_func = nn.CTCLoss(blank=0, reduction='none') + self.use_focal_loss = use_focal_loss def forward(self, predicts, batch): + if isinstance(predicts, (list, tuple)): + predicts = predicts[-1] predicts = predicts.transpose((1, 0, 2)) N, B, _ = predicts.shape preds_lengths = paddle.to_tensor([N] * B, dtype='int64') labels = batch[1].astype("int32") label_lengths = batch[2].astype('int64') loss = self.loss_func(predicts, labels, preds_lengths, label_lengths) + if self.use_focal_loss: + weight = paddle.exp(-loss) + weight = paddle.subtract(paddle.to_tensor([1.0]), weight) + weight = paddle.square(weight) * self.focal_loss_alpha + loss = paddle.multiply(loss, weight) loss = loss.mean() # sum return {'loss': loss} diff --git a/ppocr/modeling/heads/rec_ctc_head.py b/ppocr/modeling/heads/rec_ctc_head.py index 9c38d31fa0..35d33d5f56 100755 --- a/ppocr/modeling/heads/rec_ctc_head.py +++ b/ppocr/modeling/heads/rec_ctc_head.py @@ -38,6 +38,7 @@ class CTCHead(nn.Layer): out_channels, fc_decay=0.0004, mid_channels=None, + return_feats=False, **kwargs): super(CTCHead, self).__init__() if mid_channels is None: @@ -66,14 +67,22 @@ class CTCHead(nn.Layer): bias_attr=bias_attr2) self.out_channels = out_channels self.mid_channels = mid_channels + self.return_feats = return_feats def forward(self, x, targets=None): if self.mid_channels is None: predicts = self.fc(x) else: - predicts = self.fc1(x) - predicts = self.fc2(predicts) - + x = self.fc1(x) + predicts = self.fc2(x) + + if self.return_feats: + result = (x, predicts) + else: + result = predicts + if not self.training: predicts = F.softmax(predicts, axis=2) - return predicts + result = predicts + + return result diff --git a/ppocr/postprocess/rec_postprocess.py b/ppocr/postprocess/rec_postprocess.py index 16f7f76596..c06159ca55 100644 --- a/ppocr/postprocess/rec_postprocess.py +++ b/ppocr/postprocess/rec_postprocess.py @@ -111,6 +111,8 @@ class CTCLabelDecode(BaseRecLabelDecode): character_type, use_space_char) def __call__(self, preds, label=None, *args, **kwargs): + if isinstance(preds, tuple): + preds = preds[-1] if isinstance(preds, paddle.Tensor): preds = preds.numpy() preds_idx = preds.argmax(axis=2) From 93118497f4f4c8f74cc60b8f3b77671f452ec99a Mon Sep 17 00:00:00 2001 From: tink2123 Date: Wed, 29 Sep 2021 02:48:11 +0000 Subject: [PATCH 24/42] fix typo --- configs/rec/rec_resnet_stn_bilstm_att.yml | 2 +- ppocr/modeling/backbones/__init__.py | 6 ++---- tools/program.py | 3 +-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/configs/rec/rec_resnet_stn_bilstm_att.yml b/configs/rec/rec_resnet_stn_bilstm_att.yml index b18bb68573..1f6e534a68 100644 --- a/configs/rec/rec_resnet_stn_bilstm_att.yml +++ b/configs/rec/rec_resnet_stn_bilstm_att.yml @@ -37,7 +37,7 @@ Optimizer: Architecture: model_type: rec - algorithm: seed + algorithm: SEED Transform: name: STN_ON tps_inputsize: [32, 64] diff --git a/ppocr/modeling/backbones/__init__.py b/ppocr/modeling/backbones/__init__.py index d9815021c9..169eb821f1 100755 --- a/ppocr/modeling/backbones/__init__.py +++ b/ppocr/modeling/backbones/__init__.py @@ -28,9 +28,10 @@ def build_backbone(config, model_type): from .rec_mv1_enhance import MobileNetV1Enhance from .rec_nrtr_mtb import MTB from .rec_resnet_31 import ResNet31 + from .rec_resnet_aster import ResNet_ASTER support_dict = [ 'MobileNetV1Enhance', 'MobileNetV3', 'ResNet', 'ResNetFPN', 'MTB', - "ResNet31" + "ResNet31", "ResNet_ASTER" ] elif model_type == "e2e": from .e2e_resnet_vd_pg import ResNet @@ -39,9 +40,6 @@ def build_backbone(config, model_type): from .table_resnet_vd import ResNet from .table_mobilenet_v3 import MobileNetV3 support_dict = ["ResNet", "MobileNetV3"] - elif model_type == "seed": - from .rec_resnet_aster import ResNet_ASTER - support_dict = ["ResNet_ASTER"] else: raise NotImplementedError diff --git a/tools/program.py b/tools/program.py index 8750dd9adc..4df87c1686 100755 --- a/tools/program.py +++ b/tools/program.py @@ -402,8 +402,7 @@ def preprocess(is_train=False): assert alg in [ 'EAST', 'DB', 'SAST', 'Rosetta', 'CRNN', 'STARNet', 'RARE', 'SRN', 'CLS', 'PGNet', 'Distillation', 'NRTR', 'TableAttn', 'SAR', 'PSE', - 'ASTER' - ] + 'SEED'] device = 'gpu:{}'.format(dist.ParallelEnv().dev_id) if use_gpu else 'cpu' device = paddle.set_device(device) From 914ec890b0d42870109f06723a1c8a3469bee765 Mon Sep 17 00:00:00 2001 From: Evezerest <50011306+Evezerest@users.noreply.github.com> Date: Fri, 8 Oct 2021 13:51:51 +0800 Subject: [PATCH 25/42] Update joinus.png (#4261) Update joinus.png --- doc/joinus.PNG | Bin 188140 -> 198531 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/joinus.PNG b/doc/joinus.PNG index 998b4b556eb5b2e6f40568af8fed175c40272e4c..f7bac06594caebbd481547d3415a6fc03ba0b60a 100644 GIT binary patch literal 198531 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%0DK(bmC>!% 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 M)Vx!mVD9%n02wY|N&o-= literal 188140 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 GnMqK8J7L2YiVt9r=$B{<5YRRtSNRv;H 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

>K$uv_8cLA%QUXsuM{P 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 rwV%*y1m z1tyn1v43s6aT4b0zI+CwNO}L${S;)TQd6DWR%y_x*@r-XIej<|KF%%;BU-a_W>-u% zI+j@=TdIlgr^LSJWZvI`xDQI=vPpD6RrJIYlJr(GZix)$Zzt{#iE+a%qkmyV3wCLH zN<~S83VvDts1T;`Ht*MqL^4Q_LRSlwA-5cvSM{Iru0>A`rppupm>D|?N14FQLB~T9 zp~0@&??>}{D*W7TCs(&(mu&(@*YwD3$%ek! zXHzP;snNYKBAL~=H-cDyH;KUNa74I2^&~Bq_xOFezkwNYIWvxoDuD8H?K_$P#86y~ z)9%w30hdme^r7_6?a|LQC!S76g!e5HzUUACJE=8}F4r->EG0U}VXBkYg|50vhWO)t z^X2m&USAfvQ^$Aoy{Vm?qU!Vp-fz|y)Eya+sC5LR*6le&SGIqEE@}FxO&sNZoV>ed ze$ot0i?*}Ym7h4!OPG~piSr}wkE zN8_CdwS2?gDz&l?vE}-Q!>p&pv8e1lTlosJyotzH)43eZ6DPW9v6Y8v5JIYeg#A;y ze$F}A03YiAwrO+GfoAvcWHBEJRA2-7?=w8h&;O5yr%!a9;@pf`-9P7mf)K3dF}Q7v zOCI!5dSY_lC{3PmMa&Puz(ke5cyO|Eaky@?3wm_wO)mehBwRRYr37-CqbqG$NiK@CXb8}oFsn2W&buZmggxi>YT0N--hYYEzy0PZ9SKIkqU}&+_Fm0C z98-Z|mH=1xKgC(;o;i5~(>oXrgB=iU%2t)JMC+q5e|Mm;z!cGCEypw%<~FzcJ1rN( zK2D%D*)m?-JYiHC+k~5)d=*v)=KX&~;^OsjT}GVoNwU3H&X~ggQ z$zKC&oHkHtmwjnJfXEpvNW5k12j1M;nTgeu0_fH7WtTsR!}LT1VB!8#M-p@?kD1eJy5D#^p=H1#ls_0?p0_vJdZn+p1|A4QJ$1OVb4x3;(g4tlCofo7XidYKM z3^wn)0O_~;vS4%Q@yc)hj^Ub@N#qI@_&q?ftW==;`VjE#KK_!~|L%|uY;6KAUBQI5 zEy!R({Ni(^Cl8FYT*Q36am2+qmkU+9nVUtnMi?$6&|MO(VMTU5xDs?_F7g${-;JpW z9G6$7N@z*q%Dn$qd)FGxR=S4WmQKg5V~K04+M33#rY>zXt~KcBh^nCogH%J*t%Ia8 zt)NuSAcRCvLW8>0wbHc2rKK9JxU`rpO{io9vDyXXD<&$&Rq$P=*vr*y7G_6hjL-#{*u6G@^vMDs_!sRMrR6< z*gBC;xMq)qCIt|%0NDRhrWdU>p+0lc5-lU(0dtZ`Fj>%f_i{|=Edc(&2EN^UzFnps z>t&m$PrQD;F_^2nciLj&$!&RAI2aCp#q%B$hl0+SqkaKX2&DMHurN7jZYPw^;(%2! zDBuBQ)zEv+4$oT7&cPS#drj)- z)^Rz>(Zm|fN5{2rI6{^Nv z- zwp5XI@8QfDVdl#^kRzY@sECgoz~lRu+o4E0bz8oVL}&c&@i83jv#LV4{AOlafETch zYL?qpR2SgJ6X;u`P=&UXGA>Eo` zUqqQ9y{p1M47|@_2-N868iepS$b`Cf!-`_0pRg@<<~nvghFv+b&r_Wi(!ha$K`4kh zU~r#6N^9abU0127XDZ4{>pD*dDHaD@Z5YqN)(@X97#k@*B!^gS=% z>83`gfoZGTdWB}`V*G-(ercil6MS91X`xFUof=wh;4KJuDt(R99 zx^_OMoGf=`OkK4?I4kSrp0hSe#;Xcpbss|0@brZUX8X(s920&!j)D|@JGMMn%N#o; zRKT1`#_t)~(bU=ONiogOQ~GAbE-oM}q{N|g{4xja*87TSK{&!#!#n8w3F zNEJClTLpdL)*N=t5TY1teOIDNYl+M|}N&m$9;phGR zD2MFA29#|Xhc6rysx_i+CY=zyu$r|ex_MbFI%xDO2l-u0#QV97jC4jD}Mh~w6yCd4E7vIc9BhM-Dc-0;5MYj3z_B zhhxjyM?NE~ywI(+2M@&WZ_RMejg+jfGc$8J(=#wuioN$^ye|IzJR4Dnx>TTL9O8@C z^-g%gx^{|IcJyPLyiik^0&>m;eqFKWsH;ZN_s-KRd)9m_;k;&j8+tVqDbD3e&3eXKp3MbkZ9Ijlh=n;3Vx z;Ri^V6{$8A!+#U-tBr&t|1{X&*iHsB{~zp3|3CdzrTA~0U;o=seY7cY?`}ze O!`ac*q2505#=ijIbPhZK From 019dacc965528967a33e1fe23fc7178577c26bf0 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 11:09:16 +0800 Subject: [PATCH 26/42] fix tests server --- tests/ocr_det_params.txt | 2 +- tests/ocr_det_server_params.txt | 4 ++-- tests/prepare.sh | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/ocr_det_params.txt b/tests/ocr_det_params.txt index 6fd22e409a..64647d9c6e 100644 --- a/tests/ocr_det_params.txt +++ b/tests/ocr_det_params.txt @@ -40,7 +40,7 @@ infer_quant:False inference:tools/infer/predict_det.py --use_gpu:True|False --enable_mkldnn:True|False ---cpu_threads:6 +--cpu_threads:1|6 --rec_batch_num:1 --use_tensorrt:False|True --precision:fp32|fp16|int8 diff --git a/tests/ocr_det_server_params.txt b/tests/ocr_det_server_params.txt index 4a17fa6834..c98bdb786a 100644 --- a/tests/ocr_det_server_params.txt +++ b/tests/ocr_det_server_params.txt @@ -34,8 +34,8 @@ distill_export:null export1:null export2:null ## -infer_model:./inference/ch_ppocr_server_v2.0_det_infer/ -infer_export:null +train_model:./inference/ch_ppocr_server_v2.0_det_train/best_accuracy +infer_export:tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o infer_quant:False inference:tools/infer/predict_det.py --use_gpu:True|False diff --git a/tests/prepare.sh b/tests/prepare.sh index ef021fa385..a28eb515c9 100644 --- a/tests/prepare.sh +++ b/tests/prepare.sh @@ -72,9 +72,9 @@ elif [ ${MODE} = "infer" ];then wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar cd ./inference && tar xf ${eval_model_name}.tar && tar xf ch_det_data_50.tar && cd ../ elif [ ${model_name} = "ocr_server_det" ]; then - wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar + wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar - cd ./inference && tar xf ch_ppocr_server_v2.0_det_infer.tar && tar xf ch_det_data_50.tar && cd ../ + cd ./inference && tar xf ch_ppocr_server_v2.0_det_train.tar && tar xf ch_det_data_50.tar && cd ../ elif [ ${model_name} = "ocr_system_mobile" ]; then wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar From faa88edd8d6a9315e3376a658a7c10d6f68f1cd1 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 11:16:02 +0800 Subject: [PATCH 27/42] add pact and fpgm to server --- tests/ocr_det_server_params.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/ocr_det_server_params.txt b/tests/ocr_det_server_params.txt index c98bdb786a..b3df1735e5 100644 --- a/tests/ocr_det_server_params.txt +++ b/tests/ocr_det_server_params.txt @@ -12,10 +12,10 @@ train_model_name:latest train_infer_img_dir:./train_data/icdar2015/text_localization/ch4_test_images/ null:null ## -trainer:norm_train|pact_train -norm_train:tools/train.py -c tests/configs/det_r50_vd_db.yml -o Global.pretrained_model="" -pact_train:null -fpgm_train:null +trainer:norm_train|pact_train|fpgm_export +norm_train:tools/train.py -c tests/configs/det_r50_vd_db.yml -o +quant_export:deploy/slim/quantization/export_model.py -c tests/configs/det_r50_vd_db.yml -o +fpgm_export:deploy/slim/prune/export_prune_model.py -c tests/configs/det_r50_vd_db.yml -o distill_train:null null:null null:null From 38282ab854dd894e89c3817bccd938dba3e0020f Mon Sep 17 00:00:00 2001 From: Bin Lu Date: Tue, 12 Oct 2021 13:41:47 +0800 Subject: [PATCH 28/42] update enhanced ctc loss (#4256) * fix Focal-ctc bug * add enhanced_ctc_loss.md --- doc/doc_ch/enhanced_ctc_loss.md | 78 ++++++++++++++++++++++++++ doc/doc_ch/equation_a_ctc.png | Bin 0 -> 10431 bytes doc/doc_ch/equation_c_ctc.png | Bin 0 -> 10903 bytes doc/doc_ch/equation_ctcloss.png | Bin 0 -> 9559 bytes doc/doc_ch/equation_focal_ctc.png | Bin 0 -> 14805 bytes doc/doc_ch/focal_loss_formula.png | Bin 0 -> 23888 bytes doc/doc_ch/focal_loss_image.png | Bin 0 -> 127737 bytes doc/doc_ch/rec_algo_compare.png | Bin 0 -> 228966 bytes ppocr/losses/rec_ctc_loss.py | 4 +- ppocr/losses/rec_enhanced_ctc_loss.py | 70 +++++++++++++++++++++++ tools/export_center.py | 77 +++++++++++++++++++++++++ tools/program.py | 54 +++++++++++++++++- 12 files changed, 280 insertions(+), 3 deletions(-) create mode 100644 doc/doc_ch/enhanced_ctc_loss.md create mode 100644 doc/doc_ch/equation_a_ctc.png create mode 100644 doc/doc_ch/equation_c_ctc.png create mode 100644 doc/doc_ch/equation_ctcloss.png create mode 100644 doc/doc_ch/equation_focal_ctc.png create mode 100644 doc/doc_ch/focal_loss_formula.png create mode 100644 doc/doc_ch/focal_loss_image.png create mode 100644 doc/doc_ch/rec_algo_compare.png create mode 100644 ppocr/losses/rec_enhanced_ctc_loss.py create mode 100644 tools/export_center.py diff --git a/doc/doc_ch/enhanced_ctc_loss.md b/doc/doc_ch/enhanced_ctc_loss.md new file mode 100644 index 0000000000..309dc712dc --- /dev/null +++ b/doc/doc_ch/enhanced_ctc_loss.md @@ -0,0 +1,78 @@ +# Enhanced CTC Loss + +在OCR识别中, CRNN是一种在工业界广泛使用的文字识别算法。 在训练阶段,其采用CTCLoss来计算网络损失; 在推理阶段,其采用CTCDecode来获得解码结果。虽然CRNN算法在实际业务中被证明能够获得很好的识别效果, 然而用户对识别准确率的要求却是无止境的,如何进一步提升文字识别的准确率呢? 本文以CTCLoss为切人点,分别从难例挖掘、 多任务学习、 Metric Learning 3个不同的角度探索了CTCLoss的改进融合方案,提出了EnhancedCTCLoss,其包括如下3个组成部分: Focal-CTC Loss,A-CTC Loss, C-CTC Loss。 + +## 1. Focal-CTC Loss +Focal Loss 出自论文《Focal Loss for Dense Object Detection》, 该loss最先提出的时候主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。 +其损失函数形式如下: +

+ +
+ +其中, y' 是经过激活函数的输出,取值在0-1之间。其在原始的交叉熵损失的基础上加了一个调制系数(1 – y’)^ γ和平衡因子α。 当α = 1,y=1时,其损失函数与交叉熵损失的对比如下图所示: +
+ +
+ +从上图可以看到, 当γ> 0时,调整系数(1-y’)^γ 赋予易分类样本损失一个更小的权重,使得网络更关注于困难的、错分的样本。 调整因子γ用于调节简单样本权重降低的速率,当γ为0时即为交叉熵损失函数,当γ增加时,调整因子的影响也会随之增大。实验发现γ为2是最优。平衡因子α用来平衡正负样本本身的比例不均,文中α取0.25。 + +对于经典的CTC算法,假设某个特征序列(f1, f2, ......ft), 经过CTC解码之后结果等于label的概率为y’, 则CTC解码结果不为label的概率即为(1-y’);不难发现 CTCLoss值和y’有如下关系: +
+ +
+ +结合Focal Loss的思想,赋予困难样本较大的权重,简单样本较小的权重,可以使网络更加聚焦于对困难样本的挖掘,进一步提升识别的准确率,由此我们提出了Focal-CTC Loss; 其定义如下所示: +
+ +
+ +实验中,γ取值为2, α= 1, 具体实现见: [rec_ctc_loss.py](../../ppocr/losses/rec_ctc_loss.py) + +## 2. A-CTC Loss +A-CTC Loss是CTC Loss + ACE Loss的简称。 其中ACE Loss出自论文< Aggregation Cross-Entropy for Sequence Recognition>. ACE Loss相比于CTCLoss,主要有如下两点优势: ++ ACE Loss能够解决2-D文本的识别问题; CTCLoss只能够处理1-D文本 ++ ACE Loss 在时间复杂度和空间复杂度上优于CTC loss + +前人总结的OCR识别算法的优劣如下图所示: +
+ +
+ +虽然ACELoss确实如上图所说,可以处理2D预测,在内存占用及推理速度方面具备优势,但在实践过程中,我们发现单独使用ACE Loss, 识别效果并不如CTCLoss. 因此,我们尝试将CTCLoss和ACELoss进行组合,同时以CTCLoss为主,将ACELoss 定位为一个辅助监督loss。 这一尝试收到了效果,在我们内部的实验数据集上,相比单独使用CTCLoss,识别准确率可以提升1%左右。 +A_CTC Loss定义如下: +
+ +
+ +实验中,λ = 0.1. ACE loss实现代码见: [ace_loss.py](../../ppocr/losses/ace_loss.py) + +## 3. C-CTC Loss +C-CTC Loss是CTC Loss + Center Loss的简称。 其中Center Loss出自论文 < A Discriminative Feature Learning Approach for Deep Face Recognition>. 最早用于人脸识别任务,用于增大累间距离,减小类内距离, 是Metric Learning领域一种较早的、也比较常用的一种算法。 +在中文OCR识别任务中,通过对badcase分析, 我们发现中文识别的一大难点是相似字符多,容易误识。 由此我们想到是否可以借鉴Metric Learing的想法, 增大相似字符的类间距,从而提高识别准确率。然而,MetricLearning主要用于图像识别领域,训练数据的标签为一个固定的值;而对于OCR识别来说,其本质上是一个序列识别任务,特征和label之间并不具有显式的对齐关系,因此两者如何结合依然是一个值得探索的方向。 +通过尝试Arcmargin, Cosmargin等方法, 我们最终发现Centerloss 有助于进一步提升识别的准确率。C_CTC Loss定义如下: +
+ +
+ +实验中,我们设置λ=0.25. center_loss实现代码见: [center_loss.py](../../ppocr/losses/center_loss.py) + +值得一提的是, 在C-CTC Loss中,选择随机初始化Center并不能够带来明显的提升. 我们的Center初始化方法如下: ++ 基于原始的CTCLoss, 训练得到一个网络N ++ 挑选出训练集中,识别完全正确的部分, 组成集合G ++ 将G中的每个样本送入网络,进行前向计算, 提取最后一个FC层的输入(即feature)及其经过argmax计算的结果(即index)之间的对应关系 ++ 将相同index的feature进行聚合,计算平均值,得到各自字符的初始center. + +以配置文件`configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml`为例, center提取命令如下所示: +``` +python tools/export_center.py -c configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml -o Global.pretrained_model: "./output/rec_mobile_pp-OCRv2/best_accuracy" +``` +运行完后,会在PaddleOCR主目录下生成`train_center.pkl`. + +## 4. 实验 +对于上述的三种方案,我们基于百度内部数据集进行了训练、评测,实验情况如下表所示: +|algorithm| Focal_CTC | A_CTC | C-CTC | +|:------| :------| ------: | :------: | +|gain| +0.3% | +0.7% | +1.7% | + +基于上述实验结论,我们在PP-OCRv2中,采用了C-CTC的策略。 值得一提的是,由于PP-OCRv2 处理的是6625个中文字符的识别任务,字符集比较大,形似字较多,所以在该任务上C-CTC 方案带来的提升较大。 但如果换做其他OCR识别任务,结论可能会有所不同。大家可以尝试Focal-CTC,A-CTC, C-CTC以及组合方案EnhancedCTC,相信会带来不同程度的提升效果。 +统一的融合方案见如下文件: [rec_enhanced_ctc_loss.py](../../ppocr/losses/rec_enhanced_ctc_loss.py) diff --git a/doc/doc_ch/equation_a_ctc.png b/doc/doc_ch/equation_a_ctc.png new file mode 100644 index 0000000000000000000000000000000000000000..ae097610d37a88e76edefdbeb81df8403e94215f GIT binary patch literal 10431 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
L!Cc7IJ0N#aE2{fRqVz=kt5JzS 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

Hqb!M($MZxoVLql8Cz&}zO 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 literal 0 HcmV?d00001 diff --git a/doc/doc_ch/equation_focal_ctc.png b/doc/doc_ch/equation_focal_ctc.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba1e8715d5876705ef429e48b5c94388fd41398 GIT binary patch literal 14805 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 literal 0 HcmV?d00001 diff --git a/doc/doc_ch/focal_loss_formula.png b/doc/doc_ch/focal_loss_formula.png new file mode 100644 index 0000000000000000000000000000000000000000..971cebcd082cf5e19f9246f02216c0c14896bdc9 GIT binary patch literal 23888 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 z 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Ǻ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 KvP#@A=zjoPyK;{J literal 0 HcmV?d00001 diff --git a/doc/doc_ch/rec_algo_compare.png b/doc/doc_ch/rec_algo_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..2dde496c75f327ca1c0c9ccb0dbe6949215a4a1b GIT binary patch literal 228966 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�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 literal 0 HcmV?d00001 diff --git a/ppocr/losses/rec_ctc_loss.py b/ppocr/losses/rec_ctc_loss.py index 5d09802b46..063d68e308 100755 --- a/ppocr/losses/rec_ctc_loss.py +++ b/ppocr/losses/rec_ctc_loss.py @@ -38,7 +38,7 @@ class CTCLoss(nn.Layer): if self.use_focal_loss: weight = paddle.exp(-loss) weight = paddle.subtract(paddle.to_tensor([1.0]), weight) - weight = paddle.square(weight) * self.focal_loss_alpha + weight = paddle.square(weight) loss = paddle.multiply(loss, weight) - loss = loss.mean() # sum + loss = loss.mean() return {'loss': loss} diff --git a/ppocr/losses/rec_enhanced_ctc_loss.py b/ppocr/losses/rec_enhanced_ctc_loss.py new file mode 100644 index 0000000000..b57be6468e --- /dev/null +++ b/ppocr/losses/rec_enhanced_ctc_loss.py @@ -0,0 +1,70 @@ +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import paddle +from paddle import nn +from .ace_loss import ACELoss +from .center_loss import CenterLoss +from .rec_ctc_loss import CTCLoss + + +class EnhancedCTCLoss(nn.Layer): + def __init__(self, + use_focal_loss=False, + use_ace_loss=False, + ace_loss_weight=0.1, + use_center_loss=False, + center_loss_weight=0.05, + num_classes=6625, + feat_dim=96, + init_center=False, + center_file_path=None, + **kwargs): + super(EnhancedCTCLoss, self).__init__() + self.ctc_loss_func = CTCLoss(use_focal_loss=use_focal_loss) + + self.use_ace_loss = False + if use_ace_loss: + self.use_ace_loss = use_ace_loss + self.ace_loss_func = ACELoss() + self.ace_loss_weight = ace_loss_weight + + self.use_center_loss = False + if use_center_loss: + self.use_center_loss = use_center_loss + self.center_loss_func = CenterLoss( + num_classes=num_classes, + feat_dim=feat_dim, + init_center=init_center, + center_file_path=center_file_path) + self.center_loss_weight = center_loss_weight + + def __call__(self, predicts, batch): + loss = self.ctc_loss_func(predicts, batch)["loss"] + + if self.use_center_loss: + center_loss = self.center_loss_func( + predicts, batch)["loss_center"] * self.center_loss_weight + loss = loss + center_loss + + if self.use_ace_loss: + ace_loss = self.ace_loss_func( + predicts, batch)["loss_ace"] * self.ace_loss_weight + loss = loss + ace_loss + + return {'enhanced_ctc_loss': loss} diff --git a/tools/export_center.py b/tools/export_center.py new file mode 100644 index 0000000000..c46e8b9d58 --- /dev/null +++ b/tools/export_center.py @@ -0,0 +1,77 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import sys +import pickle + +__dir__ = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(__dir__) +sys.path.append(os.path.abspath(os.path.join(__dir__, '..'))) + +from ppocr.data import build_dataloader +from ppocr.modeling.architectures import build_model +from ppocr.postprocess import build_post_process +from ppocr.utils.save_load import init_model, load_dygraph_params +from ppocr.utils.utility import print_dict +import tools.program as program + + +def main(): + global_config = config['Global'] + # build dataloader + config['Eval']['dataset']['name'] = config['Train']['dataset']['name'] + config['Eval']['dataset']['data_dir'] = config['Train']['dataset'][ + 'data_dir'] + config['Eval']['dataset']['label_file_list'] = config['Train']['dataset'][ + 'label_file_list'] + eval_dataloader = build_dataloader(config, 'Eval', device, logger) + + # build post process + post_process_class = build_post_process(config['PostProcess'], + global_config) + + # build model + # for rec algorithm + if hasattr(post_process_class, 'character'): + char_num = len(getattr(post_process_class, 'character')) + config['Architecture']["Head"]['out_channels'] = char_num + + #set return_features = True + config['Architecture']["Head"]["return_feats"] = True + + model = build_model(config['Architecture']) + + best_model_dict = load_dygraph_params(config, model, logger, None) + if len(best_model_dict): + logger.info('metric in ckpt ***************') + for k, v in best_model_dict.items(): + logger.info('{}:{}'.format(k, v)) + + # get features from train data + char_center = program.get_center(model, eval_dataloader, post_process_class) + + #serialize to disk + with open("train_center.pkl", 'wb') as f: + pickle.dump(char_center, f) + return + + +if __name__ == '__main__': + config, device, logger, vdl_writer = program.preprocess() + main() diff --git a/tools/program.py b/tools/program.py index 0b766928ce..798e6dff29 100755 --- a/tools/program.py +++ b/tools/program.py @@ -399,6 +399,57 @@ def eval(model, return metric +def update_center(char_center, post_result, preds): + result, label = post_result + feats, logits = preds + logits = paddle.argmax(logits, axis=-1) + feats = feats.numpy() + logits = logits.numpy() + + for idx_sample in range(len(label)): + if result[idx_sample][0] == label[idx_sample][0]: + feat = feats[idx_sample] + logit = logits[idx_sample] + for idx_time in range(len(logit)): + index = logit[idx_time] + if index in char_center.keys(): + char_center[index][0] = ( + char_center[index][0] * char_center[index][1] + + feat[idx_time]) / (char_center[index][1] + 1) + char_center[index][1] += 1 + else: + char_center[index] = [feat[idx_time], 1] + return char_center + + +def get_center(model, eval_dataloader, post_process_class): + pbar = tqdm(total=len(eval_dataloader), desc='get center:') + max_iter = len(eval_dataloader) - 1 if platform.system( + ) == "Windows" else len(eval_dataloader) + char_center = dict() + for idx, batch in enumerate(eval_dataloader): + if idx >= max_iter: + break + images = batch[0] + start = time.time() + preds = model(images) + + batch = [item.numpy() for item in batch] + # Obtain usable results from post-processing methods + total_time += time.time() - start + # Evaluate the results of the current batch + post_result = post_process_class(preds, batch[1]) + + #update char_center + char_center = update_center(char_center, post_result, preds) + pbar.update(1) + + pbar.close() + for key in char_center.keys(): + char_center[key] = char_center[key][0] + return char_center + + def preprocess(is_train=False): FLAGS = ArgsParser().parse_args() profiler_options = FLAGS.profiler_options @@ -427,7 +478,8 @@ def preprocess(is_train=False): assert alg in [ 'EAST', 'DB', 'SAST', 'Rosetta', 'CRNN', 'STARNet', 'RARE', 'SRN', 'CLS', 'PGNet', 'Distillation', 'NRTR', 'TableAttn', 'SAR', 'PSE', - 'SEED'] + 'SEED' + ] windows_not_support_list = ['PSE'] if platform.system() == "Windows" and alg in windows_not_support_list: logger.warning('{} is not support in Windows now'.format( From 9f1353362d0f0e38af9208e255adb2dbca76c613 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 14:21:16 +0800 Subject: [PATCH 29/42] opt tests --- .../ocr_ppocr_det_mobile_params.txt} | 20 ++- .../ocr_ppocr_det_server_params.txt} | 0 .../ocr_ppocr_rec_mobile_params.txt} | 0 .../ocr_ppocr_rec_server_params.txt} | 0 .../ocr_ppocr_sys_mobile_params.txt} | 0 .../ocr_ppocr_sys_server_params.txt} | 0 tests/debug.sh | 16 ++ tests/ocr_kl_quant_params.txt | 51 ------- tests/test.sh | 144 +++++++++++------- 9 files changed, 126 insertions(+), 105 deletions(-) rename tests/{ocr_det_params.txt => configs/ocr_ppocr_det_mobile_params.txt} (85%) rename tests/{ocr_det_server_params.txt => configs/ocr_ppocr_det_server_params.txt} (100%) rename tests/{ocr_rec_params.txt => configs/ocr_ppocr_rec_mobile_params.txt} (100%) rename tests/{ocr_rec_server_params.txt => configs/ocr_ppocr_rec_server_params.txt} (100%) rename tests/{ocr_ppocr_mobile_params.txt => configs/ocr_ppocr_sys_mobile_params.txt} (100%) rename tests/{ocr_ppocr_server_params.txt => configs/ocr_ppocr_sys_server_params.txt} (100%) create mode 100644 tests/debug.sh delete mode 100644 tests/ocr_kl_quant_params.txt diff --git a/tests/ocr_det_params.txt b/tests/configs/ocr_ppocr_det_mobile_params.txt similarity index 85% rename from tests/ocr_det_params.txt rename to tests/configs/ocr_ppocr_det_mobile_params.txt index 64647d9c6e..5edb14cdbf 100644 --- a/tests/ocr_det_params.txt +++ b/tests/configs/ocr_ppocr_det_mobile_params.txt @@ -46,7 +46,7 @@ inference:tools/infer/predict_det.py --precision:fp32|fp16|int8 --det_model_dir: --image_dir:./inference/ch_det_data_50/all-sum-510/ ---save_log_path:null +null:null --benchmark:True null:null ===========================cpp_infer_params=========================== @@ -79,4 +79,20 @@ op.det.local_service_conf.thread_num:1|6 op.det.local_service_conf.use_trt:False|True op.det.local_service_conf.precision:fp32|fp16|int8 pipline:pipeline_http_client.py --image_dir=../../doc/imgs - +===========================kl_quant_params=========================== +infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer/ +infer_export:tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o +infer_quant:False +inference:tools/infer/predict_det.py +--use_gpu:True|False +--enable_mkldnn:True|False +--cpu_threads:1|6 +--rec_batch_num:1 +--use_tensorrt:False|True +--precision:fp32|fp16|int8 +--det_model_dir: +--image_dir:./inference/ch_det_data_50/all-sum-510/ +null:null +--benchmark:True +null:null +null:null \ No newline at end of file diff --git a/tests/ocr_det_server_params.txt b/tests/configs/ocr_ppocr_det_server_params.txt similarity index 100% rename from tests/ocr_det_server_params.txt rename to tests/configs/ocr_ppocr_det_server_params.txt diff --git a/tests/ocr_rec_params.txt b/tests/configs/ocr_ppocr_rec_mobile_params.txt similarity index 100% rename from tests/ocr_rec_params.txt rename to tests/configs/ocr_ppocr_rec_mobile_params.txt diff --git a/tests/ocr_rec_server_params.txt b/tests/configs/ocr_ppocr_rec_server_params.txt similarity index 100% rename from tests/ocr_rec_server_params.txt rename to tests/configs/ocr_ppocr_rec_server_params.txt diff --git a/tests/ocr_ppocr_mobile_params.txt b/tests/configs/ocr_ppocr_sys_mobile_params.txt similarity index 100% rename from tests/ocr_ppocr_mobile_params.txt rename to tests/configs/ocr_ppocr_sys_mobile_params.txt diff --git a/tests/ocr_ppocr_server_params.txt b/tests/configs/ocr_ppocr_sys_server_params.txt similarity index 100% rename from tests/ocr_ppocr_server_params.txt rename to tests/configs/ocr_ppocr_sys_server_params.txt diff --git a/tests/debug.sh b/tests/debug.sh new file mode 100644 index 0000000000..bd2ec1ca0c --- /dev/null +++ b/tests/debug.sh @@ -0,0 +1,16 @@ +#!/bin/bash +FILENAME=$1 +# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', 'cpp_infer', 'serving_infer'] +MODE=$2 +if [ ${MODE} = "cpp_infer" ]; then + dataline=$(awk 'NR==52, NR==66{print}' $FILENAME) +elif [ ${MODE} = "serving_infer" ]; then + dataline=$(awk 'NR==67, NR==81{print}' $FILENAME) +else + dataline=$(awk 'NR==1, NR==51{print}' $FILENAME) +fi +count=0 +for line in ${dataline[*]}; do + let count++ + echo $count $line +done diff --git a/tests/ocr_kl_quant_params.txt b/tests/ocr_kl_quant_params.txt deleted file mode 100644 index c6ee97dca4..0000000000 --- a/tests/ocr_kl_quant_params.txt +++ /dev/null @@ -1,51 +0,0 @@ -===========================train_params=========================== -model_name:ocr_system -python:python3.7 -gpu_list:null -Global.use_gpu:null -Global.auto_cast:null -Global.epoch_num:null -Global.save_model_dir:./output/ -Train.loader.batch_size_per_card:null -Global.pretrained_model:null -train_model_name:null -train_infer_img_dir:null -null:null -## -trainer: -norm_train:null -pact_train:null -fpgm_train:null -distill_train:null -null:null -null:null -## -===========================eval_params=========================== -eval:null -null:null -## -===========================infer_params=========================== -Global.save_inference_dir:./output/ -Global.pretrained_model: -norm_export:null -quant_export:null -fpgm_export:null -distill_export:null -export1:null -export2:null -## -infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer/ -kl_quant:deploy/slim/quantization/quant_kl.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o -infer_quant:True -inference:tools/infer/predict_det.py ---use_gpu:TrueFalse ---enable_mkldnn:True|False ---cpu_threads:1|6 ---rec_batch_num:1 ---use_tensorrt:False|True ---precision:fp32|fp16|int8 ---det_model_dir: ---image_dir:./inference/ch_det_data_50/all-sum-510/ ---save_log_path:null ---benchmark:True -null:null diff --git a/tests/test.sh b/tests/test.sh index 5649e344b7..3df0d52cc5 100644 --- a/tests/test.sh +++ b/tests/test.sh @@ -1,9 +1,16 @@ #!/bin/bash FILENAME=$1 -# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', 'cpp_infer'] +# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', 'cpp_infer', 'serving_infer', 'klquant_infer'] MODE=$2 - -dataline=$(cat ${FILENAME}) +if [ ${MODE} = "cpp_infer" ]; then + dataline=$(awk 'NR==67, NR==81{print}' $FILENAME) +elif [ ${MODE} = "serving_infer" ]; then + dataline=$(awk 'NR==52, NR==66{print}' $FILENAME) +elif [ ${MODE} = "klquant_infer" ]; then + dataline=$(awk 'NR==82, NR==98{print}' $FILENAME) +else + dataline=$(awk 'NR==1, NR==51{print}' $FILENAME) +fi # parser params IFS=$'\n' @@ -144,61 +151,93 @@ benchmark_key=$(func_parser_key "${lines[49]}") benchmark_value=$(func_parser_value "${lines[49]}") infer_key1=$(func_parser_key "${lines[50]}") infer_value1=$(func_parser_value "${lines[50]}") -# parser serving -trans_model_py=$(func_parser_value "${lines[67]}") -infer_model_dir_key=$(func_parser_key "${lines[68]}") -infer_model_dir_value=$(func_parser_value "${lines[68]}") -model_filename_key=$(func_parser_key "${lines[69]}") -model_filename_value=$(func_parser_value "${lines[69]}") -params_filename_key=$(func_parser_key "${lines[70]}") -params_filename_value=$(func_parser_value "${lines[70]}") -serving_server_key=$(func_parser_key "${lines[71]}") -serving_server_value=$(func_parser_value "${lines[71]}") -serving_client_key=$(func_parser_key "${lines[72]}") -serving_client_value=$(func_parser_value "${lines[72]}") -serving_dir_value=$(func_parser_value "${lines[73]}") -web_service_py=$(func_parser_value "${lines[74]}") -web_use_gpu_key=$(func_parser_key "${lines[75]}") -web_use_gpu_list=$(func_parser_value "${lines[75]}") -web_use_mkldnn_key=$(func_parser_key "${lines[76]}") -web_use_mkldnn_list=$(func_parser_value "${lines[76]}") -web_cpu_threads_key=$(func_parser_key "${lines[77]}") -web_cpu_threads_list=$(func_parser_value "${lines[77]}") -web_use_trt_key=$(func_parser_key "${lines[78]}") -web_use_trt_list=$(func_parser_value "${lines[78]}") -web_precision_key=$(func_parser_key "${lines[79]}") -web_precision_list=$(func_parser_value "${lines[79]}") -pipeline_py=$(func_parser_value "${lines[80]}") +# parser serving +if [ ${MODE} = "klquant_infer" ]; then + # parser inference model + infer_model_dir_list=$(func_parser_value "${lines[1]}") + infer_export_list=$(func_parser_value "${lines[2]}") + infer_is_quant=$(func_parser_value "${lines[3]}") + # parser inference + inference_py=$(func_parser_value "${lines[4]}") + use_gpu_key=$(func_parser_key "${lines[5]}") + use_gpu_list=$(func_parser_value "${lines[5]}") + use_mkldnn_key=$(func_parser_key "${lines[6]}") + use_mkldnn_list=$(func_parser_value "${lines[6]}") + cpu_threads_key=$(func_parser_key "${lines[7]}") + cpu_threads_list=$(func_parser_value "${lines[7]}") + batch_size_key=$(func_parser_key "${lines[8]}") + batch_size_list=$(func_parser_value "${lines[8]}") + use_trt_key=$(func_parser_key "${lines[9]}") + use_trt_list=$(func_parser_value "${lines[9]}") + precision_key=$(func_parser_key "${lines[10]}") + precision_list=$(func_parser_value "${lines[10]}") + infer_model_key=$(func_parser_key "${lines[11]}") + image_dir_key=$(func_parser_key "${lines[12]}") + infer_img_dir=$(func_parser_value "${lines[12]}") + save_log_key=$(func_parser_key "${lines[13]}") + benchmark_key=$(func_parser_key "${lines[14]}") + benchmark_value=$(func_parser_value "${lines[14]}") + infer_key1=$(func_parser_key "${lines[15]}") + infer_value1=$(func_parser_value "${lines[15]}") +fi +# parser serving +if [ ${MODE} = "server_infer" ]; then + trans_model_py=$(func_parser_value "${lines[1]}") + infer_model_dir_key=$(func_parser_key "${lines[2]}") + infer_model_dir_value=$(func_parser_value "${lines[2]}") + model_filename_key=$(func_parser_key "${lines[3]}") + model_filename_value=$(func_parser_value "${lines[3]}") + params_filename_key=$(func_parser_key "${lines[4]}") + params_filename_value=$(func_parser_value "${lines[4]}") + serving_server_key=$(func_parser_key "${lines[5]}") + serving_server_value=$(func_parser_value "${lines[5]}") + serving_client_key=$(func_parser_key "${lines[6]}") + serving_client_value=$(func_parser_value "${lines[6]}") + serving_dir_value=$(func_parser_value "${lines[7]}") + web_service_py=$(func_parser_value "${lines[8]}") + web_use_gpu_key=$(func_parser_key "${lines[9]}") + web_use_gpu_list=$(func_parser_value "${lines[9]}") + web_use_mkldnn_key=$(func_parser_key "${lines[10]}") + web_use_mkldnn_list=$(func_parser_value "${lines[10]}") + web_cpu_threads_key=$(func_parser_key "${lines[11]}") + web_cpu_threads_list=$(func_parser_value "${lines[11]}") + web_use_trt_key=$(func_parser_key "${lines[12]}") + web_use_trt_list=$(func_parser_value "${lines[12]}") + web_precision_key=$(func_parser_key "${lines[13]}") + web_precision_list=$(func_parser_value "${lines[13]}") + pipeline_py=$(func_parser_value "${lines[14]}") +fi if [ ${MODE} = "cpp_infer" ]; then # parser cpp inference model - cpp_infer_model_dir_list=$(func_parser_value "${lines[53]}") - cpp_infer_is_quant=$(func_parser_value "${lines[54]}") + cpp_infer_model_dir_list=$(func_parser_value "${lines[1]}") + cpp_infer_is_quant=$(func_parser_value "${lines[2]}") # parser cpp inference - inference_cmd=$(func_parser_value "${lines[55]}") - cpp_use_gpu_key=$(func_parser_key "${lines[56]}") - cpp_use_gpu_list=$(func_parser_value "${lines[56]}") - cpp_use_mkldnn_key=$(func_parser_key "${lines[57]}") - cpp_use_mkldnn_list=$(func_parser_value "${lines[57]}") - cpp_cpu_threads_key=$(func_parser_key "${lines[58]}") - cpp_cpu_threads_list=$(func_parser_value "${lines[58]}") - cpp_batch_size_key=$(func_parser_key "${lines[59]}") - cpp_batch_size_list=$(func_parser_value "${lines[59]}") - cpp_use_trt_key=$(func_parser_key "${lines[60]}") - cpp_use_trt_list=$(func_parser_value "${lines[60]}") - cpp_precision_key=$(func_parser_key "${lines[61]}") - cpp_precision_list=$(func_parser_value "${lines[61]}") - cpp_infer_model_key=$(func_parser_key "${lines[62]}") - cpp_image_dir_key=$(func_parser_key "${lines[63]}") - cpp_infer_img_dir=$(func_parser_value "${lines[63]}") - cpp_infer_key1=$(func_parser_key "${lines[64]}") - cpp_infer_value1=$(func_parser_value "${lines[64]}") - cpp_benchmark_key=$(func_parser_key "${lines[65]}") - cpp_benchmark_value=$(func_parser_value "${lines[65]}") + inference_cmd=$(func_parser_value "${lines[3]}") + cpp_use_gpu_key=$(func_parser_key "${lines[4]}") + cpp_use_gpu_list=$(func_parser_value "${lines[4]}") + cpp_use_mkldnn_key=$(func_parser_key "${lines[5]}") + cpp_use_mkldnn_list=$(func_parser_value "${lines[5]}") + cpp_cpu_threads_key=$(func_parser_key "${lines[6]}") + cpp_cpu_threads_list=$(func_parser_value "${lines[6]}") + cpp_batch_size_key=$(func_parser_key "${lines[7]}") + cpp_batch_size_list=$(func_parser_value "${lines[7]}") + cpp_use_trt_key=$(func_parser_key "${lines[8]}") + cpp_use_trt_list=$(func_parser_value "${lines[8]}") + cpp_precision_key=$(func_parser_key "${lines[9]}") + cpp_precision_list=$(func_parser_value "${lines[9]}") + cpp_infer_model_key=$(func_parser_key "${lines[10]}") + cpp_image_dir_key=$(func_parser_key "${lines[11]}") + cpp_infer_img_dir=$(func_parser_value "${lines[12]}") + cpp_infer_key1=$(func_parser_key "${lines[13]}") + cpp_infer_value1=$(func_parser_value "${lines[13]}") + cpp_benchmark_key=$(func_parser_key "${lines[14]}") + cpp_benchmark_value=$(func_parser_value "${lines[14]}") fi + LOG_PATH="./tests/output" mkdir -p ${LOG_PATH} status_log="${LOG_PATH}/results.log" @@ -414,7 +453,7 @@ function func_cpp_inference(){ done } -if [ ${MODE} = "infer" ]; then +if [ ${MODE} = "infer" ] || [ ${MODE} = "klquant_infer" ]; then GPUID=$3 if [ ${#GPUID} -le 0 ];then env=" " @@ -447,7 +486,6 @@ if [ ${MODE} = "infer" ]; then func_inference "${python}" "${inference_py}" "${save_infer_dir}" "${LOG_PATH}" "${infer_img_dir}" ${is_quant} Count=$(($Count + 1)) done - elif [ ${MODE} = "cpp_infer" ]; then GPUID=$3 if [ ${#GPUID} -le 0 ];then @@ -481,6 +519,8 @@ elif [ ${MODE} = "serving_infer" ]; then #run serving func_serving "${web_service_cmd}" + + else IFS="|" export Count=0 From 857fd2e46c35545b8614c3fd14cb1adc85ae6992 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 14:44:29 +0800 Subject: [PATCH 30/42] delete debug --- tests/debug.sh | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 tests/debug.sh diff --git a/tests/debug.sh b/tests/debug.sh deleted file mode 100644 index bd2ec1ca0c..0000000000 --- a/tests/debug.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -FILENAME=$1 -# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', 'cpp_infer', 'serving_infer'] -MODE=$2 -if [ ${MODE} = "cpp_infer" ]; then - dataline=$(awk 'NR==52, NR==66{print}' $FILENAME) -elif [ ${MODE} = "serving_infer" ]; then - dataline=$(awk 'NR==67, NR==81{print}' $FILENAME) -else - dataline=$(awk 'NR==1, NR==51{print}' $FILENAME) -fi -count=0 -for line in ${dataline[*]}; do - let count++ - echo $count $line -done From 740fc81c5adcb3deadbda835a9db1627d74808e7 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 14:44:40 +0800 Subject: [PATCH 31/42] rename --- ...cr_ppocr_det_mobile_params.txt => ppocr_det_mobile_params.txt} | 0 ...cr_ppocr_det_server_params.txt => ppocr_det_server_params.txt} | 0 ...cr_ppocr_rec_mobile_params.txt => ppocr_rec_mobile_params.txt} | 0 ...cr_ppocr_rec_server_params.txt => ppocr_rec_server_params.txt} | 0 ...cr_ppocr_sys_mobile_params.txt => ppocr_sys_mobile_params.txt} | 0 ...cr_ppocr_sys_server_params.txt => ppocr_sys_server_params.txt} | 0 ...results_gpu_trt_fp16.txt => ppocr_det_mobile_results_fp16.txt} | 0 ...gpu_trt_fp16_cpp.txt => ppocr_det_mobile_results_fp16_cpp.txt} | 0 ...det_results_gpu_fp32.txt => ppocr_det_mobile_results_fp32.txt} | 0 ...gpu_trt_fp32_cpp.txt => ppocr_det_mobile_results_fp32_cpp.txt} | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename tests/configs/{ocr_ppocr_det_mobile_params.txt => ppocr_det_mobile_params.txt} (100%) rename tests/configs/{ocr_ppocr_det_server_params.txt => ppocr_det_server_params.txt} (100%) rename tests/configs/{ocr_ppocr_rec_mobile_params.txt => ppocr_rec_mobile_params.txt} (100%) rename tests/configs/{ocr_ppocr_rec_server_params.txt => ppocr_rec_server_params.txt} (100%) rename tests/configs/{ocr_ppocr_sys_mobile_params.txt => ppocr_sys_mobile_params.txt} (100%) rename tests/configs/{ocr_ppocr_sys_server_params.txt => ppocr_sys_server_params.txt} (100%) rename tests/results/{det_results_gpu_trt_fp16.txt => ppocr_det_mobile_results_fp16.txt} (100%) rename tests/results/{det_results_gpu_trt_fp16_cpp.txt => ppocr_det_mobile_results_fp16_cpp.txt} (100%) rename tests/results/{det_results_gpu_fp32.txt => ppocr_det_mobile_results_fp32.txt} (100%) rename tests/results/{det_results_gpu_trt_fp32_cpp.txt => ppocr_det_mobile_results_fp32_cpp.txt} (100%) diff --git a/tests/configs/ocr_ppocr_det_mobile_params.txt b/tests/configs/ppocr_det_mobile_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_det_mobile_params.txt rename to tests/configs/ppocr_det_mobile_params.txt diff --git a/tests/configs/ocr_ppocr_det_server_params.txt b/tests/configs/ppocr_det_server_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_det_server_params.txt rename to tests/configs/ppocr_det_server_params.txt diff --git a/tests/configs/ocr_ppocr_rec_mobile_params.txt b/tests/configs/ppocr_rec_mobile_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_rec_mobile_params.txt rename to tests/configs/ppocr_rec_mobile_params.txt diff --git a/tests/configs/ocr_ppocr_rec_server_params.txt b/tests/configs/ppocr_rec_server_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_rec_server_params.txt rename to tests/configs/ppocr_rec_server_params.txt diff --git a/tests/configs/ocr_ppocr_sys_mobile_params.txt b/tests/configs/ppocr_sys_mobile_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_sys_mobile_params.txt rename to tests/configs/ppocr_sys_mobile_params.txt diff --git a/tests/configs/ocr_ppocr_sys_server_params.txt b/tests/configs/ppocr_sys_server_params.txt similarity index 100% rename from tests/configs/ocr_ppocr_sys_server_params.txt rename to tests/configs/ppocr_sys_server_params.txt diff --git a/tests/results/det_results_gpu_trt_fp16.txt b/tests/results/ppocr_det_mobile_results_fp16.txt similarity index 100% rename from tests/results/det_results_gpu_trt_fp16.txt rename to tests/results/ppocr_det_mobile_results_fp16.txt diff --git a/tests/results/det_results_gpu_trt_fp16_cpp.txt b/tests/results/ppocr_det_mobile_results_fp16_cpp.txt similarity index 100% rename from tests/results/det_results_gpu_trt_fp16_cpp.txt rename to tests/results/ppocr_det_mobile_results_fp16_cpp.txt diff --git a/tests/results/det_results_gpu_fp32.txt b/tests/results/ppocr_det_mobile_results_fp32.txt similarity index 100% rename from tests/results/det_results_gpu_fp32.txt rename to tests/results/ppocr_det_mobile_results_fp32.txt diff --git a/tests/results/det_results_gpu_trt_fp32_cpp.txt b/tests/results/ppocr_det_mobile_results_fp32_cpp.txt similarity index 100% rename from tests/results/det_results_gpu_trt_fp32_cpp.txt rename to tests/results/ppocr_det_mobile_results_fp32_cpp.txt From 22d594704ba9d1f84c42184e9755539c7753370e Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 14:53:50 +0800 Subject: [PATCH 32/42] update prepare.sh for klquant_infer --- tests/prepare.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/prepare.sh b/tests/prepare.sh index a28eb515c9..f43ddb56fc 100644 --- a/tests/prepare.sh +++ b/tests/prepare.sh @@ -1,7 +1,9 @@ #!/bin/bash FILENAME=$1 -# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', 'cpp_infer', 'serving_infer'] +# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer', +# 'cpp_infer', 'serving_infer', 'klquant_infer'] + MODE=$2 dataline=$(cat ${FILENAME}) @@ -98,6 +100,12 @@ elif [ ${MODE} = "infer" ];then wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar cd ./inference && tar xf ${eval_model_name}.tar && tar xf rec_inference.tar && cd ../ fi +elif [ ${MODE} = "klquant_infer" ];then + if [ ${model_name} = "ocr_det" ]; then + wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar + wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar + cd ./inference && tar xf ch_ppocr_mobile_v2.0_det_infer.tar && tar xf ch_det_data_50.tar && cd ../ + fi elif [ ${MODE} = "cpp_infer" ];then if [ ${model_name} = "ocr_det" ]; then wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar From 497ce43261cbfce4770704b2ffe2fc3942c41547 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 17:57:53 +0800 Subject: [PATCH 33/42] fix BGR --- configs/e2e/e2e_r50_vd_pg.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/e2e/e2e_r50_vd_pg.yml b/configs/e2e/e2e_r50_vd_pg.yml index 4a6e19f446..c4c5226e79 100644 --- a/configs/e2e/e2e_r50_vd_pg.yml +++ b/configs/e2e/e2e_r50_vd_pg.yml @@ -94,7 +94,7 @@ Eval: label_file_list: [./train_data/total_text/test/test.txt] transforms: - DecodeImage: # load image - img_mode: RGB + img_mode: BGR channel_first: False - E2ELabelEncodeTest: - E2EResizeForTest: @@ -111,4 +111,4 @@ Eval: shuffle: False drop_last: False batch_size_per_card: 1 # must be 1 - num_workers: 2 \ No newline at end of file + num_workers: 2 From 7fbe65e80f5ff2d856b35ed8ae55b417b950ee98 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Tue, 12 Oct 2021 18:17:26 +0800 Subject: [PATCH 34/42] BGR not RGB --- tools/infer/predict_e2e.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/infer/predict_e2e.py b/tools/infer/predict_e2e.py index 8ff279d743..5029d60593 100755 --- a/tools/infer/predict_e2e.py +++ b/tools/infer/predict_e2e.py @@ -141,7 +141,6 @@ if __name__ == "__main__": img, flag = check_and_read_gif(image_file) if not flag: img = cv2.imread(image_file) - img = img[:, :, ::-1] if img is None: logger.info("error in loading image:{}".format(image_file)) continue From 8e5bfa3fb5807bff2e56404e90778cdc5d9aa275 Mon Sep 17 00:00:00 2001 From: MissPenguin Date: Wed, 13 Oct 2021 06:00:44 +0000 Subject: [PATCH 35/42] split cpp_infer --- tests/common_func.sh | 65 ++++++++++++++ tests/prepare.sh | 74 ---------------- tests/test_cpp.sh | 205 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 270 insertions(+), 74 deletions(-) create mode 100644 tests/common_func.sh create mode 100644 tests/test_cpp.sh diff --git a/tests/common_func.sh b/tests/common_func.sh new file mode 100644 index 0000000000..3f0fa66b77 --- /dev/null +++ b/tests/common_func.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +function func_parser_key(){ + strs=$1 + IFS=":" + array=(${strs}) + tmp=${array[0]} + echo ${tmp} +} + +function func_parser_value(){ + strs=$1 + IFS=":" + array=(${strs}) + tmp=${array[1]} + echo ${tmp} +} + +function func_set_params(){ + key=$1 + value=$2 + if [ ${key}x = "null"x ];then + echo " " + elif [[ ${value} = "null" ]] || [[ ${value} = " " ]] || [ ${#value} -le 0 ];then + echo " " + else + echo "${key}=${value}" + fi +} + +function func_parser_params(){ + strs=$1 + IFS=":" + array=(${strs}) + key=${array[0]} + tmp=${array[1]} + IFS="|" + res="" + for _params in ${tmp[*]}; do + IFS="=" + array=(${_params}) + mode=${array[0]} + value=${array[1]} + if [[ ${mode} = ${MODE} ]]; then + IFS="|" + #echo $(func_set_params "${mode}" "${value}") + echo $value + break + fi + IFS="|" + done + echo ${res} +} + +function status_check(){ + last_status=$1 # the exit code + run_command=$2 + run_log=$3 + if [ $last_status -eq 0 ]; then + echo -e "\033[33m Run successfully with command - ${run_command}! \033[0m" | tee -a ${run_log} + else + echo -e "\033[33m Run failed with command - ${run_command}! \033[0m" | tee -a ${run_log} + fi +} + diff --git a/tests/prepare.sh b/tests/prepare.sh index f43ddb56fc..abb84c881e 100644 --- a/tests/prepare.sh +++ b/tests/prepare.sh @@ -136,77 +136,3 @@ if [ ${MODE} = "serving_infer" ];then wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar cd ./inference && tar xf ch_ppocr_mobile_v2.0_det_infer.tar && tar xf ch_ppocr_mobile_v2.0_rec_infer.tar && tar xf ch_ppocr_server_v2.0_rec_infer.tar && tar xf ch_ppocr_server_v2.0_det_infer.tar cd ../ fi - -if [ ${MODE} = "cpp_infer" ];then - cd deploy/cpp_infer - use_opencv=$(func_parser_value "${lines[52]}") - if [ ${use_opencv} = "True" ]; then - if [ -d "opencv-3.4.7/opencv3/" ] && [ $(md5sum opencv-3.4.7.tar.gz | awk -F ' ' '{print $1}') = "faa2b5950f8bee3f03118e600c74746a" ];then - echo "################### build opencv skipped ###################" - else - echo "################### build opencv ###################" - rm -rf opencv-3.4.7.tar.gz opencv-3.4.7/ - wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/opencv-3.4.7.tar.gz - tar -xf opencv-3.4.7.tar.gz - - cd opencv-3.4.7/ - install_path=$(pwd)/opencv3 - - rm -rf build - mkdir build - cd build - - cmake .. \ - -DCMAKE_INSTALL_PREFIX=${install_path} \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SHARED_LIBS=OFF \ - -DWITH_IPP=OFF \ - -DBUILD_IPP_IW=OFF \ - -DWITH_LAPACK=OFF \ - -DWITH_EIGEN=OFF \ - -DCMAKE_INSTALL_LIBDIR=lib64 \ - -DWITH_ZLIB=ON \ - -DBUILD_ZLIB=ON \ - -DWITH_JPEG=ON \ - -DBUILD_JPEG=ON \ - -DWITH_PNG=ON \ - -DBUILD_PNG=ON \ - -DWITH_TIFF=ON \ - -DBUILD_TIFF=ON - - make -j - make install - cd ../ - echo "################### build opencv finished ###################" - fi - fi - - - echo "################### build PaddleOCR demo ####################" - if [ ${use_opencv} = "True" ]; then - OPENCV_DIR=$(pwd)/opencv-3.4.7/opencv3/ - else - OPENCV_DIR='' - fi - LIB_DIR=$(pwd)/Paddle/build/paddle_inference_install_dir/ - CUDA_LIB_DIR=$(dirname `find /usr -name libcudart.so`) - CUDNN_LIB_DIR=$(dirname `find /usr -name libcudnn.so`) - - BUILD_DIR=build - rm -rf ${BUILD_DIR} - mkdir ${BUILD_DIR} - cd ${BUILD_DIR} - cmake .. \ - -DPADDLE_LIB=${LIB_DIR} \ - -DWITH_MKL=ON \ - -DWITH_GPU=OFF \ - -DWITH_STATIC_LIB=OFF \ - -DWITH_TENSORRT=OFF \ - -DOPENCV_DIR=${OPENCV_DIR} \ - -DCUDNN_LIB=${CUDNN_LIB_DIR} \ - -DCUDA_LIB=${CUDA_LIB_DIR} \ - -DTENSORRT_DIR=${TENSORRT_DIR} \ - - make -j - echo "################### build PaddleOCR demo finished ###################" -fi diff --git a/tests/test_cpp.sh b/tests/test_cpp.sh new file mode 100644 index 0000000000..76cb4639ae --- /dev/null +++ b/tests/test_cpp.sh @@ -0,0 +1,205 @@ +#!/bin/bash +source tests/common_func.sh + +FILENAME=$1 +dataline=$(awk 'NR==52, NR==66{print}' $FILENAME) + +# parser params +IFS=$'\n' +lines=(${dataline}) + +# parser cpp inference model +use_opencv=$(func_parser_value "${lines[1]}") +cpp_infer_model_dir_list=$(func_parser_value "${lines[2]}") +cpp_infer_is_quant=$(func_parser_value "${lines[3]}") +# parser cpp inference +inference_cmd=$(func_parser_value "${lines[4]}") +cpp_use_gpu_key=$(func_parser_key "${lines[5]}") +cpp_use_gpu_list=$(func_parser_value "${lines[5]}") +cpp_use_mkldnn_key=$(func_parser_key "${lines[6]}") +cpp_use_mkldnn_list=$(func_parser_value "${lines[6]}") +cpp_cpu_threads_key=$(func_parser_key "${lines[7]}") +cpp_cpu_threads_list=$(func_parser_value "${lines[7]}") +cpp_batch_size_key=$(func_parser_key "${lines[8]}") +cpp_batch_size_list=$(func_parser_value "${lines[8]}") +cpp_use_trt_key=$(func_parser_key "${lines[9]}") +cpp_use_trt_list=$(func_parser_value "${lines[9]}") +cpp_precision_key=$(func_parser_key "${lines[10]}") +cpp_precision_list=$(func_parser_value "${lines[10]}") +cpp_infer_model_key=$(func_parser_key "${lines[11]}") +cpp_image_dir_key=$(func_parser_key "${lines[12]}") +cpp_infer_img_dir=$(func_parser_value "${lines[12]}") +cpp_infer_key1=$(func_parser_key "${lines[13]}") +cpp_infer_value1=$(func_parser_value "${lines[13]}") +cpp_benchmark_key=$(func_parser_key "${lines[14]}") +cpp_benchmark_value=$(func_parser_value "${lines[14]}") +echo $use_opencv +echo $cpp_infer_img_dir + +LOG_PATH="./tests/output" +mkdir -p ${LOG_PATH} +status_log="${LOG_PATH}/results_cpp.log" + + +function func_cpp_inference(){ + IFS='|' + _script=$1 + _model_dir=$2 + _log_path=$3 + _img_dir=$4 + _flag_quant=$5 + # inference + for use_gpu in ${cpp_use_gpu_list[*]}; do + if [ ${use_gpu} = "False" ] || [ ${use_gpu} = "cpu" ]; then + for use_mkldnn in ${cpp_use_mkldnn_list[*]}; do + if [ ${use_mkldnn} = "False" ] && [ ${_flag_quant} = "True" ]; then + continue + fi + for threads in ${cpp_cpu_threads_list[*]}; do + for batch_size in ${cpp_batch_size_list[*]}; do + _save_log_path="${_log_path}/cpp_infer_cpu_usemkldnn_${use_mkldnn}_threads_${threads}_batchsize_${batch_size}.log" + set_infer_data=$(func_set_params "${cpp_image_dir_key}" "${_img_dir}") + set_benchmark=$(func_set_params "${cpp_benchmark_key}" "${cpp_benchmark_value}") + set_batchsize=$(func_set_params "${cpp_batch_size_key}" "${batch_size}") + set_cpu_threads=$(func_set_params "${cpp_cpu_threads_key}" "${threads}") + set_model_dir=$(func_set_params "${cpp_infer_model_key}" "${_model_dir}") + set_infer_params1=$(func_set_params "${cpp_infer_key1}" "${cpp_infer_value1}") + command="${_script} ${cpp_use_gpu_key}=${use_gpu} ${cpp_use_mkldnn_key}=${use_mkldnn} ${set_cpu_threads} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 " + eval $command + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${command}" "${status_log}" + done + done + done + elif [ ${use_gpu} = "True" ] || [ ${use_gpu} = "gpu" ]; then + for use_trt in ${cpp_use_trt_list[*]}; do + for precision in ${cpp_precision_list[*]}; do + if [[ ${_flag_quant} = "False" ]] && [[ ${precision} =~ "int8" ]]; then + continue + fi + if [[ ${precision} =~ "fp16" || ${precision} =~ "int8" ]] && [ ${use_trt} = "False" ]; then + continue + fi + if [[ ${use_trt} = "False" || ${precision} =~ "int8" ]] && [ ${_flag_quant} = "True" ]; then + continue + fi + for batch_size in ${cpp_batch_size_list[*]}; do + _save_log_path="${_log_path}/cpp_infer_gpu_usetrt_${use_trt}_precision_${precision}_batchsize_${batch_size}.log" + set_infer_data=$(func_set_params "${cpp_image_dir_key}" "${_img_dir}") + set_benchmark=$(func_set_params "${cpp_benchmark_key}" "${cpp_benchmark_value}") + set_batchsize=$(func_set_params "${cpp_batch_size_key}" "${batch_size}") + set_tensorrt=$(func_set_params "${cpp_use_trt_key}" "${use_trt}") + set_precision=$(func_set_params "${cpp_precision_key}" "${precision}") + set_model_dir=$(func_set_params "${cpp_infer_model_key}" "${_model_dir}") + set_infer_params1=$(func_set_params "${cpp_infer_key1}" "${cpp_infer_value1}") + command="${_script} ${cpp_use_gpu_key}=${use_gpu} ${set_tensorrt} ${set_precision} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 " + eval $command + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${command}" "${status_log}" + + done + done + done + else + echo "Does not support hardware other than CPU and GPU Currently!" + fi + done +} + + +cd deploy/cpp_infer +if [ ${use_opencv} = "True" ]; then + if [ -d "opencv-3.4.7/opencv3/" ] && [ $(md5sum opencv-3.4.7.tar.gz | awk -F ' ' '{print $1}') = "faa2b5950f8bee3f03118e600c74746a" ];then + echo "################### build opencv skipped ###################" + else + echo "################### build opencv ###################" + rm -rf opencv-3.4.7.tar.gz opencv-3.4.7/ + wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/opencv-3.4.7.tar.gz + tar -xf opencv-3.4.7.tar.gz + + cd opencv-3.4.7/ + install_path=$(pwd)/opencv3 + + rm -rf build + mkdir build + cd build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX=${install_path} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DWITH_IPP=OFF \ + -DBUILD_IPP_IW=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_EIGEN=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib64 \ + -DWITH_ZLIB=ON \ + -DBUILD_ZLIB=ON \ + -DWITH_JPEG=ON \ + -DBUILD_JPEG=ON \ + -DWITH_PNG=ON \ + -DBUILD_PNG=ON \ + -DWITH_TIFF=ON \ + -DBUILD_TIFF=ON + + make -j + make install + cd ../ + echo "################### build opencv finished ###################" + fi +fi + + +echo "################### build PaddleOCR demo ####################" +if [ ${use_opencv} = "True" ]; then + OPENCV_DIR=$(pwd)/opencv-3.4.7/opencv3/ +else + OPENCV_DIR='' +fi +LIB_DIR=$(pwd)/Paddle/build/paddle_inference_install_dir/ +CUDA_LIB_DIR=$(dirname `find /usr -name libcudart.so`) +CUDNN_LIB_DIR=$(dirname `find /usr -name libcudnn.so`) + +BUILD_DIR=build +rm -rf ${BUILD_DIR} +mkdir ${BUILD_DIR} +cd ${BUILD_DIR} +cmake .. \ + -DPADDLE_LIB=${LIB_DIR} \ + -DWITH_MKL=ON \ + -DWITH_GPU=OFF \ + -DWITH_STATIC_LIB=OFF \ + -DWITH_TENSORRT=OFF \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DCUDNN_LIB=${CUDNN_LIB_DIR} \ + -DCUDA_LIB=${CUDA_LIB_DIR} \ + -DTENSORRT_DIR=${TENSORRT_DIR} \ + +make -j +cd ../../../ +echo "################### build PaddleOCR demo finished ###################" + + +# set cuda device +GPUID=$2 +if [ ${#GPUID} -le 0 ];then + env=" " +else + env="export CUDA_VISIBLE_DEVICES=${GPUID}" +fi +set CUDA_VISIBLE_DEVICES +eval $env + + +echo "################### run test ###################" +export Count=0 +IFS="|" +infer_quant_flag=(${cpp_infer_is_quant}) +for infer_model in ${cpp_infer_model_dir_list[*]}; do + #run inference + is_quant=${infer_quant_flag[Count]} + func_cpp_inference "${inference_cmd}" "${infer_model}" "${LOG_PATH}" "${cpp_infer_img_dir}" ${is_quant} + Count=$(($Count + 1)) +done From 23dc0a3d9025d5d5658911bb0ceaf43b8a43a66d Mon Sep 17 00:00:00 2001 From: MissPenguin Date: Wed, 13 Oct 2021 06:37:16 +0000 Subject: [PATCH 36/42] split python and serving --- tests/test_cpp.sh | 3 +- tests/test_python.sh | 173 ++++++++++++++++++++++++++++++++++++++++++ tests/test_serving.sh | 131 ++++++++++++++++++++++++++++++++ 3 files changed, 305 insertions(+), 2 deletions(-) create mode 100644 tests/test_python.sh create mode 100644 tests/test_serving.sh diff --git a/tests/test_cpp.sh b/tests/test_cpp.sh index 76cb4639ae..f755858cd0 100644 --- a/tests/test_cpp.sh +++ b/tests/test_cpp.sh @@ -33,8 +33,7 @@ cpp_infer_key1=$(func_parser_key "${lines[13]}") cpp_infer_value1=$(func_parser_value "${lines[13]}") cpp_benchmark_key=$(func_parser_key "${lines[14]}") cpp_benchmark_value=$(func_parser_value "${lines[14]}") -echo $use_opencv -echo $cpp_infer_img_dir + LOG_PATH="./tests/output" mkdir -p ${LOG_PATH} diff --git a/tests/test_python.sh b/tests/test_python.sh new file mode 100644 index 0000000000..2f5fdf4e8d --- /dev/null +++ b/tests/test_python.sh @@ -0,0 +1,173 @@ +#!/bin/bash +source tests/common_func.sh + +FILENAME=$1 +dataline=$(awk 'NR==1, NR==51{print}' $FILENAME) + +# parser params +IFS=$'\n' +lines=(${dataline}) + +# The training params +model_name=$(func_parser_value "${lines[1]}") +python=$(func_parser_value "${lines[2]}") +gpu_list=$(func_parser_value "${lines[3]}") +train_use_gpu_key=$(func_parser_key "${lines[4]}") +train_use_gpu_value=$(func_parser_value "${lines[4]}") +autocast_list=$(func_parser_value "${lines[5]}") +autocast_key=$(func_parser_key "${lines[5]}") +epoch_key=$(func_parser_key "${lines[6]}") +epoch_num=$(func_parser_params "${lines[6]}") +save_model_key=$(func_parser_key "${lines[7]}") +train_batch_key=$(func_parser_key "${lines[8]}") +train_batch_value=$(func_parser_params "${lines[8]}") +pretrain_model_key=$(func_parser_key "${lines[9]}") +pretrain_model_value=$(func_parser_value "${lines[9]}") +train_model_name=$(func_parser_value "${lines[10]}") +train_infer_img_dir=$(func_parser_value "${lines[11]}") +train_param_key1=$(func_parser_key "${lines[12]}") +train_param_value1=$(func_parser_value "${lines[12]}") + +trainer_list=$(func_parser_value "${lines[14]}") +trainer_norm=$(func_parser_key "${lines[15]}") +norm_trainer=$(func_parser_value "${lines[15]}") +pact_key=$(func_parser_key "${lines[16]}") +pact_trainer=$(func_parser_value "${lines[16]}") +fpgm_key=$(func_parser_key "${lines[17]}") +fpgm_trainer=$(func_parser_value "${lines[17]}") +distill_key=$(func_parser_key "${lines[18]}") +distill_trainer=$(func_parser_value "${lines[18]}") +trainer_key1=$(func_parser_key "${lines[19]}") +trainer_value1=$(func_parser_value "${lines[19]}") +trainer_key2=$(func_parser_key "${lines[20]}") +trainer_value2=$(func_parser_value "${lines[20]}") + +eval_py=$(func_parser_value "${lines[23]}") +eval_key1=$(func_parser_key "${lines[24]}") +eval_value1=$(func_parser_value "${lines[24]}") + +save_infer_key=$(func_parser_key "${lines[27]}") +export_weight=$(func_parser_key "${lines[28]}") +norm_export=$(func_parser_value "${lines[29]}") +pact_export=$(func_parser_value "${lines[30]}") +fpgm_export=$(func_parser_value "${lines[31]}") +distill_export=$(func_parser_value "${lines[32]}") +export_key1=$(func_parser_key "${lines[33]}") +export_value1=$(func_parser_value "${lines[33]}") +export_key2=$(func_parser_key "${lines[34]}") +export_value2=$(func_parser_value "${lines[34]}") + +# parser inference model +infer_model_dir_list=$(func_parser_value "${lines[36]}") +infer_export_list=$(func_parser_value "${lines[37]}") +infer_is_quant=$(func_parser_value "${lines[38]}") +# parser inference +inference_py=$(func_parser_value "${lines[39]}") +use_gpu_key=$(func_parser_key "${lines[40]}") +use_gpu_list=$(func_parser_value "${lines[40]}") +use_mkldnn_key=$(func_parser_key "${lines[41]}") +use_mkldnn_list=$(func_parser_value "${lines[41]}") +cpu_threads_key=$(func_parser_key "${lines[42]}") +cpu_threads_list=$(func_parser_value "${lines[42]}") +batch_size_key=$(func_parser_key "${lines[43]}") +batch_size_list=$(func_parser_value "${lines[43]}") +use_trt_key=$(func_parser_key "${lines[44]}") +use_trt_list=$(func_parser_value "${lines[44]}") +precision_key=$(func_parser_key "${lines[45]}") +precision_list=$(func_parser_value "${lines[45]}") +infer_model_key=$(func_parser_key "${lines[46]}") +image_dir_key=$(func_parser_key "${lines[47]}") +infer_img_dir=$(func_parser_value "${lines[47]}") +save_log_key=$(func_parser_key "${lines[48]}") +benchmark_key=$(func_parser_key "${lines[49]}") +benchmark_value=$(func_parser_value "${lines[49]}") +infer_key1=$(func_parser_key "${lines[50]}") +infer_value1=$(func_parser_value "${lines[50]}") + + +LOG_PATH="./tests/output" +mkdir -p ${LOG_PATH} +status_log="${LOG_PATH}/results_python.log" + + +function func_inference(){ + IFS='|' + _python=$1 + _script=$2 + _model_dir=$3 + _log_path=$4 + _img_dir=$5 + _flag_quant=$6 + # inference + for use_gpu in ${use_gpu_list[*]}; do + if [ ${use_gpu} = "False" ] || [ ${use_gpu} = "cpu" ]; then + for use_mkldnn in ${use_mkldnn_list[*]}; do + if [ ${use_mkldnn} = "False" ] && [ ${_flag_quant} = "True" ]; then + continue + fi + for threads in ${cpu_threads_list[*]}; do + for batch_size in ${batch_size_list[*]}; do + _save_log_path="${_log_path}/infer_cpu_usemkldnn_${use_mkldnn}_threads_${threads}_batchsize_${batch_size}.log" + set_infer_data=$(func_set_params "${image_dir_key}" "${_img_dir}") + set_benchmark=$(func_set_params "${benchmark_key}" "${benchmark_value}") + set_batchsize=$(func_set_params "${batch_size_key}" "${batch_size}") + set_cpu_threads=$(func_set_params "${cpu_threads_key}" "${threads}") + set_model_dir=$(func_set_params "${infer_model_key}" "${_model_dir}") + set_infer_params1=$(func_set_params "${infer_key1}" "${infer_value1}") + command="${_python} ${_script} ${use_gpu_key}=${use_gpu} ${use_mkldnn_key}=${use_mkldnn} ${set_cpu_threads} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 " + eval $command + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${command}" "${status_log}" + done + done + done + elif [ ${use_gpu} = "True" ] || [ ${use_gpu} = "gpu" ]; then + for use_trt in ${use_trt_list[*]}; do + for precision in ${precision_list[*]}; do + if [[ ${_flag_quant} = "False" ]] && [[ ${precision} =~ "int8" ]]; then + continue + fi + if [[ ${precision} =~ "fp16" || ${precision} =~ "int8" ]] && [ ${use_trt} = "False" ]; then + continue + fi + if [[ ${use_trt} = "False" || ${precision} =~ "int8" ]] && [ ${_flag_quant} = "True" ]; then + continue + fi + for batch_size in ${batch_size_list[*]}; do + _save_log_path="${_log_path}/infer_gpu_usetrt_${use_trt}_precision_${precision}_batchsize_${batch_size}.log" + set_infer_data=$(func_set_params "${image_dir_key}" "${_img_dir}") + set_benchmark=$(func_set_params "${benchmark_key}" "${benchmark_value}") + set_batchsize=$(func_set_params "${batch_size_key}" "${batch_size}") + set_tensorrt=$(func_set_params "${use_trt_key}" "${use_trt}") + set_precision=$(func_set_params "${precision_key}" "${precision}") + set_model_dir=$(func_set_params "${infer_model_key}" "${_model_dir}") + set_infer_params1=$(func_set_params "${infer_key1}" "${infer_value1}") + command="${_python} ${_script} ${use_gpu_key}=${use_gpu} ${set_tensorrt} ${set_precision} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 " + eval $command + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${command}" "${status_log}" + + done + done + done + else + echo "Does not support hardware other than CPU and GPU Currently!" + fi + done +} + + +# set cuda device +GPUID=$2 +if [ ${#GPUID} -le 0 ];then + env=" " +else + env="export CUDA_VISIBLE_DEVICES=${GPUID}" +fi +set CUDA_VISIBLE_DEVICES +eval $env + + +echo "################### run test ###################" diff --git a/tests/test_serving.sh b/tests/test_serving.sh new file mode 100644 index 0000000000..8998ee7ee4 --- /dev/null +++ b/tests/test_serving.sh @@ -0,0 +1,131 @@ +#!/bin/bash +source tests/common_func.sh + +FILENAME=$1 +dataline=$(awk 'NR==67, NR==81{print}' $FILENAME) + +# parser params +IFS=$'\n' +lines=(${dataline}) + +# parser serving +trans_model_py=$(func_parser_value "${lines[1]}") +infer_model_dir_key=$(func_parser_key "${lines[2]}") +infer_model_dir_value=$(func_parser_value "${lines[2]}") +model_filename_key=$(func_parser_key "${lines[3]}") +model_filename_value=$(func_parser_value "${lines[3]}") +params_filename_key=$(func_parser_key "${lines[4]}") +params_filename_value=$(func_parser_value "${lines[4]}") +serving_server_key=$(func_parser_key "${lines[5]}") +serving_server_value=$(func_parser_value "${lines[5]}") +serving_client_key=$(func_parser_key "${lines[6]}") +serving_client_value=$(func_parser_value "${lines[6]}") +serving_dir_value=$(func_parser_value "${lines[7]}") +web_service_py=$(func_parser_value "${lines[8]}") +web_use_gpu_key=$(func_parser_key "${lines[9]}") +web_use_gpu_list=$(func_parser_value "${lines[9]}") +web_use_mkldnn_key=$(func_parser_key "${lines[10]}") +web_use_mkldnn_list=$(func_parser_value "${lines[10]}") +web_cpu_threads_key=$(func_parser_key "${lines[11]}") +web_cpu_threads_list=$(func_parser_value "${lines[11]}") +web_use_trt_key=$(func_parser_key "${lines[12]}") +web_use_trt_list=$(func_parser_value "${lines[12]}") +web_precision_key=$(func_parser_key "${lines[13]}") +web_precision_list=$(func_parser_value "${lines[13]}") +pipeline_py=$(func_parser_value "${lines[14]}") + + +LOG_PATH="./tests/output" +mkdir -p ${LOG_PATH} +status_log="${LOG_PATH}/results_serving.log" + + +function func_serving(){ + IFS='|' + _python=$1 + _script=$2 + _model_dir=$3 + # pdserving + set_dirname=$(func_set_params "${infer_model_dir_key}" "${infer_model_dir_value}") + set_model_filename=$(func_set_params "${model_filename_key}" "${model_filename_value}") + set_params_filename=$(func_set_params "${params_filename_key}" "${params_filename_value}") + set_serving_server=$(func_set_params "${serving_server_key}" "${serving_server_value}") + set_serving_client=$(func_set_params "${serving_client_key}" "${serving_client_value}") + trans_model_cmd="${python} ${trans_model_py} ${set_dirname} ${set_model_filename} ${set_params_filename} ${set_serving_server} ${set_serving_client}" + eval $trans_model_cmd + cd ${serving_dir_value} + echo $PWD + unset https_proxy + unset http_proxy + for use_gpu in ${web_use_gpu_list[*]}; do + echo ${ues_gpu} + if [ ${use_gpu} = "null" ]; then + for use_mkldnn in ${web_use_mkldnn_list[*]}; do + if [ ${use_mkldnn} = "False" ]; then + continue + fi + for threads in ${web_cpu_threads_list[*]}; do + _save_log_path="${_log_path}/server_cpu_usemkldnn_${use_mkldnn}_threads_${threads}_batchsize_1.log" + set_cpu_threads=$(func_set_params "${web_cpu_threads_key}" "${threads}") + web_service_cmd="${python} ${web_service_py} ${web_use_gpu_key}=${use_gpu} ${web_use_mkldnn_key}=${use_mkldnn} ${set_cpu_threads} &>${_save_log_path} &" + eval $web_service_cmd + sleep 2s + pipeline_cmd="${python} ${pipeline_py}" + eval $pipeline_cmd + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${pipeline_cmd}" "${status_log}" + PID=$! + kill $PID + sleep 2s + ps ux | grep -E 'web_service|pipeline' | awk '{print $2}' | xargs kill -s 9 + done + done + elif [ ${use_gpu} = "0" ]; then + for use_trt in ${web_use_trt_list[*]}; do + for precision in ${web_precision_list[*]}; do + if [[ ${_flag_quant} = "False" ]] && [[ ${precision} =~ "int8" ]]; then + continue + fi + if [[ ${precision} =~ "fp16" || ${precision} =~ "int8" ]] && [ ${use_trt} = "False" ]; then + continue + fi + if [[ ${use_trt} = "False" || ${precision} =~ "int8" ]] && [[ ${_flag_quant} = "True" ]]; then + continue + fi + _save_log_path="${_log_path}/infer_gpu_usetrt_${use_trt}_precision_${precision}_batchsize_1.log" + set_tensorrt=$(func_set_params "${web_use_trt_key}" "${use_trt}") + set_precision=$(func_set_params "${web_precision_key}" "${precision}") + web_service_cmd="${python} ${web_service_py} ${web_use_gpu_key}=${use_gpu} ${set_tensorrt} ${set_precision} &>${_save_log_path} & " + eval $web_service_cmd + sleep 2s + pipeline_cmd="${python} ${pipeline_py}" + eval $pipeline_cmd + last_status=${PIPESTATUS[0]} + eval "cat ${_save_log_path}" + status_check $last_status "${pipeline_cmd}" "${status_log}" + PID=$! + kill $PID + sleep 2s + ps ux | grep -E 'web_service|pipeline' | awk '{print $2}' | xargs kill -s 9 + done + done + else + echo "Does not support hardware other than CPU and GPU Currently!" + fi + done +} + + +# set cuda device +GPUID=$2 +if [ ${#GPUID} -le 0 ];then + env=" " +else + env="export CUDA_VISIBLE_DEVICES=${GPUID}" +fi +set CUDA_VISIBLE_DEVICES +eval $env + + +echo "################### run test ###################" From e28521e3019cd82792cb2729c3ac849b54d3516d Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 13 Oct 2021 16:26:26 +0800 Subject: [PATCH 37/42] fix bug --- ppocr/modeling/necks/rnn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ppocr/modeling/necks/rnn.py b/ppocr/modeling/necks/rnn.py index de87b3d989..86e649028f 100644 --- a/ppocr/modeling/necks/rnn.py +++ b/ppocr/modeling/necks/rnn.py @@ -51,7 +51,7 @@ class EncoderWithFC(nn.Layer): super(EncoderWithFC, self).__init__() self.out_channels = hidden_size weight_attr, bias_attr = get_para_bias_attr( - l2_decay=0.00001, k=in_channels, name='reduce_encoder_fea') + l2_decay=0.00001, k=in_channels) self.fc = nn.Linear( in_channels, hidden_size, From 992de4ef8c8daaf94a79dd7412dc7cfe47379a9b Mon Sep 17 00:00:00 2001 From: MissPenguin Date: Wed, 13 Oct 2021 09:18:00 +0000 Subject: [PATCH 38/42] fix doc --- ppstructure/layout/train_layoutparser_model.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ppstructure/layout/train_layoutparser_model.md b/ppstructure/layout/train_layoutparser_model.md index 08f5ebbf1a..58975d7160 100644 --- a/ppstructure/layout/train_layoutparser_model.md +++ b/ppstructure/layout/train_layoutparser_model.md @@ -4,9 +4,9 @@ ​ [1.1 Requirements](#Requirements) -​ [1.2 Install PaddleDetection](#Install PaddleDetection) +​ [1.2 Install PaddleDetection](#Install_PaddleDetection) -[2. Data preparation](#Data preparation) +[2. Data preparation](#Data_reparation) [3. Configuration](#Configuration) @@ -16,7 +16,7 @@ [6. Deployment](#Deployment) -​ [6.1 Export model](#Export model) +​ [6.1 Export model](#Export_model) ​ [6.2 Inference](#Inference) @@ -35,7 +35,7 @@ - CUDA >= 10.1 - cuDNN >= 7.6 - + ### 1.2 Install PaddleDetection @@ -51,7 +51,7 @@ pip install -r requirements.txt For more installation tutorials, please refer to: [Install doc](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/INSTALL_cn.md) - + ## 2. Data preparation @@ -165,7 +165,7 @@ python tools/infer.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --infer Use your trained model in Layout Parser - + ### 6.1 Export model From 008876d482751f470772f1fbfa7be6a5cb40c29f Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 13 Oct 2021 19:19:44 +0800 Subject: [PATCH 39/42] add copy paste and fix bug --- configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml | 1 + configs/det/ch_PP-OCRv2/ch_PP-OCR_det_distill.yml | 4 ++-- configs/det/ch_PP-OCRv2/ch_PP-OCR_det_dml.yml | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml index 0f08909add..ab484a4483 100644 --- a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml +++ b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml @@ -141,6 +141,7 @@ Train: img_mode: BGR channel_first: False - DetLabelEncode: # Class handling label + - CopyPaste: - IaaAugment: augmenter_args: - { 'type': Fliplr, 'args': { 'p': 0.5 } } diff --git a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_distill.yml b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_distill.yml index 1159d71bf9..46daeeb86d 100644 --- a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_distill.yml +++ b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_distill.yml @@ -68,8 +68,7 @@ Loss: ohem_ratio: 3 - DistillationDBLoss: weight: 1.0 - model_name_list: ["Student", "Teacher"] - # key: maps + model_name_list: ["Student"] name: DBLoss balance_loss: true main_loss_type: DiceLoss @@ -116,6 +115,7 @@ Train: img_mode: BGR channel_first: False - DetLabelEncode: # Class handling label + - CopyPaste: - IaaAugment: augmenter_args: - { 'type': Fliplr, 'args': { 'p': 0.5 } } diff --git a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_dml.yml b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_dml.yml index 7fe2d2e1a0..bfbc3b6268 100644 --- a/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_dml.yml +++ b/configs/det/ch_PP-OCRv2/ch_PP-OCR_det_dml.yml @@ -118,6 +118,7 @@ Train: img_mode: BGR channel_first: False - DetLabelEncode: # Class handling label + - CopyPaste: - IaaAugment: augmenter_args: - { 'type': Fliplr, 'args': { 'p': 0.5 } } From e760df4b1e59f98ee98b084746e3cf781e25cc9e Mon Sep 17 00:00:00 2001 From: andyjpaddle Date: Wed, 13 Oct 2021 11:40:38 +0000 Subject: [PATCH 40/42] add sar dict --- ppocr/losses/rec_sar_loss.py | 9 ++-- ppocr/utils/dict90.txt | 90 ++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 ppocr/utils/dict90.txt diff --git a/ppocr/losses/rec_sar_loss.py b/ppocr/losses/rec_sar_loss.py index 9e1c6495fb..c8bd8bb0ca 100644 --- a/ppocr/losses/rec_sar_loss.py +++ b/ppocr/losses/rec_sar_loss.py @@ -9,11 +9,14 @@ from paddle import nn class SARLoss(nn.Layer): def __init__(self, **kwargs): super(SARLoss, self).__init__() - self.loss_func = paddle.nn.loss.CrossEntropyLoss(reduction="mean", ignore_index=96) + self.loss_func = paddle.nn.loss.CrossEntropyLoss( + reduction="mean", ignore_index=92) def forward(self, predicts, batch): - predict = predicts[:, :-1, :] # ignore last index of outputs to be in same seq_len with targets - label = batch[1].astype("int64")[:, 1:] # ignore first index of target in loss calculation + predict = predicts[:, : + -1, :] # ignore last index of outputs to be in same seq_len with targets + label = batch[1].astype( + "int64")[:, 1:] # ignore first index of target in loss calculation batch_size, num_steps, num_classes = predict.shape[0], predict.shape[ 1], predict.shape[2] assert len(label.shape) == len(list(predict.shape)) - 1, \ diff --git a/ppocr/utils/dict90.txt b/ppocr/utils/dict90.txt new file mode 100644 index 0000000000..a945ae9c52 --- /dev/null +++ b/ppocr/utils/dict90.txt @@ -0,0 +1,90 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +: +; +< += +> +? +@ +[ +\ +] +_ +` +~ \ No newline at end of file From 283b46c46664a76021c0e79703adbcfe6ac40e31 Mon Sep 17 00:00:00 2001 From: andyjpaddle Date: Thu, 14 Oct 2021 01:42:34 +0000 Subject: [PATCH 41/42] update sar dict --- configs/rec/rec_r31_sar.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/rec/rec_r31_sar.yml b/configs/rec/rec_r31_sar.yml index 41609fdf28..f6fdc41c7c 100644 --- a/configs/rec/rec_r31_sar.yml +++ b/configs/rec/rec_r31_sar.yml @@ -15,7 +15,7 @@ Global: infer_img: # for data or label process character_dict_path: ppocr/utils/dict90.txt - character_type: EN_symbol + character_type: ch max_text_length: 30 infer_mode: False use_space_char: False From 60eb741a133cb334be70010e2aa774f9eaa6c89c Mon Sep 17 00:00:00 2001 From: andyjpaddle Date: Thu, 14 Oct 2021 03:01:19 +0000 Subject: [PATCH 42/42] add sar dict --- configs/rec/rec_r31_sar.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/rec/rec_r31_sar.yml b/configs/rec/rec_r31_sar.yml index f6fdc41c7c..41609fdf28 100644 --- a/configs/rec/rec_r31_sar.yml +++ b/configs/rec/rec_r31_sar.yml @@ -15,7 +15,7 @@ Global: infer_img: # for data or label process character_dict_path: ppocr/utils/dict90.txt - character_type: ch + character_type: EN_symbol max_text_length: 30 infer_mode: False use_space_char: False