finished report I think
All checks were successful
continuous-integration/drone/push Build is passing
BIN
images for report/artbench1.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
images for report/artbench2.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
images for report/cifar_1.jpg
Normal file
After Width: | Height: | Size: 1013 B |
BIN
images for report/cifar_2.jpg
Normal file
After Width: | Height: | Size: 949 B |
BIN
images for report/incompatible_images.png
Normal file
After Width: | Height: | Size: 286 KiB |
BIN
images for report/max-no-1.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
images for report/max.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
images for report/mean-no-1.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
images for report/mean.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
images for report/minst_1.png
Normal file
After Width: | Height: | Size: 148 B |
BIN
images for report/minst_2.png
Normal file
After Width: | Height: | Size: 276 B |
BIN
images for report/stl_1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
images for report/stl_2.png
Normal file
After Width: | Height: | Size: 21 KiB |
77
main.bib
@ -322,10 +322,73 @@ month = {03},
|
|||||||
pages = {},
|
pages = {},
|
||||||
title = {A Future-Adaptable Password Scheme}
|
title = {A Future-Adaptable Password Scheme}
|
||||||
}
|
}
|
||||||
|
@TECHREPORT{cifar10,
|
||||||
|
author = {Alex Krizhevsky},
|
||||||
|
title = {Learning multiple layers of features from tiny images},
|
||||||
|
institution = {},
|
||||||
|
year = {2009}
|
||||||
|
}
|
||||||
|
@misc{stl10,
|
||||||
|
title = {{STL-10 dataset}},
|
||||||
|
year = {2015},
|
||||||
|
month = nov,
|
||||||
|
note = {[Online; accessed 11. May 2024]},
|
||||||
|
url = {https://cs.stanford.edu/~acoates/stl10}
|
||||||
|
}
|
||||||
|
@misc{caltech256, title={Caltech 256}, DOI={10.22002/D1.20087}, abstractNote={We introduce a challenging set of 256 object categories containing a total of 30607 images. The original Caltech-101 was collected by choosing a set of object categories, downloading examples from Google Images and then manually screening out all images that did not fit the category. Caltech-256 is collected in a similar manner with several improvements: a) the number of categories is more than doubled, b) the minimum number of images in any category is increased from 31 to 80, c) artifacts due to image rotation are avoided and d) a new and larger clutter category is introduced for testing background rejection. We suggest several testing paradigms to measure classification performance, then benchmark the dataset using two simple metrics as well as a state-of-the-art spatial pyramid matching algorithm. Finally we use the clutter category to train an interest detector which rejects uninformative background regions.}, publisher={CaltechDATA}, author={Griffin, Gregory and Holub, Alex and Perona, Pietro}, year={2022}, month={Apr} }
|
||||||
|
@techreport{fgvca,
|
||||||
|
title = {Fine-Grained Visual Classification of Aircraft},
|
||||||
|
author = {S. Maji and J. Kannala and E. Rahtu
|
||||||
|
and M. Blaschko and A. Vedaldi},
|
||||||
|
year = {2013},
|
||||||
|
archivePrefix = {arXiv},
|
||||||
|
eprint = {1306.5151},
|
||||||
|
primaryClass = "cs-cv",
|
||||||
|
}
|
||||||
|
@article{fooddataset,
|
||||||
|
title={{FoodX-251: A Dataset for Fine-grained Food Classification}},
|
||||||
|
author={Kaur, Parneet and Sikka, Karan and Wang, Weijun and Belongie, serge and Divakaran, Ajay},
|
||||||
|
journal={arXiv preprint arXiv:1907.06167},
|
||||||
|
year={2019}
|
||||||
|
}
|
||||||
|
@incollection{pytorch,
|
||||||
|
title = {PyTorch: An Imperative Style, High-Performance Deep Learning Library},
|
||||||
|
author = {Paszke, Adam and Gross, Sam and Massa, Francisco and Lerer, Adam and Bradbury, James and Chanan, Gregory and Killeen, Trevor and Lin, Zeming and Gimelshein, Natalia and Antiga, Luca and Desmaison, Alban and Kopf, Andreas and Yang, Edward and DeVito, Zachary and Raison, Martin and Tejani, Alykhan and Chilamkurthy, Sasank and Steiner, Benoit and Fang, Lu and Bai, Junjie and Chintala, Soumith},
|
||||||
|
booktitle = {Advances in Neural Information Processing Systems 32},
|
||||||
|
pages = {8024--8035},
|
||||||
|
year = {2019},
|
||||||
|
publisher = {Curran Associates, Inc.},
|
||||||
|
url = {http://papers.neurips.cc/paper/9015-pytorch-an-imperative-style-high-performance-deep-learning-library.pdf}
|
||||||
|
}
|
||||||
|
@misc{pytorch-vs-tensorflow-1,
|
||||||
|
title = {{PyTorch vs TensorFlow: Deep Learning Frameworks [2024]}},
|
||||||
|
year = {2023},
|
||||||
|
month = dec,
|
||||||
|
note = {[Online; accessed 14. May 2024]},
|
||||||
|
url = {https://www.knowledgehut.com/blog/data-science/pytorch-vs-tensorflow}
|
||||||
|
}
|
||||||
|
@article{pytorch-vs-tensorflow-2,
|
||||||
|
author = {O'Connor, Ryan},
|
||||||
|
title = {{PyTorch vs TensorFlow in 2023}},
|
||||||
|
journal = {News, Tutorials, AI Research},
|
||||||
|
year = {2023},
|
||||||
|
month = apr,
|
||||||
|
publisher = {News, Tutorials, AI Research},
|
||||||
|
url = {https://www.assemblyai.com/blog/pytorch-vs-tensorflow-in-2023}
|
||||||
|
}
|
||||||
|
@article{artbench,
|
||||||
|
title={The ArtBench Dataset: Benchmarking Generative Models with Artworks},
|
||||||
|
author={Liao, Peiyuan and Li, Xiuyu and Liu, Xihui and Keutzer, Kurt},
|
||||||
|
journal={arXiv preprint arXiv:2206.11404},
|
||||||
|
year={2022}
|
||||||
|
}
|
||||||
|
https://www.assemblyai.com/blog/pytorch-vs-tensorflow-in-2023/
|
||||||
|
https://www.knowledgehut.com/blog/data-science/pytorch-vs-tensorflow
|
||||||
|
@misc{postgressql,
|
||||||
|
title = {{PostgreSQL}},
|
||||||
|
journal = {PostgreSQL},
|
||||||
|
year = {2024},
|
||||||
|
month = may,
|
||||||
|
note = {[Online; accessed 14. May 2024]},
|
||||||
|
url = {https://www.postgresql.org}
|
||||||
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
\section{Service Design} \label{sec:sd}
|
\section{Service Design} \label{sec:sd}
|
||||||
This section will discuss the design of the service.
|
This chapter presents an idealised design, such design is open-ended to allow for multiple possible implementations that still meet the project requirements.
|
||||||
The design on this section is an ideal design solution, where no time limitations or engineering limitations were considered.
|
This idealised design is also envisioned to not be limited by time or engineering constraints.
|
||||||
This section tries to provide a description of a designed solution that would allow for the best user experience possible.
|
The chapter \ref{sec:si} will discuss in more details how this design was further scoped to be able to be implemented in the timeframe available.
|
||||||
|
This chapter will transform the requirements discussed in the previous chapter into a more specialized technical design that can be used as a guide to implement such a service.
|
||||||
The design proposed in this section can be viewed as a scoped version of this project, and the \hyperref[sec:si]{Service Implementation} section will discuss how the scope was limited so that the service would achieve the primary goals of the project while following the design, within the time frame of this project.
|
|
||||||
|
|
||||||
\subsection{Structure of the Service}
|
\subsection{Structure of the Service}
|
||||||
|
|
||||||
@ -21,12 +20,10 @@
|
|||||||
The presentation layer requires interactivity of the user, and therefore it needs to be accessible from the outside, and be simple to use.
|
The presentation layer requires interactivity of the user, and therefore it needs to be accessible from the outside, and be simple to use.
|
||||||
The presentation layer was limited from being any interaction method to be a web page.
|
The presentation layer was limited from being any interaction method to be a web page.
|
||||||
The web page can a separate server, or as part of the main API application, if it is in the same.
|
The web page can a separate server, or as part of the main API application, if it is in the same.
|
||||||
|
The API layer, is one of the most important parts of the service.
|
||||||
The API layer, is one of the most important parts of the service. As it's going to be the most used way to interact with the service.
|
As it will be the most used way to interact with the service.
|
||||||
The user can use the API to control their entire model process from importing, to classification of images.
|
The user can use the API to control their entire model process from importing, to classification of images.
|
||||||
|
|
||||||
The Worker layer, consists of a set of servers available to perform GPU loads.
|
The Worker layer, consists of a set of servers available to perform GPU loads.
|
||||||
|
|
||||||
The Data layer, consists of stored images, models, and user data.
|
The Data layer, consists of stored images, models, and user data.
|
||||||
|
|
||||||
|
|
||||||
@ -57,7 +54,7 @@
|
|||||||
Aside from being able to perform the above tasks, there are no restrictions on how the application needs to be architected.
|
Aside from being able to perform the above tasks, there are no restrictions on how the application needs to be architected.
|
||||||
|
|
||||||
\subsection{API}
|
\subsection{API}
|
||||||
As a software as a service, one of the main requirements is to be able to communicate with other services.
|
As a SaaS, one of the main requirements is to be able to communicate with other services.
|
||||||
The API provides the simplest way for other services to interact with this service.
|
The API provides the simplest way for other services to interact with this service.
|
||||||
|
|
||||||
The API needs to be able to perform all the tasks that the application can do, which include:
|
The API needs to be able to perform all the tasks that the application can do, which include:
|
||||||
@ -77,11 +74,8 @@
|
|||||||
|
|
||||||
While implementing all the features that mentioned above, the API has to handle multiple simultaneous requests.
|
While implementing all the features that mentioned above, the API has to handle multiple simultaneous requests.
|
||||||
Ideally, those requests should be handled as fast as possible.
|
Ideally, those requests should be handled as fast as possible.
|
||||||
|
|
||||||
The API should be implemented such that it can be easily expandable and maintainable, so that future improvements can happen.
|
The API should be implemented such that it can be easily expandable and maintainable, so that future improvements can happen.
|
||||||
|
It should be consistent and easy to use, information on how to use the API should also be available to possible users.
|
||||||
The API should be consistent and easy to use, information on how to use the API should also be available to possible users.
|
|
||||||
|
|
||||||
The API should be structured as a REST JSON API, per the requirements.
|
The API should be structured as a REST JSON API, per the requirements.
|
||||||
The API should only accept inputs via the URL parameters of GET requests or via JSON on POST requests.
|
The API should only accept inputs via the URL parameters of GET requests or via JSON on POST requests.
|
||||||
Binary formats can also be used to handle file upload and downloads, as transferring files via JSON extremely inefficient.
|
Binary formats can also be used to handle file upload and downloads, as transferring files via JSON extremely inefficient.
|
||||||
@ -105,16 +99,14 @@
|
|||||||
\begin{multicols}{2} % TODO think of more ways
|
\begin{multicols}{2} % TODO think of more ways
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Separating the training to different machines.
|
\item Separating the training to different machines.
|
||||||
\item Control the number of resources that training machine can utilize
|
\item Control the number of resources that training machine can utilise
|
||||||
\item Control the time when the shared training and inference machine can be used for training.
|
\item Control the time when the shared training and inference machine can be used for training.
|
||||||
\item Allow users to have their own ``Runners'' where the training tasks can happen.
|
\item Allow users to have their own ``Runners'' where the training tasks can happen.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{multicols}
|
\end{multicols}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
\subsection{Summary}
|
||||||
This section introduced multiple possible designs options for a service, that intends to achieve automated image classification, can follow to implement a robust system.
|
This chapter introduced multiple possible designs options for a service, that intends to achieve automated image classification, can follow to implement a robust system. The next chapter will be discussing how the system was implemented and which of the possible design options were chosen when implementing the system.
|
||||||
|
|
||||||
The next section will be discussing how the system was implemented and which of the possible design options were chosen when implementing the system.
|
|
||||||
|
|
||||||
\pagebreak
|
\pagebreak
|
||||||
|
221
report/eval.tex
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
\section{Service Evaluation} \label{sec:se}
|
||||||
|
This section will discuss how the service can be evaluated from a technical standpoint and its results.
|
||||||
|
|
||||||
|
With the goals of the project, there are two kinds of tests that need to be accounted for.
|
||||||
|
User testing tests that relate to the experience of the user while using the project and tests that quantitive test the project.
|
||||||
|
|
||||||
|
Such as accuracy of the generated models, response time to queries.
|
||||||
|
|
||||||
|
\subsection{Testing the model creation}
|
||||||
|
To test the system, a few datasets were selected.
|
||||||
|
The datasets were selected to represent different possible sizes of models, and sizes of output labels.
|
||||||
|
|
||||||
|
The ImageNet\cite{imagenet} was not selected as one of the datasets that will be tested, as it does not represent the target problem that this project is trying to tackle.
|
||||||
|
|
||||||
|
The tests will measure:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Time to process and validate the entire dataset upon upload
|
||||||
|
\item Time to train the dataset
|
||||||
|
\item Time to classify the image once the dataset has been trained
|
||||||
|
\item Time to extend the model
|
||||||
|
\item Accuracy of the newly created model
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
The results will be placed in the results table.
|
||||||
|
|
||||||
|
\subsubsection*{MNIST}
|
||||||
|
|
||||||
|
The MNIST \cite{mnist} is a large dataset of handwritten digits, that is commonly used to trains and test machine learning systems.
|
||||||
|
This dataset was selected due to its size. It is a small dataset that can be trained quickly and can be used to verify other internal systems of the service.
|
||||||
|
During testing, only the 9 out of 10 classes are trained and the 10th is added during the retraining process.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{minst_1}}}
|
||||||
|
\qquad
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{minst_2}}}
|
||||||
|
\caption{Examples of the images in the MNIST dataset}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection*{CIFAR-10}
|
||||||
|
|
||||||
|
The CIFAR-10 \cite{cifar10} dataset contains various images that are commonly used to train and test machine learning algorithms.
|
||||||
|
This dataset was selected due to its size. It is a small dataset that can be trained quickly, but it has bigger, and coloured images, which makes it harder than MNIST.
|
||||||
|
|
||||||
|
During testing, only the 9 out of 10 classes are trained and the 10th is added during the retraining process.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{cifar_1}}}
|
||||||
|
\qquad
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{cifar_2}}}
|
||||||
|
\caption{Examples of the images in the CIFAR-10 dataset}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsubsection*{STL-10}
|
||||||
|
The STL-10 \cite{stl10} dataset that was inspired by the CIFAR-10 \cite{cifar10}, but it has bigger images.
|
||||||
|
This dataset was selected because of the bigger image. The images are bigger than both CIFAR-10 and MNIST which makes the model harder to create, and train.
|
||||||
|
|
||||||
|
During testing, only the 9 out of 10 classes are trained and the 10th is added during the retraining process.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{stl_1}}}
|
||||||
|
\qquad
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{stl_2}}}
|
||||||
|
\caption{Examples of the images in the STL-10 dataset}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsubsection*{ArtBench}
|
||||||
|
The ArtBench \cite{artbench} dataset is a dataset that contains artworks annotated with their art style that is intended to train generative models.
|
||||||
|
This dataset was selected due to the even bigger images than the previously tested models.
|
||||||
|
|
||||||
|
During testing, only the 9 out of 10 classes are trained and the 10th is added during the retraining process.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{artbench1}}}
|
||||||
|
\qquad
|
||||||
|
\subfloat{{\includegraphics[width=.2\linewidth]{artbench2}}}
|
||||||
|
\caption{Examples of the images in the ArtBench dataset}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsubsection*{Incompatible datasets}
|
||||||
|
|
||||||
|
There were attempts to test other datasets against the system, but those datasets were incompatible.
|
||||||
|
The datasets had irregular images sizes, which, as it was mentioned previously, the system does not support.
|
||||||
|
This caused a large section of images inputted being rejected, which means that it would have not trained.
|
||||||
|
|
||||||
|
A list of datasets that are incompatible because of this are:
|
||||||
|
|
||||||
|
\begin{multicols}{2}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Caltech 256 \cite{caltech256}
|
||||||
|
\item FGVC-Aircraft \cite{fgvca}
|
||||||
|
\item IFood 2019 \cite{fooddataset}
|
||||||
|
\end{itemize}
|
||||||
|
\end{multicols}
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection*{Results}
|
||||||
|
\begin{longtable}{ | c | c | c | c | c | c |}
|
||||||
|
\hline
|
||||||
|
Dataset & Import Time & Train Time & Classification Time & Extend Time & Accuracy \\ \hline
|
||||||
|
MNIST & $8s$ & $2m$ & $>1s$ & $50s$ & $98\%$ \\ \hline
|
||||||
|
CIFAR-10 & $6s$ & $41m 38s$ & $>1s$ & $1m 11s$ & $95.2\%$ \\ \hline
|
||||||
|
STL-10 & $1s$ & $37m 50s$ & $>1s$ & $1m 10s$ & $95.3\%$ \\ \hline
|
||||||
|
Art Bench & $10s$ & $4h 20m 31$ & $>1s$ & $1m 41s$ & $41.86\%$ \\ \hline
|
||||||
|
\caption{Evaluation Results}
|
||||||
|
\label{tab:eval-results}
|
||||||
|
\end{longtable}
|
||||||
|
|
||||||
|
The system was able to easily import all the datasets provided in an incredibly fast time, this included the incompatible datasets.
|
||||||
|
While the system was able to load and verify the images of the incompatible datasets, it correctly marked the images as incompatible, which can be seen in Figure \ref{fig:incompatible_images}.
|
||||||
|
Which would make them not being able to be used for training, which would mean the model would have not had any data to train, which would obviously result in terrible accuracy results.
|
||||||
|
|
||||||
|
\begin{figure}[h!]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.7\textheight]{incompatible_images}
|
||||||
|
\caption{Screenshot of a web application showing many images that do not have the correct format.}
|
||||||
|
\label{fig:incompatible_images}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
The system was able to train, classify, and extend the MNIST, CIFAR-10, and STL-10 datasets, with high accuracy rates.
|
||||||
|
This is expected as these models are models that are commonly known for being easy to train.
|
||||||
|
The system could also train these models in a relatively short, small amount of time.
|
||||||
|
The classification time is optimal, with all datasets being able to classify an image in less than a second.
|
||||||
|
The time to extend is also very promising, and the system could extend a new set of classes fairly quickly.
|
||||||
|
|
||||||
|
The system was unable to achieve a high level of accuracy while training for the ArtBench dataset.
|
||||||
|
And the training time to achieve that lower level of accuracy was also much higher than the other datasets.
|
||||||
|
The longer training time can be attributed to the larger images, which make the model harder to train, as the model has to make more computations.
|
||||||
|
Another factor for the increased training time is the necessity for the model to train longer to achieve a higher accuracy, due to the model's decreased learning rate.
|
||||||
|
As for the low accuracy ratting, I hypothesise that this is caused by the nature of the dataset.
|
||||||
|
The dataset is categorized into various art styles.
|
||||||
|
Even within a single art style, artists' individual styles can vary significantly.
|
||||||
|
Given the relatively small sample size of only 5000 training images per art style, this variability poses a challenge for the model's ability to discern between distinct styles.
|
||||||
|
Another option is that the system did not generate a good enough model for this dataset.
|
||||||
|
The system was still able to fairly quickly classify and image, with the classification time still being under less than a second.
|
||||||
|
The expansion time was also fairy quick, being on par with the other models.
|
||||||
|
|
||||||
|
\subsubsection*{Testing limitations}
|
||||||
|
There are some limitations caused by this testing.
|
||||||
|
The biggest problem is in the training, classification and expansion timings, this value will depend on what hardware the system that is running the model has.
|
||||||
|
The small sample size of the datasets is also limiting, as it does not fully prove that the system can create generalized models.
|
||||||
|
|
||||||
|
|
||||||
|
% api benchmarking if there is time
|
||||||
|
|
||||||
|
\subsection{API Performance Testing}
|
||||||
|
The application performance was also tested.
|
||||||
|
To test the performance of the API, a small program was written that would simultaneously request an image to be classified.
|
||||||
|
The selected image was one of the sample images provided in the MNIST dataset.
|
||||||
|
The program tries to perform 1, 10, 100, 1000, 10000 simultaneous requests, and waits 2 seconds between each set.
|
||||||
|
The program would then record how much time it would take for the image classification task to be completed.
|
||||||
|
And after all requests are completed, the program call calculates the mean and max requests times.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.5\linewidth]{max}}}
|
||||||
|
\subfloat{{\includegraphics[width=.5\linewidth]{mean}}}
|
||||||
|
\caption{Results of the API testing}
|
||||||
|
\label{fig:results-api}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
The values shown in Figure \ref{fig:results-api} show that if you configure the system to only have one runner, it will struggle to handle large amounts of simultaneous requests.
|
||||||
|
This is expected, as only having one process trying to classify large amounts of images would be unwise.
|
||||||
|
In reality this would never be set up this way since only having one runner in a production environment would never be acceptable.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat{{\includegraphics[width=.5\linewidth]{max-no-1}}}
|
||||||
|
\subfloat{{\includegraphics[width=.5\linewidth]{mean-no-1}}}
|
||||||
|
\caption{Results of the API testing}
|
||||||
|
\label{fig:results-api-no-one}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Figure \ref{fig:results-api-no-one} shows the same graph as Figure \ref{fig:results-api} but with the results for the test where the API only had one runner removed.
|
||||||
|
The graph indicates that the system was able to handle, 10000 simultaneous requests in less than 30 seconds, which more than exceeds the expectations of the project.
|
||||||
|
The results also indicate that the numbers of runners have demising returns, as the values maximum and mean request time are within a small range.
|
||||||
|
This can be caused by multiple reasons.
|
||||||
|
One such reason is that were not enough requests to show a significant difference between then number of runners.
|
||||||
|
Another reason is that the amount of work that the system has to perform to manage all the runners outweighs the benefits of having more runners.
|
||||||
|
|
||||||
|
While testing, the ram usage was monitored but not recorded.
|
||||||
|
As expected, the memory usage significant increased with the number of runners, but did not exceed 5 GiB.
|
||||||
|
The higher memory usage is a result of the runners caching the model used.
|
||||||
|
The memory footprint of the system limited by the model selected as the model generated for MNIST dataset is not large.
|
||||||
|
And larger models are expected to generate larger memory footprints.
|
||||||
|
When deploying the application, an administrator should take considerations the expected model sizes as well as the usage frequency expected and configure the application accordingly.
|
||||||
|
|
||||||
|
These results are very positive since the project was running on my personal computer and not on professional server hardware.
|
||||||
|
This indicates that when deployed to a production environment the service is most likely to perform extremely well.
|
||||||
|
|
||||||
|
\subsubsection*{Testing limitations}
|
||||||
|
As with the previous testing, this test has also some limitations.
|
||||||
|
Including the same hardware limitation where different hardware will give different results for this test.
|
||||||
|
Another limiting factor is that the test did not use different models or images which could cause the service to have to reload models from disk, affecting performance.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Usability}
|
||||||
|
While if a service is usable differs vastly from user to user, the implemented system is simple enough where a user who does not know anything about image classification could upload images, and obtain a working classification model.
|
||||||
|
This simplicity may pose limitations for users with advanced knowledge, which would fall short of optimal usability standards for that user.
|
||||||
|
As this user might choose not to use the system because it does not allow the level of control that they might want.
|
||||||
|
|
||||||
|
The administrator area is less user-friendly than the rest of the application, but that is less critical.
|
||||||
|
An administrator is not the target user of the application, and is expected to manage this system, which requires prior knowledge about the system.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Summary}
|
||||||
|
The service can create models, and train models that service the user's needs.
|
||||||
|
These models will most likely be able to achieve high accuracy targets, but in some cases the system might fail to generate a good enough model for the provided dataset.
|
||||||
|
During testing, the limitations of the strict image size requirements were also shown, as the system, would have failed to train those datasets because most of the images would have been removed before the model started training.
|
||||||
|
|
||||||
|
While classifying images, the service performed extremely well.
|
||||||
|
The API performance tests showed that if configured correctly, a single server configuration can handle a large amount of simultaneous images extremely fast.
|
||||||
|
These results indicate that the system has the performance required to be put in a production environment and perform well.
|
||||||
|
|
||||||
|
As for the usability of the service the system, the system is usable by beginners, but might detract more advanced users from using it.
|
||||||
|
|
||||||
|
Overall, the service evaluation is positive, as the system was able to create and train new models, as well as being user-friendly to users who might not have the skills to perform image classification.
|
||||||
|
|
||||||
|
\pagebreak
|
@ -1,24 +1,22 @@
|
|||||||
\section{Introduction} \label{sec:introduction}
|
\section{Introduction} \label{sec:introduction}
|
||||||
This section will introduce the project: background, motives, aims, goals, and success criteria.
|
The purpose of this dissertation is to design and implement an automated image classification service that will empower users to connect their existing services that required image classification with the one being implemented in this project.
|
||||||
The section will end with this report structure.
|
This report will detail what requirements such service might have.
|
||||||
|
How those requirements can be turned into a design for such a service, and how that design can be implemented into software with limited time and resources.
|
||||||
|
|
||||||
|
This chapter will service as an introduction to the project, and will discuss the background, motivations, aims, goals, and success criteria for the project.
|
||||||
|
This chapter will end with an overview of the project structure.
|
||||||
|
|
||||||
\subsection{Project Background}
|
\subsection{Project Background}
|
||||||
There are many automated tasks that being done manually.
|
There are many automatable tasks that are currently being done manually.
|
||||||
If those tasks can be done automatically, a lot of productivity could be gained from as human doing those tasks can do tasks that only humans can.
|
If those tasks can be done automatically, a lot of productivity could be gained by having the computers perform those tasks, allowing humans to perform tasks that only humans can do.
|
||||||
|
Moreover, recently, machine learning models have become as good, or even better than humans in tasks such image classification. This project will focus on image classification, as it is an area where automation is still required, and there are few other images automated systems that are easy to use. It is also an area that has not been saturated with new products such as the natural language processing space has.
|
||||||
|
|
||||||
This project aims to provide a software platform, where users with no experience in machine learning, data analysis could create machine learning models to process their data.
|
|
||||||
In this project, the platform will be scoped to image classification.
|
|
||||||
As an easy-to-use platform needs to be able to handle: image uploads, processing, and verification; model creation, management, and expansion; and image classification.
|
|
||||||
|
|
||||||
% This report will do a brief analysis of current image classification systems, followed by an overview of the design of the system, and implementation details. The report will finish with analysis of legal, ethical and societal issues, and evaluation of results, and objectives.
|
|
||||||
|
|
||||||
\subsection{Project Motivations}
|
\subsection{Project Motivations}
|
||||||
|
|
||||||
Currently, there are many classification tasks that are being done manually.
|
This project allows for the improvement of my learned skills, while being an interesting, complex piece of software to develop.
|
||||||
Thousands of man-hours are used to classify images, this task can be automated.
|
The topics, skills, and knowledge required to build this project, cover all my years in the university, from the simple applications developed in the first year; the soft skills learned during placement; and the complexity of distributed systems and deep learning of the third year.
|
||||||
There are a few easy-to-use image classification systems that require low to no knowledge of image classification.
|
I also wanted to use the opportunity that this project provides to gain experience in emerging technologies such as Go, and improve all my previous abilities and skills.
|
||||||
This project aims to fill that role and provide a complete image classification service.
|
|
||||||
While still been user-friendly, where a user who has never done any kind of user classification still could get good results, by simply using this service.
|
|
||||||
|
|
||||||
\subsection{Project Aim}
|
\subsection{Project Aim}
|
||||||
The project aims to create an easy-to-use software platform, where users can create image classification models without having prior knowledge about machine learning.
|
The project aims to create an easy-to-use software platform, where users can create image classification models without having prior knowledge about machine learning.
|
||||||
@ -31,12 +29,12 @@
|
|||||||
|
|
||||||
This project's primary objectives are to design and implement:
|
This project's primary objectives are to design and implement:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item a system to upload images that will be assigned to a model
|
\item a system to upload images that will be assigned to a model.
|
||||||
\item a system to automatically create and train models.
|
\item a system to automatically create and train models.
|
||||||
\item a platform where users can manage their models.
|
\item a platform where users can manage their models.
|
||||||
% \item a system to automatically expand and reduce models without fully retraining the models.
|
% \item a system to automatically expand and reduce models without fully retraining the models.
|
||||||
\item a system to automatically expand models without fully retraining the models.
|
\item a system to automatically expand models without fully retraining the models.
|
||||||
\item an Application Programming Interface(API) that users can interact programmatically with the service.
|
\item an Application Programming Interface (API) that users can interact programmatically with the service.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
This project's secondary objectives are to:
|
This project's secondary objectives are to:
|
||||||
@ -47,7 +45,6 @@
|
|||||||
|
|
||||||
\subsection{Success Criteria}
|
\subsection{Success Criteria}
|
||||||
As it was mentioned before, the project can be considered a success when the primary objectives have been completed.
|
As it was mentioned before, the project can be considered a success when the primary objectives have been completed.
|
||||||
|
|
||||||
Therefore, the success criteria of this project can be defined as:
|
Therefore, the success criteria of this project can be defined as:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
@ -56,18 +53,18 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsection{Project Structure}
|
\subsection{Project Structure}
|
||||||
The report on the project shows the development and designs stages of the project. With each section addressing a part of the design and development process.
|
The report on the project shows the development and designs stages of the project. With each chapter addressing a part of the design and development process.
|
||||||
|
|
||||||
\renewcommand*{\arraystretch}{2}
|
\renewcommand*{\arraystretch}{2}
|
||||||
\begin{longtable}{p{7cm} p{8cm}}
|
\begin{longtable}{p{7cm} p{8cm}}
|
||||||
\hyperref[sec:introduction]{Introduction} & The introduction section will do a brief introduction of the project and its objectives. \\
|
\hyperref[sec:introduction]{Introduction} & The introduction chapter will do a brief introduction of the project and its objectives. \\
|
||||||
\hyperref[sec:lit-tech-review]{Literature and Technical Review} & The Literature and Technical Review section will introduce some current existing projects that are similar to this one, and introduce some technologies that can be used to implement this project. \\
|
\hyperref[sec:lit-tech-review]{Literature and Technical Review} & The Literature and Technical Review chapter will introduce some current existing projects that are similar to this one, and introduce some technologies that can be used to implement this project. \\
|
||||||
\hyperref[sec:sanr]{Service Analysis and Requirements} & This section will analyse the project requirements. The section will define design requirements that the service will need to implement to be able to achieve the goals that were set up. \\
|
\hyperref[sec:sanr]{Service Analysis and Requirements} & This chapter will analyse the project requirements. The chapter will define design requirements that the service will need to implement to be able to achieve the goals that were set up. \\
|
||||||
\hyperref[sec:sd]{Service Design} & This section will discuss how a service could be designed that it matches the requirements of the service. \\
|
\hyperref[sec:sd]{Service Design} & This chapter will discuss how a service could be designed that it matches the requirements of the service. \\
|
||||||
\hyperref[sec:sd]{Service Implementation} & Information on how the design of the system was turned into software is in this section. \\
|
\hyperref[sec:sd]{Service Implementation} & Information on how the design of the system was turned into software is in this chapter. \\
|
||||||
\hyperref[sec:lsec]{Legal, Societal, Ethical, Professional Considerations} & This section will cover potential legal, societal, ethical and professional, issues that might arise from the service and how they are mitigated. \\
|
\hyperref[sec:lsec]{Legal, Societal, Ethical, Professional Considerations} & This chapter will cover potential legal, societal, ethical and professional, issues that might arise from the service and how they are mitigated. \\
|
||||||
\hyperref[sec:se]{Service Evaluation} & In this section, the model will be tested and the results of the tests will be analysed. \\
|
\hyperref[sec:se]{Service Evaluation} & In this chapter, the model will be tested and the results of the tests will be analysed. \\
|
||||||
\hyperref[sec:crpo]{Critical Review of Project Outcomes} & In this section, will compare the project goals with what was achieved. Then, according to the results, the project will either be deemed successful or not.
|
\hyperref[sec:crpo]{Critical Review of Project Outcomes} & In this chapter, will compare the project goals with what was achieved. Then, according to the results, the project will either be deemed successful or not.
|
||||||
|
|
||||||
\end{longtable}
|
\end{longtable}
|
||||||
\pagebreak
|
\pagebreak
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
\section{Literature and Technical Review} \label{sec:lit-tech-review}
|
\section{Literature and Technical Review} \label{sec:lit-tech-review}
|
||||||
This section reviews existing technologies in the market that do image classification. It also reviews current image classification technologies, which meet the requirements for the project. This review also analyses methods that are used to distribute the learning between various physical machines, and how to spread the load so minimum reloading of the models is required when running the model.
|
This chapter reviews existing technologies in the market that do image classification. It also reviews current image classification technologies, which meet the requirements for the project. This review also analyses methods that are used to distribute the learning between various physical machines, and how to spread the load so minimum reloading of the models is required when running the model.
|
||||||
|
|
||||||
\subsection{Existing Classification Platforms}
|
\subsection{Existing Classification Platforms}
|
||||||
There are currently some existing software as a service (SaaS) platforms that do provide similar services to the ones this will project will be providing.
|
There are currently some existing software as a service (SaaS) platforms that do provide similar services to the ones this will project will be providing.
|
||||||
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
\subsection{Requirements of Image Classification Models}
|
\subsection{Requirements of Image Classification Models}
|
||||||
|
|
||||||
The of the main objectives of this project are to be able to create models that can give a class given an image for any dataset. Which means that there will be no ``one solution fits all to the problem''. While the most complex way to solve a problem would most likely result in success, it might not be the most efficient way to achieve the results.
|
One of the main objectives of this project are to be able to create models that can give a class given an image for any dataset. Which means that there will be no ``one solution fits all to the problem''. While the most complex way to solve a problem would most likely result in success, it might not be the most efficient way to achieve the results.
|
||||||
|
|
||||||
This section will analyse possible models that would obtain the best results. The models for this project have to be the most efficient as possible while resulting in the best accuracy as possible.
|
This section will analyse possible models that would obtain the best results. The models for this project have to be the most efficient as possible while resulting in the best accuracy as possible.
|
||||||
|
|
||||||
@ -41,7 +41,6 @@
|
|||||||
% TODO find some papers to proff this
|
% TODO find some papers to proff this
|
||||||
|
|
||||||
The system will use supervised models to classify images, using a combination of different types of models, using neural networks, convolution neural networks, deed neural networks and deep convolution neural networks.
|
The system will use supervised models to classify images, using a combination of different types of models, using neural networks, convolution neural networks, deed neural networks and deep convolution neural networks.
|
||||||
|
|
||||||
These types were decided as they have had a large success in the past in other image classification challenges, for example in the ImageNet challenges \cite{imagenet}, which has ranked different models in classifying a 14 million images. The contest has been running since 2010 to 2017.
|
These types were decided as they have had a large success in the past in other image classification challenges, for example in the ImageNet challenges \cite{imagenet}, which has ranked different models in classifying a 14 million images. The contest has been running since 2010 to 2017.
|
||||||
|
|
||||||
The models that participated in the contest tended to use more and more Deep convolution neural networks, out of the various models that were generated there are a few landmark models that were able to achieve high accuracies, including AlexNet \cite{krizhevsky2012imagenet}, ResNet-152 \cite{resnet-152}, EfficientNet \cite{efficientnet}.
|
The models that participated in the contest tended to use more and more Deep convolution neural networks, out of the various models that were generated there are a few landmark models that were able to achieve high accuracies, including AlexNet \cite{krizhevsky2012imagenet}, ResNet-152 \cite{resnet-152}, EfficientNet \cite{efficientnet}.
|
||||||
@ -62,7 +61,7 @@
|
|||||||
% This needs some work in terms of gramar
|
% This needs some work in terms of gramar
|
||||||
ResNet works by creating shortcuts between sets of layers, the shortcuts allow residual values from previous layers to be used on the upper layers. The hypothesis being that it is easier to optimize the residual mappings than the linear mappings.
|
ResNet works by creating shortcuts between sets of layers, the shortcuts allow residual values from previous layers to be used on the upper layers. The hypothesis being that it is easier to optimize the residual mappings than the linear mappings.
|
||||||
The results proved that the using the residual values improved training of the model, as the results of the challenge prove.
|
The results proved that the using the residual values improved training of the model, as the results of the challenge prove.
|
||||||
It's important to note that using residual networks tends to give better results, the more layers the model has. While this could have a negative impact on performance, the number of parameters per layer does not grow that steeply in ResNet when comparing it with other architectures as it uses other optimizations such as $1x1$ kernel sizes, which are more space efficient. Even with these optimizations, it can still achieve incredible results. Which might make it a good contender to be used in the service as one of the predefined models to use to try to create the machine learning models.
|
It's important to note that using residual networks tends to give better results, the more layers the model has. While this could have a negative impact on performance, the number of parameters per layer does not grow that steeply in ResNet when comparing it with other architectures as it uses other optimisations such as $1x1$ kernel sizes, which are more space efficient. Even with these optimisations, it can still achieve incredible results. Which might make it a good contender to be used in the service as one of the predefined models to use to try to create the machine learning models.
|
||||||
|
|
||||||
% MobileNet
|
% MobileNet
|
||||||
|
|
||||||
@ -71,7 +70,7 @@
|
|||||||
To test their results, the EfficientNet team created a baseline model which as a building block used the mobile inverted bottleneck MBConv \cite{inverted-bottleneck-mobilenet}. The baseline model was then scaled using the compound method, which resulted in better top-1 and top-5 accuracy.
|
To test their results, the EfficientNet team created a baseline model which as a building block used the mobile inverted bottleneck MBConv \cite{inverted-bottleneck-mobilenet}. The baseline model was then scaled using the compound method, which resulted in better top-1 and top-5 accuracy.
|
||||||
While EfficientNets are smaller than their non-EfficientNet counterparts, they are more computational intensive, a ResNet-50 scaled using the EfficientNet compound scaling method is $3\%$ more computational intensive than a ResNet-50 scaled using only depth while improving the top-1 accuracy by $0.7\%$.
|
While EfficientNets are smaller than their non-EfficientNet counterparts, they are more computational intensive, a ResNet-50 scaled using the EfficientNet compound scaling method is $3\%$ more computational intensive than a ResNet-50 scaled using only depth while improving the top-1 accuracy by $0.7\%$.
|
||||||
And as the model will be trained and run multiple times decreasing the computational cost might be a better overall target for sustainability then being able to offer higher accuracies.
|
And as the model will be trained and run multiple times decreasing the computational cost might be a better overall target for sustainability then being able to offer higher accuracies.
|
||||||
Even though scaling using the EfficientNet compound method might not yield the best results using some EfficientNets what were optimized by the team to would be optimal, for example, EfficientNet-B1 is both small and efficient while still obtaining $79.1\%$ top-1 accuracy in ImageNet, and realistically the datasets that this system will process will be smaller and more scope specific than ImageNet.
|
Even though scaling using the EfficientNet compound method might not yield the best results using some EfficientNets what were optimised by the team to would be optimal, for example, EfficientNet-B1 is both small and efficient while still obtaining $79.1\%$ top-1 accuracy in ImageNet, and realistically the datasets that this system will process will be smaller and more scope specific than ImageNet.
|
||||||
|
|
||||||
|
|
||||||
% \subsection{Efficiency of transfer learning}
|
% \subsection{Efficiency of transfer learning}
|
||||||
@ -87,12 +86,26 @@
|
|||||||
|
|
||||||
% There are also unsupervised learning methods that do not have a fixed number of classes. While this method would work as an expandable model method, it would not work for the purpose of this project. This project requires that the model has a specific set of labels which does not work with unsupervised learning which has unlabelled data. Some technics that are used for unsupervised learning might be useful in the process of creating expandable models.
|
% There are also unsupervised learning methods that do not have a fixed number of classes. While this method would work as an expandable model method, it would not work for the purpose of this project. This project requires that the model has a specific set of labels which does not work with unsupervised learning which has unlabelled data. Some technics that are used for unsupervised learning might be useful in the process of creating expandable models.
|
||||||
|
|
||||||
|
\subsection{Machine learning libraries}
|
||||||
|
While there are various machine learning libraries, the two bigger ones are Tensorflow and PyTorch.
|
||||||
|
This section will compare the two different libraries.
|
||||||
|
TensorFlow \cite{tensorflow2015-whitepaper} is an open-source machine learning platform created by Google to develop their production and research systems.
|
||||||
|
PyTorch \cite{pytorch} is an open-source machine learning library developed by Meta to power their systems.
|
||||||
|
|
||||||
\subsection{Conclusion}
|
While both libraries can achieve the same tasks with similar level of accuracy \cite{pytorch-vs-tensorflow-1}, PyTorch is mostly used in research oriented applications rather than applications that might require deployment \cite{pytorch-vs-tensorflow-1,pytorch-vs-tensorflow-2}.
|
||||||
The technical review of current systems reveals that there are current systems that exist that can perform image classification tasks, but they are not friendly in ways to easily expand currently existing models.
|
This is generally attributed to the maturity of TensorFlow and TensorFlow's ability to create static graphs, which are optimised for inference.
|
||||||
|
|
||||||
|
More important for the project is compatibility with other technologies that the project will use.
|
||||||
|
In this case, TensorFlow has native support for Go while PyTorch does not.
|
||||||
|
Which due to Tensorflow's advanced in deployment and compatibility the clear choice for the project.
|
||||||
|
|
||||||
|
\subsection{Summary}
|
||||||
|
The technical review of current systems, shows that there are current systems that exist that can perform image classification tasks, but they are not friendly in ways to easily expand currently existing models.
|
||||||
|
|
||||||
The current methods that exist for image classification seem to have reached a classification accuracy and efficiency that make a project like this feasible.
|
The current methods that exist for image classification seem to have reached a classification accuracy and efficiency that make a project like this feasible.
|
||||||
|
Model architectures such as ResNet, and EfficientNet have been able to perform image classification on large sets of models and achieve higher than human performances.
|
||||||
|
Taking these architectures in mind the system should be able to create machine learning models that perform equally well.
|
||||||
|
|
||||||
% TODO talk about web serving thechnlogies
|
As for what technologies to use to build such models TensorFlow seams to be the correct choice as it has better performance when deploying to production, and can more easily integrate with the chosen web technologies.
|
||||||
|
|
||||||
\pagebreak
|
\pagebreak
|
||||||
|
1343
report/report.bbl
Normal file
2429
report/report.bcf
Normal file
19
report/report.blg
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[0] Config.pm:307> INFO - This is Biber 2.19
|
||||||
|
[0] Config.pm:310> INFO - Logfile is 'report.blg'
|
||||||
|
[28] biber:340> INFO - === Wed May 15, 2024, 05:17:32
|
||||||
|
[34] Biber.pm:419> INFO - Reading 'report.bcf'
|
||||||
|
[59] Biber.pm:979> INFO - Found 37 citekeys in bib section 0
|
||||||
|
[65] Biber.pm:4419> INFO - Processing section 0
|
||||||
|
[69] Biber.pm:4610> INFO - Looking for bibtex file '../main.bib' for section 0
|
||||||
|
[70] bibtex.pm:1713> INFO - LaTeX decoding ...
|
||||||
|
[82] bibtex.pm:1519> INFO - Found BibTeX data source '../main.bib'
|
||||||
|
[181] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
|
||||||
|
[181] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
|
||||||
|
[181] Biber.pm:4239> INFO - Sorting list 'none/global//global/global' of type 'entry' with template 'none' and locale 'en-US'
|
||||||
|
[181] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
|
||||||
|
[190] bbl.pm:660> INFO - Writing 'report.bbl' with encoding 'UTF-8'
|
||||||
|
[195] bbl.pm:763> INFO - Output to report.bbl
|
||||||
|
[195] Biber.pm:131> WARN - legacy month field 'November' in entry 'lecun-98' is not an integer - this will probably not sort properly.
|
||||||
|
[195] Biber.pm:131> WARN - legacy month field 'Apr' in entry 'caltech256' is not an integer - this will probably not sort properly.
|
||||||
|
[195] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_nCQC/3b92c3a43883b50258e417775889aed6_1391351.utf8, line 387, warning: 130 characters of junk seen at toplevel
|
||||||
|
[195] Biber.pm:133> INFO - WARNINGS: 3
|
55
report/report.out
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
\BOOKMARK [1][-]{section.1}{\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{}% 1
|
||||||
|
\BOOKMARK [2][-]{subsection.1.1}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000B\000a\000c\000k\000g\000r\000o\000u\000n\000d}{section.1}% 2
|
||||||
|
\BOOKMARK [2][-]{subsection.1.2}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000M\000o\000t\000i\000v\000a\000t\000i\000o\000n\000s}{section.1}% 3
|
||||||
|
\BOOKMARK [2][-]{subsection.1.3}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000A\000i\000m}{section.1}% 4
|
||||||
|
\BOOKMARK [2][-]{subsection.1.4}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000s}{section.1}% 5
|
||||||
|
\BOOKMARK [2][-]{subsection.1.5}{\376\377\000S\000u\000c\000c\000e\000s\000s\000\040\000C\000r\000i\000t\000e\000r\000i\000a}{section.1}% 6
|
||||||
|
\BOOKMARK [2][-]{subsection.1.6}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e}{section.1}% 7
|
||||||
|
\BOOKMARK [1][-]{section.2}{\376\377\000L\000i\000t\000e\000r\000a\000t\000u\000r\000e\000\040\000a\000n\000d\000\040\000T\000e\000c\000h\000n\000i\000c\000a\000l\000\040\000R\000e\000v\000i\000e\000w}{}% 8
|
||||||
|
\BOOKMARK [2][-]{subsection.2.1}{\376\377\000E\000x\000i\000s\000t\000i\000n\000g\000\040\000C\000l\000a\000s\000s\000i\000f\000i\000c\000a\000t\000i\000o\000n\000\040\000P\000l\000a\000t\000f\000o\000r\000m\000s}{section.2}% 9
|
||||||
|
\BOOKMARK [2][-]{subsection.2.2}{\376\377\000R\000e\000q\000u\000i\000r\000e\000m\000e\000n\000t\000s\000\040\000o\000f\000\040\000I\000m\000a\000g\000e\000\040\000C\000l\000a\000s\000s\000i\000f\000i\000c\000a\000t\000i\000o\000n\000\040\000M\000o\000d\000e\000l\000s}{section.2}% 10
|
||||||
|
\BOOKMARK [2][-]{subsection.2.3}{\376\377\000M\000e\000t\000h\000o\000d\000\040\000o\000f\000\040\000I\000m\000a\000g\000e\000\040\000C\000l\000a\000s\000s\000i\000f\000i\000c\000a\000t\000i\000o\000n\000\040\000M\000o\000d\000e\000l\000s}{section.2}% 11
|
||||||
|
\BOOKMARK [2][-]{subsection.2.4}{\376\377\000W\000e\000l\000l\000-\000k\000n\000o\000w\000n\000\040\000m\000o\000d\000e\000l\000s}{section.2}% 12
|
||||||
|
\BOOKMARK [2][-]{subsection.2.5}{\376\377\000M\000a\000c\000h\000i\000n\000e\000\040\000l\000e\000a\000r\000n\000i\000n\000g\000\040\000l\000i\000b\000r\000a\000r\000i\000e\000s}{section.2}% 13
|
||||||
|
\BOOKMARK [2][-]{subsection.2.6}{\376\377\000S\000u\000m\000m\000a\000r\000y}{section.2}% 14
|
||||||
|
\BOOKMARK [1][-]{section.3}{\376\377\000S\000e\000r\000v\000i\000c\000e\000\040\000A\000n\000a\000l\000y\000s\000i\000s\000\040\000a\000n\000d\000\040\000R\000e\000q\000u\000i\000r\000e\000m\000e\000n\000t\000s}{}% 15
|
||||||
|
\BOOKMARK [2][-]{subsection.3.1}{\376\377\000S\000e\000r\000v\000i\000c\000e\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e}{section.3}% 16
|
||||||
|
\BOOKMARK [2][-]{subsection.3.2}{\376\377\000R\000e\000s\000o\000u\000r\000c\000e\000s}{section.3}% 17
|
||||||
|
\BOOKMARK [3][-]{subsubsection.3.2.1}{\376\377\000C\000o\000m\000p\000u\000t\000e\000\040\000R\000e\000s\000o\000u\000r\000c\000e\000s}{subsection.3.2}% 18
|
||||||
|
\BOOKMARK [3][-]{subsubsection.3.2.2}{\376\377\000S\000t\000o\000r\000a\000g\000e}{subsection.3.2}% 19
|
||||||
|
\BOOKMARK [2][-]{subsection.3.3}{\376\377\000U\000s\000e\000r\000\040\000i\000n\000t\000e\000r\000f\000a\000c\000e}{section.3}% 20
|
||||||
|
\BOOKMARK [2][-]{subsection.3.4}{\376\377\000A\000P\000I}{section.3}% 21
|
||||||
|
\BOOKMARK [2][-]{subsection.3.5}{\376\377\000D\000a\000t\000a\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{section.3}% 22
|
||||||
|
\BOOKMARK [2][-]{subsection.3.6}{\376\377\000S\000u\000m\000m\000a\000r\000y}{section.3}% 23
|
||||||
|
\BOOKMARK [1][-]{section.4}{\376\377\000S\000e\000r\000v\000i\000c\000e\000\040\000D\000e\000s\000i\000g\000n}{}% 24
|
||||||
|
\BOOKMARK [2][-]{subsection.4.1}{\376\377\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000S\000e\000r\000v\000i\000c\000e}{section.4}% 25
|
||||||
|
\BOOKMARK [2][-]{subsection.4.2}{\376\377\000I\000n\000t\000e\000r\000a\000c\000t\000i\000n\000g\000\040\000w\000i\000t\000h\000\040\000t\000h\000e\000\040\000s\000e\000r\000v\000i\000c\000e}{section.4}% 26
|
||||||
|
\BOOKMARK [2][-]{subsection.4.3}{\376\377\000A\000P\000I}{section.4}% 27
|
||||||
|
\BOOKMARK [2][-]{subsection.4.4}{\376\377\000G\000e\000n\000e\000r\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000M\000o\000d\000e\000l\000s}{section.4}% 28
|
||||||
|
\BOOKMARK [2][-]{subsection.4.5}{\376\377\000M\000o\000d\000e\000l\000s\000\040\000T\000r\000a\000i\000n\000i\000n\000g}{section.4}% 29
|
||||||
|
\BOOKMARK [2][-]{subsection.4.6}{\376\377\000S\000u\000m\000m\000a\000r\000y}{section.4}% 30
|
||||||
|
\BOOKMARK [1][-]{section.5}{\376\377\000S\000e\000r\000v\000i\000c\000e\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 31
|
||||||
|
\BOOKMARK [2][-]{subsection.5.1}{\376\377\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000S\000e\000r\000v\000i\000c\000e}{section.5}% 32
|
||||||
|
\BOOKMARK [2][-]{subsection.5.2}{\376\377\000W\000e\000b\000\040\000A\000p\000p\000l\000i\000c\000a\000t\000i\000o\000n}{section.5}% 33
|
||||||
|
\BOOKMARK [2][-]{subsection.5.3}{\376\377\000A\000P\000I}{section.5}% 34
|
||||||
|
\BOOKMARK [2][-]{subsection.5.4}{\376\377\000G\000e\000n\000e\000r\000a\000t\000i\000o\000n\000\040\000a\000n\000d\000\040\000T\000r\000a\000i\000n\000i\000n\000g\000\040\000o\000f\000\040\000M\000o\000d\000e\000l\000s}{section.5}% 35
|
||||||
|
\BOOKMARK [2][-]{subsection.5.5}{\376\377\000M\000o\000d\000e\000l\000\040\000I\000n\000f\000e\000r\000e\000n\000c\000e}{section.5}% 36
|
||||||
|
\BOOKMARK [2][-]{subsection.5.6}{\376\377\000R\000u\000n\000n\000e\000r}{section.5}% 37
|
||||||
|
\BOOKMARK [2][-]{subsection.5.7}{\376\377\000S\000u\000m\000m\000a\000r\000y}{section.5}% 38
|
||||||
|
\BOOKMARK [1][-]{section.6}{\376\377\000L\000e\000g\000a\000l\000,\000\040\000S\000o\000c\000i\000e\000t\000a\000l\000,\000\040\000E\000t\000h\000i\000c\000a\000l\000\040\000a\000n\000d\000\040\000P\000r\000o\000f\000e\000s\000s\000i\000o\000n\000a\000l\000\040\000C\000o\000n\000s\000i\000d\000e\000r\000a\000t\000i\000o\000n\000s}{}% 39
|
||||||
|
\BOOKMARK [2][-]{subsection.6.1}{\376\377\000L\000e\000g\000a\000l\000\040\000I\000s\000s\000u\000e\000s}{section.6}% 40
|
||||||
|
\BOOKMARK [2][-]{subsection.6.2}{\376\377\000S\000o\000c\000i\000a\000l\000\040\000I\000s\000s\000u\000e\000s}{section.6}% 41
|
||||||
|
\BOOKMARK [2][-]{subsection.6.3}{\376\377\000E\000t\000h\000i\000c\000a\000l\000\040\000I\000s\000s\000u\000e\000s}{section.6}% 42
|
||||||
|
\BOOKMARK [2][-]{subsection.6.4}{\376\377\000P\000r\000o\000f\000e\000s\000s\000i\000o\000n\000a\000l\000\040\000I\000s\000s\000u\000e\000s}{section.6}% 43
|
||||||
|
\BOOKMARK [1][-]{section.7}{\376\377\000S\000e\000r\000v\000i\000c\000e\000\040\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n}{}% 44
|
||||||
|
\BOOKMARK [2][-]{subsection.7.1}{\376\377\000T\000e\000s\000t\000i\000n\000g\000\040\000t\000h\000e\000\040\000m\000o\000d\000e\000l\000\040\000c\000r\000e\000a\000t\000i\000o\000n}{section.7}% 45
|
||||||
|
\BOOKMARK [2][-]{subsection.7.2}{\376\377\000A\000P\000I\000\040\000P\000e\000r\000f\000o\000r\000m\000a\000n\000c\000e\000\040\000T\000e\000s\000t\000i\000n\000g}{section.7}% 46
|
||||||
|
\BOOKMARK [2][-]{subsection.7.3}{\376\377\000U\000s\000a\000b\000i\000l\000i\000t\000y}{section.7}% 47
|
||||||
|
\BOOKMARK [2][-]{subsection.7.4}{\376\377\000S\000u\000m\000m\000a\000r\000y}{section.7}% 48
|
||||||
|
\BOOKMARK [1][-]{section.8}{\376\377\000C\000r\000i\000t\000i\000c\000a\000l\000\040\000R\000e\000v\000i\000e\000w\000\040\000o\000f\000\040\000P\000r\000o\000j\000e\000c\000t\000\040\000O\000u\000t\000c\000o\000m\000e\000s}{}% 49
|
||||||
|
\BOOKMARK [2][-]{subsection.8.1}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000s}{section.8}% 50
|
||||||
|
\BOOKMARK [2][-]{subsection.8.2}{\376\377\000A\000\040\000r\000e\000t\000r\000o\000s\000p\000e\000c\000t\000i\000v\000e\000\040\000a\000n\000a\000l\000y\000s\000i\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000e\000v\000e\000l\000o\000p\000m\000e\000n\000t\000\040\000p\000r\000o\000c\000e\000s\000s}{section.8}% 51
|
||||||
|
\BOOKMARK [2][-]{subsection.8.3}{\376\377\000P\000r\000o\000j\000e\000c\000t\000\040\000S\000h\000o\000r\000t\000c\000o\000m\000i\000n\000g\000s\000\040\000a\000n\000d\000\040\000I\000m\000p\000r\000o\000v\000e\000m\000e\000n\000t\000s}{section.8}% 52
|
||||||
|
\BOOKMARK [2][-]{subsection.8.4}{\376\377\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{section.8}% 53
|
||||||
|
\BOOKMARK [2][-]{subsection.8.5}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{section.8}% 54
|
||||||
|
\BOOKMARK [1][-]{section.9}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{}% 55
|
87
report/report.run.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" standalone="yes"?>
|
||||||
|
<!-- logreq request file -->
|
||||||
|
<!-- logreq version 1.0 / dtd version 1.0 -->
|
||||||
|
<!-- Do not edit this file! -->
|
||||||
|
<!DOCTYPE requests [
|
||||||
|
<!ELEMENT requests (internal | external)*>
|
||||||
|
<!ELEMENT internal (generic, (provides | requires)*)>
|
||||||
|
<!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
|
||||||
|
<!ELEMENT cmdline (binary, (option | infile | outfile)*)>
|
||||||
|
<!ELEMENT input (file)+>
|
||||||
|
<!ELEMENT output (file)+>
|
||||||
|
<!ELEMENT provides (file)+>
|
||||||
|
<!ELEMENT requires (file)+>
|
||||||
|
<!ELEMENT generic (#PCDATA)>
|
||||||
|
<!ELEMENT binary (#PCDATA)>
|
||||||
|
<!ELEMENT option (#PCDATA)>
|
||||||
|
<!ELEMENT infile (#PCDATA)>
|
||||||
|
<!ELEMENT outfile (#PCDATA)>
|
||||||
|
<!ELEMENT file (#PCDATA)>
|
||||||
|
<!ATTLIST requests
|
||||||
|
version CDATA #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST internal
|
||||||
|
package CDATA #REQUIRED
|
||||||
|
priority (9) #REQUIRED
|
||||||
|
active (0 | 1) #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST external
|
||||||
|
package CDATA #REQUIRED
|
||||||
|
priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
|
||||||
|
active (0 | 1) #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST provides
|
||||||
|
type (static | dynamic | editable) #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST requires
|
||||||
|
type (static | dynamic | editable) #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST file
|
||||||
|
type CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
]>
|
||||||
|
<requests version="1.0">
|
||||||
|
<internal package="biblatex" priority="9" active="0">
|
||||||
|
<generic>latex</generic>
|
||||||
|
<provides type="dynamic">
|
||||||
|
<file>report.bcf</file>
|
||||||
|
</provides>
|
||||||
|
<requires type="dynamic">
|
||||||
|
<file>report.bbl</file>
|
||||||
|
</requires>
|
||||||
|
<requires type="static">
|
||||||
|
<file>blx-dm.def</file>
|
||||||
|
<file>blx-compat.def</file>
|
||||||
|
<file>biblatex.def</file>
|
||||||
|
<file>standard.bbx</file>
|
||||||
|
<file>numeric.bbx</file>
|
||||||
|
<file>numeric-comp.bbx</file>
|
||||||
|
<file>ieee.bbx</file>
|
||||||
|
<file>numeric.cbx</file>
|
||||||
|
<file>biblatex.cfg</file>
|
||||||
|
<file>english.lbx</file>
|
||||||
|
</requires>
|
||||||
|
</internal>
|
||||||
|
<external package="biblatex" priority="5" active="0">
|
||||||
|
<generic>biber</generic>
|
||||||
|
<cmdline>
|
||||||
|
<binary>biber</binary>
|
||||||
|
<infile>report</infile>
|
||||||
|
</cmdline>
|
||||||
|
<input>
|
||||||
|
<file>report.bcf</file>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<file>report.bbl</file>
|
||||||
|
</output>
|
||||||
|
<provides type="dynamic">
|
||||||
|
<file>report.bbl</file>
|
||||||
|
</provides>
|
||||||
|
<requires type="dynamic">
|
||||||
|
<file>report.bcf</file>
|
||||||
|
</requires>
|
||||||
|
<requires type="editable">
|
||||||
|
<file>../main.bib</file>
|
||||||
|
</requires>
|
||||||
|
</external>
|
||||||
|
</requests>
|
@ -8,7 +8,7 @@
|
|||||||
\title{Image Classification as a Software Platform}
|
\title{Image Classification as a Software Platform}
|
||||||
|
|
||||||
% Write your full name, as in University records
|
% Write your full name, as in University records
|
||||||
\author{Andre Henriques\\Univerity of surrey}
|
\author{Andre Henriques}
|
||||||
|
|
||||||
\date{}
|
\date{}
|
||||||
|
|
||||||
@ -22,12 +22,12 @@
|
|||||||
|
|
||||||
\section{Service Implementation} \label{sec:si}
|
\section{Service Implementation} \label{sec:si}
|
||||||
|
|
||||||
This section will discuss how the service followed some possible designs to achieve a working system.
|
This chapter will discuss how the service followed some possible designs to achieve a working system.
|
||||||
The design path that was decided matches what made sense for the scale and needs of the project.
|
The design path that was decided matches what made sense for the scale and needs of the project.
|
||||||
|
|
||||||
\subsection{Structure of the Service}
|
\subsection{Structure of the Service}
|
||||||
|
|
||||||
The structure of the service matches the designed structure, as it can be seen \ref{fig:simplified_service_diagram}.
|
The structure of the service matches the designed structure, as it can be seen in Figure \ref{fig:simplified_service_diagram}.
|
||||||
|
|
||||||
\begin{figure}[h!]
|
\begin{figure}[h!]
|
||||||
\centering
|
\centering
|
||||||
@ -36,11 +36,14 @@
|
|||||||
\label{fig:simplified_service_diagram}
|
\label{fig:simplified_service_diagram}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The implementation contains: Web App; Web server, which serves the Web App; API; Training Runners; Model Runners;
|
The implementation contains: Web App; Web server, which serves the Web App; API; Training Runners; Model Runners.
|
||||||
|
This differs from the designed solution, as it contains an extra nginx reverse proxy server \cite{nginx}.
|
||||||
|
The reverse proxy is requireed as it allows for the API and the webpage to be accessible from them same domain.
|
||||||
|
|
||||||
The implementation contains an extra nginx reverse proxy server that allows for the API and the webpage to be accessible from them same domain.
|
The selected database was PostgresSQL \cite{postgressql} as it is one of the most advanced open source databases available.
|
||||||
|
The database stores all data required for the system to work, with the exeption of uploaded images and model files.
|
||||||
|
|
||||||
The rest of this section will go into details on how every tier of the structure was implemented.
|
The rest of this chapter will discuss how each individual part of the system was implemented.
|
||||||
|
|
||||||
\subsection{Web Application} \label{web-app-design}
|
\subsection{Web Application} \label{web-app-design}
|
||||||
|
|
||||||
@ -60,18 +63,18 @@
|
|||||||
|
|
||||||
There exist currently many frameworks to create SPAs.
|
There exist currently many frameworks to create SPAs.
|
||||||
I selected Svelte \cite{svelte} for this project.
|
I selected Svelte \cite{svelte} for this project.
|
||||||
I selected Svelte because it's been one of the most liked frameworks to work with in the last years, accordingly to the State of JS survey \cite{state-of-js-2022}.
|
I selected Svelte because it is been one of the most liked frameworks to work with in the last years, accordingly to the State of JS survey \cite{state-of-js-2022}.
|
||||||
It's also one of the best performant frameworks that is currently available that has extremity good performance \cite{js-frontend-frameworks-performance}.
|
It is also one of the best performant frameworks that is currently available that has extremity good performance \cite{js-frontend-frameworks-performance}.
|
||||||
I also already have experience with Svelte.
|
I also already have experience with Svelte.
|
||||||
|
|
||||||
I will be using Svelte with the SvelteKit framework \cite{svelte-kit} which greatly improves the developer experience.
|
I will be using Svelte with the SvelteKit framework \cite{svelte-kit} which greatly improves the developer experience.
|
||||||
|
|
||||||
SvelteKit allows for the easy creation of SPAs with a good default web router.
|
SvelteKit allows for the easy creation of SPAs with a good default web router.
|
||||||
|
When deploying into a production enviroment the static adapter can be used to generate a static HTML and JavaScript files.
|
||||||
The static adapter will be used to generate a static HTML and JavaScript files, and they will be hosted by an NGINX proxy \cite{nginx}.
|
This static files can be then hosted in a more efficient http server, other than the one running on NodeJs.
|
||||||
|
|
||||||
The web application uses the API to control the functionality of the service.
|
The web application uses the API to control the functionality of the service.
|
||||||
This implementation allows users of the application to do everything that the application does with the API, which is ideal in a SaaS project.
|
This implementation allows users of the application to do everything that the application does with the API, which is ideal in a SaaS project.
|
||||||
|
The communication with the API, when correcly consigured, uses HTTPS to make this communication encrypted and safe.
|
||||||
|
|
||||||
\subsubsection*{Service authentication} \label{sec:impl:service-auth}
|
\subsubsection*{Service authentication} \label{sec:impl:service-auth}
|
||||||
|
|
||||||
@ -82,18 +85,17 @@
|
|||||||
\label{fig:simplified_auth_diagram}
|
\label{fig:simplified_auth_diagram}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
%TODO task about the above image
|
||||||
|
|
||||||
The user uses an email and password to Sign In or Register with the application.
|
The user uses an email and password to Sign In or Register with the application.
|
||||||
This is sent to the server and stored in a user account.
|
This is sent to the server and stored in a user account.
|
||||||
|
|
||||||
The Password is stored hashed using bcrypt \cite{bycrpt}.
|
The Password is stored hashed using bcrypt \cite{bycrpt}.
|
||||||
In the future, other methods of authentication might be provided; like using Googles' OAuth.
|
In the future, other methods of authentication might be provided; like using Google's OAuth.
|
||||||
Once logged In, the user will be able to use the application and manage tokens that were emitted for this application.
|
Once logged In, the user will be able to use the application and manage tokens that were emitted for this application.
|
||||||
This allows the user to manage what services have access to the account. % and the usage that those services have used.
|
This allows the user to manage what services have access to the account. % and the usage that those services have used.
|
||||||
|
|
||||||
On the web app, the user can manage existing tokens.
|
On the web app, the user can manage existing tokens.
|
||||||
Guaranteeing that only the clients that should be accessing the information are.
|
Guaranteeing that only the clients that should be accessing the information are.
|
||||||
|
In the management screen, which can be seen in Figure \ref{fig:token_page}, the user can remove, and create tokens.
|
||||||
In the management screen, which can be seen in Fig. \ref{fig:token_page}, the user can remove, and create tokens.
|
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
@ -107,16 +109,16 @@
|
|||||||
\begin{figure}[h!]
|
\begin{figure}[h!]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{models_flow}
|
\includegraphics[width=\textwidth]{models_flow}
|
||||||
\caption{Simplified Diagram of Model management}
|
\caption{Simplified Diagram of Model management.}
|
||||||
\label{fig:simplified_model_diagram}
|
\label{fig:simplified_model_diagram}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The diagram \ref{fig:simplified_model_diagram} shows the steps that the user takes to use a model.
|
Figure \ref{fig:simplified_model_diagram} shows the steps that the user takes to use a model.
|
||||||
|
|
||||||
First, the user creates the model.
|
First, the user creates the model.
|
||||||
In this step, the user uploads a sample image of what the model will be handling.
|
In this step, the user uploads a sample image of what the model will be handling.
|
||||||
This image is used to define what the kinds of images the model will be able to intake.
|
This image is used to define what the kinds of images the model will be able to intake.
|
||||||
This is done in the page shown in Fig. \ref{fig:create_model}, the user provides a name for the model and an image and then presses the button create.
|
This is done in the page shown in Figure \ref{fig:create_model}, the user provides a name for the model and an image and then presses the button create.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
@ -125,19 +127,19 @@
|
|||||||
\label{fig:create_model}
|
\label{fig:create_model}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The user is then shown the model page, which contains all the information about a model, which can be seen in Fig. \ref{fig:model_page}.
|
The user is then shown the model page, which contains all the information about a model, which can be seen in Figure \ref{fig:model_page}.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.9\textwidth]{base_model_page}
|
\includegraphics[width=0.9\textwidth]{base_model_page}
|
||||||
\caption{Screenshot of web application on the page shows basic information about the model.}
|
\caption{Screenshot of the web application on the page shows basic information about the model.}
|
||||||
\label{fig:model_page}
|
\label{fig:model_page}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
This page contains a set of tabs a the top.
|
This page contains a set of tabs a top.
|
||||||
Each tab gives different insight abou the model.
|
Each tab gives different insight about the model.
|
||||||
The ``Model'' tab, contains only relevent actions ot the most pressing action that the user take.
|
The ``Model'' tab, contains only relevant actions that the user can take.
|
||||||
In Fig. \ref{fig:model_page}, the user has created a model but has not added training data so the page shows a section where the user can input training data.
|
In Figure \ref{fig:model_page}, the user has created a model but has not added training data, so the page shows a section where the user can input training data.
|
||||||
The ``Model Data'' tab contains a more detailed view about data that has been updated.
|
The ``Model Data'' tab contains a more detailed view about data that has been updated.
|
||||||
|
|
||||||
Currently, the system does not support resizing of images that are different from the one uploaded at the creation step.
|
Currently, the system does not support resizing of images that are different from the one uploaded at the creation step.
|
||||||
@ -153,19 +155,16 @@
|
|||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.9\textwidth]{model_data_tab}
|
\includegraphics[width=0.9\textwidth]{model_data_tab}
|
||||||
\caption{Screenshot of web application part of the ``Model Data'' tab}
|
\caption{Screenshot of web application part of the ``Model Data'' tab.}
|
||||||
\label{fig:model_data_tab}
|
\label{fig:model_data_tab}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
This information can be useful to more advanced users that might decide to gather more data to balance the dataset.
|
This information can be useful to more advanced users that might decide to gather more data to balance the dataset.
|
||||||
|
|
||||||
To upload the reset of the data set, the user can upload a zip file that contains a set of classes and images corresponding to that class.
|
To upload the reset of the data set, the user can upload a zip file that contains a set of classes and images corresponding to that class.
|
||||||
That zip file is processed and images and classes are created.
|
That zip file is processed and images and classes are created.
|
||||||
The user is given instruction on how create the zip file so that the system can esaly process the data, the upload set can be seen in \ref{fig:upload_data_section}.
|
The user is given instruction on how to create the zip file so that the system can easily process the data, the upload set can be seen in Figure \ref{fig:upload_data_section}.
|
||||||
|
|
||||||
This process was original slow as the system did not have the capabilities to parallelize the process of importing the images, but this was implemented, and the import process was improved.
|
This process was original slow as the system did not have the capabilities to parallelize the process of importing the images, but this was implemented, and the import process was improved.
|
||||||
The improved process now takes a few seconds to process and verify the entirety of the dataset, making the experience for the end user better.
|
The improved process now takes a few seconds to process and verify the entirety of the dataset, making the experience for the end user better.
|
||||||
|
|
||||||
Alternatively, the user can use the API to create new classes and upload images.
|
Alternatively, the user can use the API to create new classes and upload images.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
@ -183,7 +182,7 @@
|
|||||||
When the model is finished training, the user can use the model to run inference tasks on images.
|
When the model is finished training, the user can use the model to run inference tasks on images.
|
||||||
To achieve this, the user can either use the API to submit a classification task or use the tasks tab in the web platform.
|
To achieve this, the user can either use the API to submit a classification task or use the tasks tab in the web platform.
|
||||||
|
|
||||||
In the tasks tab, which can be seen in Fig. \ref{fig:update_data_section}, the user can see current and previous tasks.
|
In the tasks tab, which can be seen in Figure \ref{fig:upload_data_section}, the user can see current and previous tasks.
|
||||||
The users can see what tasks were performed and their results.
|
The users can see what tasks were performed and their results.
|
||||||
The user can also inform the service if the task that was performed did return the correct results.
|
The user can also inform the service if the task that was performed did return the correct results.
|
||||||
This information can be used to keep track of the real accuracy of the model.
|
This information can be used to keep track of the real accuracy of the model.
|
||||||
@ -192,7 +191,7 @@
|
|||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.6\textwidth]{model_task_tab}
|
\includegraphics[height=0.95\textheight]{model_task_tab}
|
||||||
\caption{Screenshot of web application on the tasks tab.}
|
\caption{Screenshot of web application on the tasks tab.}
|
||||||
\label{fig:upload_data_section}
|
\label{fig:upload_data_section}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -202,17 +201,17 @@
|
|||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{models_advanced_flow}
|
\includegraphics[width=\textwidth]{models_advanced_flow}
|
||||||
\caption{Simplified Diagram of Advanced Model management}
|
\caption{Simplified Diagram of Advanced Model management.}
|
||||||
\label{fig:simplified_model_advanced_diagram}
|
\label{fig:simplified_model_advanced_diagram}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The diagram \ref{fig:simplified_model_advanced_diagram} shows the steps that the user takes to use a model.
|
Figure \ref{fig:simplified_model_advanced_diagram} shows the steps that the user takes to use a model.
|
||||||
|
|
||||||
The steps are very similar to the normal model management.
|
The steps are very similar to the normal model management.
|
||||||
The user would follow all the steps that are required for normal model creation and training.
|
The user would follow all the steps that are required for normal model creation and training.
|
||||||
|
|
||||||
At the end of the process, the user will be able to add new data to the model and retrain it.
|
At the end of the process, the user will be able to add new data to the model and retrain it.
|
||||||
To achieve that, the user would simply go to the data tab and create a new class, which the Fig. \ref{expand_class_part} shows.
|
To achieve that, the user would simply go to the data tab and create a new class, which the Figure \ref{fig:expand_class_part} shows.
|
||||||
Once a new class is added, the webpage will inform the user that the model can be retrained.
|
Once a new class is added, the webpage will inform the user that the model can be retrained.
|
||||||
The user might choose to retrain the model now or more new classes and retrain later.
|
The user might choose to retrain the model now or more new classes and retrain later.
|
||||||
|
|
||||||
@ -231,38 +230,37 @@
|
|||||||
|
|
||||||
Users in this tab can see what is the progress, and results of their tasks.
|
Users in this tab can see what is the progress, and results of their tasks.
|
||||||
The webpage also provides nice, easy to see statistics on the task results, allowing the user to see how the model is performing.
|
The webpage also provides nice, easy to see statistics on the task results, allowing the user to see how the model is performing.
|
||||||
Which is shown on Fig. \ref{fig:upload_data_section}
|
Which is shown on Figure \ref{fig:upload_data_section}
|
||||||
|
|
||||||
On the administrator, users should be able to change the status of tasks as well as see a more comprehensive view on how the tasks are being performed.
|
On the administrator, users should be able to change the status of tasks as well as see a more comprehensive view on how the tasks are being performed.
|
||||||
Administrator users can see the current status of runners, as well as which task the runners are doing.
|
Administrator users can see the current status of runners, as well as which task the runners are doing, the Figure \ref{fig:runner_page} shows the runner visualisation page.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.6\textwidth]{runner_page}
|
\includegraphics[width=0.6\textwidth]{runner_page}
|
||||||
\caption{Screenshot of web application on the runners administrator Page.}
|
\caption{Screenshot of web application on the runner administration page.}
|
||||||
\label{fig:runner_page}
|
\label{fig:runner_page}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
\subsection{API}
|
\subsection{API}
|
||||||
|
|
||||||
The API was implemented as a multithreaded go \cite{go} server.
|
The API was implemented as a multithreaded Go \cite{go} server.
|
||||||
The application, on launch, loads a configuration file and connects to the database.
|
The application, on launch, loads a configuration file and connects to the database.
|
||||||
After connecting to the database, the application performs pre-startup checks to make sure no tasks that were interrupted via a server restart and were not left in an unrecoverable state.
|
After connecting to the database, the application performs pre-startup checks to make sure no tasks that were interrupted via a server restart and were not left in an unrecoverable state.
|
||||||
Once the checks are done, the application creates workers, which will be explained in section \ref{impl:runner}, which when completed the API server is finally started up.
|
Once the checks are done, the application creates workers, which will be explained in section \ref{impl:runner}, which when completed the API server is finally started up.
|
||||||
|
|
||||||
Information about the API is shown around the web page so that the user can see information about the API right next to where the user would normally do the action, providing a good user interface.
|
Information about the API is shown around the web page so that the user can see information about the API right next to where the user would normally do the action, providing a good user interface.
|
||||||
As the user can get information about right where they would normally do the action, as it can be seen in Fig. \ref{fig:code_demo}.
|
As, the user can get information about right where they would normally do the action, as it can be seen in Figure \ref{fig:code_demo}.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=0.6\textwidth]{code_demo}
|
\includegraphics[width=0.6\textwidth]{code_demo}
|
||||||
\caption{Screenshot of web application that shows the explanation of the API call}
|
\caption{Screenshot of the web application that shows the explanation of the API call.}
|
||||||
\label{fig:code_demo}
|
\label{fig:code_demo}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
This server will take JSON and multipart form data requests, the requests are processed, and answered with a JSON response.
|
This server will take JSON and multipart form data requests, the requests are processed, and answered with a JSON response.
|
||||||
|
|
||||||
The multipart requests are required due to JSON's inability to transmit binary data, which will make the uploading of images extremely inefficient.
|
The multipart requests are required due to JSON's inability to transmit binary data, which will make the uploading of images extremely inefficient.
|
||||||
Those images would have to be transformed into binary data and then uploaded as a byte array or encoded as base64 and uploaded.
|
Those images would have to be transformed into binary data and then uploaded as a byte array or encoded as base64 and uploaded.
|
||||||
Either of those options is extremely inefficient.
|
Either of those options is extremely inefficient.
|
||||||
@ -284,7 +282,7 @@
|
|||||||
During the login process, the service checks to see if the user is registered and if the password provided during the login matches the stored hash.
|
During the login process, the service checks to see if the user is registered and if the password provided during the login matches the stored hash.
|
||||||
Upon verifying the user, a token is emitted.
|
Upon verifying the user, a token is emitted.
|
||||||
|
|
||||||
Once a user is logged in they can then create more tokens as seen in the section \ref{sec:impl:service-auth}.
|
Once a user is logged in they can then create more tokens as seen in section \ref{sec:impl:service-auth}.
|
||||||
While using the API the user should only use created tokens in the settings page as those tokens are named, and have controllable expiration dates.
|
While using the API the user should only use created tokens in the settings page as those tokens are named, and have controllable expiration dates.
|
||||||
This is advantageous from a security perspective, as the user can manage who has access to the API.
|
This is advantageous from a security perspective, as the user can manage who has access to the API.
|
||||||
If the token gets leaked, the user can then delete the named token, to guarantee the safety of his access.
|
If the token gets leaked, the user can then delete the named token, to guarantee the safety of his access.
|
||||||
@ -296,7 +294,7 @@
|
|||||||
|
|
||||||
Model generation happens on the API server, the API server analyses what the image that was provided and generates several model candidates accordingly.
|
Model generation happens on the API server, the API server analyses what the image that was provided and generates several model candidates accordingly.
|
||||||
The number of model candidates is user defined.
|
The number of model candidates is user defined.
|
||||||
The model generation subsystem decides the structure of the model candidates based on the image size, it prioritizes the smaller models for smaller images and convolution networks with bigger images.
|
The model generation subsystem decides the structure of the model candidates based on the image size, it prioritises the smaller models for smaller images and convolution networks with bigger images.
|
||||||
The depth is controlled both by the image size and number of outputs, models candidates that need to be expanded are generated with bigger values to account for possible new values.
|
The depth is controlled both by the image size and number of outputs, models candidates that need to be expanded are generated with bigger values to account for possible new values.
|
||||||
It tries to generate the optimal size if only one model is requested.
|
It tries to generate the optimal size if only one model is requested.
|
||||||
If more than one is requested then the generator tries to generate models of various types and sizes, so if there is possible smaller model it will also be tested.
|
If more than one is requested then the generator tries to generate models of various types and sizes, so if there is possible smaller model it will also be tested.
|
||||||
@ -390,11 +388,11 @@
|
|||||||
% TODO talk about how the runner loads images
|
% TODO talk about how the runner loads images
|
||||||
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
\subsection{Summary}
|
||||||
This section went into the details of how the designed was implemented.
|
This chapter went into the details of how the designed was implemented.
|
||||||
The design was envisioned to be the best possible version of this service, but scope was restrained to the necessities of the system while it was being developed.
|
The design was envisioned to be the best possible version of this service, but scope was restrained to the necessities of the system while it was being developed.
|
||||||
And possible features that would make the implemented application closer to the ideal design could have been implemented if there was higher need during the development timeline.
|
And possible features that would make the implemented application closer to the ideal design could have been implemented if there was higher need during the development timeline.
|
||||||
This will be more discussed in the section about a critical review of the work.
|
This will be more discussed in chapter \ref{sec:crpo}.
|
||||||
|
|
||||||
|
|
||||||
\pagebreak
|
\pagebreak
|
||||||
@ -427,7 +425,7 @@
|
|||||||
|
|
||||||
Legal issues might occur due to image uploaded images. For example, those images could be copyrighted, or the images could be confidential. The service is designed to provide ways to allow users to host their images without having to host the images itself, moving the legal requirement to the management of the data to the user of the system.
|
Legal issues might occur due to image uploaded images. For example, those images could be copyrighted, or the images could be confidential. The service is designed to provide ways to allow users to host their images without having to host the images itself, moving the legal requirement to the management of the data to the user of the system.
|
||||||
|
|
||||||
\subsubsection{GDPR}
|
\subsubsection*{GDPR}
|
||||||
The General Data Protection Regulation (GDPR) (GDPR, 2018) is a data protection and privacy law in the European Union and the European Economic Area, that has also been implemented into British law.
|
The General Data Protection Regulation (GDPR) (GDPR, 2018) is a data protection and privacy law in the European Union and the European Economic Area, that has also been implemented into British law.
|
||||||
The main objective of the GDPR is to minimise the data collected by the application for purposes that are not the used in the application, as well as giving users the right to be forgotten.
|
The main objective of the GDPR is to minimise the data collected by the application for purposes that are not the used in the application, as well as giving users the right to be forgotten.
|
||||||
|
|
||||||
@ -459,7 +457,7 @@
|
|||||||
\subsubsection*{Professional Competence and Integrity}
|
\subsubsection*{Professional Competence and Integrity}
|
||||||
This project has been an enormous undertaking that pushed the limits of my capabilities.
|
This project has been an enormous undertaking that pushed the limits of my capabilities.
|
||||||
I am glad that I was able to use this opportunity to learn about distributed systems, image classification, go, and Svelte.
|
I am glad that I was able to use this opportunity to learn about distributed systems, image classification, go, and Svelte.
|
||||||
During this project, I also followed the best practices of software development such as using source control software and having an audit to tasks and issues.
|
During this project, I also followed the best practices of software development, such as using source control software and having an audit to tasks and issues.
|
||||||
|
|
||||||
\subsubsection*{Duty to Relevant Authority}
|
\subsubsection*{Duty to Relevant Authority}
|
||||||
For the duration of the project, all the guidelines provided by the University of Surrey were followed.
|
For the duration of the project, all the guidelines provided by the University of Surrey were followed.
|
||||||
@ -472,215 +470,26 @@
|
|||||||
\pagebreak
|
\pagebreak
|
||||||
|
|
||||||
|
|
||||||
|
\include{eval}
|
||||||
|
\include{review}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Service Evaluation} \label{sec:se}
|
|
||||||
This section will discuss how the service can be evaluated from a technical standpoint and its results.
|
|
||||||
|
|
||||||
With the goals of the project, there are two kinds of tests that need to be accounted for.
|
|
||||||
User testing tests that relate to the experience of the user while using the project and tests that quantitive test the project.
|
|
||||||
|
|
||||||
Such as accuracy of the generated models, response time to queries.
|
|
||||||
|
|
||||||
\subsection{Testing the model}
|
|
||||||
To test the system, a few datasets were selected.
|
|
||||||
The datasets were selected to represent different possible sizes of models, and sizes of output labels.
|
|
||||||
|
|
||||||
The ImageNet\cite{imagenet} was not selected as one of the datasets that will be tested, as it does not represent the target problem that this project is trying to tackle.
|
|
||||||
|
|
||||||
The tests will measure:
|
|
||||||
\begin{itemize}
|
|
||||||
\item Time to process and validate the entire dataset upon upload
|
|
||||||
\item Time to train the dataset
|
|
||||||
\item Time to classify the image once the dataset has been trained
|
|
||||||
\item Time to extend the model
|
|
||||||
\item Accuracy of the newly created model
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
The results will be placed in the results table.
|
|
||||||
|
|
||||||
\subsubsection{MNIST}
|
|
||||||
|
|
||||||
The MNIST \cite{mnist} dataset was selected due to its size. It's a small dataset that can be trained quickly and can be used to verify other internal systems of the service.
|
|
||||||
|
|
||||||
During testing only the 9 out 10 classes are trainged and the 10th is added during the retraining process.
|
|
||||||
|
|
||||||
\subsubsection{CIFAR-10}
|
|
||||||
|
|
||||||
The MNIST \cite{mnist} dataset was selected due to its size. It's a small dataset that can be trained quickly and can be used to verify other internal systems of the service.
|
|
||||||
|
|
||||||
During testing only the 9 out 10 classes are trainged and the 10th is added during the retraining process.
|
|
||||||
|
|
||||||
\textbf{TODO add image}
|
|
||||||
|
|
||||||
\textbf{TODO add more datasets}
|
|
||||||
|
|
||||||
\subsubsection{Results}
|
|
||||||
|
|
||||||
|
|
||||||
\textbf{TODO add more data}
|
|
||||||
|
|
||||||
|
|
||||||
\begin{longtable}{ | c | c | c | c | c | c |}
|
|
||||||
\hline
|
|
||||||
Dataset & Import Time & Train Time & Classification Time & Extend Time & Accuracy \\ \hline
|
|
||||||
MNIST & $8s$ & $2m$ & $1s$ & $50s$ & $98\%$ \\ \hline
|
|
||||||
CIFAR-10 & $6s$ & $41m 38s$ & $1s$ & $1m 11s$ & $95.2\%$ \\ \hline
|
|
||||||
\caption{Evaluation Results}
|
|
||||||
\label{tab:eval-results}
|
|
||||||
\end{longtable}
|
|
||||||
|
|
||||||
\subsubsection{Conclusions}
|
|
||||||
The service can create models that represent what the users want in a reasonable amount of time without much interaction from the user.
|
|
||||||
The models created have the target accuracy required by the users, and the amount of time it takes for the models to train and expand is reasonable and within the margins that meet the success criteria for the project.
|
|
||||||
|
|
||||||
\pagebreak
|
\pagebreak
|
||||||
|
%\section{appendix}
|
||||||
|
% \begin{figure}[h!]
|
||||||
|
% \begin{center}
|
||||||
|
% \includegraphics[height=0.8\textheight]{expandable_models_simple}
|
||||||
|
% \end{center}
|
||||||
|
% \caption{contains an overall view of the entire system}
|
||||||
|
% \label{fig:expandable_models_simple}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
% \begin{figure}
|
||||||
|
% \begin{center}
|
||||||
|
% \includegraphics[height=0.8\textheight]{expandable_models_generator}
|
||||||
|
% \end{center}
|
||||||
|
% \caption{contains an overall view of the model generation system}
|
||||||
|
% \label{fig:expandable_models_generator}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Critical Review of Project Outcomes} \label{sec:crpo}
|
|
||||||
|
|
||||||
This section will go into details to see if the project was able to achieve the goals set forth in the introduction.
|
|
||||||
|
|
||||||
The section will be analysing if the goals of the project were met, then shortcomings and improvements off the implementation will be discussed. After analysing shortcomings and improvements, possible future work that be done to the project will be discussed.
|
|
||||||
The section will end with a general statement about the state of the project.
|
|
||||||
|
|
||||||
\subsection{Project Objectives}
|
|
||||||
|
|
||||||
In the introduction section of this project, some objectives were set for this project.
|
|
||||||
|
|
||||||
By the end of the project, the developed solution can achieve the goals set forth.
|
|
||||||
|
|
||||||
\subsubsection*{A system to upload images that will be assigned to a model}
|
|
||||||
|
|
||||||
This goal was achieved.
|
|
||||||
One of the abilities of both the API and the webpage are to be able to upload images to the service.
|
|
||||||
Which means that a system was created that allows users to upload images that will be linked with a model.
|
|
||||||
|
|
||||||
\subsubsection*{A system to automatically train and create models}
|
|
||||||
|
|
||||||
This goal was achieved.
|
|
||||||
The designed server can create models based only using the data provided by the user without any human interaction.
|
|
||||||
The model creation system is not as efficient, this inefficient will be discussed more in a future subsection it could be but can still achieve the desired goal.
|
|
||||||
|
|
||||||
\subsubsection*{Platform where users can manage their models}
|
|
||||||
|
|
||||||
This goal was achieved.
|
|
||||||
A web-based platform was developed where users can manage all the data related to machine learning models that were created.
|
|
||||||
The platform that was implemented allows users to create models, upload images related to the model, and then manage the submitted classification tasks.
|
|
||||||
|
|
||||||
The platform allows managing any models easily they create with within, meaning that the developed solution can achieve the first goal of the project.
|
|
||||||
|
|
||||||
\subsubsection{A system to automatically expand models without fully retraining the models}
|
|
||||||
|
|
||||||
This goal was achieved.
|
|
||||||
A system was created that allows users to add more images and classes to models that were previously created.
|
|
||||||
And this is done without having to fully retrain the model.
|
|
||||||
|
|
||||||
\subsubsection*{An API that users can interact programmatically}
|
|
||||||
|
|
||||||
This goal was achieved.
|
|
||||||
The API implementation allows users to programmatically access the system.
|
|
||||||
The efficacy of the API is proved by its use in the front end application.
|
|
||||||
The front end application uses the API to fully control the service.
|
|
||||||
This means that everything that can be done in the frontend can be done via the API.
|
|
||||||
Which means that the API can satisfy every need that a possible user might have; therefore this goal was accomplished.
|
|
||||||
|
|
||||||
\subsection{Project Shortcomings and Improvements}
|
|
||||||
|
|
||||||
Although the project was able to achieve the desired goals, the project has some shortcomings that can be improved upon in future iterations.
|
|
||||||
This section will analyse some of those shortcoming and ways to improve the service.
|
|
||||||
|
|
||||||
\subsubsection*{Model Generation}
|
|
||||||
The model generation system is a complex, and due to all the moving parts that make the system work, it requires a large amount of to work to maintain.
|
|
||||||
It is also very inefficient due to the having to generate custom tailored python scripts, that cause the data to be reloaded every time a new a round-robin round needs to happen.
|
|
||||||
|
|
||||||
A way more efficient way is to perform all the training directly in go server.
|
|
||||||
Running the training directly in go would allow the service to be able to keep track of memory and GPU usage, move data from the GPU and CPU effortlessly between runs, and would remove uncertainty from the training system.
|
|
||||||
|
|
||||||
The model generation was originally implemented with TensorFlow, this ended up limiting the generation of the models in go as the bindings for TensorFlow were lacking in the tools used to train the model.
|
|
||||||
Using Lib Torch libraries would allow more control over data, and allow that control to be done in go, which would improve both control and speed of the process.
|
|
||||||
Unfortunately, when a version of the service was attempted to be implemented using Lib Torch, the system was too unstable.
|
|
||||||
Problems were encountered with the go bindings for the Lib Torch library or, the Lib Torch library was causing inconsistent behaviour with between runs.
|
|
||||||
That compounded with time limitations make it impossible for a Lib Torch implementation to come to fruition.
|
|
||||||
|
|
||||||
Having a full go implementation would make the system more maintainable and fast.
|
|
||||||
|
|
||||||
|
|
||||||
\subsubsection*{Image storage}
|
|
||||||
|
|
||||||
The image storage is all local, while this does not currently affect how remote runner works.
|
|
||||||
%TODO improve this
|
|
||||||
This is less problematic when the runner is on the same network as the main server, but if a possible user would like to provide their runners.
|
|
||||||
This would require a lot of bandwidth for the images to be transferred over the network every time the model needs to run.
|
|
||||||
|
|
||||||
A better solution for image storage would allow user provided runners to store images locally.
|
|
||||||
During the upload time, the API, instead of storing the images locally, would instruct the users' runner to store the images locally, therefore when the runner would need to perform any training tasks with local data instead of remote data.
|
|
||||||
|
|
||||||
This would not also not require modification of the current system.
|
|
||||||
The system was designed and implemented to be expanded.
|
|
||||||
The dataset system was designed to be able to handle different kinds of storage methods in the future, such as remote storage and Object Buckets, like Amazon S3.
|
|
||||||
|
|
||||||
\subsection{Future Work}
|
|
||||||
This section will consider possible future work that can be built upon this project.
|
|
||||||
|
|
||||||
\subsubsection*{Image Processing Pipelines}
|
|
||||||
The current system does not allow for images of different sizes to be uploaded to the system, an interesting project would be to create a new subsystem that would allow the user to create image processing pipelines.
|
|
||||||
|
|
||||||
This new system would allow users to create a set of instructions that images would go through to be added to the system.
|
|
||||||
For example, automatically cropping, scaling, or padding the image.
|
|
||||||
|
|
||||||
A system like this would add versatility to the system and remove more work from the users of the service as they don't have to worry about handling the image processing on their side.
|
|
||||||
|
|
||||||
\subsubsection*{Different Kinds of Models}
|
|
||||||
The runner system could be used to train and manage different kinds of models, not just image classification models.
|
|
||||||
|
|
||||||
If the system was modified to have different kinds of models, it would allow the users to run different kinds of models.
|
|
||||||
Such as Natural Language Processing Models, or Multi Model Models.
|
|
||||||
This would increase the versatility of the service, and it would allow users to automate more tasks.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Conclusion}
|
|
||||||
|
|
||||||
With the increase in automation recently, having a system that allows users to quickly build classification models for their tasks, would be incredibly useful.
|
|
||||||
This project provides exactly that, a simple-to-use system that allows the user to create models with ease.
|
|
||||||
|
|
||||||
There are more features to be added to the service, that would improve the quality of the project.
|
|
||||||
The service is in a state that it would be possible to run it in a production environment, making this project successful.
|
|
||||||
|
|
||||||
|
|
||||||
\pagebreak
|
|
||||||
\section{Appendix}
|
|
||||||
\begin{figure}[h!]
|
|
||||||
\begin{center}
|
|
||||||
\includegraphics[height=0.8\textheight]{expandable_models_simple}
|
|
||||||
\end{center}
|
|
||||||
\caption{Contains an overall view of the entire system}\label{fig:expandable_models_simple}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\begin{figure}
|
|
||||||
\begin{center}
|
|
||||||
\includegraphics[height=0.8\textheight]{expandable_models_generator}
|
|
||||||
\end{center}
|
|
||||||
\caption{Contains an overall view of the model generation system}\label{fig:expandable_models_generator}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
136
report/review.tex
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
\section{Critical Review of Project Outcomes} \label{sec:crpo}
|
||||||
|
|
||||||
|
This chapter will go into details to see if the project was able to achieve the goals set forth in the introduction.
|
||||||
|
The chapter will be analysing if the goals of the project were met, then shortcomings and improvements off the implementation will be discussed. After analysing shortcomings and improvements, possible future work that be done to the project will be discussed.
|
||||||
|
The section will end with a general statement about the state of the project.
|
||||||
|
|
||||||
|
\subsection{Project Objectives}
|
||||||
|
|
||||||
|
In the introduction section of this project, some objectives were set for this project.
|
||||||
|
|
||||||
|
By the end of the project, the developed solution can achieve the goals set forth.
|
||||||
|
|
||||||
|
\subsubsection*{A system to upload images that will be assigned to a model}
|
||||||
|
|
||||||
|
This goal was achieved.
|
||||||
|
One of the abilities of both the API and the webpage are to be able to upload images to the service.
|
||||||
|
Which means that a system was created that allows users to upload images that will be linked with a model.
|
||||||
|
|
||||||
|
\subsubsection*{A system to automatically train and create models}
|
||||||
|
|
||||||
|
This goal was achieved.
|
||||||
|
The designed server can create models based only using the data provided by the user without any human interaction.
|
||||||
|
The model creation system is not as efficient, this inefficient will be discussed more in a future subsection it could be but can still achieve the desired goal.
|
||||||
|
|
||||||
|
\subsubsection*{Platform where users can manage their models}
|
||||||
|
|
||||||
|
This goal was achieved.
|
||||||
|
A web-based platform was developed where users can manage all the data related to machine learning models that were created.
|
||||||
|
The platform that was implemented allows users to create models, upload images related to the model, and then manage the submitted classification tasks.
|
||||||
|
|
||||||
|
The platform allows managing any models easily they create with within, meaning that the developed solution can achieve the first goal of the project.
|
||||||
|
|
||||||
|
\subsubsection*{A system to automatically expand models without fully retraining the models}
|
||||||
|
|
||||||
|
This goal was achieved.
|
||||||
|
A system was created that allows users to add more images and classes to models that were previously created.
|
||||||
|
And this is done without having to fully retrain the model.
|
||||||
|
|
||||||
|
\subsubsection*{An API that users can interact programmatically}
|
||||||
|
|
||||||
|
This goal was achieved.
|
||||||
|
The API implementation allows users to programmatically access the system.
|
||||||
|
The efficacy of the API is proved by its use in the front end application.
|
||||||
|
The front end application uses the API to fully control the service.
|
||||||
|
This means that everything that can be done in the frontend can be done via the API.
|
||||||
|
Which means that the API can satisfy every need that a possible user might have; therefore this goal was accomplished.
|
||||||
|
|
||||||
|
\subsection{A retrospective analysis of the development process}
|
||||||
|
|
||||||
|
This project was complex to implement, with many interconnected systems working together to achieve the goals of the project.
|
||||||
|
This complexity was a result of open-ended design and scope expansion.
|
||||||
|
If the scope of the project had been more limited, the project could have achieved higher overall results.
|
||||||
|
|
||||||
|
While there were no technical setbacks done during the development process.
|
||||||
|
There were times when software updates of libraries made the implementation unusable, which slowed considerably the development velocity, as those issues required fixing.
|
||||||
|
If actions such as creating OCI containers were done in the earlier stages of development, issues such as this could have been prevented.
|
||||||
|
One of these software updates, made it so that images were not being able to classified.
|
||||||
|
This then prompted me to try to use a different library to train and classify the images, but this ended up not being achievable, and ended up with just fixing the original library problem.
|
||||||
|
While the time used to try to integrate the different machine learning library helped the project improve, most of the effort put into this possible transition as spent inefficiently.
|
||||||
|
|
||||||
|
As far as tools aiding the development, this project followed industries norms by having the source code tracked in Git and issues tracked in an issue tracker.
|
||||||
|
Which greatly helped in the development process, by having one centrailized repository of both code and known issues of that code.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Project Shortcomings and Improvements}
|
||||||
|
|
||||||
|
Although the project was able to achieve the desired goals, the project has some shortcomings that can be improved upon in future iterations.
|
||||||
|
This section will analyse some of those shortcoming and ways to improve the service.
|
||||||
|
|
||||||
|
\subsubsection*{Model Generation}
|
||||||
|
The model generation system is a complex, and due to all the moving parts that make the system work, it requires a large amount of to work to maintain.
|
||||||
|
It is also very inefficient due to the having to generate custom tailored python scripts, that cause the data to be reloaded every time a new a round-robin round needs to happen.
|
||||||
|
|
||||||
|
A way more efficient way is to perform all the training directly on go server.
|
||||||
|
Running the training directly in go would allow the service to be able to keep track of memory and GPU usage, move data from the GPU and CPU effortlessly between runs, and would remove uncertainty from the training system.
|
||||||
|
|
||||||
|
The model generation was originally implemented with TensorFlow, this ended up limiting the generation of the models in go as the bindings for TensorFlow were lacking in the tools used to train the model.
|
||||||
|
Using Lib Torch libraries would allow more control over data, and allow that control to be done in go, which would improve both control and speed of the process.
|
||||||
|
Unfortunately, when a version of the service was attempted to be implemented using Lib Torch, the system was too unstable.
|
||||||
|
Problems were encountered with the go bindings for the Lib Torch library or, the Lib Torch library was causing inconsistent behaviour with between runs.
|
||||||
|
That compounded with time limitations make it impossible for a Lib Torch implementation to come to fruition.
|
||||||
|
Having a full go implementation would make the system more maintainable and fast.
|
||||||
|
|
||||||
|
|
||||||
|
\subsubsection*{Image storage}
|
||||||
|
|
||||||
|
The image storage is all local, while this does not currently affect how remote runner works.
|
||||||
|
%TODO improve this
|
||||||
|
This is less problematic when the runner is on the same network as the main server, but if a possible user would like to provide their runners.
|
||||||
|
This would require a lot of bandwidth for the images to be transferred over the network every time the model needs to run.
|
||||||
|
|
||||||
|
A better solution for image storage would allow user provided runners to store images locally.
|
||||||
|
During the upload time, the API, instead of storing the images locally, would instruct the users' runner to store the images locally, therefore when the runner would need to perform any training tasks with local data instead of remote data.
|
||||||
|
|
||||||
|
This would not also not require modification of the current system.
|
||||||
|
The system was designed and implemented to be expanded.
|
||||||
|
The dataset system was designed to be able to handle different kinds of storage methods in the future, such as remote storage and Object Buckets, like Amazon S3.
|
||||||
|
|
||||||
|
\subsubsection*{User Interface}
|
||||||
|
|
||||||
|
The user interface is simplistic, this helps new users use the program but limits what advanced users might want to do.
|
||||||
|
The user interface also might need an overhaul as it not visually appealing.
|
||||||
|
A future improving for this project is definitely getting a professional graphical designer that can create a better-looking and recognizable application.
|
||||||
|
|
||||||
|
\subsection{Future Work}
|
||||||
|
This section will consider possible future work that can be built upon this project.
|
||||||
|
|
||||||
|
\subsubsection*{Image Processing Pipelines}
|
||||||
|
The current system does not allow for images of different sizes to be uploaded to the system, an interesting project would be to create a new subsystem that would allow the user to create image processing pipelines.
|
||||||
|
|
||||||
|
This new system would allow users to create a set of instructions that images would go through to be added to the system.
|
||||||
|
For example, automatically cropping, scaling, or padding the image.
|
||||||
|
|
||||||
|
A system like this would add versatility to the system and remove more work from the users of the service as they don't have to worry about handling the image processing on their side.
|
||||||
|
|
||||||
|
\subsubsection*{Different Kinds of Models}
|
||||||
|
The runner system could be used to train and manage different kinds of models, not just image classification models.
|
||||||
|
|
||||||
|
If the system was modified to have different kinds of models, it would allow the users to run different kinds of models.
|
||||||
|
Such as Natural Language Processing Models, or Multi Model Models.
|
||||||
|
This would increase the versatility of the service, and it would allow users to automate more tasks.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Conclusion}
|
||||||
|
|
||||||
|
With the increase in automation recently, having a system that allows users to quickly build classification models for their tasks, would be incredibly useful.
|
||||||
|
This project provides exactly that, a simple-to-use system that allows the user to create models with ease.
|
||||||
|
|
||||||
|
The implemented system is able to accept images provided by the user, then create and train that model, and then allow user to classify the images with that created model.
|
||||||
|
To achieve this, the developed software is large and complex.
|
||||||
|
Developing such large and complex systems comes with compromises.
|
||||||
|
In this case the model generation, training, and classfication; and API systems were prioritized over other systems such as file management systems.
|
||||||
|
|
||||||
|
While there are still improvements that can be made, and more features, that can be added to the service to make it event better, such as image processing pipelines and diferent kinds of models.
|
||||||
|
The service is in a state that It could be deployed in a production enviroment and work.
|
||||||
|
Therefore this project is successful.
|
@ -41,7 +41,6 @@
|
|||||||
As mentioned before, the service needs to be able to manage its compute resources.
|
As mentioned before, the service needs to be able to manage its compute resources.
|
||||||
This is required because, for example, if the system starts training a new model and that training uses all the GPU resources, it would impact the ability of the service to be able to evaluate images for other users.
|
This is required because, for example, if the system starts training a new model and that training uses all the GPU resources, it would impact the ability of the service to be able to evaluate images for other users.
|
||||||
As this example demonstrated, the system needs to keep track of the amount of GPU power available, so it can manage the actions it has to take accordingly.
|
As this example demonstrated, the system needs to keep track of the amount of GPU power available, so it can manage the actions it has to take accordingly.
|
||||||
|
|
||||||
Therefore, for optimal functionality, the service requires the management of various compute resources.
|
Therefore, for optimal functionality, the service requires the management of various compute resources.
|
||||||
|
|
||||||
There should be a separation of the different kinds of compute power.
|
There should be a separation of the different kinds of compute power.
|
||||||
@ -52,9 +51,9 @@
|
|||||||
As a result, the service needs a system to distribute these compute tasks.
|
As a result, the service needs a system to distribute these compute tasks.
|
||||||
The tasks have to be distributed between the application that is running the API and the various other places where that compute can happen.
|
The tasks have to be distributed between the application that is running the API and the various other places where that compute can happen.
|
||||||
|
|
||||||
An ideal system would distribute the tasks intelligently, to allow the maximization of resources.
|
An ideal system would distribute the tasks intelligently, to allow the maximisation of resources.
|
||||||
An example of this would be running image classification, on the same model, on the same place twice, this would allow the model to stay in memory and not need to be reloaded again from disk.
|
An example of this would be running image classification, on the same model, on the same place twice, this would allow the model to stay in memory and not need to be reloaded again from disk.
|
||||||
These kinds of optimizations would help the system to be more efficient and less wasteful.
|
These kinds of optimisations would help the system to be more efficient and less wasteful.
|
||||||
|
|
||||||
Another way to reduce the load that the system goes through is to allow users to add their own compute power to the system.
|
Another way to reduce the load that the system goes through is to allow users to add their own compute power to the system.
|
||||||
That compute power would only use images and models that are owned by the user.
|
That compute power would only use images and models that are owned by the user.
|
||||||
@ -102,23 +101,23 @@
|
|||||||
The application should also allow administrators of the service to control the resources that are available to the system, to see if there is any requirement to add more resources.
|
The application should also allow administrators of the service to control the resources that are available to the system, to see if there is any requirement to add more resources.
|
||||||
|
|
||||||
\subsection{API} \label{sec:anal-api}
|
\subsection{API} \label{sec:anal-api}
|
||||||
As a software as a service platform, most of the requests made to the service would be made via the API, not the user interface.
|
As a SaaS platform, most of the requests made to the service would be made via the API, not the user interface.
|
||||||
This is the case because the users that would need this service would set up the model using the web interface and then do the image classifications requests via the API.
|
This is the case because the users that would need this service would set up the model using the web interface and then do the image classifications requests via the API.
|
||||||
|
|
||||||
While there are no hard requirements for the user interface, that is not the case for the API.
|
While there are no hard requirements for the user interface, that is not the case for the API.
|
||||||
The API must be implemented as an HTTPS REST API, this is because the most of the APIs that currently exist online are HTTPS REST APIs \cite{json-api-usage-stats}.
|
The API must be implemented as an HTTPS REST API, this is because the most of the APIs that currently exist online are HTTPS REST APIs \cite{json-api-usage-stats}.
|
||||||
If the service wants to be easy to use, it needs to be implemented in away such that it has the lowest barrier to entry.
|
If the service wants to be easy to use, it needs to be implemented in away such that it has the lowest barrier to entry.
|
||||||
Making the type of the API a requirement would guarantee that the application would be the most compatible with other systems that already exist.
|
Making the type of the API a requirement would guarantee that the application would be the most compatible with other systems that already exist.
|
||||||
|
The API would also need to be able to do all the tasks that the application can do.
|
||||||
The API needs to be able to do all the tasks that the application can do.
|
As it would allow a user who wants to interact with the service via the API the ability to do so.
|
||||||
|
The API also requires authentication because without authentication it would allow users who might have malicious intent to:
|
||||||
The API also requires authentication.
|
|
||||||
This is needed to prevent users from:
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item{Modifying systems settings}
|
\item{Modifying systems settings}
|
||||||
\item{Accessing other users' data}
|
\item{Accessing other users' data}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
The API must implement authentication methods to prevent those kinds of actions from happening.
|
|
||||||
|
Allowing such actions would be incredibly damaging for the system.
|
||||||
|
Therefore, the API must implement authentication methods to prevent those kinds of actions from happening.
|
||||||
|
|
||||||
\subsection{Data Management}
|
\subsection{Data Management}
|
||||||
The service will store a large amount of user data.
|
The service will store a large amount of user data.
|
||||||
@ -141,16 +140,13 @@
|
|||||||
The last kind of data that the service has to keep track of is model data.
|
The last kind of data that the service has to keep track of is model data.
|
||||||
Once the model is trained, it has to be saved on disk.
|
Once the model is trained, it has to be saved on disk.
|
||||||
The service should implement a system that manages where the models are stored.
|
The service should implement a system that manages where the models are stored.
|
||||||
This is similar to the image situation, where the model should be as close as possible to the compute resource that is going to utilize it, even if this requires copying the model.
|
This is similar to the image situation, where the model should be as close as possible to the compute resource that is going to utilise it, even if this requires copying the model.
|
||||||
|
|
||||||
\subsection{Conclusion}
|
\subsection{Summary}
|
||||||
This section shows that there are requirements that need to be met for the system to work as indented. These requirements range from usability requirements, implementation details, to system-level resource management requirements.
|
This section shows that there are requirements that need to be met for the system to work as indented. These requirements range from usability requirements, implementation details, to system-level resource management requirements.
|
||||||
|
|
||||||
The most important requirement is for the system to be easy to use by the user.
|
The most important requirement is for the system to be easy to use by the user.
|
||||||
As if it's difficult to use, then the service already fails in one of its objectives.
|
As if it is difficult to use, then the service already fails in one of its objectives.
|
||||||
|
|
||||||
The other requirements are significant as well, as without them, the quality of the service would be very degraded.
|
The other requirements are significant as well, as without them, the quality of the service would be very degraded.
|
||||||
And even if the service was effortless to use, it is as bad as being difficult to use if it could not process the images quickly in a reasonable amount of time.
|
And even if the service was effortless to use, it is as bad as being difficult to use if it could not process the images quickly in a reasonable amount of time.
|
||||||
|
The next chapter will describe a design that matches a subset of the requirements.
|
||||||
The next section will describe a design that matches a subset of the requirements.
|
|
||||||
\pagebreak
|
\pagebreak
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
\usepackage{float}
|
\usepackage{float}
|
||||||
\usepackage{longtable}
|
\usepackage{longtable}
|
||||||
\usepackage{multicol}
|
\usepackage{multicol}
|
||||||
|
\usepackage{subfig}
|
||||||
|
|
||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
\usepackage{svg}
|
\usepackage{svg}
|
||||||
@ -61,10 +62,54 @@
|
|||||||
\renewcommand{\footrulewidth}{0pt} % Remove footer underlines
|
\renewcommand{\footrulewidth}{0pt} % Remove footer underlines
|
||||||
\setlength{\headheight}{13.6pt}
|
\setlength{\headheight}{13.6pt}
|
||||||
|
|
||||||
|
|
||||||
\newcommand*\NewPage{\newpage\null\thispagestyle{empty}\newpage}
|
\newcommand*\NewPage{\newpage\null\thispagestyle{empty}\newpage}
|
||||||
|
|
||||||
|
\newcommand*\mydate{\monthyeardate\today}
|
||||||
|
|
||||||
% numeric
|
% numeric
|
||||||
\usepackage[bibstyle=ieee, citestyle=numeric, sorting=none,backend=biber]{biblatex}
|
\usepackage[bibstyle=ieee, citestyle=numeric, sorting=none,backend=biber]{biblatex}
|
||||||
\addbibresource{../main.bib}
|
\addbibresource{../main.bib}
|
||||||
|
|
||||||
\raggedbottom
|
\raggedbottom
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\renewcommand{\maketitle}{
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\pagestyle{my_empty}
|
||||||
|
\phantom{.} %necessary to add space on top before the title
|
||||||
|
\vspace{3cm}
|
||||||
|
|
||||||
|
{\huge \bf \@title\par}
|
||||||
|
\vspace{1cm}
|
||||||
|
|
||||||
|
{by}
|
||||||
|
|
||||||
|
\vspace{1cm}
|
||||||
|
|
||||||
|
{\LARGE Andre Goncalves Henriques}\\
|
||||||
|
{\large URN: 6644818}\\[1cm]
|
||||||
|
|
||||||
|
{\normalsize A dissertation submitted in partial fulfilment of the}\\
|
||||||
|
{\normalsize requirements for the award of}\\[1cm]
|
||||||
|
|
||||||
|
{\Large BACHELOR OF SCIENCE IN COMPUTER SCIENCE}\\[1cm]
|
||||||
|
|
||||||
|
{\normalsize\mydate}\\
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[height=0.3\textheight]{uni_surrey}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
{\normalsize Department of Computer Science}\\
|
||||||
|
{\normalsize University of Surrey}\\
|
||||||
|
{\normalsize Guildford GU2 7XH}\\[2cm]
|
||||||
|
|
||||||
|
{\normalsize Supervised by: Dr. Rizwan Asghar}
|
||||||
|
|
||||||
|
\end{center}
|
||||||
|
}\makeatother
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,16 +1,5 @@
|
|||||||
\pagenumbering{gobble}
|
\pagenumbering{gobble}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
\pagestyle{my_empty}
|
|
||||||
|
|
||||||
\begin{center}
|
|
||||||
\includegraphics[height=0.5\textheight]{uni_surrey}
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
\begin{center}
|
|
||||||
\monthyeardate\today
|
|
||||||
\end{center}
|
|
||||||
|
|
||||||
\NewPage
|
\NewPage
|
||||||
\pagenumbering{arabic}
|
\pagenumbering{arabic}
|
||||||
|
|
||||||
@ -24,7 +13,12 @@
|
|||||||
unpublished) using the referencing system set out in the programme handbook. I agree that the
|
unpublished) using the referencing system set out in the programme handbook. I agree that the
|
||||||
University may submit my work to means of checking this, such as the plagiarism detection service
|
University may submit my work to means of checking this, such as the plagiarism detection service
|
||||||
Turnitin® UK. I confirm that I understand that assessed work that has been shown to have been
|
Turnitin® UK. I confirm that I understand that assessed work that has been shown to have been
|
||||||
plagiarised will be penalised.
|
plagiarised will be penalised.\\
|
||||||
|
\vspace*{\fill}
|
||||||
|
Andre Goncalves Henriques\\
|
||||||
|
\mydate\\
|
||||||
|
University of Surrey\\
|
||||||
|
Guildford GU27XH\\
|
||||||
\vspace*{\fill}
|
\vspace*{\fill}
|
||||||
\end{center}
|
\end{center}
|
||||||
\NewPage
|
\NewPage
|
||||||
@ -32,26 +26,33 @@
|
|||||||
\begin{center}
|
\begin{center}
|
||||||
\vspace*{\fill}
|
\vspace*{\fill}
|
||||||
\section*{Acknowledgements}
|
\section*{Acknowledgements}
|
||||||
I would like to take this opportunity to thank my supervisor, Rizwan Asghar that helped me with this project from the start of the until the end.
|
I would like to take this opportunity to thank my supervisor, Rizwan Asghar who helped me with this project from the start of the until the end.
|
||||||
His help with the report was incredibly useful.
|
His help with the report was incredibly useful.\\
|
||||||
|
I would like to thank my family and friends for their support and encouragement.\\
|
||||||
I would like to thank my family and friends for their support and encouragement from the beginning.
|
\vspace*{\fill}
|
||||||
|
Andre Goncalves Henriques\\
|
||||||
|
\mydate\\
|
||||||
|
University of Surrey\\
|
||||||
|
Guildford GU27XH\\
|
||||||
\vspace*{\fill}
|
\vspace*{\fill}
|
||||||
\end{center}
|
\end{center}
|
||||||
\NewPage
|
\NewPage
|
||||||
|
|
||||||
\begin{center}
|
\section*{Abstract}
|
||||||
\vspace*{\fill}
|
There are many automatable tasks that are currently being done manually.
|
||||||
\section*{Abstract}
|
If those tasks can be done automatically, a lot of productivity could be gained by having the computers perform those tasks, allowing humans to perform tasks that only humans can do.
|
||||||
Currently there is a log of man-hours used performing tasks that can be done by automated systems.
|
One of this set of tasks are image classification tasks.
|
||||||
If a user, without any knowledge of image classification, can create an image classification model with ease, it would allow those man-hours to be used for more productive.
|
Many image classification tasks are being performed by humans, when they could be performed by computers.\\
|
||||||
|
|
||||||
|
This project aims to develop an image classification platform where users can create image classification models with as few clicks as possible.
|
||||||
|
Allowing for users that do not have any knowledge about image classification to use this system.
|
||||||
|
Making it possible for more of the manually classified tasks to be done by machines, and not humans, increasing the productivity of possible users.\\
|
||||||
|
|
||||||
|
This dissertation evaluates the feasibility of such system, current similarly implemented systems, current techniques for image classification, and possible requirements, designs and implementations of such system.
|
||||||
|
The dissertation focuses mainly on the implemented software, and the implementation choices that were made to achieve this project.
|
||||||
|
The dissertation ends with a critical evaluation of the results of this project, to ensure that the goals set forth were achieved.
|
||||||
|
|
||||||
This project aims to develop a classification platform where users can create image classification models with as few clicks as possible.
|
|
||||||
The project will create multiple systems that allow: model creation, model raining, and model inference.
|
|
||||||
|
|
||||||
This report will guide the reader through the ideas and designs that were implemented.
|
|
||||||
\vspace*{\fill}
|
|
||||||
\end{center}
|
|
||||||
\NewPage
|
\NewPage
|
||||||
|
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
|