From 50d7062fedb07cce6a814fbdad210957df0b8941 Mon Sep 17 00:00:00 2001 From: iamhankai Date: Thu, 25 Mar 2021 22:28:44 +0800 Subject: [PATCH] add TNT model --- model_zoo/research/cv/TNT/eval.py | 75 ++++ model_zoo/research/cv/TNT/fig/tnt.PNG | Bin 0 -> 150857 bytes .../research/cv/TNT/mindpsore_hub_conf.py | 22 + model_zoo/research/cv/TNT/readme.md | 128 ++++++ model_zoo/research/cv/TNT/src/config.py | 54 +++ model_zoo/research/cv/TNT/src/pet_dataset.py | 97 +++++ model_zoo/research/cv/TNT/src/tnt.py | 390 ++++++++++++++++++ 7 files changed, 766 insertions(+) create mode 100644 model_zoo/research/cv/TNT/eval.py create mode 100644 model_zoo/research/cv/TNT/fig/tnt.PNG create mode 100644 model_zoo/research/cv/TNT/mindpsore_hub_conf.py create mode 100644 model_zoo/research/cv/TNT/readme.md create mode 100644 model_zoo/research/cv/TNT/src/config.py create mode 100644 model_zoo/research/cv/TNT/src/pet_dataset.py create mode 100644 model_zoo/research/cv/TNT/src/tnt.py diff --git a/model_zoo/research/cv/TNT/eval.py b/model_zoo/research/cv/TNT/eval.py new file mode 100644 index 0000000000..2d09684cff --- /dev/null +++ b/model_zoo/research/cv/TNT/eval.py @@ -0,0 +1,75 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ +""" +eval. +""" +import os +import argparse +from mindspore import context +from mindspore import nn +from mindspore.train.model import Model +from mindspore.train.serialization import load_checkpoint, load_param_into_net +from mindspore.common import dtype as mstype +from src.pet_dataset import create_dataset +from src.config import config_ascend, config_gpu +from src.tnt import tnt_b + + +parser = argparse.ArgumentParser(description='Image classification') +parser.add_argument('--checkpoint_path', type=str, default=None, help='Checkpoint file path') +parser.add_argument('--dataset_path', type=str, default=None, help='Dataset path') +parser.add_argument('--platform', type=str, default=None, help='run platform') +args_opt = parser.parse_args() + + +if __name__ == '__main__': + config_platform = None + if args_opt.platform == "Ascend": + config_platform = config_ascend + device_id = int(os.getenv('DEVICE_ID')) + context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", + device_id=device_id, save_graphs=False) + elif args_opt.platform == "GPU": + config_platform = config_gpu + context.set_context(mode=context.PYNATIVE_MODE, + device_target="GPU", save_graphs=False) + else: + raise ValueError("Unsupported platform.") + + loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') + + net = tnt_b(num_class=config_platform.num_classes) + + if args_opt.checkpoint_path: + param_dict = load_checkpoint(args_opt.checkpoint_path) + load_param_into_net(net, param_dict) + net.set_train(False) + + if args_opt.platform == "Ascend": + net.to_float(mstype.float16) + for _, cell in net.cells_and_names(): + if isinstance(cell, nn.Dense): + cell.to_float(mstype.float32) + + dataset = create_dataset(dataset_path=args_opt.dataset_path, + do_train=False, + config=config_platform, + platform=args_opt.platform, + batch_size=config_platform.batch_size) + step_size = dataset.get_dataset_size() + + model = Model(net, loss_fn=loss, metrics={'acc'}) + res = model.eval(dataset) + print("result:", res, "ckpt=", args_opt.checkpoint_path) diff --git a/model_zoo/research/cv/TNT/fig/tnt.PNG b/model_zoo/research/cv/TNT/fig/tnt.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9cdac80e82bb755adfbc38083836028567690e0c GIT binary patch literal 150857 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

