diff options
Diffstat (limited to 'src/notebooks/Untitled.ipynb')
-rw-r--r-- | src/notebooks/Untitled.ipynb | 651 |
1 files changed, 617 insertions, 34 deletions
diff --git a/src/notebooks/Untitled.ipynb b/src/notebooks/Untitled.ipynb index 76c4d28..f114ed9 100644 --- a/src/notebooks/Untitled.ipynb +++ b/src/notebooks/Untitled.ipynb @@ -2,18 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", @@ -35,50 +26,50 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "def convert_y_label_to_string(y, dataset=dataset):\n", + "def convert_y_label_to_string(y, dataset):\n", " return ''.join([dataset.mapper(int(i)) for i in y])" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "from text_recognizer.models import VisionTransformerModel\n", + "from text_recognizer.models import VisionTransformerModel, TransformerEncoderModel\n", "from text_recognizer.datasets import IamLinesDataset\n", "from text_recognizer.datasets.transforms import Compose, AddTokens" ] }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "target_transform = Compose([torch.tensor, AddTokens(init_token=\"<sos>\", eos_token=\"<eos>\")])\n", - "dataset = IamLinesDataset(train=True, init_token=\"<sos>\", pad_token=\"_\", eos_token=\"<eos>\", target_transform=target_transform)\n", + "target_transform = Compose([torch.tensor, AddTokens(init_token=\"<sos>\", pad_token=\"_\", eos_token=\"<eos>\")])\n", + "dataset = IamLinesDataset(train=False, init_token=\"<sos>\", pad_token=\"_\", eos_token=\"<eos>\", target_transform=target_transform)\n", "dataset.load_or_generate_data()" ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "config_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_VisionTransformer/1021_083538/config.yml\"\n", + "config_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_CNNTransformer/1102_221553/config.yml\"\n", "with open(config_path, \"r\") as f:\n", " experiment_config = yaml.safe_load(f)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -92,14 +83,14 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2020-10-21 23:27:40.719 | DEBUG | text_recognizer.models.base:load_weights:454 - Loading network with pretrained weights.\n" + "2020-11-03 07:32:07.256 | DEBUG | text_recognizer.models.base:load_weights:457 - Loading network with pretrained weights.\n" ] } ], @@ -109,25 +100,25 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2020-10-21 23:29:55.892 | DEBUG | text_recognizer.models.base:load_from_checkpoint:402 - Loading checkpoint...\n" + "2020-11-03 07:32:10.285 | DEBUG | text_recognizer.models.base:load_from_checkpoint:404 - Loading checkpoint...\n" ] } ], "source": [ - "checkpoint_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_VisionTransformer/1021_083538/model/last.pt\"\n", + "checkpoint_path = \"../training/experiments/VisionTransformerModel_IamLinesDataset_CNNTransformer/1102_221553/model/last.pt\"\n", "model.load_from_checkpoint(checkpoint_path)" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -136,17 +127,37 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ - "data, target = dataset[18]\n", + "data, target = dataset[0]\n", "sentence = convert_y_label_to_string(target, dataset) " ] }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([98])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "target.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -155,13 +166,13 @@ "([], [])" ] }, - "execution_count": 91, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "<Figure size 1440x1440 with 1 Axes>" ] @@ -180,16 +191,259 @@ }, { "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + " def make_len_mask(inp):\n", + " return (inp == 79).transpose(0, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([98, 1])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "make_len_mask(target.unsqueeze(0)).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('to stel mire of a thar chishirchit<eos>', 0.20226626098155975)" + ] + }, + "execution_count": 27, + "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=\"<eos>\")])\n", + "dataset = IamLinesDataset(train=False, pad_token=\"_\", eos_token=\"<eos>\", 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)" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "data, target = dataset[110]\n", + "sentence = convert_y_label_to_string(target, dataset) " + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([], [])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 1440x1440 with 1 Axes>" + ] + }, + "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": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "('Since 1958, 13 Labour life Peers and<eos>', 0.9999997615814209)" + "('Boyis cheed iitrincy- tarisaing one', 0.3990435302257538)" ] }, - "execution_count": 92, + "execution_count": 112, "metadata": {}, "output_type": "execute_result" } @@ -280,6 +534,335 @@ }, { "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "t=[12,1,1,1,1,1,4,4,4,4,4]" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t[t!=79]" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "x = torch.arange(10)\n", + "value = 5\n", + "x = x[x!=value]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([0, 1, 2, 3, 4, 6, 7, 8, 9])" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "t = torch.rand(98)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(1.7656e-43)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t.cumprod(dim=0)[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "pred_tokens = torch.Tensor([1,2,21,31, 89, 89])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "pred_tokens = torch.stack([pred_tokens, pred_tokens])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 1., 2., 21., 31., 89., 89.],\n", + " [ 1., 2., 21., 31., 89., 89.]])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pred_tokens" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "eos_token_index = torch.nonzero(\n", + " pred_tokens == 89, as_tuple=False,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "if eos_token_index.nelement():\n", + " print(eos_token_index[0][0].item())" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[0, 4],\n", + " [0, 5],\n", + " [1, 4],\n", + " [1, 5]])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eos_token_index" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eos_token_index.nelement()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "from text_recognizer.models import accuracy" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "pred = torch.Tensor([1,2,21,31, 80, 80]).unsqueeze(0)\n", + "target = torch.Tensor([1,2,1,31, 80, 80]).unsqueeze(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "pred = torch.stack([pred, pred])\n", + "target = torch.stack([target, target])" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [], + "source": [ + "target = torch.tensor([0, 1, 2, 3])\n", + "pred = torch.tensor([0, 2, 1, 3])" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accuracy(pred, target)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "acc = (target.argmax(-1) == pred.argmax(-1)).float()\n", + "\n", + "# return float(100 * acc.sum() / len(acc))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[1.],\n", + " [1.]])" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acc" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "train_acc = (pred == target).sum().item()/target.shape[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.3333333333333335" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_acc" + ] + }, + { + "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], |