From f2cd16f340aa11afadb8fa90c29f85ca1b75a600 Mon Sep 17 00:00:00 2001 From: aktersnurra Date: Mon, 16 Nov 2020 20:26:32 +0100 Subject: Added a whitening transform. --- src/notebooks/02b-emnist-lines-dataset.ipynb | 14 +- src/notebooks/Untitled.ipynb | 289 ++++++--------------------- src/text_recognizer/datasets/transforms.py | 8 + src/text_recognizer/networks/crnn.py | 12 +- 4 files changed, 82 insertions(+), 241 deletions(-) (limited to 'src') diff --git a/src/notebooks/02b-emnist-lines-dataset.ipynb b/src/notebooks/02b-emnist-lines-dataset.ipynb index 0f2626f..a9b13b4 100644 --- a/src/notebooks/02b-emnist-lines-dataset.ipynb +++ b/src/notebooks/02b-emnist-lines-dataset.ipynb @@ -31,28 +31,28 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "emnist_lines = EmnistLinesDataset(train=False,\n", - " max_length = 34,\n", + "emnist_lines = EmnistLinesDataset(train=True,\n", + " max_length = 97,\n", " min_overlap = 0.0,\n", " max_overlap = 0.33,\n", - " num_samples = 5_000,)" + " num_samples = 50_000,)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2020-11-12 08:12:02.064 | DEBUG | text_recognizer.datasets.emnist_lines_dataset:_generate_data:154 - Generating data...\n", - "2020-11-12 08:12:05.917 | DEBUG | text_recognizer.datasets.emnist_lines_dataset:_load_data:147 - EmnistLinesDataset loading data from HDF5...\n" + "2020-11-15 19:49:33.374 | DEBUG | text_recognizer.datasets.emnist_lines_dataset:_generate_data:154 - Generating data...\n", + "2020-11-15 19:50:10.082 | DEBUG | text_recognizer.datasets.emnist_lines_dataset:_load_data:147 - EmnistLinesDataset loading data from HDF5...\n" ] } ], diff --git a/src/notebooks/Untitled.ipynb b/src/notebooks/Untitled.ipynb index f114ed9..208f098 100644 --- a/src/notebooks/Untitled.ipynb +++ b/src/notebooks/Untitled.ipynb @@ -40,19 +40,28 @@ "metadata": {}, "outputs": [], "source": [ - "from text_recognizer.models import VisionTransformerModel, TransformerEncoderModel\n", - "from text_recognizer.datasets import IamLinesDataset\n", - "from text_recognizer.datasets.transforms import Compose, AddTokens" + "from text_recognizer.models import TransformerModel\n", + "from text_recognizer.datasets import IamLinesDataset" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "target_transform = Compose([torch.tensor, AddTokens(init_token=\"\", pad_token=\"_\", eos_token=\"\")])\n", - "dataset = IamLinesDataset(train=False, init_token=\"\", pad_token=\"_\", eos_token=\"\", target_transform=target_transform)\n", + "dataset = IamLinesDataset(train=False,\n", + " init_token=\"\",\n", + " pad_token=\"_\",\n", + " eos_token=\"\",\n", + " transform=[{\"type\": \"ToTensor\", \"args\": {}}],\n", + " target_transform=[\n", + " {\n", + " \"type\": \"AddTokens\",\n", + " \"args\": {\"init_token\": \"\", \"pad_token\": \"_\", \"eos_token\": \"\"},\n", + " }\n", + " ],\n", + " )\n", "dataset.load_or_generate_data()" ] }, @@ -62,55 +71,53 @@ "metadata": {}, "outputs": [], "source": [ - "config_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_CNNTransformer/1102_221553/config.yml\"\n", + "config_path = \"../training/experiments/TransformerModel_IamLinesDataset_CNNTransformer/1116_082932/config.yml\"\n", "with open(config_path, \"r\") as f:\n", " experiment_config = yaml.safe_load(f)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'CNNTransformer'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "dataset_args = experiment_config.get(\"dataset\", {})\n", - "datasets_module = importlib.import_module(\"text_recognizer.datasets\")\n", - "dataset_ = getattr(datasets_module, dataset_args[\"type\"])\n", - "\n", - "network_module = importlib.import_module(\"text_recognizer.networks\")\n", - "network_fn_ = getattr(network_module, experiment_config[\"network\"][\"type\"])" + "experiment_config[\"network\"][\"type\"]" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2020-11-03 07:32:07.256 | DEBUG | text_recognizer.models.base:load_weights:457 - Loading network with pretrained weights.\n" + "2020-11-16 20:07:51.973 | DEBUG | text_recognizer.models.base:load_weights:432 - Loading network with pretrained weights.\n" ] } ], "source": [ - "model = VisionTransformerModel(network_fn=network_fn_, dataset=dataset_, dataset_args=dataset_args)" + "model = TransformerModel(network_fn=experiment_config[\"network\"][\"type\"], dataset=experiment_config[\"dataset\"][\"type\"], dataset_args=experiment_config[\"dataset\"])" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2020-11-03 07:32:10.285 | DEBUG | text_recognizer.models.base:load_from_checkpoint:404 - Loading checkpoint...\n" - ] - } - ], + "outputs": [], "source": [ "checkpoint_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_CNNTransformer/1102_221553/model/last.pt\"\n", "model.load_from_checkpoint(checkpoint_path)" @@ -118,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -127,101 +134,71 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ - "data, target = dataset[0]\n", + "data, target = dataset[1006]\n", "sentence = convert_y_label_to_string(target, dataset) " ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 102, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([98])" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "target.shape" + "data1 = (data - data.mean()) / data.std()" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "([], [])" + "torch.Size([98])" ] }, - "execution_count": 26, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "plt.figure(figsize=(20, 20))\n", - "plt.title(sentence)\n", - "plt.imshow(data.squeeze(0).numpy(), cmap='gray')\n", - "plt.xticks([])\n", - "plt.yticks([])" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - " def make_len_mask(inp):\n", - " return (inp == 79).transpose(0, 1)" + "target.shape" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 110, "metadata": {}, "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "torch.Size([98, 1])" + "
" ] }, - "execution_count": 34, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "make_len_mask(target.unsqueeze(0)).shape" + "plt.figure(figsize=(40, 20))\n", + "plt.title(sentence)\n", + "plt.imshow(data1.squeeze(0).numpy(), cmap='gray')\n", + "plt.xticks([])\n", + "plt.yticks([])\n", + "plt.show()" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 111, "metadata": { "scrolled": true }, @@ -229,163 +206,17 @@ { "data": { "text/plain": [ - "('to stel mire of a thar chishirchit', 0.20226626098155975)" + "('Horbwargethers sis tHater alate Bate Bath Con Hats the Bateries.',\n", + " 0.2612667977809906)" ] }, - "execution_count": 27, + "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model.predict_on_image(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2020-10-31 16:35:40.255 | DEBUG | text_recognizer.models.base:load_weights:457 - Loading network with pretrained weights.\n", - "2020-10-31 16:35:40.837 | DEBUG | text_recognizer.models.base:load_from_checkpoint:404 - Loading checkpoint...\n" - ] - } - ], - "source": [ - "target_transform = Compose([torch.tensor, AddTokens(pad_token=\"_\", eos_token=\"\")])\n", - "dataset = IamLinesDataset(train=False, pad_token=\"_\", eos_token=\"\", target_transform=target_transform)\n", - "dataset.load_or_generate_data()\n", - "\n", - "\n", - "config_path = \"../training/experiments/TransformerEncoderModel_IamLinesDataset_CNNTransformerEncoder/1031_150630/config.yml\"\n", - "with open(config_path, \"r\") as f:\n", - " experiment_config = yaml.safe_load(f)\n", - "\n", - "\n", - "dataset_args = experiment_config.get(\"dataset\", {})\n", - "datasets_module = importlib.import_module(\"text_recognizer.datasets\")\n", - "dataset_ = getattr(datasets_module, dataset_args[\"type\"])\n", - "\n", - "network_module = importlib.import_module(\"text_recognizer.networks\")\n", - "network_fn_ = getattr(network_module, experiment_config[\"network\"][\"type\"])\n", - "\n", - "\n", - "checkpoint_path = \"../training/experiments/TransformerEncoderModel_IamLinesDataset_CNNTransformerEncoder/1031_150630/model/last.pt\"\n", - "\n", - "\n", - "model = TransformerEncoderModel(network_fn=network_fn_, dataset=dataset_, dataset_args=dataset_args)\n", - "model.load_from_checkpoint(checkpoint_path)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "===============================================================================================\n", - "Layer (type:depth-idx) Output Shape Param #\n", - "===============================================================================================\n", - "├─WideResidualNetwork: 1-1 [-1, 256, 2, 60] --\n", - "| └─Sequential: 2-1 [-1, 256, 2, 60] --\n", - "| | └─Conv2d: 3-1 [-1, 8, 28, 952] 72\n", - "| | └─Sequential: 3-2 [-1, 16, 28, 952] --\n", - "| | | └─WideBlock: 4-1 [-1, 16, 28, 952] 3,632\n", - "| | └─Sequential: 3-3 [-1, 32, 14, 476] --\n", - "| | | └─WideBlock: 4-2 [-1, 32, 14, 476] 14,432\n", - "| | └─Sequential: 3-4 [-1, 64, 7, 238] --\n", - "| | | └─WideBlock: 4-3 [-1, 64, 7, 238] 57,536\n", - "| | └─Sequential: 3-5 [-1, 128, 4, 119] --\n", - "| | | └─WideBlock: 4-4 [-1, 128, 4, 119] 229,760\n", - "| | └─Sequential: 3-6 [-1, 256, 2, 60] --\n", - "| | | └─WideBlock: 4-5 [-1, 256, 2, 60] 918,272\n", - "├─Conv2d: 1-2 [-1, 97, 2, 60] 24,929\n", - "├─Linear: 1-3 [-1, 97, 96] 11,616\n", - "├─PositionalEncoding: 1-4 [-1, 97, 96] --\n", - "| └─Dropout: 2-2 [-1, 97, 96] --\n", - "├─TransformerEncoder: 1-5 [-1, 2, 96] --\n", - "| └─ModuleList: 2 [] --\n", - "| | └─TransformerEncoderLayer: 3-7 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-6 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-7 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-8 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-9 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-10 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-11 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-12 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-13 [-1, 2, 96] 192\n", - "| | └─TransformerEncoderLayer: 3-8 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-14 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-15 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-16 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-17 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-18 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-19 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-20 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-21 [-1, 2, 96] 192\n", - "| | └─TransformerEncoderLayer: 3-9 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-22 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-23 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-24 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-25 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-26 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-27 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-28 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-29 [-1, 2, 96] 192\n", - "| | └─TransformerEncoderLayer: 3-10 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-30 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-31 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-32 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-33 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-34 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-35 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-36 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-37 [-1, 2, 96] 192\n", - "| | └─TransformerEncoderLayer: 3-11 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-38 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-39 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-40 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-41 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-42 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-43 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-44 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-45 [-1, 2, 96] 192\n", - "| | └─TransformerEncoderLayer: 3-12 [-1, 2, 96] --\n", - "| | | └─MultiheadAttention: 4-46 [-1, 2, 96] 37,248\n", - "| | | └─Dropout: 4-47 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-48 [-1, 2, 96] 192\n", - "| | | └─Linear: 4-49 [-1, 2, 2048] 198,656\n", - "| | | └─Dropout: 4-50 [-1, 2, 2048] --\n", - "| | | └─Linear: 4-51 [-1, 2, 96] 196,704\n", - "| | | └─Dropout: 4-52 [-1, 2, 96] --\n", - "| | | └─LayerNorm: 4-53 [-1, 2, 96] 192\n", - "| └─LayerNorm: 2-3 [-1, 2, 96] 192\n", - "├─Linear: 1-6 [-1, 97, 81] 7,857\n", - "===============================================================================================\n", - "Total params: 3,866,250\n", - "Trainable params: 3,866,250\n", - "Non-trainable params: 0\n", - "Total mult-adds (M): 18.78\n", - "===============================================================================================\n", - "Input size (MB): 0.10\n", - "Forward/backward pass size (MB): 2.06\n", - "Params size (MB): 14.75\n", - "Estimated Total Size (MB): 16.91\n", - "===============================================================================================\n" - ] - } - ], - "source": [ - "model.summary(experiment_config[\"train_args\"][\"input_shape\"], 4)" + "model.predict_on_image(data1)" ] }, { diff --git a/src/text_recognizer/datasets/transforms.py b/src/text_recognizer/datasets/transforms.py index 1105f23..d1ca127 100644 --- a/src/text_recognizer/datasets/transforms.py +++ b/src/text_recognizer/datasets/transforms.py @@ -64,3 +64,11 @@ class AddTokens: target = torch.cat([sos, target], dim=0) return target + + +class Whitening: + """Whitening of Tensor, i.e. set mean to zero and std to one.""" + + def __call__(self, x: Tensor) -> Tensor: + """Apply the whitening.""" + return (x - x.mean()) / x.std() diff --git a/src/text_recognizer/networks/crnn.py b/src/text_recognizer/networks/crnn.py index 9747429..778e232 100644 --- a/src/text_recognizer/networks/crnn.py +++ b/src/text_recognizer/networks/crnn.py @@ -1,4 +1,4 @@ -"""LSTM with CTC for handwritten text recognition within a line.""" +"""CRNN for handwritten text recognition.""" from typing import Dict, Tuple from einops import rearrange, reduce @@ -89,20 +89,22 @@ class ConvolutionalRecurrentNetwork(nn.Module): x = self.backbone(x) - # Avgerage pooling. + # Average pooling. if self.avg_pool: x = reduce(x, "(b t) c h w -> t b c", "mean", b=b, t=t) else: x = rearrange(x, "(b t) h -> t b h", b=b, t=t) else: # Encode the entire image with a CNN, and use the channels as temporal dimension. - b = x.shape[0] x = self.backbone(x) - x = rearrange(x, "b c h w -> c b (h w)", b=b) + x = rearrange(x, "b c h w -> b w c h") + if self.adaptive_pool is not None: + x = self.adaptive_pool(x) + x = x.squeeze(3) # Sequence predictions. x, _ = self.rnn(x) - # Sequence to classifcation layer. + # Sequence to classification layer. x = self.decoder(x) return x -- cgit v1.2.3-70-g09d2