%}tC`n(RJJ|iy_lLj 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 N{ZRiw)qT70{{cP9K`;OS literal 0 HcmV?d00001 diff --git a/model_zoo/research/cv/TNT/mindpsore_hub_conf.py b/model_zoo/research/cv/TNT/mindpsore_hub_conf.py new file mode 100644 index 0000000000..7ea7538c4f --- /dev/null +++ b/model_zoo/research/cv/TNT/mindpsore_hub_conf.py @@ -0,0 +1,22 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ +"""hub config.""" +from src.tnt import tnt_b + + +def create_network(name, *args, **kwargs): + if name == 'TNT-B': + return tnt_b(*args, **kwargs) + raise NotImplementedError(f"{name} is not implemented in the repo") diff --git a/model_zoo/research/cv/TNT/readme.md b/model_zoo/research/cv/TNT/readme.md new file mode 100644 index 0000000000..16b3e5d549 --- /dev/null +++ b/model_zoo/research/cv/TNT/readme.md @@ -0,0 +1,128 @@ +# Contents + +- [TNT Description](#tnt-description) +- [Model Architecture](#model-architecture) +- [Dataset](#dataset) +- [Environment Requirements](#environment-requirements) +- [Script Description](#script-description) + - [Script and Sample Code](#script-and-sample-code) + - [Training Process](#training-process) + - [Evaluation Process](#evaluation-process) + - [Evaluation](#evaluation) +- [Model Description](#model-description) + - [Performance](#performance) + - [Training Performance](#evaluation-performance) + - [Inference Performance](#evaluation-performance) +- [Description of Random Situation](#description-of-random-situation) +- [ModelZoo Homepage](#modelzoo-homepage) + +## [TNT Description](#contents) + +The TNT (Transformer in Transformer) network is a pure transformer model for visual recognition. TNT treats an image as a sequence of patches and treats a patch as a sequence of pixels. TNT block utilizes a outer transformer block to process the sequence of patches and an inner transformer block to process the sequence of pixels. + +[Paper](https://arxiv.org/abs/2103.00112): Kai Han, An Xiao, Enhua Wu, Jianyuan Guo, Chunjing Xu, Yunhe Wang. Transformer in Transformer. preprint 2021. + +## [Model architecture](#contents) + +The overall network architecture of TNT is show below: +![](./fig/tnt.PNG) + +## [Dataset](#contents) + +Dataset used: [Oxford-IIIT Pet](https://www.robots.ox.ac.uk/~vgg/data/pets/) + +- Dataset size: 7049 colorful images in 1000 classes + - Train: 3680 images + - Test: 3369 images +- Data format: RGB images. + - Note: Data will be processed in src/dataset.py + +## [Environment Requirements](#contents) + +- Hardware(Ascend/GPU) + - Prepare hardware environment with Ascend or GPU. If you want to try Ascend, please send the [application form](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/file/other/Ascend%20Model%20Zoo%E4%BD%93%E9%AA%8C%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E8%A1%A8.docx) to ascend@huawei.com. Once approved, you can get the resources. +- Framework + - [MindSpore](https://www.mindspore.cn/install/en) +- For more information, please check the resources below£º + - [MindSpore Tutorials](https://www.mindspore.cn/tutorial/training/en/master/index.html) + - [MindSpore Python API](https://www.mindspore.cn/doc/api_python/en/master/index.html) + +## [Script description](#contents) + +### [Script and sample code](#contents) + +```python +TNT +├── eval.py # inference entry +├── fig +│ └── tnt.png # the illustration of TNT network +├── readme.md # Readme +└── src + ├── config.py # config of model and data + ├── pet_dataset.py # dataset loader + └── tnt.py # TNT network +``` + +## [Training process](#contents) + +To Be Done + +## [Eval process](#contents) + +### Usage + +After installing MindSpore via the official website, you can start evaluation as follows: + +### Launch + +```bash +# infer example + GPU: python eval.py --model tnt-b --dataset_path ~/Pets/test.mindrecord --platform GPU --checkpoint_path [CHECKPOINT_PATH] +``` + +> checkpoint can be downloaded at https://www.mindspore.cn/resources/hub. + +### Result + +```bash +result: {'acc': 0.95} ckpt= ./tnt-b-pets.ckpt +``` + +## [Model Description](#contents) + +### [Performance](#contents) + +#### Evaluation Performance + +##### TNT on ImageNet2012 + +| Parameters | | | +| -------------------------- | -------------------------------------- |---------------------------------- | +| Model Version | TNT-B |TNT-S| +| uploaded Date | 21/03/2021 (month/day/year) | 21/03/2021 (month/day/year) | +| MindSpore Version | 1.1 | 1.1 | +| Dataset | ImageNet2012 | ImageNet2012| +| Input size | 224x224 | 224x224| +| Parameters (M) | 86.4 | 23.8 | +| FLOPs (M) | 14.1 | 5.2 | +| Accuracy (Top1) | 82.8 | 81.3 | + +###### TNT on Oxford-IIIT Pet + +| Parameters | | | +| -------------------------- | -------------------------------------- |---------------------------------- | +| Model Version | TNT-B |TNT-S| +| uploaded Date | 21/03/2021 (month/day/year) | 21/03/2021 (month/day/year) | +| MindSpore Version | 1.1 | 1.1 | +| Dataset | Oxford-IIIT Pet | Oxford-IIIT Pet| +| Input size | 384x384 | 384x384| +| Parameters (M) | 86.4 | 23.8 | +| Accuracy (Top1) | 95.0 | 94.7 | + +## [Description of Random Situation](#contents) + +In dataset.py, we set the seed inside "create_dataset" function. We also use random seed in train.py. + +## [ModelZoo Homepage](#contents) + +Please check the official [homepage](https://gitee.com/mindspore/mindspore/tree/master/model_zoo). \ No newline at end of file diff --git a/model_zoo/research/cv/TNT/src/config.py b/model_zoo/research/cv/TNT/src/config.py new file mode 100644 index 0000000000..f51d63efeb --- /dev/null +++ b/model_zoo/research/cv/TNT/src/config.py @@ -0,0 +1,54 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ +""" +network config setting, will be used in train.py and eval.py +""" +from easydict import EasyDict as ed + +config_ascend = ed({ + "num_classes": 37, + "image_height": 384, + "image_width": 384, + "batch_size": 50, + "epoch_size": 300, + "warmup_epochs": 5, + "lr": 1e-3, + "momentum": 0.9, + "weight_decay": 0.05, + "label_smooth": 0.1, + "loss_scale": 1024, + "save_checkpoint": True, + "save_checkpoint_epochs": 1, + "keep_checkpoint_max": 200, + "save_checkpoint_path": "./checkpoint", +}) + +config_gpu = ed({ + "num_classes": 37, + "image_height": 384, + "image_width": 384, + "batch_size": 50, + "epoch_size": 300, + "warmup_epochs": 5, + "lr": 1e-3, + "momentum": 0.9, + "weight_decay": 0.05, + "label_smooth": 0.1, + "loss_scale": 1024, + "save_checkpoint": True, + "save_checkpoint_epochs": 1, + "keep_checkpoint_max": 500, + "save_checkpoint_path": "./checkpoint", +}) diff --git a/model_zoo/research/cv/TNT/src/pet_dataset.py b/model_zoo/research/cv/TNT/src/pet_dataset.py new file mode 100644 index 0000000000..1ce4025008 --- /dev/null +++ b/model_zoo/research/cv/TNT/src/pet_dataset.py @@ -0,0 +1,97 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ +""" +create train or eval dataset. +""" +import os +import mindspore.common.dtype as mstype +import mindspore.dataset.engine as de +import mindspore.dataset.transforms.py_transforms as py_transforms +import mindspore.dataset.transforms.c_transforms as c_transforms +import mindspore.dataset.vision.py_transforms as py_vision +from mindspore.dataset.vision import Inter + +def create_dataset(dataset_path, do_train, config, platform, repeat_num=1, batch_size=1): + """ + create a train or eval dataset + + Args: + dataset_path(string): the path of dataset. + do_train(bool): whether dataset is used for train or eval. + repeat_num(int): the repeat times of dataset. Default: 1 + batch_size(int): the batch size of dataset. Default: 32 + + Returns: + dataset + """ + if platform == "Ascend": + rank_size = int(os.getenv("RANK_SIZE")) + rank_id = int(os.getenv("RANK_ID")) + if rank_size == 1: + ds = de.MindDataset(dataset_path, num_parallel_workers=8, shuffle=True) + else: + ds = de.MindDataset(dataset_path, num_parallel_workers=8, shuffle=True, + num_shards=rank_size, shard_id=rank_id) + elif platform == "GPU": + if do_train: + from mindspore.communication.management import get_rank, get_group_size + ds = de.MindDataset(dataset_path, num_parallel_workers=8, shuffle=True, + num_shards=get_group_size(), shard_id=get_rank()) + else: + ds = de.MindDataset(dataset_path, num_parallel_workers=8, shuffle=False) + else: + raise ValueError("Unsupported platform.") + + resize_height = config.image_height + resize_width = config.image_width + buffer_size = 1000 + + # define map operations + random_resize_crop_bicubic = py_vision.RandomResizedCrop(size=(resize_height, resize_width), + scale=(0.08, 1.0), ratio=(3./4., 4./3.), + interpolation=Inter.BICUBIC) + random_horizontal_flip_op = py_vision.RandomHorizontalFlip(0.5) + color_jitter = 0.4 + adjust_range = (max(0, 1 - color_jitter), 1 + color_jitter) + random_color_jitter_op = py_vision.RandomColorAdjust(brightness=adjust_range, + contrast=adjust_range, + saturation=adjust_range) + + decode_p = py_vision.Decode() + resize_p = py_vision.Resize(int(resize_height), interpolation=Inter.BICUBIC) + center_crop_p = py_vision.CenterCrop(resize_height) + totensor = py_vision.ToTensor() + normalize_p = py_vision.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) + + if do_train: + trans = py_transforms.Compose([decode_p, random_resize_crop_bicubic, random_horizontal_flip_op, + random_color_jitter_op, totensor, normalize_p]) + else: + trans = py_transforms.Compose([decode_p, resize_p, center_crop_p, totensor, normalize_p]) + + type_cast_op = c_transforms.TypeCast(mstype.int32) + + ds = ds.map(input_columns="image", operations=trans, num_parallel_workers=8) + ds = ds.map(input_columns="label_list", operations=type_cast_op, num_parallel_workers=8) + + # apply shuffle operations + ds = ds.shuffle(buffer_size=buffer_size) + + # apply batch operations + ds = ds.batch(batch_size, drop_remainder=True) + + # apply dataset repeat operation + ds = ds.repeat(repeat_num) + return ds diff --git a/model_zoo/research/cv/TNT/src/tnt.py b/model_zoo/research/cv/TNT/src/tnt.py new file mode 100644 index 0000000000..6ff7253977 --- /dev/null +++ b/model_zoo/research/cv/TNT/src/tnt.py @@ -0,0 +1,390 @@ +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ +"""TNT""" +import math +import copy +import numpy as np +import mindspore.common.dtype as mstype +from mindspore import nn +from mindspore.ops import operations as P +from mindspore.common.tensor import Tensor +from mindspore.common.parameter import Parameter + + +class MLP(nn.Cell): + """MLP""" + + def __init__(self, in_features, hidden_features=None, out_features=None, dropout=0.): + super(MLP, self).__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Dense(in_features, hidden_features) + self.dropout = nn.Dropout(1. - dropout) + self.fc2 = nn.Dense(hidden_features, out_features) + self.act = nn.GELU() + + def construct(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.dropout(x) + x = self.fc2(x) + x = self.dropout(x) + return x + + +class Attention(nn.Cell): + """Multi-head Attention""" + + def __init__(self, dim, hidden_dim=None, num_heads=8, qkv_bias=False, attn_drop=0., proj_drop=0.): + super(Attention, self).__init__() + hidden_dim = hidden_dim or dim + self.hidden_dim = hidden_dim + self.num_heads = num_heads + head_dim = hidden_dim // num_heads + self.head_dim = head_dim + self.scale = head_dim ** -0.5 + + self.qk = nn.Dense(dim, hidden_dim * 2, has_bias=qkv_bias) + self.v = nn.Dense(dim, hidden_dim, has_bias=qkv_bias) + self.softmax = nn.Softmax(axis=-1) + self.batmatmul_trans_b = P.BatchMatMul(transpose_b=True) + self.attn_drop = nn.Dropout(1. - attn_drop) + self.batmatmul = P.BatchMatMul() + self.proj = nn.Dense(hidden_dim, dim) + self.proj_drop = nn.Dropout(1. - proj_drop) + + self.transpose = P.Transpose() + self.reshape = P.Reshape() + + def construct(self, x): + """Multi-head Attention""" + B, N, _ = x.shape + qk = self.transpose(self.reshape(self.qk(x), (B, N, 2, self.num_heads, self.head_dim)), (2, 0, 3, 1, 4)) + q, k = qk[0], qk[1] + v = self.transpose(self.reshape(self.v(x), (B, N, self.num_heads, self.head_dim)), (0, 2, 1, 3)) + + attn = self.softmax(self.batmatmul_trans_b(q, k) * self.scale) + attn = self.attn_drop(attn) + x = self.reshape(self.transpose(self.batmatmul(attn, v), (0, 2, 1, 3)), (B, N, -1)) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class DropConnect(nn.Cell): + """drop connect implementation""" + + def __init__(self, drop_connect_rate=0., seed0=0, seed1=0): + super(DropConnect, self).__init__() + self.shape = P.Shape() + self.dtype = P.DType() + self.keep_prob = 1 - drop_connect_rate + self.dropout = P.Dropout(keep_prob=self.keep_prob) + self.keep_prob_tensor = Tensor(self.keep_prob, dtype=mstype.float32) + + def construct(self, x): + shape = self.shape(x) + dtype = self.dtype(x) + ones_tensor = P.Fill()(dtype, (shape[0], 1, 1, 1), 1) + _, mask = self.dropout(ones_tensor) + x = x * mask + x = x / self.keep_prob_tensor + return x + + +class Pixel2Patch(nn.Cell): + """Projecting Pixel Embedding to Patch Embedding""" + + def __init__(self, outer_dim): + super(Pixel2Patch, self).__init__() + self.norm_proj = nn.LayerNorm([outer_dim]) + self.proj = nn.Dense(outer_dim, outer_dim) + self.fake = Parameter(Tensor(np.zeros((1, 1, outer_dim)), + mstype.float32), name='fake', requires_grad=False) + self.reshape = P.Reshape() + self.tile = P.Tile() + self.concat = P.Concat(axis=1) + + def construct(self, pixel_embed, patch_embed): + B, N, _ = patch_embed.shape + proj = self.reshape(pixel_embed, (B, N - 1, -1)) + proj = self.proj(self.norm_proj(proj)) + proj = self.concat((self.tile(self.fake, (B, 1, 1)), proj)) + patch_embed = patch_embed + proj + return patch_embed + + +class TNTBlock(nn.Cell): + """TNT Block""" + + def __init__(self, inner_config, outer_config, dropout=0., attn_dropout=0., drop_connect=0.): + super().__init__() + # inner transformer + inner_dim = inner_config['dim'] + num_heads = inner_config['num_heads'] + mlp_ratio = inner_config['mlp_ratio'] + self.inner_norm1 = nn.LayerNorm([inner_dim]) + self.inner_attn = Attention(inner_dim, num_heads=num_heads, qkv_bias=True, attn_drop=attn_dropout, + proj_drop=dropout) + self.inner_norm2 = nn.LayerNorm([inner_dim]) + self.inner_mlp = MLP(inner_dim, int(inner_dim * mlp_ratio), dropout=dropout) + # outer transformer + outer_dim = outer_config['dim'] + num_heads = outer_config['num_heads'] + mlp_ratio = outer_config['mlp_ratio'] + self.outer_norm1 = nn.LayerNorm([outer_dim]) + self.outer_attn = Attention(outer_dim, num_heads=num_heads, qkv_bias=True, attn_drop=attn_dropout, + proj_drop=dropout) + self.outer_norm2 = nn.LayerNorm([outer_dim]) + self.outer_mlp = MLP(outer_dim, int(outer_dim * mlp_ratio), dropout=dropout) + # pixel2patch + self.pixel2patch = Pixel2Patch(outer_dim) + # assistant + self.drop_connect = DropConnect(drop_connect) + self.reshape = P.Reshape() + self.tile = P.Tile() + self.concat = P.Concat(axis=1) + + def construct(self, pixel_embed, patch_embed): + """TNT Block""" + pixel_embed = pixel_embed + self.inner_attn(self.inner_norm1(pixel_embed)) + pixel_embed = pixel_embed + self.inner_mlp(self.inner_norm2(pixel_embed)) + + patch_embed = self.pixel2patch(pixel_embed, patch_embed) + + patch_embed = patch_embed + self.outer_attn(self.outer_norm1(patch_embed)) + patch_embed = patch_embed + self.outer_mlp(self.outer_norm2(patch_embed)) + return pixel_embed, patch_embed + + +def _get_clones(module, N): + """get_clones""" + return nn.CellList([copy.deepcopy(module) for i in range(N)]) + + +class TNTEncoder(nn.Cell): + """TNT""" + + def __init__(self, encoder_layer, num_layers): + super().__init__() + self.layers = _get_clones(encoder_layer, num_layers) + self.num_layers = num_layers + + def construct(self, pixel_embed, patch_embed): + """TNT""" + for layer in self.layers: + pixel_embed, patch_embed = layer(pixel_embed, patch_embed) + return pixel_embed, patch_embed + + +class _stride_unfold_(nn.Cell): + """Unfold with stride""" + + def __init__( + self, kernel_size, stride=-1): + super(_stride_unfold_, self).__init__() + if stride == -1: + self.stride = kernel_size + else: + self.stride = stride + self.kernel_size = kernel_size + self.reshape = P.Reshape() + self.transpose = P.Transpose() + self.unfold = _unfold_(kernel_size) + + def construct(self, x): + """TNT""" + N, C, H, W = x.shape + leftup_idx_x = [] + leftup_idx_y = [] + nh = int((H - self.kernel_size) / self.stride + 1) + nw = int((W - self.kernel_size) / self.stride + 1) + for i in range(nh): + leftup_idx_x.append(i * self.stride) + for i in range(nw): + leftup_idx_y.append(i * self.stride) + NumBlock_x = len(leftup_idx_x) + NumBlock_y = len(leftup_idx_y) + zeroslike = P.ZerosLike() + cc_2 = P.Concat(axis=2) + cc_3 = P.Concat(axis=3) + unf_x = P.Zeros()((N, C, NumBlock_x * self.kernel_size, + NumBlock_y * self.kernel_size), mstype.float32) + N, C, H, W = unf_x.shape + for i in range(NumBlock_x): + for j in range(NumBlock_y): + unf_i = i * self.kernel_size + unf_j = j * self.kernel_size + org_i = leftup_idx_x[i] + org_j = leftup_idx_y[j] + fill = x[:, :, org_i:org_i + self.kernel_size, + org_j:org_j + self.kernel_size] + unf_x += cc_3((cc_3((zeroslike(unf_x[:, :, :, :unf_j]), + cc_2((cc_2((zeroslike(unf_x[:, :, :unf_i, unf_j:unf_j + self.kernel_size]), fill)), + zeroslike(unf_x[:, :, unf_i + self.kernel_size:, + unf_j:unf_j + self.kernel_size]))))), + zeroslike(unf_x[:, :, :, unf_j + self.kernel_size:]))) + y = self.unfold(unf_x) + return y + + +class _unfold_(nn.Cell): + """Unfold""" + + def __init__( + self, kernel_size, stride=-1): + super(_unfold_, self).__init__() + if stride == -1: + self.stride = kernel_size + self.kernel_size = kernel_size + + self.reshape = P.Reshape() + self.transpose = P.Transpose() + + def construct(self, x): + """TNT""" + N, C, H, W = x.shape + numH = int(H / self.kernel_size) + numW = int(W / self.kernel_size) + if numH * self.kernel_size != H or numW * self.kernel_size != W: + x = x[:, :, :numH * self.kernel_size, :, numW * self.kernel_size] + output_img = self.reshape(x, (N, C, numH, self.kernel_size, W)) + + output_img = self.transpose(output_img, (0, 1, 2, 4, 3)) + + output_img = self.reshape(output_img, (N, C, int( + numH * numW), self.kernel_size, self.kernel_size)) + + output_img = self.transpose(output_img, (0, 2, 1, 4, 3)) + + output_img = self.reshape(output_img, (N, int(numH * numW), -1)) + return output_img + + +class PixelEmbed(nn.Cell): + """Image to Pixel Embedding""" + + def __init__(self, img_size, patch_size=16, in_channels=3, embedding_dim=768, stride=4): + super(PixelEmbed, self).__init__() + self.num_patches = (img_size // patch_size) * (img_size // patch_size) + new_patch_size = math.ceil(patch_size / stride) + self.new_patch_size = new_patch_size + self.inner_dim = embedding_dim // new_patch_size // new_patch_size + self.proj = nn.Conv2d(in_channels, self.inner_dim, kernel_size=7, pad_mode='pad', + padding=3, stride=stride, has_bias=True) + self.unfold = _unfold_(kernel_size=new_patch_size) + self.reshape = P.Reshape() + self.transpose = P.Transpose() + + def construct(self, x): + B = x.shape[0] + x = self.proj(x) # B, C, H, W + x = self.unfold(x) # B, N, Ck2 + x = self.reshape(x, (B * self.num_patches, self.inner_dim, -1)) # B*N, C, M + x = self.transpose(x, (0, 2, 1)) # B*N, M, C + return x + + +class TNT(nn.Cell): + """TNT""" + + def __init__( + self, + img_size, + patch_size, + num_channels, + embedding_dim, + num_heads, + num_layers, + hidden_dim, + num_class, + stride=4, + dropout=0, + attn_dropout=0, + drop_connect=0.1 + ): + super(TNT, self).__init__() + + assert embedding_dim % num_heads == 0 + assert img_size % patch_size == 0 + self.embedding_dim = embedding_dim + self.num_heads = num_heads + self.patch_size = patch_size + self.num_channels = num_channels + self.img_size = img_size + self.num_patches = int((img_size // patch_size) ** 2) + new_patch_size = math.ceil(patch_size / stride) + inner_dim = embedding_dim // new_patch_size // new_patch_size + + self.patch_pos = Parameter(Tensor(np.random.rand(1, self.num_patches + 1, embedding_dim), + mstype.float32), name='patch_pos', requires_grad=True) + self.pixel_pos = Parameter(Tensor(np.random.rand(1, inner_dim, new_patch_size * new_patch_size), + mstype.float32), name='pixel_pos', requires_grad=True) + self.cls_token = Parameter(Tensor(np.random.rand(1, 1, embedding_dim), + mstype.float32), requires_grad=True) + self.patch_embed = Parameter(Tensor(np.zeros((1, self.num_patches, embedding_dim)), + mstype.float32), name='patch_embed', requires_grad=False) + self.fake = Parameter(Tensor(np.zeros((1, 1, embedding_dim)), + mstype.float32), name='fake', requires_grad=False) + self.pos_drop = nn.Dropout(1. - dropout) + + self.pixel_embed = PixelEmbed(img_size, patch_size, num_channels, embedding_dim, stride) + self.pixel2patch = Pixel2Patch(embedding_dim) + + inner_config = {'dim': inner_dim, 'num_heads': 4, 'mlp_ratio': 4} + outer_config = {'dim': embedding_dim, 'num_heads': num_heads, 'mlp_ratio': hidden_dim / embedding_dim} + encoder_layer = TNTBlock(inner_config, outer_config, dropout=dropout, attn_dropout=attn_dropout, + drop_connect=drop_connect) + self.encoder = TNTEncoder(encoder_layer, num_layers) + + self.head = nn.SequentialCell( + nn.LayerNorm([embedding_dim]), + nn.Dense(embedding_dim, num_class) + ) + + self.add = P.TensorAdd() + self.reshape = P.Reshape() + self.concat = P.Concat(axis=1) + self.tile = P.Tile() + self.transpose = P.Transpose() + + def construct(self, x): + """TNT""" + B, _, _, _ = x.shape + pixel_embed = self.pixel_embed(x) + pixel_embed = pixel_embed + self.transpose(self.pixel_pos, (0, 2, 1)) # B*N, M, C + + patch_embed = self.concat((self.cls_token, self.patch_embed)) + patch_embed = self.tile(patch_embed, (B, 1, 1)) + patch_embed = self.pos_drop(patch_embed + self.patch_pos) + + patch_embed = self.pixel2patch(pixel_embed, patch_embed) + + pixel_embed, patch_embed = self.encoder(pixel_embed, patch_embed) + + y = self.head(patch_embed[:, 0]) + return y + + +def tnt_b(num_class): + return TNT(img_size=384, + patch_size=16, + num_channels=3, + embedding_dim=640, + num_heads=10, + num_layers=12, + hidden_dim=640*4, + stride=4, + num_class=num_class)