From cdfb5188060712129a96c45fce864b44578cf800 Mon Sep 17 00:00:00 2001
From: Harald Scheidl <harald@newpc.com>
Date: Tue, 2 Feb 2021 01:01:45 +0100
Subject: [PATCH] data aug: random background, write summary of CERs while
 training

---
 .gitignore                             |   2 --
 README.md                              |   1 -
 data/pixelRelevance.npy                | Bin 13008 -> 0 bytes
 data/translationInvariance.npy         | Bin 192 -> 0 bytes
 data/translationInvarianceTexts.pickle | Bin 294 -> 0 bytes
 model/.gitignore                       |   4 ++++
 model/accuracy.txt                     |   1 -
 src/SamplePreprocessor.py              |  18 +++++++++---------
 src/main.py                            |  16 ++++++++++++----
 9 files changed, 25 insertions(+), 17 deletions(-)
 delete mode 100644 data/pixelRelevance.npy
 delete mode 100644 data/translationInvariance.npy
 delete mode 100644 data/translationInvarianceTexts.pickle
 create mode 100644 model/.gitignore
 delete mode 100644 model/accuracy.txt

diff --git a/.gitignore b/.gitignore
index e58673f..61969af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
 data/words*
 data/words.txt
 src/__pycache__/
-model/checkpoint
-model/snapshot-*
 notes/
 *.so
 *.pyc
diff --git a/README.md b/README.md
index a22c6cc..c919f34 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,6 @@ The input image and the expected output is shown below.
 
 ```
 > python main.py
-Validation character error rate of saved model: 11.118344571029994%
 Init with stored values from ../model/snapshot-76
 Recognized: "Hello"
 Probability: 0.8462573289871216
diff --git a/data/pixelRelevance.npy b/data/pixelRelevance.npy
deleted file mode 100644
index 5d1a525240ba5ef3690f42e0d45ee7c032654662..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13008
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
F4FFI79%TRk

diff --git a/data/translationInvariance.npy b/data/translationInvariance.npy
deleted file mode 100644
index 72c21ed61205d0d076c863f03026f6933e5376ad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 192
zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEPSsIR
zFV09TNL9B|&@i&l(bQ3>RX_l)9p@_Sxed$h50;eK@AoRTFWFOR-?*{Te!=rf`y78k
zJO7oHcGin{>?WpOw!3n6x!t$h-|RSd9k)|rv#<|&D{H@@Mbkc{j@N#=%?CT91aEsk
kD=+)2$IR@RqgCxSoc!$HZw#>KVsN)N++ktA_Kd4N0FQM-YXATM

