summaryrefslogtreecommitdiff
path: root/src/notebooks/Untitled.ipynb
blob: ca0b848b892d02b1f0c360a85d39a1e9f901a5fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "import importlib\n",
    "import cv2\n",
    "import yaml\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "from torch import nn\n",
    "from importlib.util import find_spec\n",
    "if find_spec(\"text_recognizer\") is None:\n",
    "    import sys\n",
    "    sys.path.append('..')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_y_label_to_string(y, dataset):\n",
    "    return ''.join([dataset.mapper(int(i)) for i in y])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from text_recognizer.models import TransformerModel\n",
    "from text_recognizer.datasets import IamLinesDataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = IamLinesDataset(train=False,\n",
    "        init_token=\"<sos>\",\n",
    "        pad_token=\"_\",\n",
    "        eos_token=\"<eos>\",\n",
    "        transform=[{\"type\": \"ToTensor\", \"args\": {}}],\n",
    "        target_transform=[\n",
    "            {\n",
    "                \"type\": \"AddTokens\",\n",
    "                \"args\": {\"init_token\": \"<sos>\", \"pad_token\": \"_\", \"eos_token\": \"<eos>\"},\n",
    "            }\n",
    "        ],\n",
    "    )\n",
    "dataset.load_or_generate_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "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": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'CNNTransformer'"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "experiment_config[\"network\"][\"type\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2020-11-18 20:31:23.104 | DEBUG    | text_recognizer.models.base:load_weights:432 - Loading network with pretrained weights.\n"
     ]
    }
   ],
   "source": [
    "model = TransformerModel(network_fn=experiment_config[\"network\"][\"type\"], dataset=experiment_config[\"dataset\"][\"type\"], dataset_args=experiment_config[\"dataset\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2020-11-18 20:34:49.381 | DEBUG    | text_recognizer.models.base:load_from_checkpoint:379 - Loading checkpoint...\n"
     ]
    }
   ],
   "source": [
    "ckpt_path = \"../training/experiments/TransformerModel_IamLinesDataset_CNNTransformer/1116_082932/model/best.pt\"\n",
    "model.load_from_checkpoint(ckpt_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.eval()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "data, target = dataset[1]\n",
    "sentence = convert_y_label_to_string(target, dataset) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([98])"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = data * (data > 0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torchvision import transforms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [],
   "source": [
    "ra = transforms.RandomAffine((-1.1, 1.1), scale=(0.5, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = ra(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Y49SrlevXkWcUirlTjnllK4sa7nyjW98o4inT59eyl1yySXLuhygSVOmTOnuEpry9a9/vYjnz59fyrW1tS3rclY4e++9dxHPmjWrQ2sMGjSoNL7rrruKeM6cOR1ac2W3aNGiIp42bVrT83r2XLl+Vtf+jpswYUI3VgKsDDbZZJOmjnvllVe6uBIAAAAAAAAAAKCWOyUBAAAAAAAAAAAAAAAALdGUBAAAAAAAAAAAAAAAALREUxIAAAAAAAAAAAAAAADQkp7dXQArjwMPPLA07tOnTxGPGjWq4bw99tijy2paVvr3718at7W1dcq666+/fhHXnk+AztC3b98i7qzPLd611157FfGNN97YoTVWWaXcX96vX78ivvDCCztW2EquV69eHZr39ttvd24hH3ATJkzo7hKAlci6667b1HGLFy/u4kq63mGHHVYa1/4ee/7550u53r17F/G1115bys2YMaMLqgMAAAAAAAAAgDJ3SgIAAAAAAAAAAAAAAABaoikJAAAAAAAAAAAAAAAAaEnP7i6AFdspp5yy1LgV99xzT2n89NNPF/HHPvaxDq25LFx11VVFPHny5FLukEMOKY2nTZtWxFdccUXTe7z++utFXHte6HwDBw4sjXfeeecinjlzZik3a9asIr711lu7tK4PmtGjRxfxpptuWsq9+OKLRfyd73xnmdVEx2255Zadsk7//v2L+N///d9LuYULFxbxM888U8rdfffdRdzW1tYptXyQrLXWWkU8Y8aMpufVfh7Vn7M333zz/Re2kps9e3ZTx+24446l8fz585uaN2DAgNJ46tSpTc2LiDj22GOL+Oc//3nT87pCK3V/UAwaNKg0njRpUrfUsazUfvZGRGy//fZFvNFGG5Vy999/fxFPmTKlQ/sNGzasNL7uuus6tA4sTbPfbxtvvHHD3O9+97vSuPY3/IIFC0q52tfv9OnTm9r7/Tj//POL+N577y3lLr744qbWGDFiRGncym8LAAAAAAAAAADoKHdKAgAAAAAAAAAAAAAAAFqiKQkAAAAAAAAAAAAAAABoiaYkAAAAAAAAAAAAAAAAoCU9u7sAVixnnXVWaXzCCSd0+h4vvPBCEffv37+U+/KXv1zEp59+eqfv3YpTTz21iB999NF2jz3//POLeOrUqaXcjBkzGs7r3bt3ET/yyCMtVvjBN3z48CL+9Kc/Xco9/PDDRbzjjjuWcmPGjCni9zr3tbbbbrvS+NBDDy3iF198sZQ755xzGq6z++67F/Fpp51Wyp100klN17M8OPfcc0vjiy66qIjb2tqannfcccd1bmF0itdee61D84499tjSeKuttiriG2+8sZQbP358w3VqP0frtff6Wl706dOniC+99NKm562zzjpFvGjRolJu4sSJTa+z5557FvHQoUNLublz5xbxySef3PSaK4IJEyY0ddzAgQNL49tuu62peT17ln9+77rrrkV83333tTt3/fXXb2oPlu6MM84oja+88soivuCCC5peZ8CAAaVx/W+3zjBs2LAifvrpp0u5hx56qOG82t/iDzzwQCn31FNPFfGDDz5Yym2xxRZFPHLkyFLu/vvvL+Lbb7+94d6bb755wxwdU3st/vu//7uUa+U37sqk/m+G2r8nat/zERHjxo0r4vr39T777FPE06dP78wSl+qll14q4quvvrpDayxYsKCzygEAAAAAAAAAgKa5UxIAAAAAAAAAAAAAAADQEk1JAAAAAAAAAAAAAAAAQEt6dncBLP922mmnIn722We7fL8NNtigiNva2kq5733ve12+fyMHH3xwaTx27Nim595www1FfOCBB5ZyP/3pTxvO23777Yu4/lysCHr06FHEI0aMaHjc8OHDS+NHH320qfUHDx5cGg8ZMqQ0bm/P9kyePHmpcUTE+eefX8Q//OEPO7T+D37wg9L4V7/6VYfW6ajRo0cX8UUXXVTKtfc6rP2sePnllzu/sBXE4YcfXsRjxoxZpnsfeeSRpfG8efOamnfiiSeWxquvvnpp/J3vfKdD9Zx88slFfPbZZ5dyI0eO7NCaHyRvvvlmh+allIq49jsxImLq1KlNr7PvvvsW8THHHFPK1X4eHnDAAaXcH/7wh6b3WJH17t27NG72e3jKlCml8YABA5rec/78+U0fy/9W+3srIuKCCy7o0Dq1v78iIubMmVPE06dPb3qdoUOHFvHmm29eytW+TrbbbrtS7l/+5V+KeIsttijlzjjjjCJu5bfhjBkzivjmm28u5Q466KAiHjRoUCk3adKkIj7vvPOa3o/m1H7ONPv7dkWVc27quNq/HyLK37Xjxo1rOK/+87X+M74jfvKTn5TG7f1dd+aZZ3Zoj8742wIAAAAAAAAAAN4Pd0oCAAAAAAAAAAAAAAAAWqIpCQAAAAAAAAAAAAAAAGiJpiQAAAAAAAAAAAAAAACgJT27uwCWf5/4xCeK+P777+/y/V5++eWGuY022qjL92/k85//fGk8duzYpufeeuutRfztb3+74XFDhgwpjefMmdP0HsuDE088sTQ+88wzm5o3bty4pvfYaaedinjo0KGl3OGHH970Oh01d+7cIu7fv38p19bW1tQaRx11VGk8derUIp48efL7qG7pPvvZz5bGtc+h2ZojIvbdd98iPu20095/YcuRYcOGlcYzZswo4kcffbSU+/jHP75MalqaHXfcsTSeN29ew2Nrr2ffvn1Lue9///udWldExFprrdXpay5rI0eOLI1vu+22Dq0zc+bMIv7qV79ayh1xxBEN59V/5r322msNj+3Tp08RP/PMM62WuMKqfd0/8cQTnbJm7Wf4e1lzzTU7Zc+VyXbbbVfEDz/8cKes+c4775TG6623XlPzttlmm9K49vt01KhRDefdd999pfHOO+/c8NhWvpebdcUVVxTxmDFjSrlJkyZ1+n68a/311+/uEj4w3nrrrYa52r8h/vjHP5Zyzb4/d9hhh9K4M777evfu/b7XqHfJJZeUxvXvSQAAAAAAAAAAWNbcKQkAAAAAAAAAAAAAAABoiaYkAAAAAAAAAAAAAAAAoCU9u7sAln/vvPNOEU+bNq3L93v88ccb5t54440u37+RVVddtVPWefrppxvmPvnJT5bGTzzxRKfs2Z1GjBhRxDfddFOX73fIIYcU8fnnn9/l+9Vbd911i7itra3peUOHDi3it99+u5Tbeuuti3jy5Mnvo7ql22WXXUrjO+64o6l5xx9/fGk8derUTqtpebPhhhuWxrNnzy7i1VZbrZRba621lklNSwwaNKiIH3744VJuwIABDeftuuuuRXzRRRd1el31evTo0eV7dLX99tuvNL7zzjs7tM7ChQuLeN68eU3Pq7+eEyZMaHhs7fX9z//8zxaqW/7tv//+RXz99deXcvvuu28RH3HEEcuspiVmzZrV6WsefPDBRTx27NiGxw0fPrw0HjduXKfX0hVWWeXd/w+G2u/giPJ36/jx45tes/43X7O/AY8++ujS+Kqrrmp6z1pz584t4jXXXLNDa3TUiy++WBrvuOOORfzggw8u01pWBi+88EJ3l9CyAw44oDT+wx/+0CnrLlq0qIg/85nPlHK9evUq4ltuuaWUq/0+a8+Xv/zl0rj+eTTrmmuuKeJTTjml6Xm33357Ec+ZM6eUO+OMM4r4W9/6VofqAgAAAAAAAACAruJOSQAAAAAAAAAAAAAAAEBLNCUBAAAAAAAAAAAAAAAALdGUBAAAAAAAAAAAAAAAALSkZ3cXwPJv3rx5Rbz//vuXctdff/37Xv/HP/5xaTxz5syGx77yyitFPHDgwFLu7rvvft+1tOf111/vlHUmTZpUGh977LFFfPrpp5dyo0aN6pQ9l6VBgwaVxrNnzy7iBx98sMv3X2211Yp4xowZXb7fdtttVxr36NGjQ+vsvffeRXzNNdeUcptvvnmH1mzWrFmzSuNNNtmk4bHf+973irj+ud50002dWtfy5OWXXy6Na89N/ev+7bffXhYlFQYPHlzEJ5xwQik3evTohvOeeeaZIl68eHHnFxYRO+20UxHXvneXJ7XvicmTJ5dyCxcu7NCaX/rSl4r4qaeeanpezrk0fuutt4p42LBhpdy1117bodpWBF/72teKeNNNNy3l7rnnnmVdTklKqdPX7Nu3b1PH7b777qXxuHHjmppX/1tl/vz5RVz/ebf22msX8THHHNPU+u+lra2tiI844ohSrvZzZfz48U2vudlmm5XGl112WcNj99xzzyK+7bbbSrnbb7+96T1rnXTSSUU8ceLEDq3RUeuvv35pXPsdtttuu5VyU6ZM6dJaDjvssNK4d+/eRXzmmWd26d4REZ/73OdK41tvvbXT96h9TsuLrqq59rdT/W/fkSNHNpxX+/fTI488UspNnz69iA844IAO1TVixIjS+Mknnyzi+t9H/fv3L+IBAwaUcgsWLCjiuXPnlnJd/V4CAAAAAAAAAID3w52SAAAAAAAAAAAAAAAAgJZoSgIAAAAAAAAAAAAAAABa0rO7C2D5d9111xXxL3/5y1Lu+uuv79Cav/jFL4r40UcfLeU22GCDhvPGjRtXxKeeemopd/nllxfxI488UsrNnz+/4X7Nuvnmmzs0LyLioIMOKuLPfOYzpdzPf/7zhvNWXXXVDu/ZXfbff//S+Oijj16m+8+ZM2eZ7nfSSSeVxl/72tc6tE7fvn2LeMSIEaXc6NGjm1pj3333LY179nz3K2D8+PEN5911112l8cUXX1zE2267bSk3c+bMIj7zzDObqmtl8NJLL5XGG264YcNjP/zhD3dpLf379y+Na69ZvSeffLKIBw4cWMpdeumlRbzNNtt0UnVlP/zhD4v4N7/5TZfs0dUGDx5cxD/5yU9KuV122aWpNeqv2TrrrFPEjz32WNO11B9b+z35+OOPl3LHHXdc0+uuaB588MEiPv3000u5+s/RZe2pp57q0LwddtihiL/73e+WcocffnjDebXv+7feeqvp/b73ve8Vcf13Vnv222+/Ij7//PNLudrPg1bstNNORfzCCy+UcqeddlqH1lywYEHTx955551FfNttt5VyTzzxRBFPmzatlKut+6ijjirlHnrooSK+8cYbS7ndd9+9iCdPntx0nTvuuGMR77PPPqVc7Xlr7zrUvz9qX2s33HBDKffKK68U8fbbb1/K1b4Opk6dWsrV/q6q/T0SETF9+vQiXha/Qfbaa6/S+NZbb+30Pdra2op4+PDhpVzt3z0fJP369euUdYYMGVIaz5s3r4gXL17c9Dq176X6eR39XKn9Xt50001LuWOOOaaI699Ltb/na69tRMQXvvCFIj733HNLuTvuuKOIx4wZU8pdddVVzZYNAAAAAAAAAABdwp2SAAAAAAAAAAAAAAAAgJZoSgIAAAAAAAAAAAAAAABaoikJAAAAAAAAAAAAAAAAaEnP7i6AFcvMmTNL49/97ndFPGHChFJu++23L+JtttmmlBs7dmwR33LLLaXc8OHDG+5/3333FfGIESNKuf3226+IBw0aVMqtvfbaRbzBBhuUch/60IeK+I033ijlzj333CK+/vrrS7k77rijiGfPnl3KLVy4sDSufY6HHnpoNGvixIlNH/tBsckmm3Tr/muuuWaX7/HHP/6xiEePHt0pa77zzjsNc/fcc08R/+lPfyrl1l133SJ++OGHS7lZs2YVcZ8+fUq5iy++uIjrX6+9e/cu4n/7t38r5QYPHtywzpXZ/PnzS+Pa61Kv9rPj0ksvLeX+9re/FXH9e6lHjx5FXH9dau27776l8dlnn91ULdtuu20pV/uZesMNNzRc470MGDCgiI888shSbty4cUU8ZcqUDu+xLP3mN78pjX/9618X8bRp00q5rbfeuqk1TzzxxNL4oIMOKuJvf/vbTdf2kY98pDTef//9i3jnnXduep0V3dSpU4u4V69eHVpj6NChpfHmm29exJtuumkpt9pqqxVx/eft0UcfXRrXvieGDRtWyq2xxhpFfOWVV5ZyDz30UBEf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\n",
      "text/plain": [
       "<Figure size 4320x1440 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(60, 20))\n",
    "plt.title(sentence)\n",
    "plt.imshow(data.squeeze(0).numpy(), cmap='gray')\n",
    "plt.xticks([])\n",
    "plt.yticks([])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('and Came came into Mr. I. I. \"Amering whin<eos>', 0.32183724641799927)"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict_on_image(data)"
   ]
  },
  {
   "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": [
       "('Boyis cheed iitrincy- tarisaing one', 0.3990435302257538)"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict_on_image(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}