Diff of /Projects/NCS1/Data.py [000000] .. [acd362]

Switch to unified view

a b/Projects/NCS1/Data.py
1
############################################################################################
2
#
3
# Project:       Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research Project
4
# Repository:    ALL Detection System 2019
5
# Project:       Facial Authentication Server
6
#
7
# Author:        Adam Milton-Barker (AdamMiltonBarker.com)
8
# Contributors:
9
# Title:         Training Data Class
10
# Description:   Training Data class for the ALL Detection System 2019 NCS1 Classifier.
11
# License:       MIT License
12
# Last Modified: 2020-07-16
13
#
14
############################################################################################
15
16
import os, random, sys
17
18
from Classes.Helpers import Helpers
19
from Classes.Data import Data as DataProcess
20
21
22
class Data():
23
    """ Trainer Data Class
24
25
    Sorts the ALL Detection System 2019 NCS1 Classifier training data.
26
    """
27
28
    def __init__(self):
29
        """ Initializes the Data Class """
30
31
        self.Helpers = Helpers("Data")
32
        self.confs = self.Helpers.confs
33
34
        self.DataProcess = DataProcess()
35
        self.labelsToName = {}
36
37
        self.Helpers.logger.info("Data class initialization complete.")
38
39
    def sortData(self):
40
        """ Sorts the training data """
41
42
        humanStart, clockStart = self.Helpers.timerStart()
43
44
        self.Helpers.logger.info("Loading & preparing training data.")
45
46
        dataPaths, classes = self.DataProcess.processFilesAndClasses()
47
48
        classId = [int(i) for i in classes]
49
        classNamesToIds = dict(zip(classes, classId))
50
51
        # Divide the training datasets into train and test
52
        numValidation = int(
53
            self.confs["Classifier"]["ValidationSize"] * len(dataPaths))
54
        self.Helpers.logger.info("Number of classes: " + str(classes))
55
        self.Helpers.logger.info("Validation data size: " + str(numValidation))
56
        random.seed(self.confs["Classifier"]["RandomSeed"])
57
        random.shuffle(dataPaths)
58
        trainingFiles = dataPaths[numValidation:]
59
        validationFiles = dataPaths[:numValidation]
60
61
        # Convert the training and validation sets
62
        self.DataProcess.convertToTFRecord(
63
            'train', trainingFiles, classNamesToIds)
64
        self.DataProcess.convertToTFRecord(
65
            'validation', validationFiles, classNamesToIds)
66
67
        # Write the labels to file
68
        labelsToClassNames = dict(zip(classId, classes))
69
        self.DataProcess.writeLabels(labelsToClassNames)
70
71
        self.Helpers.logger.info(
72
            "Loading & preparing training data completed.")
73
74
    def cropTestData(self):
75
        """ Crops the testing data """
76
        
77
        self.DataProcess.cropTestDataset()
78
79
        self.Helpers.logger.info(
80
            "Testing data resized.")
81
82
83
if __name__ == "__main__":
84
85
    ProcessData = Data()
86
    ProcessData.sortData()