diff --git a/data/translationInvarianceTexts.pickle b/data/translationInvarianceTexts.pickle
deleted file mode 100644
index 05bf9cf0a5989e7b38f4e34bb761e27019d3766c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 294
zcmZo*jxA)+h+t-5U`Q-VEo6kVnBXjCIEw|&VuiEV;4JnC7LX|*V>l2@P6U$+!Q@6T
zdEf@{A_V#1g8Xon0GuTVX9>Ys!f=)doFxipiNRUoaFzs|B?)Iq!CBI9mQ1Q10Gw1l
AUjP6A

diff --git a/model/.gitignore b/model/.gitignore
new file mode 100644
index 0000000..86d0cb2
--- /dev/null
+++ b/model/.gitignore
@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore
\ No newline at end of file
diff --git a/model/accuracy.txt b/model/accuracy.txt
deleted file mode 100644
index 24c9310..0000000
--- a/model/accuracy.txt
+++ /dev/null
@@ -1 +0,0 @@
-Validation character error rate of saved model: 10.89210233592881%
\ No newline at end of file
diff --git a/src/SamplePreprocessor.py b/src/SamplePreprocessor.py
index c82ff0a..b58a02c 100644
--- a/src/SamplePreprocessor.py
+++ b/src/SamplePreprocessor.py
@@ -23,9 +23,9 @@ def preprocess(img, imgSize, dataAugmentation=False):
         if random.random() < 0.25:
             img = cv2.erode(img, np.ones((3, 3)))
         if random.random() < 0.5:
-            img = img * (0.5 + random.random() * 0.5)
+            img = img * (0.1 + random.random() * 0.9)
         if random.random() < 0.25:
-            img = np.clip(img + (np.random.random(img.shape) - 0.5) * random.randint(1, 50), 0, 255)
+            img = np.clip(img + (np.random.random(img.shape) - 0.5) * random.randint(1, 25), 0, 255)
         if random.random() < 0.1:
             img = 255 - img
 
@@ -33,20 +33,20 @@ def preprocess(img, imgSize, dataAugmentation=False):
         wt, ht = imgSize
         h, w = img.shape
         f = min(wt / w, ht / h)
-        fx = f * np.random.uniform(0.75, 1.25)
-        fy = f * np.random.uniform(0.75, 1.25)
+        fx = f * np.random.uniform(0.75, 1.5)
+        fy = f * np.random.uniform(0.75, 1.5)
 
         # random position around center
         txc = (wt - w * fx) / 2
         tyc = (ht - h * fy) / 2
-        freedom_x = wt // 10
-        freedom_y = ht // 10
-        tx = txc + np.random.randint(-freedom_x, freedom_x)
-        ty = tyc + np.random.randint(-freedom_y, freedom_y)
+        freedom_x = wt / 5
+        freedom_y = ht / 5
+        tx = txc + np.random.uniform(-freedom_x, freedom_x)
+        ty = tyc + np.random.uniform(-freedom_y, freedom_y)
 
         # map image into target image
         M = np.float32([[fx, 0, tx], [0, fy, ty]])
-        target = np.ones(imgSize[::-1]) * 255 / 2
+        target = np.ones(imgSize[::-1]) * np.random.uniform(0, 255)
         img = cv2.warpAffine(img, M, dsize=imgSize, dst=target, borderMode=cv2.BORDER_TRANSPARENT)
 
     # no data augmentation
diff --git a/src/main.py b/src/main.py
index 72a6be0..d28dacc 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,4 +1,5 @@
 import argparse
+import json
 
 import cv2
 import editdistance
@@ -12,14 +13,20 @@ from SamplePreprocessor import preprocess
 class FilePaths:
     "filenames and paths to data"
     fnCharList = '../model/charList.txt'
-    fnAccuracy = '../model/accuracy.txt'
+    fnSummary = '../model/summary.json'
     fnInfer = '../data/test.png'
     fnCorpus = '../data/corpus.txt'
 
 
+def write_summary(charErrorRates):
+    with open(FilePaths.fnSummary, 'w') as f:
+        json.dump(charErrorRates, f)
+
+
 def train(model, loader):
     "train NN"
     epoch = 0  # number of training epochs since start
+    summaryCharErrorRates = []
     bestCharErrorRate = float('inf')  # best valdiation character error rate
     noImprovementSince = 0  # number of epochs no improvement of character error rate occured
     earlyStopping = 25  # stop training after this number of epochs without improvement
@@ -39,14 +46,16 @@ def train(model, loader):
         # validate
         charErrorRate = validate(model, loader)
 
+        # write summary
+        summaryCharErrorRates.append(charErrorRate)
+        write_summary(summaryCharErrorRates)
+
         # if best validation accuracy so far, save model parameters
         if charErrorRate < bestCharErrorRate:
             print('Character error rate improved, save model')
             bestCharErrorRate = charErrorRate
             noImprovementSince = 0
             model.save()
-            open(FilePaths.fnAccuracy, 'w').write(
-                f'Validation character error rate of saved model: {charErrorRate * 100.0}%')
         else:
             print(f'Character error rate not improved, best so far: {charErrorRate * 100.0}%')
             noImprovementSince += 1
@@ -140,7 +149,6 @@ def main():
 
     # infer text on test image
     else:
-        print(open(FilePaths.fnAccuracy).read())
         model = Model(open(FilePaths.fnCharList).read(), decoderType, mustRestore=True, dump=args.dump)
         infer(model, FilePaths.fnInfer)
 
-- 
GitLab