diff --git a/abstract-pl.tex b/abstract-pl.tex index 73aa949..fb2f172 100644 --- a/abstract-pl.tex +++ b/abstract-pl.tex @@ -1 +1,3 @@ -Streszczenie po polsku (dla niektórych szablonów). +% !TeX encoding = UTF-8 +% !TeX spellcheck = pl_PL +Niniejsza praca magisterska traktuje w głównej mierze o ważności pojęcia digitalizacji skupiając się przede wszystkim na instytucjach jakimi są biblioteki. Przedstawione zostaje pojęcie cyfrowej biblioteki, procesu digitalizacji treści, które będą w niej przechowywane, a także wyzwań i problemów towarzyszącym całemu przedsięwzięciu. Praca ma charakter praktyczny, a jej głównym celem oprócz przekazania wartości informacyjnych związanych z pojęciem cyfryzacji, a także metod głębokiego uczenia maszynowego jest przedstawienie całego procesu budowania rozwiązania pozwalającego na przeszukiwanie ogromnych zbiorów danych zawierających dokumenty poddane już procesowi digitalizacji. Opisany w niej został również projekt Chronicling America prowadzony na terenie Stanów Zjednoczonych w ostatnich latach, który stał się główną inspiracją tematu niniejszej pracy i jej swego rodzaju pierwowzorem. Finalnym produktem zrodzonym z tej pracy dyplomowej jest w pełni funkcjonalne oprogramowanie wyszukiwawcze oparte o przetwarzanie obrazów przez sztuczne sieci neuronowe, a także techniki przetwarzania języka naturalnego. Opisany zostanie cały proces budowy począwszy od pozyskania i przetworzenia danych wejściowych, przechodząc przez tworzenie własnego modelu detekcji obrazów, a także optyczne rozpoznawanie znaków i silnik wyszukiwania pełno tekstowego, a kończąc na warstwie wizualnej pozwalającej na obsługiwanie zapytań użytkownika w czasie rzeczywistym. \ No newline at end of file diff --git a/abstract.tex b/abstract.tex index 96c1c5e..cefc546 100644 --- a/abstract.tex +++ b/abstract.tex @@ -1 +1,3 @@ -Sample abstract. +% !TeX encoding = UTF-8 +% !TeX spellcheck = en_EN +Dissertation of this thesis mainly considers the importance of the concept of digitization focusing primarily on institutions of libraries. The concept of a digital library, the process of digitizing the content that will be stored in it, as well as the challenges and problems accompanying the whole endeavor will be presented as a part of this thesis. The work is of a practical nature, and its main purpose, in addition to conveying the information values associated with the concept of digitization, as well as the methods of deep learning, is to present the entire process of building a solution that allows searching through huge data sets containing documents that have already been digitized. It also describes the Chronicling America project conducted in the United States in recent years, which became the main inspiration for the topic of this work and its kind of genesis. The final product born from this thesis is a fully functional search software based on image processing by artificial neural networks, as well as natural language processing techniques. The entire process will be described, starting with the acquisition and processing of input data, passing through the construction of custom object detection model, as well as optical character recognition and a full-text search engine, and ending with a visual user interface that allows the handling of user queries in real time. \ No newline at end of file diff --git a/bibliography.bib b/bibliography.bib index b875644..092c07f 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -1,6 +1,367 @@ % here the bibliographic entry for the paper itself should be given, % used for generating declarations +@article{Daniel2019Nov, + author = {Daniel, W.}, + title = {{Wyszukiwanie pe{\l}notekstowe}}, + journal = {Optymeo}, + year = {2019}, + month = nov, + publisher = {Optymeo}, + url = {https://optymeo.pl/wyszukiwanie-pelnotekstowe.html} +} + +@misc{BibEntry2022Sep3, + title = {{Whoosh}}, + journal = {PyPI}, + year = {2022}, + month = sep, + note = {[Online; accessed 4. Sep. 2022]}, + url = {https://pypi.org/project/Whoosh} +} + +@misc{grootendorst2020keybert, + author = {Maarten Grootendorst}, + title = {KeyBERT: Minimal keyword extraction with BERT.}, + year = 2020, + publisher = {Zenodo}, + version = {v0.3.0}, + doi = {10.5281/zenodo.4461265}, + url = {https://doi.org/10.5281/zenodo.4461265} +} + +@article{10.5555/1288165.1288167, author = {Kay, Anthony}, title = {Tesseract: An Open-Source Optical Character Recognition Engine}, year = {2007}, issue_date = {July 2007}, publisher = {Belltown Media}, address = {Houston, TX}, volume = {2007}, number = {159}, issn = {1075-3583}, abstract = {If you really need OCR.}, journal = {Linux J.}, month = {jul}, pages = {2} } + +@misc{ContributorstoWikimediaprojects2022Apr2, + author = {{Contributors to Wikimedia projects}}, + title = {{Normalization (image processing) - Wikipedia}}, + year = {2022}, + month = apr, + note = {[Online; accessed 4. Sep. 2022]}, + url = {https://en.wikipedia.org/w/index.php?title=Normalization_(image_processing)&oldid=1080487172} +} + +@misc{BibEntry2022Sep2, + title = {{OpenCV: Smoothing Images}}, + year = {2022}, + month = sep, + note = {[Online; accessed 4. Sep. 2022]}, + url = {https://docs.opencv.org/4.x/d4/d13/tutorial_py_filtering.html} +} + +@misc{BibEntry2022Sep, + title = {{Types of Morphological Operations - MATLAB {\&} Simulink}}, + year = {2022}, + month = sep, + note = {[Online; accessed 4. Sep. 2022]}, + url = {https://www.mathworks.com/help/images/morphological-dilation-and-erosion.html} +} + +@inproceedings{deng2009imagenet, + title={Imagenet: A large-scale hierarchical image database}, + author={Deng, Jia and Dong, Wei and Socher, Richard and Li, Li-Jia and Li, Kai and Fei-Fei, Li}, + booktitle={2009 IEEE conference on computer vision and pattern recognition}, + pages={248--255}, + year={2009}, + organization={Ieee} +} + +@article{Sambasivarao.2021Dec, + author = {Sambasivarao., K.}, + title = {{Region Proposal Network {\ifmmode---\else\textemdash\fi} A detailed view - Towards Data Science}}, + journal = {Medium}, + year = {2021}, + month = dec, + publisher = {Towards Data Science}, + url = {https://towardsdatascience.com/region-proposal-network-a-detailed-view-1305c7875853} +} + +@article{He2015Dec, + author = {He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian}, + title = {{Deep Residual Learning for Image Recognition}}, + journal = {arXiv}, + year = {2015}, + month = dec, + eprint = {1512.03385}, + doi = {10.48550/arXiv.1512.03385} +} + +@article{Ren2015Jun, + author = {Ren, Shaoqing and He, Kaiming and Girshick, Ross and Sun, Jian}, + title = {{Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks}}, + journal = {arXiv}, + year = {2015}, + month = jun, + eprint = {1506.01497}, + doi = {10.48550/arXiv.1506.01497} +} + +@incollection{Bharati2019Aug, + author = {Bharati, Puja and Pramanik, Ankita}, + title = {{Deep Learning Techniques{\ifmmode---\else\textemdash\fi}R-CNN to Mask R-CNN: A Survey}}, + booktitle = {{Computational Intelligence in Pattern Recognition}}, + journal = {SpringerLink}, + pages = {657--668}, + year = {2019}, + month = aug, + publisher = {Springer}, + address = {Singapore}, + doi = {10.1007/978-981-13-9042-5_56} +} + +@article{Shung2020Apr, + author = {Shung, Koo Ping}, + title = {{Accuracy, Precision, Recall or F1? - Towards Data Science}}, + journal = {Medium}, + year = {2020}, + month = apr, + publisher = {Towards Data Science}, + url = {https://towardsdatascience.com/accuracy-precision-recall-or-f1-331fb37c5cb9} +} + +@misc{WspoltworcyprojektowFundacjiWikimedia2015Feb_CONF_MATRIX, + author = {{Wsp{\ifmmode\acute{o}\else\'{o}\fi}{\l}tw{\ifmmode\acute{o}\else\'{o}\fi}rcy projekt{\ifmmode\acute{o}\else\'{o}\fi}w Fundacji Wikimedia}}, + title = {{Tablica pomy{\l}ek {\textendash} Wikipedia, wolna encyklopedia}}, + year = {2015}, + month = feb, + note = {[Online; accessed 17. Jul. 2022]}, + url = {https://pl.wikipedia.org/w/index.php?title=Tablica_pomy%C5%82ek&oldid=67285936} +} + +@misc{BibEntry2022Jul_mAP, + title = {{Mean Average Precision (mAP) Explained: Everything You Need to Know}}, + year = {2022}, + month = jul, + note = {[Online; accessed 17. Jul. 2022]}, + url = {https://www.v7labs.com/blog/mean-average-precision} +} + +@article{Lin2014May, + author = {Lin, Tsung-Yi and Maire, Michael and Belongie, Serge and Bourdev, Lubomir and Girshick, Ross and Hays, James and Perona, Pietro and Ramanan, Deva and Zitnick, C. Lawrence and Doll{\ifmmode\acute{a}\else\'{a}\fi}r, Piotr}, + title = {{Microsoft COCO: Common Objects in Context}}, + journal = {arXiv}, + year = {2014}, + month = may, + eprint = {1405.0312}, + doi = {10.48550/arXiv.1405.0312} +} + +@misc{BibEntry2021Aug_fb_d2, + year = {2021}, + month = aug, + note = {[Online; accessed 16. Jul. 2022]}, + url = {https://scontent.fpoz3-1.fna.fbcdn.net/v/t39.8562-6/10000000_374366880731371_8647390823470551256_n.pdf?_nc_cat=107&ccb=1-7&_nc_sid=ad8a9d&_nc_ohc=IMRybSkFhS8AX8BAvGV&_nc_ht=scontent.fpoz3-1.fna&oh=00_AT-gXuXr1NtfUDNdM1xzS8ViiocOx8dHOiumM98KSEHluQ&oe=62D89204} +} + +@article{Lee2020May_paper, + author = {Lee, Benjamin Charles Germain and Mears, Jaime and Jakeway, Eileen and Ferriter, Meghan and Adams, Chris and Yarasavage, Nathan and Thomas, Deborah and Zwaard, Kate and Weld, Daniel S.}, + title = {{The Newspaper Navigator Dataset: Extracting And Analyzing Visual Content from 16 Million Historic Newspaper Pages in Chronicling America}}, + journal = {arXiv}, + year = {2020}, + month = may, + eprint = {2005.01583}, + doi = {10.48550/arXiv.2005.01583} +} + +@misc{BibEntry2022Jul_nn_search, + title = {{Newspaper Navigator}}, + year = {2022}, + month = jul, + note = {[Online; accessed 16. Jul. 2022]}, + url = {https://news-navigator.labs.loc.gov/search} +} + +@misc{BibEntry2020May_NNNNN, + title = {{Newspaper Navigator {$\vert$} Experiments {$\vert$} Work {$\vert$} Library of Congress}}, + journal = {Library of Congress}, + year = {2020}, + month = may, + note = {[Online; accessed 16. Jul. 2022]}, + url = {https://news-navigator.labs.loc.gov} +} + +@misc{BibEntry2022Jun_cnn_output, + title = {{IndianTechWarrior}}, + journal = {IndianTechWarrior}, + year = {2022}, + month = jun, + note = {[Online; accessed 4. Jul. 2022]}, + url = {https://indiantechwarrior.com/fully-connected-layers-in-convolutional-neural-networks} +} + +@article{Yani2019May, + author = {Yani, Muhamad and S, {\relax Si}. and M. T. Casi Setiningsih, S. T.}, + title = {{Application of Transfer Learning Using Convolutional Neural Network Method for Early Detection of Terry{'}s Nail}}, + journal = {J. Phys. Conf. Ser.}, + volume = {1201}, + number = {1}, + pages = {012052}, + year = {2019}, + month = may, + issn = {1742-6588}, + publisher = {IOP Publishing}, + doi = {10.1088/1742-6596/1201/1/012052} +} + +@article{Yamashita2018Aug, + author = {Yamashita, Rikiya and Nishio, Mizuho and Do, Richard Kinh Gian and Togashi, Kaori}, + title = {{Convolutional neural networks: an overview and application in radiology}}, + journal = {Insights Imaging}, + volume = {9}, + number = {4}, + pages = {611--629}, + year = {2018}, + month = aug, + issn = {1869-4101}, + publisher = {SpringerOpen}, + doi = {10.1007/s13244-018-0639-9} +} + +@article{Galante2022Mar, + author = {Galante, Zachary}, + title = {{Deep Learning in the Cloud - Artificial Intelligence in Plain English}}, + journal = {Medium}, + year = {2022}, + month = mar, + publisher = {Artificial Intelligence in Plain English}, + url = {https://ai.plainenglish.io/deep-learning-in-the-cloud-9ff50ebb5657} +} + +@misc{ContributorstoWikimediaprojects2022May, + author = {{Contributors to Wikimedia projects}}, + title = {{Kernel (image processing) - Wikipedia}}, + year = {2022}, + month = may, + note = {[Online; accessed 3. Jul. 2022]}, + url = {https://en.wikipedia.org/w/index.php?title=Kernel_(image_processing)&oldid=1090475536} +} + +@inproceedings{albawi2017understanding, + title={Understanding of a convolutional neural network}, + author={Albawi, Saad and Mohammed, Tareq Abed and Al-Zawi, Saad}, + booktitle={2017 international conference on engineering and technology (ICET)}, + pages={1--6}, + year={2017}, + organization={Ieee} +} + +@article{Sharma2020May_cnn_png, + author = {Sharma, V.}, + title = {{Deep Learning {\textendash} Introduction to Convolutional Neural Networks {$\vert$} Vinod Sharma's Blog}}, + journal = {Vinod Sharma's Blog}, + year = {2020}, + month = may, + url = {https://vinodsblog.com/2018/10/15/everything-you-need-to-know-about-convolutional-neural-networks} +} + +@article{JeremyJordan2020Aug_lr, + author = {{Jeremy Jordan}}, + title = {{Setting the learning rate of your neural network.}}, + journal = {Jeremy Jordan}, + year = {2020}, + month = aug, + publisher = {Jeremy Jordan}, + url = {https://www.jeremyjordan.me/nn-learning-rate} +} + +@article{Martinek2022Mar_muulti_class_loss, + author = {Martinek, Vlastimil}, + title = {{Cross-entropy for classification - Towards Data Science}}, + journal = {Medium}, + year = {2022}, + month = mar, + publisher = {Towards Data Science}, + url = {https://towardsdatascience.com/cross-entropy-for-classification-d98e7f974451} +} + +@article{Kumar2021Dec_class_loss, + author = {Kumar, Sushant}, + title = {{Common Loss functions in machine learning for Classification model}}, + journal = {Medium}, + year = {2021}, + month = dec, + issn = {9315-6442}, + publisher = {Analytics Vidhya}, + url = {https://medium.com/analytics-vidhya/common-loss-functions-in-machine-learning-for-classification-model-931cbf564d42} +} + +@misc{BibEntry2021Mar_loss_details, + title = {{Understanding Loss Functions in Machine Learning}}, + journal = {Engineering Education (EngEd) Program {$\vert$} Section}, + year = {2022}, + month = jul, + note = {[Online; accessed 2. Jul. 2022]}, + url = {https://www.section.io/engineering-education/understanding-loss-functions-in-machine-learning} +} + +@misc{BibEntry2021Mar_loss_cost, + title = {{Cost Function {$\vert$} Types of Cost Function Machine Learning}}, + journal = {Analytics Vidhya}, + year = {2021}, + month = mar, + note = {[Online; accessed 2. Jul. 2022]}, + url = {https://www.analyticsvidhya.com/blog/2021/02/cost-function-is-no-rocket-science} +} + +@article{Jain2021Dec_activatio, + author = {Jain, Vandit}, + title = {{Everything you need to know about {\textquotedblleft}Activation Functions{\textquotedblright} in Deep learning models}}, + journal = {Medium}, + year = {2021}, + month = dec, + issn = {8498-2253}, + publisher = {Towards Data Science}, + url = {https://towardsdatascience.com/everything-you-need-to-know-about-activation-functions-in-deep-learning-models-84ba9f82c253} +} + +@misc{BibEntry2021Jan_active, + title = {{How to Choose an Activation Function for Deep Learning}}, + journal = {Machine Learning Mastery}, + year = {2021}, + month = jan, + note = {[Online; accessed 27. Jun. 2022]}, + url = {https://machinelearningmastery.com/choose-an-activation-function-for-deep-learning} +} + +@misc{BibEntry2020Aug_nn_guide, + title = {{Neural Network: A Complete Beginners Guide - Gadictos}}, + journal = {Gadictos}, + year = {2020}, + month = aug, + note = {[Online; accessed 27. Jun. 2022]}, + url = {https://gadictos.com/neural-network-pt1} +} + +@article{Jain2021Dec, + author = {Jain, Mayank}, + title = {{The Basics of Neural Networks - DataDrivenInvestor}}, + journal = {Medium}, + year = {2021}, + month = dec, + publisher = {DataDrivenInvestor}, + url = {https://medium.datadriveninvestor.com/the-basics-of-neural-networks-304364b712dc} +} + +@book{Malik2021Dec, + author = {Malik, Farhad}, + title = {{What Are Hidden Layers? - FinTechExplained - Medium}}, + journal = {Medium}, + year = {2021}, + month = dec, + isbn = {978-454732826}, + publisher = {FinTechExplained}, + address = {Japan}, + url = {https://medium.com/fintechexplained/what-are-hidden-layers-4f54f7328263} +} + +@misc{BibEntry2021Aug_nn, + title = {{Czym s{\k{a}} sieci neuronowe?}}, + year = {2021}, + month = aug, + note = {[Online; accessed 27. Jun. 2022]}, + url = {https://www.ibm.com/pl-pl/cloud/learn/neural-networks} +} + @book{osinga2018deep, title={Deep learning cookbook: practical recipes to get started quickly}, author={Osinga, Douwe}, diff --git a/chapter1.tex b/chapter1.tex index 5622fa6..4bb58eb 100644 --- a/chapter1.tex +++ b/chapter1.tex @@ -1,3 +1,4 @@ +% !TeX encoding = UTF-8 % !TeX spellcheck = pl_PL \chapter{Problematyka digitalizacji treści archiwalnych - przegląd literatury} @@ -16,13 +17,13 @@ Poniższe ilustracje przedstawiają przykład cyfrowej biblioteki, stronę głó \begin{figure}[h!] \centering - \includegraphics[width=0.8\textwidth]{digital_library.png} + \includegraphics[width=0.8\textwidth]{images/digital_library.png} \caption{Strona główna Mazowieckiej Biblioteki Cyfrowej \cite{Mazowieckiego2022Mar}.} \end{figure} \begin{figure}[h!] \centering - \includegraphics[width=0.88\textwidth]{digital_library1.png} + \includegraphics[width=0.88\textwidth]{images/digital_library1.png} \caption{Przykład wyszukiwania dzieła w bibliotece cyfrowej \cite{Mazowieckiego2022Mar}.} \end{figure} @@ -62,7 +63,7 @@ Kolejnym etapem procesu digitalizacji jest pozyskiwanie obrazu dzieł, które zo \begin{figure}[h!] \centering -\includegraphics[width=1.0\textwidth]{metadan.png} +\includegraphics[width=1.0\textwidth]{images/metadan.png} \caption{Wizualizacja czym w rzeczywistości mogą być metadane} \end{figure} @@ -101,13 +102,13 @@ Istnieje również pojęcie masowej cyfryzacji czyli czegoś więcej aniżeli ty \begin{figure}[h!] \centering -\includegraphics[width=1\textwidth]{google_books.png} +\includegraphics[width=1\textwidth]{images/google_books.png} \caption{Podgląd wybranej pozycji w usłudze Google Books \cite{Westover2012}} \end{figure} \clearpage \begin{figure}[h!] \centering -\includegraphics[width=1\textwidth]{google_books_search.png} +\includegraphics[width=1\textwidth]{images/google_books_search.png} \caption{Podgląd przeszukiwania tekstu wybranej pozycji w usłudze Google Books \cite{Westover2012}} \end{figure} @@ -116,7 +117,7 @@ Swobodne przeszukiwanie publikacji udostępnionych w ramach usługi Google Books \begin{figure}[h!] \centering -\includegraphics[width=0.95\textwidth]{ocr_scheme.png} +\includegraphics[width=0.95\textwidth]{images/ocr_scheme.png} \caption{Schemat działania OCR \cite{PatrickFarley2022May}} \end{figure} diff --git a/chapter2.tex b/chapter2.tex index 8cfeaa9..59a60ac 100644 --- a/chapter2.tex +++ b/chapter2.tex @@ -1,10 +1,167 @@ % !TeX encoding = UTF-8 % !TeX spellcheck = pl_PL - - \chapter{Podstawy teoretyczne sieci neuronowych} Niniejsza praca polega na przeprowadzeniu eksperymentu na danych zebranych w ramach omawianego na późniejszych stronach projektu powstałego z ramienia inicjatywy digitalizacyjnej Chronicling America, t.j. Newspaper Navigator. Z racji tego istnieje naturalna potrzeba wytłumaczenia pojęcia jakimi są głębokie sieci neuronowe ze szczególnym naciskiem na sieci przetwarzające obraz, ponieważ technologia ta jest kluczowym elementem całego projektu Newspaper Navigator. -\section{Sieci neuronowe - podstawowe informacje} -Najprościej mówiąc i nie wdając się jeszcze zanadto w szczegóły sieć neuronowa jest to stos połączonych ze sobą warstw na które składają się neurony, czyli podstawowe jednostki obliczeniowe w sieciach. Z jednej strony wprowadza się dane, a z drugiej strony otrzymuje się ich przetworzoną postać. Każda warstwa wykonuje serię operacji matematycznych na otrzymanych danych, a także posiada zestaw zmiennych podlegających modyfikacji w celach optymalizacyjnych \cite{osinga2018deep}. \ No newline at end of file +\section{Podstawowe informacje o sieciach neuronowych} +Najprościej mówiąc i nie wdając się jeszcze zanadto w szczegóły sieć neuronowa jest to stos połączonych ze sobą warstw na które składają się neurony, czyli podstawowe jednostki obliczeniowe w sieciach. Wyróżniamy warstwę wejściową, ukryte warstwy stanowiące środek sieci, a także warstwę wyjściową. Z jednej strony wprowadza się dane, a z drugiej strony otrzymuje się ich przetworzoną postać. Każda warstwa wykonuje serię operacji matematycznych na otrzymanych danych, a także posiada zestaw zmiennych podlegających modyfikacji w celach optymalizacyjnych. Przedstawiony na poniższej rycinie typ sieci neuronowych to najbardziej popularny typ, nazywany W Pełni Połączoną Siecią (z ang. Fully Connected Network). W sieci w pełni połączonej każda jednostka wyjściowa jest obliczana jako suma ważona wszystkich wejść. Termin "w pełni połączona" pochodzi właśnie od tego zachowania: każde wyjście jest połączone z każdym wejściem \cite{osinga2018deep}. Neurony zawarte w warstwie wejściowej (z ang. Input Layer) wprowadzają do modelu informacje zewnętrzne, nie wykonują się tutaj żadne operacje matematyczne, jedynie wprowadza się dane. Liczba neuronów w warstwie wejściowej zależy od danych treningowych, od ich wymiaru. Tradycyjnie dla warstwy wejściowej wygląda to następujące: +\begin{equation} +Liczba\: neuronow = Liczba\: cech\: w\: danych\: treningowych + 1 +\end{equation} +Wyrażenie '+ 1' w powyższym wzorze odnosi się do wyrazu wolnego (z ang. bias), który intuicyjnie pełni podobne zadanie przy sieciach neuronowych jak ma to miejsce w klasycznej regresji liniowej. Wyraz wolny to po prostu stała wartość. Bias jest wykorzystywany do zrównoważenia wyniku, służy do przesunięcia wyniku funkcji aktywacji (o której więcej w dalszej części pracy) w stronę dodatnią lub ujemną. Cała "magia" sieci neuronowych odbywa się za to w warstwach ukrytych (z ang. hidden layers), zgromadzone tam neurony przetwarzają informacje zgromadzone w warstwie wejściowej, a następnie przekazują je do wartstwy wyjściowej. Warstw ukrytych w sieciach może być zero lub kilka, nie jest to w żaden sposób regulowane a dotyczy od danego przypadku oraz wizji twórcy konkretnej sieci. Im bardziej skomplikowany przypadek ma dana sieć rozwiązać tym zazwyczaj z większej ilości ukrytych warstw musi się ona składać \cite{Malik2021Dec}. + +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/nn.png} +\caption{Wizualizacja podstawowej architektury sieci neuronowej \cite{BibEntry2021Aug_nn}} +\end{figure} + +Neurony w każda warstwie połączone są krawędziami (reprezentowane na powyższym obrazie jako strzałki łączące poszczególne neurony ze sobą), a każda z krawędzi posiada wagę. Pojedynczy neuron zatem jest sumą ważoną wartości z poprzedniej warstwy a także dodaje się do nich wyraz wolny, w przypadku pierwszej warstwy ukrytej tymi wartościami jest jeden wiesz wartości wszystkich cechy zbioru danych. Wagi podlegają optymalizacji w trakcie procesu uczenia sieci, co zostanie wytłumaczone dokładniej w dalszej części rozdziału. Ich wartość jest o tyle kluczowa, że niektóre cechy w danych będą miały większe lub mniejsze znaczenie dla przyszłej predykcji, ta właśnie ważność jest regulowana przez wagi. Początkowo wagi mają ustawiane wartości w postaci małych liczb losowych \cite{Jain2021Dec}. Wzór określający zachodzącą operacje wewnątrz neuronów wyrażony jest następująco: +\begin{equation} +Y = \sum (wagi * dane\: wejsciowe) + wyraz\: wolny +\end{equation} +Zanim wyliczona suma zostanie przekazana do kolejny ukrytej warstwy lub warstwy wyjściowej nakłada się na nią nieliniowość, poprzez tak zwaną funkcje aktywacji (z ang. activation function). Funkcja aktywacji dokonuje transformacji powstałej sumy ważonej w dane wyjściowe warstwy, dzieje się to w celu ułatwienia sieci uczenia się złożonych (nieliniowych) wzorców w danych. Funkcje aktywacji zazwyczaj są różniczkowalne, co oznacza, że dla danej wartości wejściowej można obliczyć pochodną pierwszego rzędu. Jest to konieczne, z racji tego że sieci neuronowe są zwykle trenowane z wykorzystaniem algorytmu wstecznej propagacji (o którym więcej w dalszej części pracy), który wymaga wyliczenia pochodnej na błędzie predykcji w celu późniejszej optymalizacji wag sieci \cite{BibEntry2021Jan_active}. Ponadto wartość neurona powinna być kontrolowana i zawierać się w pewnym przedziale. Jeżeli ta wartość nie jest ograniczona do pewnego limitu, wówczas może przybierać bardzo duże wartości, co w przypadku bardzo głębokich sieci neuronowych, które mają miliony parametrów może prowadzić do poważnych problemów obliczeniowych. Ogólna postać funkcji aktywacji prezentuje się następująco: +\begin{equation} +Y = f( \sum (wagi * dane\: wejsciowe) + wyraz\: wolny) +\end{equation} +Najczęściej stosowane funkcje aktywacji to: +\begin{table}[h!] +\centering + \begin{tabular}{c c c c} + \toprule + Nazwa & Funkcja & Zakres & Wykres \\ + \toprule + Sigmoid & $\sigma(x) = \dfrac{1}{1+e^{-x}}$ & (0,1) & \adjustimage{height=1.5cm, valign=m}{images/sigmoid.png} \\ + \midrule + TanH & $tanh(x) = \dfrac{2}{1+e^{-2x}} - 1$ & <-1,1> & \adjustimage{height=1.5cm, valign=m}{images/tanh.png} \\ + \midrule + ReLU & $f(x) = max(0, x) $ & $\begin{cases} 0 & x \leq 0 \\ x & x > 0 \end{cases} $ & \adjustimage{height=1.5cm, valign=m}{images/relu.png} \\ + \bottomrule + \end{tabular} + \end{table} +\\ +Po nałożeniu funkcji aktywacji na ważoną sumę cały proces powtarza się dla kolejnych warstw. Ostatnim krokiem jest przekazanie wartości do warstwy wyjściowej sieci, gdzie liczony jest finalny błąd predykcji. Cały taki proces nazywamy propagacją w przód (z ang. forward propagation) \cite{Jain2021Dec_activatio}. Na poniższej rycinie możemy zauważyć proces opisany powyżej w wersji wizualnej. W tym przypadku dla uproszczenia sieć neuronowa składa się z trzech warstw: 1 wejściowej, 1 ukrytej i 1 wyjściowej. Warstwy wejściowa i ukryta zawierają trzy neurony, a warstwa wyjściowa zaś tylko jeden. Poszczególne wartości w sieci na każdym z etapów przykładu algorytmu propagacji w przód prezentują się następująco: +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/for_prop.png} +\caption{Wizualizacja algorytmu propagacji w przód \cite{BibEntry2020Aug_nn_guide}} +\end{figure} +\\ +Przykładowe wyliczenia sumy ważonej dla neurona 'h1': +\begin{equation} +w1*x1 + w2*x2 + w3*x3 = 1*0.9 + 0*0.8 + 1*0.1 = 1 +\end{equation} +Następnie na wyliczoną sumę ważoną nakłada się nieliniowość (w tym wypadku sigmoid): +\begin{equation} +h1 = \sigma(1) = \dfrac{1}{1+e^{-1}} \approx 0.73 +\end{equation} +Identycznie postępujemy dla kolejnych neuronów warstwy ukrytej, a następnie dla warstwy wyjściowej. Z racji tego, że inicjalne wagi są losowe, wartość neuronu wyjściowego jest daleka od wartości prawdziwej. W tym przypadku błąd predykcji równy jest +0,77, ponieważ wartość docelowa dla punktu danych na podstawie którego została wyliczona predykcja jest równa 0. Aby przybliżyć wartość predykcji do wartości rzeczywistej następuje proces uczenia sieci, tak zwany algorytm propagacji wstecznej (z ang backward propagation), czyli krótko mówiąc optymalizacji wag sieci \cite{BibEntry2020Aug_nn_guide}. +\newline + +Zanim jednak przejdziemy do algorytmu propagacji wstecznej stosownym wydaje się być wytłumaczenie pojęcia funkcji kosztu lub inaczej straty (z ang. cost/loss function). W obrębie zagadnień związanych z uczeniem maszynowym pod tym pojęciem określa się funkcje, która bada różnice pomiędzy wartościami oczekiwanym na wyjściu sieci neuronowej, a wartościami jakie zostały zwrócone (predykcjami). Funkcja ta określa jak bardzo sieć myli się podczas predykcji wartości, poprzez wyliczenie błędu jakimi obciążone są jej wyniki. Pojęcie funkcji kosztu różni się w zależności od przypadku, tj. regresji, klasyfikacji binarnej czy klasyfikacji wieloklasowej. W przypadku regresji wyliczany jest dystans poszczególnych wartości rzeczywistych od krzywej predykcji \cite{BibEntry2021Mar_loss_cost}. Celem modelu podczas etapu treningu jest minimalizacja funkcji kosztu, czyli minimalizacji błędów jakie są przez niego popełnianie. Najczęściej używane funkcje kosztu przy regresji to: +\begin{equation} +MSE = \dfrac{1}{n}\sum_{n=1}^{n}(y-y')^2 +\end{equation} +MSE, czyli błąd średniokwadratowy (z ang. mean squared error) oblicza średnią kwadratowych różnic między wartościami rzeczywistymi a wartościami przewidywanymi. Cechą charakterystyczną tej funkcji jest to, że model jest bardziej karcony za duże błędy. +\begin{equation} +MAE = \dfrac{1}{n}\sum_{n=1}^{n}|y-y'| +\end{equation} +MAE, czyli średni błąd absolutny (z ang. mean absolute error) oblicza średnią sumy różnic bezwzględnych między wartościami rzeczywistymi a wartościami przewidywanymi. Charakteryzuje się większą odpornością na wartości odstające (z ang. outliers) występujące w rozkładzie zmiennej objaśnianej. +\begin{equation} +MSLE = \dfrac{1}{n}\sum_{n=1}^{n}(\log(y+1)-\log(y'+1))^2 +\end{equation} +MSLE, czyli błąd średniokwadratowy zlogarytmizowany (z ang. mean squared logarithmic error) obliczany jest tak samo jak błąd średniokwadratowy, z tą różnicą, że używany jest logarytm naturalny wartości przewidywanej i rzeczywistej zmiennej objaśnianej. Stosowany jest najczęściej w sytuacjach, kiedy nie chcemy aby model był tak mocno karany w przypadku dużych wartości błędu jak dzieje się to w przypadku MSE. Oprócz tego często używa się również wersji błędu średniokwadratowego oraz błędu średniokwadratowego zlogarytmizowanego zawierających pierwiastek, są to kolejno RMSE oraz RMSLE. Interpretacja ich jest o tyle prostsza, że operujemy w tych samych jednostkach, a nie jak w przypadku standardowych wersji kwadratach tych jednostek. MAPE to z kolei odpowiednik MAE w którym liczony jest średni błąd absolutny wyrażony procentowo. Te metryki jednak częściej stosowane są przy prezentacji wyników, aniżeli bezpośrednio jako funkcje straty w modelach między innymi dzięki łatwej do zrozumienia, dla osób mniej biegłych technicznie, interpretacji \cite{BibEntry2021Mar_loss_details}. W kontekście klasyfikacji funkcja straty mierzy, jak często model źle klasyfikuje przynależność obserwacji do poszczególnych etykiet. W przypadku klasyfikacji binarnych generalnie problem polega na przewidywaniu wartości 0 lub 1 dla pierwszej lub drugiej klasy. Jest to realizowane jako przewidywanie prawdopodobieństwa, aby zdecydować, czy dany element należy do klasy pierwszej czy drugiej. Najczęściej stosowane miary w przypadku problemów klasyfikacyjnych to: +\begin{equation} +BCE = -\dfrac{1}{n}\sum_{n=1}^{n}(y\log(p) + (1 - y)\log(1 - p)) +\end{equation} +BCE, czyli binarna entropia krzyżowa (z ang. binary cross-entropy) jest powszechnie stosowaną funkcją straty w problemie klasyfikacji binarnej (istnieją tylko dwie klasy, 0 lub 1). Mierzy on wydajność modelu klasyfikacyjnego, którego wyjście jest wartością prawdopodobieństwa pomiędzy 0 a 1. Funcja straty wzrasta, jeśli przewidywane prawdopodobieństwo różni się od rzeczywistej etykiety. Teoretycznie doskonały model ma binarną stratę cross-entropii równą 0 \cite{Kumar2021Dec_class_loss}. Klasyfikacja wieloklasowa to te problemy modelowania predykcyjnego, w których przykłady są przypisane do jednej z więcej niż dwóch klas. Problem jest często implementowany jako przewidywanie prawdopodobieństwa przynależności przykładu do każdej znanej klasy. W przypadku tego rodzaju problemów najpopularniejszą funkcją straty jest również entropia krzyżowa. Tym razem obliczana jest binarna entropia krzyżowa dla każdej klasy osobno, a następnie sumuje się ją dla pełnej straty \cite{Martinek2022Mar_muulti_class_loss}. +\newline + +Skoro pojęcie funkcji straty zostało już omówione możliwe jest przejście do algorytmu propagacji wstecznej, który odpowiada za tak zwany proces uczenia się w przypadku sieci neuronowych. Jak wskazuje już sama nazwa podąża się tym razem w odwrotnym kierunki aniżeli podczas algorytmu propagacji w przód (od warstwy wejściowej, przez warstwy ukryte, aż do warstwy wyjściowej). Celem w tym przypadku jest minimalizacja funkcji kosztu poprzez dostosowanie wag sieci. Wagi aktualizowane są w ten sposób, aby ich zmiany powodowały, że rzeczywiste wyjście sieci jest bliższe wyjściu docelowemu, minimalizując w ten sposób błąd dla każdego neuronu wyjściowego i sieci jako całości. Zmiany wag zachodzą sekwencyjnie od ostatniej do pierwszej warstwy. Poziom dostosowania jest określany przez gradienty funkcji kosztu względem wag. Gradient funkcji jest wektorem pochodnych cząstkowych tej funkcji. Pochodna funkcji mierzy wrażliwość na zmianę wartości wyjściowej w odniesieniu do zmiany jej wartości wejściowej. Innymi słowy, pochodna mówi nam, w jakim kierunku zmierza funkcja. Gradient zaś pokazuje, jak bardzo musi zmienić się jej parametr (w kierunku dodatnim lub ujemnym), aby zminimalizować daną funkcje. Rozważmy następujący wycinek sieci przedstawiający jeden neuron wraz z połączeniami: +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/nn_part_for_backprop.png} +\caption{Wizualizacja wycinka sieci neuronowej \cite{BibEntry2020Aug_nn_guide}} +\end{figure} +\\ +Z algorytmu propagacji w przód wiadome jest, że: +\begin{equation} +\sigma(z) = \dfrac{1}{1+e^{-z}} +\end{equation} +\begin{equation} +z = \sum w*x= w1*x1 + w2*x2 + w3*x3 +\end{equation} +Zakładając, że chcemy zbadać jaka zmiana w1 spowoduje minimalizacje funkcji kosztu, oznaczmy ją jako E, musimy zastosować regułę łańcuchową (z ang. chain rule) służącą do obliczania pochodnych funkcji złożonych w następujący sposób: +\begin{equation} +\frac{\partial E}{\partial w1} = \frac{\partial E}{\partial \sigma(z)} * \frac{\partial \sigma(z)}{\partial z} * \frac{\partial z}{\partial w1} +\end{equation} +Zaktualizowana wartość wagi w1 prezentuje się następująco: +\begin{equation} +w1' = w1 - (\frac{\partial E}{\partial w1} * lr) +\end{equation} +Powyższy proces nosi nazwę metody gradientu prostego (z ang. gradient descent). Pod symbolem 'lr' kryje się parametr oznaczający długość kroku (z ang. learning rate), jaki zostanie wykonany w stronę minimum funkcji podczas jednego przejścia procesu optymalizacji wag. Parametr ten jest ustawiany z góry podczas deklarowania parametrów sieci. Używany jest on w celu uniknięcia sytuacji, w której algorytm pominie minimum funkcji z powodu wykonanej zbyt dużej modyfikacji wagi względem jej pierwotnego stanu. Ponieważ proces propagacji wstecznej jest wykonywany wielokrotnie, tak samo jak propagacji w przód, a nie jednorazowo (1 epoka = 1 przejście sieci w przód i w tył) wagi mogą być uaktualniane o mniejsze wartości tym samym zabezpieczając przed pominięciem minimum funkcji. Oczywiście krok ten nie może być również zbyt mały, ponieważ proces optymalizacji będzie wówczas trwał zbyt długo, a przy tym pochłaniał zbyt dużo mocy obliczeniowej. Dobór tego parametru jest zazwyczaj serią prób i błędów, zanim dojdzie się do jego odpowiedniej wartości. Wpływ długości kroku na znajdowanie minimum funkcji obrazuje poniższa rycina: +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/lr.png} +\caption{Wizualizacja procesu minimalizacji funkcji kosztu w zależności od długości kroku \cite{JeremyJordan2020Aug_lr}} +\end{figure} +\\ +Cały proces opisany powyżej wykonywany jest dla każdej wagi jaka znajduje się w sieci, idąc po kolei warstwa po warstwie, a zaczynając od warstwy wyjściowej sieci \cite{BibEntry2020Aug_nn_guide}. Podejście do procesu optymalizacji wag przy dzisiejszych architekturach sieci neuronowych zależne jest od wybranego optymalizatora. Do najpopularniejszych aktualnie optymalizatorów należą optymalizatory adaptacyjne, które dostosowują długość kroku automatycznie w trakcie procesu uczenia się sieci, takie jak: ADAM, RMSprop, czy AdaDelta. Po wykonaniu się ostatniej epoki, aktualne wartości wag stają się finalnymi wagami w sieci i będą wykorzystywane przy predykcji na zbiorze testowym. +\newline + +\section{Konwolucyjne sieci neuronowe przetwarzające obraz} +\bigbreak + +W przypadku danych wejściowych, którymi są obrazy do czynienia mamy z ich reprezentacją macierzową. Jej elementy to poszczególne występujące na zdjęciu piksele. Jeżeli rozważylibyśmy przepuszczenie takich danych przez, wcześniej omówione, klasyczne w pełni połączone sieci wówczas z dużą dozą prawdopodobieństwa bylibyśmy świadkami ich problemów ze zbyt dużą złożonością obliczeniową zadania. Jest to spowodowane, tym że obrazy z natury są bardzo duże, ich rozdzielczość określa wielkość reprezentującej jej macierzy. W tym momencie warto dodać, że na tym liczba elementów wchodzących w skład jednego wejścia do modelu się nie kończy, bowiem każdy piksel może przybierać jeden z 3 kolorów (wedle modelu przestrzeni barw RGB). Wówczas pojedyncze wejście modelu dla obrazu o popularnej rozdzielczości 256x256 pikseli w rzeczywistości reprezentuje liczba 256×256×3. Zakładając model o jednej warstwie ukrytej z 1000 neuronów, warstwa ta dysponować będzie prawie 200 milionami parametrów, podlegającymi procesom optymalizacji podczas przechodzenia algorytmu propagacji wstecznej. Z racji tego, że modele obrazów wymagają dość dużej liczby warstw, aby dobrze radzić sobie z klasyfikacją, to wówczas używając sieci w pełni połączonych, otrzymalibyśmy miliardy parametrów. Przy tak dużej liczbie parametrów uniknięcie problemu nadmiernego dostosowania modelu jest prawie niemożliwe. Korzystając z architektury konwolucyjnych sieci neuronowych (z ang. convolutional neural networks - CNN) otrzymujemy znacznie mniejszą liczbę parametrów, skuteczniejsze modele, a także dużo krótszy czas ich trenowania \cite{osinga2018deep}. CNN to wyspecjalizowane sieci do danych o topologii przypominającej siatkę, dlatego właśnie świetnie spisują się w przypadku obrazów. Stosuje się je również do szeregów czasowych, gdzie za takową siatkę odpowiada interwał czasowy. Sama architektura tych sieci znacznie różni się od tej przedstawionej w pierwszym podrozdziale choć istota pozostaje wciąż taka sama, co przedstawia poniższa rycina. +\clearpage +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/cnn.png} +\caption{Architektura konwolucyjnych sieci neuronowych \cite{Sharma2020May_cnn_png}} +\end{figure} + +Istotą konwolucyjnych sieci neuronowych jak wskazuje już na to sama ich nazwa jest operacja matematyczna zwaną konwolucją. Konwolucja pozwala wyostrzyć pewne elementy obrazu poprzez użycie tak zwanego jądra lub inaczej filtra (z ang. kernel lub filter). +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/kernels.png} +\caption{Przykładowe filtry i ich wpływ na obraz \cite{ContributorstoWikimediaprojects2022May}} +\end{figure} +Pozwala to lepiej klasyfikować obraz, gdyż jego cechy są dla sieci, w cudzysłowie, lepiej widoczne. Filtry to mniejsze macierze o losowych parametrach, których to wartości koryguje algorytm propagacji wstecznej, dlatego intuicyjnie można utożsamiać je z wagami jakie występowały w przypadku w pełni połączonych sieci. Filtrów zazwyczaj nakłada się wiele, dla przykładu przy zadaniu rozpoznawania twarzy jeden filtr może uwypuklać oczy, drugi uszy, kolejny linie włosów i tak dalej. Oprócz tego takie podejście redukuje również szum, czyli niepotrzebne elementy obrazu przestają mieć znaczenie. Przykładowe filtry i ich wpływ na obraz przedstawione zostały w tabeli na obrazku powyżej. Wracając jednak do istoty konwolucji, dokonuje ona modyfikacji części obrazu. Filtr przechodzi krok po kroku po zdjęciu i przemnaża wartości zwracając wynik (zarówno wielkość filtra, jak i krok to parametry modyfikowalne podczas implementacji sieci). Wizualizacja tego procesu przedstawiona została poniżej. +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/kernel_cnn_vis.png} +\caption{Wizualizacja procesu zachodzącego w warstwie konwolucyjnej \cite{Galante2022Mar}} +\end{figure} +\\ +Wobec tego konwolucja tworzy nam nowy, mniejszy obraz zawierający już wyekstrahowane cechy obrazu pierwotnego, który posłuży jako wejście kolejnej warstwy sieci. Taki obraz nazywany jest mapą cech (z ang. feature map). Wyekstrahowane cechy w postaci mapy są o tyle znaczące, że dzięki temu ich lokalizacja na obrazie przestaje mieć znaczenie, a liczy się jedynie fakt ich występowania. Przy późniejszej predykcji zmiana położenia danej cechy nie będzie zatem znacząca w kontekście wyniku. Oczywiście jak każda architektura sieci neuronowych może być ona wielowarstwowa, wówczas wszystko wygląda identycznie, a proces powtarzany jest kilkukrotnie powodując wykrywanie subcech poszczególnych cech. Oprócz wspomnianych wcześniej dwóch hiperparametrów, tj. kroku (z ang. stride) oraz wielkości (z ang. size), dysponujemy także wypełnieniem (z ang. padding). Wypełnienie odpowiada za poszerzenie granic obrazu, dzięki czemu możliwa jest ekstrakcja większej ilości cech, a co za tym idzie większa ilość informacji jest przetwarzana wewnątrz sieci. Takie działanie odbywa się kosztem wydajności. Następnym krokiem jest nałożenie na otrzymaną mapę cech nieliniowości, poprzez zastosowanie funkcji aktywacji, podobnie jak miało to miejsce w przypadku w pełni połączonych sieci. W przypadku CNN praktycznie zawsze jest to funkcja ReLU. Nieliniowość jest przyczyną tak dobrej skuteczności sieci neuronowych, ponieważ pozwala znajdować skomplikowane zależności w danych, których nie sposób zapisać jako kombinacje liniową. Funkcja aktywacji w tym wypadku pozwala zadecydować, czy dany neuron będzie miał znaczący udział w późniejszej predykcji, czy też nie. W przypadku konwolucyjnych sieci neuronowych przetwarzane wartości piksele interpretować możemy jako neurony, zaś parametry macierzy filtrów jako wagi \cite{albawi2017understanding}. +\newline + +Zgodnie z rysunkiem 2.5 kolejnym elementem architektury konwolucyjncyh sieci neuronowych jest krok o nazwie łączenie (z ang. pooling). Konwolucyjna warstwa, której wyjście stanowi wejście dla warstwy pooling'u, powoduje redundancje danych. Część tych samych cech została wyekstrahowana w kolejnych przesunięciach filtra. Na potrzeby wizualizacji tego tematu, jeżeli użyty zostanie filtr wykrywający krawędzie poziome na obrazie i znajdzie on silną krawędź w określonym miejscu, to wówczas z dużą dozą prawdopodobieństwa ta sama cecha znajdzie się również w miejscu przesunięciu filtra o przykładowo 1 piksel w lewo, czy prawo. Zatem po wykonaniu konwolucji wypadałoby nieco zmniejszyć wymiarowość przetwarzanych danych. Zmniejszając rozmiar obrazu, zmniejszamy liczbę parametrów do wytrenowania, czym skracamy zarówno czas działania sieci, jak i poziom jej obliczeniowego skomplikowania. Za właśnie ten proces odpowiada warstwa pooling'u. Co warte podkreślenia pomimo redukcji wymiaru nie tracimy wówczas praktycznie żadnych informacji. Dzieje się tak, ponieważ nie interesuje nas wartość każdego piksela po konwolucji, a jednie te wartości, które dają silny sygnał sieci. W praktyce proces ten wygląda w ten sposób, że kilka sąsiednich pikseli przykładowo o rozmiarze 2x2 mapowana jest na 1 piksel (rozmiar podobnie jak w przypadku filtrów jest hiperparametrem deklarowanym podczas implementacji sieci). Zadeklarowane okno, również jak w przypadku filtrów, przechodzi wzdłuż i w szerz po całym obrazie. 2 najpopularniejsze i praktycznie jedyne stosowane rodzaje łączenia to: +\begin{enumerate} + \item max pooling - mapowaną wartością jest maksymalna wartość wynikająca z sąsiednich wartości pikseli, + \item average pooling - mapowaną wartością jest średnia wartość wynikająca z sąsiednich wartości pikseli. +\end{enumerate} +Dzięki zastosowania warstwy pooling'u sieci łatwiej jest identyfikować te cechy obrazu, których sygnał jest najsilniejszy \cite{Yamashita2018Aug}. Proces ten wizualizuje poniższy rysunek. +\begin{figure}[h!] +\centering +\includegraphics[width=0.6\textwidth]{images/pool.png} +\caption{Wizualizacja procesu zachodzącego w warstwie pooling'u \cite{Yani2019May}} +\end{figure} +\\ +Ostatnią warstwą CNN jest, znana już z opisywanej w poprzednim podrozdziale klasycznej architektury sieci neuronowych, warstwa w pełni połączona (z ang. fully connected layer). Warstwa ta odpowiedzialna jest za klasyfikacje. Używając funkcji aktywacji softmax (lub wcześniej scharakteryzowana funkcja sigmoid), opisanej poniższym wzorem, otrzymaną predykcją będzie prawdopodobieństwo przynależności obrazu do danej klasy. +\begin{eqnarray} +\sigma(y_{i}) = \left(\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right)\: +j = 1,...,n +\end{eqnarray} +Użycie tej funkcji w celu utworzenia prawdopodobieństw opisuje zaś przykład poniżej: +\begin{eqnarray} +y \rightarrow +\begin{bmatrix}{2.}\\{1.}\\{0.1}\end{bmatrix} +\longrightarrow +\left[\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right] +\longrightarrow +\begin{bmatrix}{0.7}\\{0.2}\\{0.1}\end{bmatrix} += 1 +\end{eqnarray} +Tak samo jak w klasycznej architekturze sieci w tej warstwie liczony jest błąd predykcji, który korygowany będzie poprzez algorytm propagacji wstecznej, czyli optymalizacji wag, a w tym przypadku parametrów macierzy filtrów. W CNN możemy zadeklarować więcej niż jedną warstwę w pełni połączoną, jest to podyktowane już charakterystyką danego zbioru treningowego. To samo dotyczy zresztą pozostałych warstw, co zostało już poruszone wcześniej w tym podrozdziale, a także demonstrowane jest na, znajdującym się wyżej, rysunku 2.5 \cite{BibEntry2022Jun_cnn_output}. \ No newline at end of file diff --git a/chapter3.tex b/chapter3.tex index de3e334..ce6555f 100644 --- a/chapter3.tex +++ b/chapter3.tex @@ -1,6 +1,5 @@ % !TeX encoding = UTF-8 % !TeX spellcheck = pl_PL - \chapter{Digitalizacja treści na podstawie projektu Chronicling America} \section{Przedstawienie projektu Chronicling America} @@ -11,7 +10,7 @@ Projekt Chronicling America został przeprowadzony na terenie Stanów Zjednoczon Podwaliny dla projektu Chronicling America stanowił program znany pod nazwą United States Newspaper Program (USNP) przeprowadzony w latach 1982-2011 również przez agencje National Endowment for the Humanities przy technicznej pomocy Biblioteki Kongresu. Projekt ten miał na celu wyselekcjonowanie, skatalogowanie i zapisanie historycznych gazet wydawanych w Stanach Zjednoczonych od XVIII wieku, a dokładniej 1690 roku, aż do czasów współczesnych w postaci mikrofilmów. USNP zleciło przeprowadzenie projektu w każdym ze stanów, a także w Portoryko i na Wyspach Dziewiczych. Za organizacje odpowiedzialne były konkretne jednostki terytorialne, najczęściej największe stanowe repozytoria gazet. Odpowiedzialne były one między innymi za inwentaryzację zbiorów zawartych głównie w bibliotekach publicznych oraz sądach, biurach prasowych, muzeach, bibliotekach uniwersyteckich, archiwach i towarzystwach historycznych. Rekordy katalogowe zostały wprowadzone do krajowej bazy danych prowadzonej przez Online Computer Library Center (OCLC) i dostępnej na całym świecie poprzez WorldCat, czyli katalog łączący zbiory 71 tysięcy bibliotek ze 112 krajów, co czyni go największą na świecie bibliograficzną bazą danych \cite{BibEntry2022Jun_NEH}. \newline -Dobre praktyki digitalizacji wymagają aby katalogowane dzieła zawierały opis. Gazety skatalogowane w ramach projektu Chronicling America również posiadają standardowe krótkie opis. To jednak nie wszystko, ponieważ osoby odpowiedzialne za ten projekt poszły o krok dalej. Oprócz klasycznych opisów gazety zawierają również specjalne opisy uzupełniające, zwane esejami tytułowymi (z ang. "title essays"). Są one opracowywane na specjalne zlecenie Chronicling America, a nad ich jakością piecze sprawuje agencja National Endowment of the Humanities, która dokonuje przeglądów sporządzonych prac. Opisy uzupełniające stanowią punkt wyjścia do dalszych badań nad zrozumieniem roli jaką odgrywała dana gazeta wśród swoich czytelników. Wśród elementów jakie znajdują się w esejach tytułowych wyróżnić możemy takie jak na przykład: +Dobre praktyki digitalizacji wymagają aby katalogowane dzieła zawierały opis. Gazety skatalogowane w ramach projektu Chronicling America również posiadają standardowe krótkie opis. To jednak nie wszystko, ponieważ osoby odpowiedzialne za ten projekt poszły o krok dalej. Oprócz klasycznych opisów gazety zawierają również specjalne opisy uzupełniające, zwane esejami tytułowymi (z ang. title essays). Są one opracowywane na specjalne zlecenie Chronicling America, a nad ich jakością piecze sprawuje agencja National Endowment of the Humanities, która dokonuje przeglądów sporządzonych prac. Opisy uzupełniające stanowią punkt wyjścia do dalszych badań nad zrozumieniem roli jaką odgrywała dana gazeta wśród swoich czytelników. Wśród elementów jakie znajdują się w esejach tytułowych wyróżnić możemy takie jak na przykład: \begin{itemize} \item[$\bullet$] miejsce publikacji, @@ -30,10 +29,10 @@ Dobre praktyki digitalizacji wymagają aby katalogowane dzieła zawierały opis. Opisy te realizują jeden z najważniejszych celi jakie stawia przed sobą projekt Chronicling America, a mianowicie rozumienie treści jakie prezentują gazety w kontekście czasu i miejsca ich wydawania. Aby to osiągnąć uczestniczące w projekcie instytucje posiadające w tym kontekście interesujące zbiory otrzymują nagrody za wybranie i zdigitalizowanie około 100,000 stron gazet reprezentujących historię regionalną danego stanu, swój zasięg geograficzny oraz interesujące wydarzenia. Proces selekcji jest bardzo dokładny oraz ostrożny i musi być przeprowadzany w kontakcie z innymi podmiotami w celu minimalizacji powtarzających się materiałów, ze względu na duże koszta całego przedsięwzięcia. Biblioteka Kongresu odpowiedzialna była za przygotowanie technicznej specyfikacji przeprowadzania całości tego procesu \cite{Humanities2022Jun}. \newline -Biblioteka Kongresu odpowiedzialna jest za opracowywanie standardów przeprowadzanych przed uczestników projektu procesów digitalizacyjnych. Dokument w którym przedstawione są wypracowane standardy jest aktualizowany na bieżąco, raz w roku. Aktualna wersja zawiera 67 stron na których szczegółowo opisano podejście do digitalizacji. Na stronie Biblioteki Kongresu można zapoznać się z zarówno aktualnym standardem jak i historycznymi. Cele jakie określiła Biblioteka Kongres to między innymi określenie wspólnego interfejs dostępnego dla każdego potencjalnego użytkownika poprzez sieć WWW za pomocą standardowego protokołu HTTP. Ponadto zadbali oni również o określenie odpowiedniego standardu digitalizacji, aby późniejsze wykorzystanie technologii OCR przebiegało efektywnie, a także o stosowanie formatów cyfrowych o wysokim prawdopodobieństwie trwałości, czy przykładanie szczególnej uwagi na koszty konwersji cyfrowej i konserwacji powstałych w ten sposób zasobów. Obecne podejście opiera się w głównej mierze na kilku kluczowych aspektach. Pierwszym z nich jest to, że obrazy odtwarza się z kopii zachowawczej mikrofilmów, na których są przechowywane pozyskane zdjęcia stron gazet. Pliki zaś przetrzymuje się w formacie TIFF 6.0, czyli w formacie opartym na znacznikach, służącym do przechowywania i wymiany obrazów bitmapowych (rastrowych) \cite{BibEntry2022Jun_tech}. Pozwala on na przechowywanie informacje o kanałach alfa, ścieżkach, profilu kolorów, komentarzach, umożliwia także zapisywanie dokumentów wielostronicowych. Możliwa jest również kompresja w tym kompresja ZIP. Wersja 6.0 jako pierwsza zapewnia również możliwość kompresji do formatu JPEG. \cite{WspoltworcyprojektowFundacjiWikimedia2003Feb}. Jeśli chodzi o jakość tych obrazów to wymagana jest konwersja obrazów w 8-bitowej skali szarości skanowanych z maksymalną możliwą rozdzielczością, która wynosi 300-400 DPI \cite{BibEntry2022Jun_tech}. Wspomniana wcześniej miara DPI (z ang. „dots per inch”) określa liczbę pikseli (ich gęstość) na jeden cal, która reprezentuje jakość przedstawianych obrazów czy wydruków. Na poniższej rycinie wyjaśnione zostało jak w zależności od wartości DPI zmienia się jakoś przedstawianego obrazu czarnej kropki. Jak nie trudno zauważyć im wyższa wartość miary, tym obraz jest dokładniejszy i bardziej wygładzony \cite{BibEntry2022Jun_dpi}. +Biblioteka Kongresu odpowiedzialna jest za opracowywanie standardów przeprowadzanych przed uczestników projektu procesów digitalizacyjnych. Dokument w którym przedstawione są wypracowane standardy jest aktualizowany na bieżąco, raz w roku. Aktualna wersja zawiera 67 stron na których szczegółowo opisano podejście do digitalizacji. Na stronie Biblioteki Kongresu można zapoznać się z zarówno aktualnym standardem jak i historycznymi. Cele jakie określiła Biblioteka Kongres to między innymi określenie wspólnego interfejs dostępnego dla każdego potencjalnego użytkownika poprzez sieć WWW za pomocą standardowego protokołu HTTP. Ponadto zadbali oni również o określenie odpowiedniego standardu digitalizacji, aby późniejsze wykorzystanie technologii OCR przebiegało efektywnie, a także o stosowanie formatów cyfrowych o wysokim prawdopodobieństwie trwałości, czy przykładanie szczególnej uwagi na koszty konwersji cyfrowej i konserwacji powstałych w ten sposób zasobów. Obecne podejście opiera się w głównej mierze na kilku kluczowych aspektach. Pierwszym z nich jest to, że obrazy odtwarza się z kopii zachowawczej mikrofilmów, na których są przechowywane pozyskane zdjęcia stron gazet. Pliki zaś przetrzymuje się w formacie TIFF 6.0, czyli w formacie opartym na znacznikach, służącym do przechowywania i wymiany obrazów bitmapowych (rastrowych) \cite{BibEntry2022Jun_tech}. Pozwala on na przechowywanie informacje o kanałach alfa, ścieżkach, profilu kolorów, komentarzach, umożliwia także zapisywanie dokumentów wielostronicowych. Możliwa jest również kompresja w tym kompresja ZIP. Wersja 6.0 jako pierwsza zapewnia również możliwość kompresji do formatu JPEG. \cite{WspoltworcyprojektowFundacjiWikimedia2003Feb}. Jeśli chodzi o jakość tych obrazów to wymagana jest konwersja obrazów w 8-bitowej skali szarości skanowanych z maksymalną możliwą rozdzielczością, która wynosi 300-400 DPI \cite{BibEntry2022Jun_tech}. Wspomniana wcześniej miara DPI (z ang. dots per inch) określa liczbę pikseli (ich gęstość) na jeden cal, która reprezentuje jakość przedstawianych obrazów czy wydruków. Na poniższej rycinie wyjaśnione zostało jak w zależności od wartości DPI zmienia się jakoś przedstawianego obrazu czarnej kropki. Jak nie trudno zauważyć im wyższa wartość miary, tym obraz jest dokładniejszy i bardziej wygładzony \cite{BibEntry2022Jun_dpi}. \begin{figure}[h!] \centering - \includegraphics[width=0.6\textwidth]{dpi.png} + \includegraphics[width=0.6\textwidth]{images/dpi.png} \caption{Przykład różnych wartości DPI \cite{DuggalVisualSolutions2022Jun}.} \end{figure} \ \\ @@ -54,7 +53,7 @@ Interfejs internetowej aplikacji do przeszukiwania i przeglądania zbiorów zebr \begin{figure}[h!] \centering -\includegraphics[width=1\textwidth]{ca_base.png} +\includegraphics[width=1\textwidth]{images/ca_base.png} \caption{Interfejs aplikacji do obsługi zbiorów Chronicling America \cite{Humanities2022Jun_CA_inter}} \end{figure} \clearpage @@ -63,7 +62,7 @@ Ze strony internetowej Chronicling America mamy swobodny dostęp do bazy wszystk \begin{figure}[h!] \centering -\includegraphics[width=0.9\textwidth]{polish_ca.png} +\includegraphics[width=0.9\textwidth]{images/polish_ca.png} \caption{Wyniki wyszukiwania frazy "polish" na stronie głównej projektu Chronicling America \cite{Humanities2022Jun_CA_inter}} \end{figure} @@ -71,9 +70,9 @@ Po wpisaniu tej frazy w wyszukiwarkę otrzymaliśmy aż 1,350,355 wyników, jedn \begin{figure}[h!] \centering - \subfloat[\centering Strona tytułowa pisma Katolik]{{\includegraphics[width=7cm]{pdf_katolik.png} }}% + \subfloat[\centering Strona tytułowa pisma Katolik]{{\includegraphics[width=7cm]{images/pdf_katolik.png} }}% \qquad - \subfloat[\centering Wycinek transkryptu strony tytułowej]{{\includegraphics[width=3cm]{trans_katolik.png} }}% + \subfloat[\centering Wycinek transkryptu strony tytułowej]{{\includegraphics[width=3cm]{images/trans_katolik.png} }}% \caption{Przykład polskiego pisma w zbiorach Chronicling America \cite{Humanities2022Jun_CA_inter}}% \end{figure} @@ -82,7 +81,7 @@ Zaprezentowane powyżej czasopismo to "Katolik", wydanie z dnia 12 kwietnia 1894 \begin{figure}[h!] \centering -\includegraphics[width=0.85\textwidth]{stron_info_katol.png} +\includegraphics[width=0.85\textwidth]{images/stron_info_katol.png} \caption{Strona informacyjna dla czasopisma "Katolik" \cite{Humanities2022Jun_ca_katol}} \end{figure} @@ -91,7 +90,7 @@ Strona Chronicling America nie oferuje jednak dostępu do żadnych statystyk zwi \begin{figure}[h!] \centering -\includegraphics[width=0.87\textwidth]{strony_per_year.png} +\includegraphics[width=0.87\textwidth]{images/strony_per_year.png} \caption{Liczba wszystkich skolekcjonowanych stron gazet w repozytorium Chronicling America w rozbiciu na lata ich wydawania} \end{figure} @@ -100,7 +99,7 @@ Powyższy wykres przedstawia liczebność skolekcjonowanych obrazów stron poszc \begin{figure}[h!] \centering -\includegraphics[width=0.85\textwidth]{gazety_per_terytorium.png} +\includegraphics[width=0.85\textwidth]{images/gazety_per_terytorium.png} \caption{Liczba wszystkich skolekcjonowanych gazet w repozytorium Chronicling America w rozbiciu na poszczególne obszary} \end{figure} @@ -109,7 +108,7 @@ Na wykres przedstawionym powyżej zaprezentowana została liczebność gazet jak \begin{figure}[h!] \centering -\includegraphics[width=1\textwidth]{strony_per_terytorium.png} +\includegraphics[width=1\textwidth]{images/strony_per_terytorium.png} \caption{Liczba wszystkich skolekcjonowanych stron gazet w repozytorium Chronicling America w rozbiciu na poszczególne obszary} \end{figure} @@ -120,11 +119,160 @@ Z ramienia Chronicling America narodził się kolejny projekt, który stanowi na \section{Opis podejścia Newspaper Navigator} -Newspaper navigator oddzielny podrozdział po płynnym przejściu z Chronicling America +Newspaper Navigator to nazwa eksperymentu z dziedziny uczenia maszynowego, a będąc bardziej precyzyjnym głębokich sieci neuronowych, opartego wyłącznie na zbiorze danych wyodrębnionym ze skolekcjonowanych pozycji podczas projektu Chronicling America. Ten pilotażowy projekt oferował możliwość zbadania historycznych relacji gazetowych z I wojny światowej i przyczynienia się do cyfrowej nauki w tym samym czasie. Zawartość wizualna gazet została zidentyfikowana przy użyciu modelu wykrywania obiektów wytrenowanego na stronach gazet pochodzących z okresu pierwszej wojny światowej. Adnotacje do tych materiałów zostały zebrane w ramach projektu crowdsourcing'owego Beyond Words. Projekt ten był przeprowadzony latach 2017-2021, a w ramach niego Biblioteka Kongresu poprosiła społeczeństwo o identyfikacje wizualnych elementów znajdujących się w przygotowanym pod projekt Newspaper Navigator zbiorze. Wolontariusze mieli do wykonania 1 lub więcej z 3 możliwych rodzajów zadań, po pierwsze było ta wspomniana już identyfikacja, po drugie transkrypcja, oraz po trzecie weryfikacja poprawności zaznaczonych przez innych wolontariuszy treści. W rezultacie powstały adnotacje do treści wizualnych pojawiających się na skolekcjonowanych stronach gazet, które dzielą się na następujące kategorie: +\begin{enumerate} + \item[$\bullet$] Fotografie + \item[$\bullet$] Ilustracje + \item[$\bullet$] Mapy + \item[$\bullet$] Komiksy + \item[$\bullet$] Karykatura + \item[$\bullet$] Tytuły + \item[$\bullet$] Reklamy +\end{enumerate} +Pomoc wolontariuszy była niezbędna do przygotowana zbioru uczącego dla sztucznych sieci neuronowych, aby je wytrenować i dokonać predykcji na pozostałej, znacznie bardziej licznej, części zbioru po otrzymaniu satysfakcjonujących wyników na wydzielonym zbiorze testowym. Całość zebranego zbioru została wykorzystana przez badaczy Biblioteki Kongresu do stworzenia witryny pozwalającej na wyszukiwanie treści wizualnych pochodzących z dawnych gazet po dowolnie wybranych frazach. \cite{BibEntry2020May_NNNNN}. +\newline -Kto zrobił, w jaki sposób, dlaczego w ogóle powstał taki projket na bazie zbiorów Chronicling America, przykładowe obrazki, dane statystyczne, performance modelu i opis całego podejścia. +Na poniższym obrazie znajduje się interfejs wyszukiwarki z przykład wyszukiwania dla frazy 'football' (z ang. futbol amerykański): +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/nn_interface_football.png} +\caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'football' \cite{BibEntry2022Jul_nn_search}} +\includegraphics[width=1\textwidth]{images/elem_search_nn.png} +\caption{Szczegółowy widok wybranego rezultatu wyszukiwania \cite{BibEntry2022Jul_nn_search}} +\end{figure} -https://news-navigator.labs.loc.gov/ <- strona NN -https://arxiv.org/abs/2005.01583 <- paper NN +Jak można zauważyć dokładny zakres dat, które obejmuje wyszukiwarka, to lata 1900 do 1963. Daty te są datami granicznymi, wyniki nie obejmują ani okresów wcześniejszych, ani późniejszych. Zakres dat jest dostępny w postaci filtra, tak samo jak lokalizacja gazety z której pochodzą wyszukiwane elementy wizualne. Wyniki wyszukiwania zdają się być dobrze dopasowane, zauważyć możemy grupowe zdjęcia drużyn futbolu amerykańskiego oraz pojedyncze zdjęcia poszczególnych zawodników. Po kliknięciu w dowolny rezultat wyszukiwania sprawdzić możemy dlaczego został on zaklasyfikowany do wyszukiwanej frazy, ponieważ tuż obok powiększenia wybranego elementu znajdziemy przypisaną do niego transkrypcje wyekstrahowaną przez zastosowany system OCR. Na powyższym przykładzie widzimy, że wybrane zdjęcie przedstawia grupę zawodników męskiej drużyny futbolu amerykańskiego z nowojorskiego uniwersytetu Columbia. Fraza, którą wyszukiwaliśmy została podkreślona, aby ułatwić użytkownikowi orientacje. Konkretny element wyszukiwania możemy zapisać w postaci obrazu, zobaczyć pełną wersje gazety z której pochodzi, poznać szczegółowe dane o tej gazecie, a także pobrać jej cytat. Nazwa oraz data wydania konkretnego egzemplarza zostały pogrubione i umieszczone nad tekstem pochodzącym z OCR. Przykład powyżej przedstawia wyszukiwarkę jedynie z jej dobrej strony, prezentując dobrze dopasowane wyniki do wyszukiwanej frazy. Choć niewątpliwie wyszukiwarka działa w większości przypadków działa przyzwoicie zdarzają się też takie na których wyniki dopasowywane są dość słabo. Dlatego też wypadałoby jako kontrprzykład przedstawić wyniki wyszukiwania dla innej frazy, gdzie nie radzi sobie ona wystarczająco dobrze. Kolejną wyszukiwaną frazą będzie zatem słowo 'bar' (z ang. bar): +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/nn_interface_bar.png} +\caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'bar' \cite{BibEntry2022Jul_nn_search}} +\end{figure} +\clearpage +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/elem_search_nn_2_wrong.png} +\caption{Szczegółowy widok wybranego błędnego rezultatu wyszukiwania 1 \cite{BibEntry2022Jul_nn_search}} +\includegraphics[width=1\textwidth]{images/elem_search_nn_3_wrong.png} +\caption{Szczegółowy widok wybranego błędnego rezultatu wyszukiwania 2 \cite{BibEntry2022Jul_nn_search}} +\end{figure} -W zależności jak mocno technicznie wejdę tutaj tak może być potrzeba wrzucenia tego rozdziału o sieciach jednak jako drugi i chyba faktycznie tak jest słuszniej +Jak widzimy na rysunku 3.11, tylko jeden z wyników w rzeczywistości pasuje do wprowadzonej frazy (środkowy obrazek w skrajnie lewej kolumnie wyników). Dwa przykładowe błędne wyniki wyszukiwania przedstawione są poniżej kolejno na rysunku 3.12 oraz 3.13. Pierwszy z nich prezentuje rabarbarową galaretkę (z ang. rhubarb jelly), drugi zaś według transkryptu przedstawia spotkanie w sprawie podpisania umowy na budowę drogi podziemnej, na którym znajduje się osoba o nazwisku Barclat. Jak nie trudno zauważyć zarówno słowo rhubarb oraz nazwisko Barclat zawierają w sobie wyszukiwaną frazę. Pokazuje to, iż zaimplementowana logika wyszukiwania jest dość prosta i opiera się jedynie na występowaniu danej frazy w jakiejkolwiek możliwej postaci w tekście. Podkreśla ten fakt również brak możliwości sortowania wyników po pewności wyszukiwania, a jedynie po dacie. +\newline + +Zbiór na którym został przeprowadzony eksperyment Newspaper Navigator składał się z 3,559 stron gazet, na których łącznie zidentyfikowano 48,409 obiektów. Podział tych obiektów na kategorie prezentuje się następująco: +\begin{table}[h!] +\centering + \begin{tabular}{c c c c} + \toprule + Kategoria & & Liczebność zbioru: & \\ + & ogółem & treningowego & testowego \\ + \toprule + Fotografie & 4,254 & 3,375 & 879 \\ + \midrule + Ilustracje & 1,048 & 842 & 206 \\ + \midrule + Mapy & 215 & 181 & 34 \\ + \midrule + Komiksy & 1,150 & 939 & 211 \\ + \midrule + Karykatura & 293 & 239 & 54 \\ + \midrule + Tytuły & 27,868 & 22,179 & 5,689 \\ + \midrule + Reklamy & 13,581 & 10,723 & 2,858 \\ + \bottomrule + Suma & 48,409 & 38,478 & 9,931 \\ + \bottomrule + \end{tabular} + \end{table} + \\ +Do stworzenia modelu ekstrakcji treści wizualnych i ich klasyfikacji użyto architektury sieci neuronowych o nazwie Faster-RCNN. Dokładniej mówiąc jest to implementacja tej architektury w bibliotece Detectron2 stworzonej dla języka programowania Python, w którym powstał opisywany model, a także przeprowadzone zostało moje podejście opisywane w następnym rozdziale. Użyta sieć została uprzednio przetrenowana na popularnym zbiorze danych COCO i jedynie dotrenowana na zbiorze danych Newspaper Navigator \cite{Lee2020May_paper}. Detectron2 to platforma badawcza i biblioteka produkcyjna operująca w języku programowania Python, służąca do wykrywania obiektów, zbudowana przez zespół Facebook AI Research (FAIR). Pozwala ona na bardzo szybką implementacje przetrenowanych już sieci neuronowych służących do pracy z obrazem i dostosowanie ich do posiadanego własnego zbioru danych \cite{BibEntry2021Aug_fb_d2}. Zbiór COCO na którym wytrenowana została użyta sieć neuronowa pochodzi od firmy Microsoft, zebrano w nim 328 tysięcy zdjęć, zawierających ponad 2,5 miliona oznaczonych obiektów, podzielonych na 91 kategorii \cite{Lin2014May}. Użycie uprzednio przetrenowanych model na innym zbiorze danych jest bardzo często spotykaną praktyką. Takie podejście znacząco skraca czas treningu oraz niezbędne do tego zasoby, a ponadto często pozwala również osiągnąć lepsze wyniki. Wówczas sieć neuronowa zamiast inicjalizować wagi losowo na samym początku korzysta z ich wyjściowych wartości osiągniętych na wcześniej użytym zestawie treningowym. W takim przypadku zamiast trenować model od zera, jedynie dostosowuje się jego parametry do konkretnego przypadku, często trenując jedynie ostatnią warstwę, która odpowiada wyłącznie za klasyfikacje. Sama architektura Faster-RCNN oraz wykorzystywanie już częściowo przetrenowanych modeli zostanie szerzej opisane przy okazji opisu mojego podejścia do opisywanego zbioru danych, w kolejnym rozdziale. Ostateczne wyniki jakie zostały osiągnięte przez badaczy z Biblioteki Kongresu opisuje poniższa tabela: +\begin{table}[h!] +\centering + \begin{tabular}{c c} + \toprule + Kategoria & Wartość metryki AP \\ + \toprule + Fotografie & 0.616 \\ + \midrule + Ilustracje & 0.309 \\ + \midrule + Mapy & 0.695 \\ + \midrule + Komiksy & 0.656 \\ + \midrule + Karykatura & 0.630 \\ + \midrule + Tytuły & 0.743 \\ + \midrule + Reklamy & 0.787 \\ + \midrule + Średnia (mAP) & 0.634 \\ + \bottomrule + \end{tabular} + \end{table} + \\ + +Metryka za pomocą której przedstawione zostały powyższe wyniki to średnia predykcja (z ang. average precision - AP). Metryka ta jest najpopularniejszym sposobem prezentowania wyników w przypadku zagadnień z zakresu detekcji obrazu (z ang. object detection). AP bazuje na następujących sub-formułach: + +\begin{enumerate} + \item[$\bullet$] \textbf{Tablica pomyłek (z ang. confusion matrix)} \\ + Dane oznaczone etykietami: pozytywną i negatywną poddawane są klasyfikacji, która przypisuje im predykowaną klasę pozytywną albo predykowaną klasę negatywną. Możliwe błędy jakie może popełnić klasyfikator opisuje właśnie tablica pomyłek. + \begin{center} + \item[{\includegraphics[scale=0.6]{images/conf_mat.png}}] + \end{center} + Dla przykładu rozważmy klasyfikacje czy dany pacjent jest chory, wówczas: + \begin{enumerate} + \item[$\bullet$] TP = Ludzie chorzy poprawnie zdiagnozowani jako chorzy + \item[$\bullet$] FP = Ludzie zdrowi błędnie zdiagnozowani jako chorzy + \item[$\bullet$] FN = Ludzie chorzy błędnie zdiagnozowani jako zdrowi + \item[$\bullet$] TN = Ludzie zdrowi poprawnie zdiagnozowani jako zdrowi \cite{WspoltworcyprojektowFundacjiWikimedia2015Feb_CONF_MATRIX} \\ + \end{enumerate} + + \item[$\bullet$] \textbf{Indeks Jaccarda (z ang. Intersection over Union - IoU)} \\ + Indeks Jaccarda pozwala określić na ile predykowane współrzędne obiektu na obrazie pokrywają się z ich rzeczywistymi wartościami. Działanie tej metryki prezentuje poniższy schemat: + \begin{center} + \item[{\includegraphics[scale=0.45]{images/iou.png}}] + \end{center} + Im wyższa wartość opisywanej metryki tym model lepiej przewidział położenie obiektu znajdującego się na obrazie \cite{BibEntry2022Jul_mAP}. \\ + + \item[$\bullet$] \textbf{Precyzja} \\ + Precyzja jest stosunkiem wartości poprawnie sklasyfikowanych jako pozytywne (TP) do sumy obiektów poprawnie oraz fałszywie sklasyfikowanych jako pozytywne (TP + FP). + \begin{center} + \begin{equation} + \dfrac{TP}{TP+FP} + \end{equation} + \end{center} + + Metryka ta informuje nas jak dokładny jest klasyfikator względem predykcji przypisanych do klasy pozytywnej, inaczej mówiąc ile z tych przewidywanych pozytywnych obserwacji jest faktycznie pozytywna \cite{Shung2020Apr}. W przypadku zagadnień detekcji obiektów na obrazie precyzja jest obliczana przy użyciu progu IoU. Zakładając próg IoU równy 0.5, w przypadku gdy dana predykcja ma wartość tej metryki równą 0.3 (IoU < próg) jest ona klasyfikowana jako fałszywie pozytywna (FP). Natomiast jeżeli ta predykcja miała by wartość IoU równą przykładowo 0.7 (IoU > próg), wówczas byłaby ona sklasyfikowana jako prawdziwie pozytywna (TP) \cite{BibEntry2022Jul_mAP}. \\ + + \item[$\bullet$] \textbf{Recall} \\ + Recall jest stosunkiem wartości poprawnie sklasyfikowanych jako pozytywne (TP) do sumy obiektów poprawnie sklasyfikowanych jako pozytywne oraz negatywne (TP + FN). + \begin{center} + \begin{equation} + \dfrac{TP}{TP+FN} + \end{equation} + \end{center} + + Metryka ta oblicza, jak wiele z rzeczywistych pozytywnych obserwacji klasyfikator faktycznie przewiduje jako obserwacje pozytywne \cite{Shung2020Apr}. +\end{enumerate} +Średnia precyzja (AP) jest obliczana jako średnia ważona precyzji przy każdym progu IoU, gdzie wagą jest wzrost wartości recall od poprzedniego progu. Średnią precyzje wyraża poniższy wzór: +\begin{equation} + AP = \sum_{n}(R_{n}=R_{n-1})P_{n} +\end{equation} +W powyższym wzorze P oraz R oznaczają kolejno precyzję i recall przy n-tym progu IoU. +\begin{equation} + mAP = \dfrac{1}{N}\sum_{i=1}^{N}AP_{i} +\end{equation} +Jeżeli chodzi o metrykę mAP to jest ona obliczana poprzez znalezienie wartości AP dla każdej z klas, a następnie uśrednienie jej \cite{BibEntry2022Jul_mAP}. +\newline + +Cały proces jaki został przeprowadzony w ramach eksperymentu Newspaper Navigator jeśli chodzi o przygotowanie danych, aby następnie móc wykorzystać je na potrzeby stworzenia wyszukiwarki opisuje poniższy schemat. Widać na nim, że w pierwszym kroku, po pobraniu zdjęcia gazety, uruchamiany jest na nim stworzony i wytrenowany model detekcji obrazu oparty na sztucznych sieciach neuronowych, który wykrywa elementy wizualne, klasyfikuje je i przekazuje ich współrzędne. Na podstawie współrzędnych tworzone są następnie ramki ograniczającej (z ang. bounding box). Kolejnym krokiem jest wycięcie z oryginalnego obrazu wykrytych elementów wizualnych zgodnie z będącymi wyjściem modelu ramkami ograniczającymi. Następnie na wyciętych elementach uruchamiany jest system OCR, który rozpoznaje tekst na obrazie. Wykryty tekst będzie służył jako podstawa do późniejszego przeszukiwania przez stworzony silnik wyszukiwarki. Na koniec wyekstrahowane dane zostają zapisane \cite{Lee2020May_paper}. + +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/nn_pipeline.png} +\caption{Schemat przygotowania danych Newspaper Navigator \cite{Lee2020May_paper}} +\end{figure} + +Mając na uwadze omówiony w tym rozdziale eksperyment Newspaper Navigator przeprowadzony przez badaczy z Biblioteki Kongresu w kolejnym rozdziale przedstawiony zostanie mój sposób podejścia do problemu. Zostanie w nim zaprezentowany między innymi proces przygotowania danych, opis modelu, ewaluacja jego rezultatów, porównania ich z pierwowzorem, użycie systemu OCR, czy podjęta próba stworzenia wyszukiwarki na podstawie otrzymanych wyników. \ No newline at end of file diff --git a/chapter4.tex b/chapter4.tex index 8112fce..2d97077 100644 --- a/chapter4.tex +++ b/chapter4.tex @@ -1,8 +1,454 @@ % !TeX encoding = UTF-8 % !TeX spellcheck = pl_PL - - \chapter{Eksperyment na podstawie danych Newspaper Navigator} +W niniejszym rozdziale opisane zostało autorskie podejście do uprzednio opisywanego problemu. Na jego kolejnych stronach przedstawiona zostanie całość procesu budowania opartej na sztucznych sieciach neuronowych aplikacji, pozwalającej na wyszukanie dowolnych treści wizualnych znajdujących się w omawianym zbiorze danych poprzez obsługę tekstowych zapytań użytkownika. Proces działania całej aplikacji opisuje poniższy schemat: +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/schemat_aplikacji.png} +\caption{Schemat działania aplikacji} +\end{figure} +\\ +Budowanie rozwiązania składało się z kilku kluczowych element, które zostały wylistowane w sposób chronologiczny poniżej: +\begin{enumerate} + \item Pozyskiwanie obrazów o wysokiej rozdzielczości przy użyciu web scraper'a. + \item Przetworzenie obrazów wraz z ich adnotacjami do użytecznej postaci. + \item Zbudowanie modelu detekcji treści wizualnych pojawiających się w gazetach z wykorzystaniem metod głębokiego uczenia maszynowego. + \item Kadrowanie wykrytych obiektów z testowego zestawu oryginalnych obrazów, zastosowanie na nich systemu OCR, wyodrębnienie słów kluczowych oraz zapisanie wyników w bazie danych. + \item Implementacja silnika wyszukiwania pełnotekstowego. + \item Zaprojektowanie graficznego interfejsu użytkownika, który wyświetla wybrane treści wizualne zgodne z zapytaniem tekstowym użytkownika. +\end{enumerate} -Cały opis mojego podejścia, a także -eksperymenty, ewaluacja i analiza (co robi dobrze model, co robi źle) \ No newline at end of file + +\section{Architektura techniczna rozwiązania} +Całość prac związanych z przygotowaniem rozwiązania wykonana została przy użyciu języka programowania Python oraz korzystając z dostępnych rozszerzeń jego funkcjonalności w postaci różnorodnych bibliotek programistycznych. Repozytorium kodu jest ogólnodostępne i znajduje się pod następującym adresem internetowym: \url{https://github.com/yngalxx/Master_degree}. Cały kod jaki został napisany na potrzeby opisywanego rozwiązania liczy 23 skrypty co w przybliżeniu daje około 2.8 tysiąca linijek kodu. Najważniejsze foldery wchodzących w skład repozytorium przedstawione zostały poniżej: +\\ +\dirtree{% +.1 \textbf{Master\_degree}. +.2 cropped\_visual\_content. +.2 model\_config. +.2 data. +.3 train. +.3 dev-0. +.3 test-A. +.2 logs. +.2 ocr\_database. +.2 scraped\_photos. +.2 source\_annotations. +.2 src. +.3 runners. +.3 lib. +} + +\begin{itemize} + \item[$\bullet$]\textbf{cropped\_visual\_content} - wykadrowane treści wizualne. + \item[$\bullet$]\textbf{model\_config} - folder ten zawiera zapisany model, statystyki ewaluacyjne z ostatniej epoki treningu, a także parametry konfiguracyjne do modelu. + \item[$\bullet$]\textbf{data} - na folder data składają się 3 inne foldery o takiej samej strukturze (zawierają 2 plik tekstowe, jeden z nazwami obrazów wchodzących w skład zbioru, a drugi z odpowiadajacymi im adnotacjami), każdy z nich odnosi się do innego zbioru danych (treningowego, walidacyjnego lub testowego). + \item[$\bullet$]\textbf{logs} - zbiór plików odpowiadające konkretnym skryptom z folderu src\textbackslash runners, które zbierają chronologiczne zapisy zdarzeń i statystyki (logi), służące do późniejszej analizy działania aplikacji. + \item[$\bullet$]\textbf{ocr\_database} - baza danych zawierająca wyniki otrzymane z systemu OCR. + \item[$\bullet$]\textbf{scraped\_photos} - pozyskane za pomocą web scraper'a obrazy. + \item[$\bullet$]\textbf{source\_annotations} - oryginalne adnotacje do obrazów pobrane z repozytorium Newspaper Navigator. + \item[$\bullet$]\textbf{src} - serce aplikacji i całe jej zaplecze techniczne. + \begin{itemize} + \item[$\bullet$]\textbf{runners} - zestaw skryptów wywoływanych z wiersza poleceń uruchamiających odpowiednie fragmenty kodu zgromadzonego w folderze src\textbackslash lib. + \item[$\bullet$]\textbf{lib} - zbiór skryptów zawierających skategoryzowane w odpowiednie pliki, klasy i funkcje, które później wywoływane są przez skrypty z folder src\textbackslash runners. + \end{itemize} +\end{itemize} +Repozytorium wzbogacono o CICD z pomocą rozszerzenia oferowanego przez używany system kontroli wersji (GitHub Actions). W tym przypadku CICD odpowiedzialne było za automatyczne formatowanie kodu z wykorzystaniem narzędzia jakim jest Black, w trosce o przejrzystość i jakość kodu samego rozwiązania, a także jego zgodność z przyjętym kanonem dobrych praktyk programowania. + +\section{Opis i przygotowanie danych} +Z oryginalnego repozytorium projektu Newspaper Navigator pobrane zostały pliki zawierające przygotowane adnotacje do zdjęć w formacie json. 80\% wszystkich adnotacji przypadło na jeden z plików, kolejne 20\% zaś na drugi, stanowiły one kolejno zbiór treningowy i testowy. Ważnym było zachowanie tej samej struktury testowego zbioru danych, aby później podczas ewaluacji wyników jakie zwraca nowo powstały model, mieć możliwość porównania ich z wynikami pierwowzoru. Dodatkowo, ze zbioru treningowego wyodrębniony został zestaw danych walidacyjnych, którego przeznaczeniem jest możliwość ewaluacji wyników podczas jeszcze trwania samego treningu modelu, po każdej kolejnej epoce. W trosce o stabilność rozwiązania i pewność, aby to zawsze dokładnie ten sam wycinek oryginalnego zbioru danych stawał się zbiorem walidacyjnym, do jego wyboru została wykorzystana funkcja skrótu lub inaczej, spolszczając nazwę angielską, funkcja haszująca (z ang. hash function). Nazwy plików zostały poddane działaniu funkcji haszującej, a następnie przetransformowane do reprezentacji numerycznej, dzięki czemu możliwym było wyekstrahowanie podzbioru zdjęć, który na późniejszym etapie posłuży jako zbiór walidacyjny. Na potrzeby tego zbioru poświęcone zostało około 8\% zdjęć należących do pierwotnego zbioru treningowego. Z oryginalnych adnotacji pozyskane zostały współrzędne ramki ograniczającej daną treść wizualną, jej kategorie (klasę), a także adres url do zdjęcia danej strony gazety o wysokiej rozdzielczości. Wyodrębnione jedynie użyteczne elementy oryginalnych adnotacji zostały zapisane w formacie tekstowym, gdzie jedna linijka odpowiada jednemu zdjęciu gazety. Adnotacje dla poszczególnych treści wizualnych oddzielone są separatorem. Przetworzone adnotacje przechowywane są w folderze 'data', który dodatkowo rozbity jest na 3 foldery reprezentujące konkretne zbiory danych (treningowy, walidacyjny lub testowy). Co istotne jedno zdjęcie gazety nie może być jednocześnie elementem więcej niż jednego zestawu danych. Twórcy projektu Newspaper Navigator umieścili skolekcjonowane obrazy na internetowym nośniku danych Amazon S3, do ich pobrania zbudowany został prosty web scraper przy użyciu biblioteki 'requests'. W sumie pobrano stamtąd 3,559 zdjęć o wysokiej rozdzielczości. Liczba zdjęć przypadająca na każdy ze zbiorów danych wygląda następująco: +\begin{table}[h!] + \centering + \begin{tabular}{c c c} + \toprule + \multicolumn{3}{c}{Liczebność zbioru} \\ + treningowego & walidacyjnego & testowego \\ + \toprule + 2,630 & 215 & 712\\ + \bottomrule + \end{tabular} +\end{table} +\newline +Z kolei rozkład odpowiadającym im adnotacją prezentuje się w ten sposób: +\begin{table}[h!] + \centering + \begin{tabular}{c c c c c} + \toprule + Etykieta & \multicolumn{4}{c}{Liczebność zbioru} \\ + & ogółem & treningowego & walidacyjnego & testowego \\ + \toprule + Tytuły & 27,868 & 20,528 & 1,651 & 5,689\\ + \midrule + Reklamy & 13,581 & 9,910 & 813 & 2,858\\ + \midrule + Fotografie & 4,254 & 3,135 & 240 & 879\\ + \midrule + Komiksy & 1,443 & 1,070 & 108 & 265\\ + \midrule + Ilustracje & 1,048 & 786 & 56 & 206\\ + \midrule + Mapy & 215 & 170 & 11 & 34\\ + \bottomrule + Suma & 48,409 & 35,599 & 2,879 & 9,931\\ + \bottomrule + \end{tabular} +\end{table} +\\ +Porównując tabele przedstawione powyżej z tabelami odnoszącymi się do klas występujących w projekcie Newspaper Navigator, które przedstawione zostały w poprzednim rozdziale, zauważyć można brak jednej klasy, a mianowicie klasy "Karykatura". W rzeczywistości treści wizualne należące do tej klasy były bardzo podobne do tych należących do klasy "Komiksy", dlatego też podjęta została decyzja o połączeniu tych dwóch klas. Obserwacje, które wcześniej były dość kłopotliwe dla modelu, po tej zamianie, przestały sprawiać trudności na etapie klasyfikacji. Decyzja ta pozytywnie wpłynęła na ogólną wydajność modelu. Praktycznie wszystkie obserwacje dla etykiety "Karykatura" przedstawione były i tak w formie komiksu, o czym też informuje nas dość dobitnie angielska nazwa tej etykiety: "editorial cartoon". Rozbijanie klasy "Komiks" na podkategorię miało by zdecydowanie więcej sensu, gdyby stworzony model miał zajmować się jedynie klasyfikacją różnych rodzajów komiksów, w tym jednak wypadku powodowało to jedynie zaniżenie wyników klasyfikacji zarówno dla etykiet "Komiks" jak i "Karykatura" ze względu na zbyt duże podobieństwo tych klas. Jeśli chodzi o samą liczebność adnotacji zbiór Newspaper Navigator oraz ten użyty na potrzeby tego eksperymentu jest identyczny, co warto podkreślić, ponieważ pozwoli to swobodnie porównywać jego wyniki z wynikami pierwowzoru. Adnotacje, które zostały pobrane z repozytorium Newspaper Navigator odpowiadały przeskalowanym już na potrzeby projektu zdjęciom, dlatego też pojawiła się potrzeba dostosowania ich do wysokiej rozdzielczości zdjęć które zostały pozyskane przez web scraper. Oryginalne adnotacje zawierały również rozmiar zdjęcia któremu odpowiadają, dlatego też nie było większych problemów ze stworzeniem algorytmu do skalowania. W przeciwnym razie były by one niemal nieużyteczne. Niektóre adnotacje znajdowały się poza granicami pozyskanych obrazów, co musiało być efektem błędów wolontariuszy, którzy zajmowali się adnotacją danych w projekcie Newspaper Navigator. Wszystkie tego rodzaju obserwacje zostały poprawione w taki sposób, że zostały nałożone na nie odpowiednie ograniczenia. Statystyki tego procederu przedstawia poniższa tabela: +\begin{table}[h!] +\centering + \begin{tabular}{c c c c c} + \toprule + Problem & & Liczebność zbioru: & & Rozwiązanie \\ + & treningowego & walidacyjnego & testowego & \\ + \midrule + x0 < 0 & 3 & 0 & 1 & x0 = 0 \\ + \midrule + y0 < 0 & 1 & 0 & 1 & y0 = 0 \\ + \midrule + x1 > szer. & 19 & 2 & 4 & x1 = szer. \\ + \midrule + y1 > wys. & 3 & 0 & 1 & y1 = wys. \\ + \bottomrule + \end{tabular} +\end{table} +\\ +Liczebności powyższych błędów w porównaniu do całości zbioru jasno wskazują, że odsetek błędów jest znikomy. Na poniższych rycinach przedstawione zostały przykładowe zdjęcia wraz z adnotacjami już po etapie przetwarzania danych: + +\begin{figure}[h!] + \label{ fig7} + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=1\linewidth]{images/1.png} + \caption{Przykład 1} + \vspace{4ex} + \end{minipage}%% + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=1\linewidth]{images/3.png} + \caption{Przykład 2} + \vspace{4ex} + \end{minipage} + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=1\linewidth]{images/5.png} + \caption{Przykład 3} + \vspace{4ex} + \end{minipage}%% + \begin{minipage}[b]{0.5\linewidth} + \centering + \includegraphics[width=1\linewidth]{images/not_complete.png} + \caption{Przykład 4} + \vspace{4ex} + \end{minipage} +\end{figure} +\clearpage + +Jak nie trudno zauważyć większość treści wizualnych została zaznaczona na zdjęciach gazet, choć niestety zazwyczaj nie są to wszystkie treści, jakie mogłyby zostać oznaczone. Praktycznie na każdym zdjęciu gazety da się znaleźć brakujące elementy. Jest to zdecydowanie czynnik, który pogarsza otrzymywane później wyniki. Model dostaje wówczas sprzeczne informacje, ponieważ raz to co posiada adnotacje jest przykładowo mapą, a raz bardzo podobna treść nie posiada adnotacji i ma być przez model z założenia traktowana jako tło. Im lepszej jakości danymi dysponujemy tym lepszych rezultatów możemy się później spodziewać po modelu. Dlatego też można by sformułować tezę, że jeśli chodzi o ewentualną możliwość poprawy wyników przy przyszłych pracach nad tym podejściem, należało by się skupić na poprawię jakości danych w znacznie większym stopni, aniżeli na poprawianiu działania samego modelu detekcji. + + +\section{Model wykrywający zawartość wizualną w gazetach} +Model detekcji treści wizualnych stworzony na potrzeby tej pracy dyplomowej został napisany korzystając z języka programowania Python, a dokładniej przy użyciu biblioteki programistycznej PyTorch, która pozwala na tworzenie i korzystanie z modeli opartych o sztuczne sieci neuronowe. Finalne podejście do modelowania opisywanego zagadnienia korzysta z konkretnej architektury głębokich sieci neuronowych, a mianowicie Faster R-CNN z wykorzystaniem wstępnie przetrenowanej sieci ResNet-50 jako szkieletu rozwiązania. Wybór finalnego podejścia nie był zagadnieniem trywialnym, wymagał bowiem przetestowania wielu różnych algorytmów oraz technik modelowania i zajął większość czasu poświęconego na pisanie kodu całego programu. Skrót R-CNN oznacza Region-based Convolutional Neural Network co w tłumaczeniu na język polski oznacza konwolucyjną sieć neuronową opartą o regiony. Przedrostek Faster oznacza zaś jej kolejne ulepszenie. Pierwsza implementacja tej architektury nosiła nazwę R-CNN, następna Fast R-CNN, zaś aktualnie najnowsza nosi nazwę właśnie Faster R-CNN \cite{Bharati2019Aug}. +\clearpage + +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/fasterrcnnn.png} +\caption{Architektura Faster R-CNN \cite{Ren2015Jun}} +\end{figure} +\\ +Architektura Faster R-CNN zaczyna się od konwolucyjnej sieci neuronowej używanej do proponowania regionów (z ang. Region Proposal Network - RPN), które następnie poddawane są klasyfikacji. W przypadku tego podejścia, jak już zostało to wcześniej wspomniane, użyta została w tym celu ResNet-50. Sposób w jaki został stworzony ResNet pozwala na trenowanie bardzo głębokich sieci neuronowych (w tym wypadku jest to, jak wskazuje już sama nazwa, 50 warstw) z pominięciem towarzyszących zazwyczaj temu problemów jakimi są zjawiska zanikającego gradientu (z ang. vanishing gradient) oraz eksplodującego gradientu (z ang. exploding gradient). Pierwsze z nich dotyczy niewielkich zmian wag sieci podczas procesu uczenia, co w najgorszym przypadku praktycznie stopuje trening całej sieci, drugi zaś jest zjawiskiem przeciwnym, co z kolei powoduje ogromne zmiany wag przez co osiągany poziom błędu drastycznie wzrasta. Jak nie trudno zauważyć oba te zjawiska są wysoce niepożądane. ResNet pozwolił na rozwiązywanie jeszcze bardziej skomplikowanych problemów z dziedziny komputerowej wizji (z ang. computer vision) niż było to możliwe wcześniej. W teorii im głębsza jest sieć (im więcej warstw posiada) tym lepiej i łatwiej uczy się ona trudniejszych, bardziej zaawansowanych wzorców, a gdy do tego wyeliminujemy towarzyszące temu problemy takie jak eksplodujący i zanikający gradient, wówczas otrzymamy niezwykle potężne narzędzie, jakim właśnie jest ResNet. Główna koncepcja tego podejścia skupia się w okół tego, że każda warstwa jest podawana nie tylko do warstwy następnej sieci, ale także bezpośrednio do kolejnych warstw pomijając kilka warstw pomiędzy nimi \cite{He2015Dec}. Mechanizm ten został zaprezentowany na poniższym obrazku: +\clearpage + +\begin{figure}[h!] +\centering +\includegraphics[width=0.8\textwidth]{images/resnt.png} +\caption{Koncepcja sieci ResNet \cite{He2015Dec}} +\end{figure} +\\ +RPN wyposażona jest zarówno w klasyfikator jak i regresor. Klasyfikator ma za zadanie określić prawdopodobieństwo czy w zaproponowanym regionie znajduje się szukany obiekt docelowy, zaś regresor określa współrzędne tego regionu. Po mapie cech przesuwa się prostokątne okno o rozmiarze n x n. Dla każdego okna generowanych jest K propozycji regionów o różnych kształtach tzw. kotwic (z ang. anchors). W celu wytrenowania RPN każdej propozycji regionu przypisywana jest przez binarny klasyfikator etykieta, czy na danym obszarze znajduje się obiekt, czy tło. Ta etykieta przypisywana jest na podstawie, wcześniej omawianej już, metryki IoU. Etykietę obiektu otrzymują propozycje regionów, dla których wartość tej metryki jest większa niż 0.7 albo między 0.5 i 0.7 włącznie, ale jedynie w tedy kiedy dla danego okna nie ma kotwicy z wynikiem większym niż 0.7. Następnie na finalnych propozycjach regionów przeprowadzany jest pooling, którego cel jest dokładnie taki sam jak zostało to omówione w rozdziale drugim przy okazji opisu konwolucyjnych sieci neuronowych \cite{Ren2015Jun}. +\begin{figure}[h!] +\centering +\includegraphics[width=0.6\textwidth]{images/rpn.png} +\caption{Koncepcja przesuwającego się okna i kotwic \cite{Ren2015Jun}} +\end{figure} +\\ +Ostatnim etapem architektury Faster R-CNN jest detektor, którego zadaniem jest predykcja klasy dla danego regionu. + +Tak jak zostało wspomniane to już wcześniej użyta architektura składa się z wstępnie przetrenowanej sieci ResNet-50, co oznacza że początkowe wagi nie zostały wybrane losowo, a były wagami wyjściowymi tego modelu wytrenowanego na konkretnych danych. W tym przypadku był to sławny zbiór danych ImageNet \cite{deng2009imagenet}. Jednakże Wszystkie warstwy tej sieci zostały dodatkowo przetrenowane również na posiadanym zbiorze danych. Detektor Faster R-CNN został całkowicie wymieniony i również wytrenowany specjalnie dla omawianego zbioru danych. Cały trening finalnej wersji modelu składający się z 35 epok zajmuje w przybliżeniu 3.5 godziny. Wejściem modelu są zdjęcia gazet w kolorze czarno białym przeskalowane do rozmiaru 1024 x 1024 podzielone na 20-elementowe partie (z ang. batches). Rozmiar zdjęć do którego były one skalowane, podobnie zresztą jak pozostałe parametry, wybrany został metodą prób i błędów. Długość kroku, wytłumaczona podczas drugiego rozdziału wynosiła 0.00035, dodatkowo była ona dwukrotnie zmniejszana co każde 7 epok wykorzystując do tego planistę tempa uczenia (z ang. learning rate scheduler), aby uniknąć zbyt dużego kroku w późniejszych etapach uczenia powodującego pomijanie minimów optymalizowanej funkcji straty. Podane wartości parametrów zapewniły najlepsze wyniki podczas przeprowadzania eksperymentów treningowych. Do optymalizacji parametrów procesu uczenia się użyty został jeden z najpopularniejszych i najwydajniejszych aktualnie dostępnych optymalizatorów, Adam. Swoją popularność zawdzięcza on przede wszystkim szybkości i małej złożoności obliczeniowej, ponadto jest to algorytm adaptacyjny co oznacza, że oblicza on indywidualne tempo uczenia dla różnych parametrów. +\newline + +Wyniki omówionej wcześniej już metryki mAP wyliczonej na postawie predykcji modelu na dokładnie tym samym zbiorze testowym używanym do demonstracji wyników projektu Newspape Navigator prezentuje poniższa tabela: +\begin{table}[h!] +\centering + \begin{tabular}{c c} + \toprule + Kategoria & Wartość metryki AP \\ + \toprule + Fotografie & 0.7323 \\ + \midrule + Ilustracje & 0.3512 \\ + \midrule + Mapy & 0.7659 \\ + \midrule + Komiksy & 0.7189 \\ + \midrule + Tytuły & 0.8918 \\ + \midrule + Reklamy & 0.8502 \\ + \bottomrule + Średnia (mAP) & 0.7184 \\ + \bottomrule + \end{tabular} + \end{table} + +Porównując otrzymane wyniki z rezultatami osiągniętymi przez naukowców pracujących nad projektem Newspaper Navigator zauważyć można, iż dla każdej klasy wytworzony w ramach tej pracy magisterskiej model spisuje się znacznie lepiej. Świadczy o tym również średni wynik metryki, który wynosi $\approx0.72$. Dla porównania w Newspaper Navigator wynik ten wynosił zaledwie $\approx0.63$. Najgorsze wyniki dotyczą klasy 'Ilustracja' i wynoszą jedynie $\approx0.35$, co ciekawe nie jest to najrzadsza klasa w zbiorze, ponieważ takową są mapy. Najlepiej zaś model radzi sobie z etykietą 'Tytuły', co nie może dziwić, ponieważ jest to najliczniejsza i chyba też najbardziej charakterystyczna klasa występująca w tym zbiorze. Zawiera ona jedynie tekst, najczęściej znacznie większy niż inne litery znajdujące się w gazecie, a także zawierający dużo wolnej przestrzeni w okół tekstu. Dlatego też jest to zrozumiałe, iż właśnie ta klasa wypada najlepiej. Ich liczebność jest pięciokrotnie mniejsza niż ilustracji, a wyniki zaś są aż ponad dwukrotnie lepsze. Przykładowe poprawne predykcje dla każdej występującej w zbiorze klasy przedstawione zostały poniżej: +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/adv2.png} + \caption{Reklama} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/map3.png} + \caption{Mapa} + \end{minipage} +\end{figure} +\begin{figure}[h!] + \centering + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/ilustration4.png} + \caption{Ilustracja} + \end{minipage}\hfill + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/head.png} + \caption{Tytuł} + \end{minipage}\hfill + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/photo.png} + \caption{Fotografia} + \end{minipage} +\end{figure} +\clearpage +\begin{figure}[h!] +\centering +\includegraphics[width=0.9\textwidth]{images/cart.png} +\caption{Komiks} +\end{figure} + +Jeśli chodzi o błędy jakie popełnia model to analizując wyniki, zauważyć można, że często problematyczne staje się odróżnienie przez niego ilustracji od fotografii. Nie jest to jednak zaskakujące, ponieważ nawet kolokwialnie mówiąc ludzkie oko może mieć z tym zadaniem problem w omawianym zbiorze. Opisane zjawisko przedstawiają poniższe 3 predykcje: +\begin{figure}[h!] + \centering + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=0.7\textwidth]{images/ilu_phot.png} + \caption{Błąd, przykład 1} + \end{minipage}\hfill + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=0.75\textwidth]{images/ilu_phot2.png} + \caption{Błąd, przykład 2} + \end{minipage}\hfill + \begin{minipage}{0.3\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/ilu_phot3.png} + \caption{Błąd, przykład 3} + \end{minipage} +\end{figure} + +Kolejny przykładowy zaobserwowany problem to nierównomierność niektórych wyników, pomimo bardzo dużego podobieństwa między treściami wizualnymi które zostały wykryte i tymi które nie zostały, model zdaje się niektóre z nich pomijać. Przykłady o których mowa zlokalizowane są na kolejnej stronie. Na drugim z nich pomimo opisywanego w tym akapicie problemu, dodatkowo jesteśmy świadkami także problemu opisanego w akapicie wyżej. + +\begin{figure}[h!] +\centering +\includegraphics[width=0.7\textwidth]{images/err.png} +\caption{Błąd, przykład 4} +\end{figure} + +\begin{figure}[h!] +\centering +\includegraphics[width=0.8\textwidth]{images/err1.png} +\caption{Błąd, przykład 5} +\end{figure} +\clearpage + +Na tej i następnych stronach przedstawione zostały przykłady zdjęć gazet, dla których wszystkie możliwe wizualny treści jakie znajdowały się na obrazach został przez model wykryte, a także poprawnie przypisane do odpowiednich klas. Niestety taki przykładów jest względnie mało, prawie zawsze przynajmniej jednej treści brakuje. +\begin{figure}[h!] +\centering +\includegraphics[width=0.9\textwidth]{images/full11.png} +\caption{Cała wizualna treść poprawnie wykryta i zaklasyfikowana, przykład 1} +\end{figure} +\clearpage + +\begin{figure}[h!] +\centering +\includegraphics[width=1\textwidth]{images/ful79.png} +\caption{Cała wizualna treść poprawnie wykryta i zaklasyfikowana, przykład 2} +\end{figure} +\clearpage + +\begin{figure}[h!] +\centering +\includegraphics[width=0.9\textwidth]{images/full4.png} +\caption{Cała wizualna treść poprawnie wykryta i zaklasyfikowana, przykład 3} +\end{figure} + +Poniżej zaś przygotowane zostało zestawienie predykcji (obrazki po lewej stronie) z oczekiwanymi rezultatami (obrazki po prawej stronie). Na porównaniu tym widzimy, że model nie tylko spełnia oczekiwane rezultaty, ale także ma tendencje do zaznaczania nowych treści, które nie były wcześniej oznaczone w adnotacjach do zbioru. +\clearpage + +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/pred.png} + \caption{Predykcja, przykład 1} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/real.png} + \caption{Oczekiwania, przykład 1} + \end{minipage} +\end{figure} +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/pred1.png} + \caption{Predykcja, przykład 2} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/real1.png} + \caption{Oczekiwania, przykład 2} + \end{minipage} +\end{figure} +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/pred2.png} + \caption{Predykcja, przykład 3} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/real2.png} + \caption{Oczekiwania, przykład 3} + \end{minipage} +\end{figure} +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/pred3.png} + \caption{Predykcja, przykład 4} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/real3.png} + \caption{Oczekiwania, przykład 4} + \end{minipage} +\end{figure} +\clearpage + +Dla zaspokojenia ciekawości model został również przetestowany na względnie nowej, oczywiście w odniesieniu do posiadanego zbioru, gazecie. Dodatkowo nie była to gazeta pochodząca ze Stanów Zjednoczonych, a wydawany na terenie naszego kraju "Głos Wielkopolski". Niestety, jak zresztą można było się tego spodziewać, wyniki predykcji prezentują się dość mizernie, choć są pewne przypadki dobrego dopasowania. Przed predykcją zdjęcia te zostały odpowiednio przerobione tak jak miało to miejsce dla zbioru Newspaper Navigator, między innymi ich kolor został zmieniony na czarno-biały. Na pierwszym zdjęciu 4 z 12 predykcji można uznać jako trafione, są to kolejno idąc od góry tytuł "Przez Wielkopolskę przejdzie 26. Blues Express!", tytuł "W środę w stan spoczynku ma przejść kilkunastu sędziów i prezes SN", reklama Lotto, a także fotografia policjanta w radiowozie. Pozostałe predykcje, nie mają większego sensu. Ciekawe jednak są dolne predykcje, ponieważ dziwić może fakt, iż nie zostały one sklasyfikowane jako tytuł lecz reklama. Na pierwszy rzut oka wydawać się może, że ich struktura znacznie bardziej pasuje właśnie do etykiety 'Tytuł'. +\begin{figure}[h!] +\centering +\includegraphics[width=0.72\textwidth]{images/nowa1.png} +\caption{Głos Wielkopolski, przykład 1} +\end{figure} +\clearpage + +Przykład drugi zaś wygląda nieco lepiej ponieważ aż 5 z 6 predykcji jest w miarę sensowna, jedyną nie trafioną klasyfikacją jest reklama na samym dole. Pominięta została jednak spora część treści wizualnych zgromadzonych na zdjęciu. +\begin{figure}[h!] +\centering +\includegraphics[width=0.72\textwidth]{images/nowa2.png} +\caption{Głos Wielkopolski, przykład 2} +\end{figure} + +Jak widać powyżej, stworzone rozwiązanie nie jest dość uniwersalne, jeśli chodzi o samo ponowne użycie tego konkretnego modelu. Jednakże, cała aplikacja przygotowana została tak, aby móc przepuścić przez nią dowolny zbiór danych o tej samej strukturze i móc na nim swobodnie wytrenować swój własny model, a jego wyniki przepuścić dalej przez kolejne etapy programu. + + +\section{Wyszukiwarka obrazów na bazie wyników z OCR} +Dokładnie tak jak obrazował to przedstawiony na początku tego rozdziału diagram, następnym krokiem całego procesu jest kadrowanie treści wizualnych z oryginalnych zdjęć gazet składających się na testowy zbiór danych. Wszystkie wycięte obrazki zapisywane są w odpowiednim folderze i w kolejnym kroku posłużą jako wejście do systemu OCR. +\newline + +Zanim jednak tekst znajdujący się na wykadrowanych treściach wizualnych zostanie wyekstrahowany, zdjęcia muszą zostać poddane odpowiedniemu przetworzeniu. W przypadku kiedy obrazy były poddawane działaniu OCR bez stosownego przystosowania wyniki były dramatycznie gorsze. Elektroniczne obrazy będące efektem skanowania rzeczywistych dokumentów często posiadają nierównomierne tło, miejscami może być ono ciemniejsze, a miejscami jaśniejsze w zależności od stanu i ułożenia strony skanowanego dokumentu. Aby wyekstrahować tekst należy przede wszystkim zadbać o jak największy kontrast między tłem, a potencjalnymi znakami, aby system łatwiej mógł dopasować je do znanych mu wzorców, nie zważając na zniekształcenia oryginalnego zdjęcia. Proces transformacji treści wizualnych zostanie przedstawiony na poniższym przykładzie. Pierwszym krokiem jaki musi zostać podjęty jest zatem upewnienie się czy dany obraz na pewno jest w reprezentacji binarnej, tj. czy jest czarno-biały. +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/o1.png} +\caption{Oryginalny obraz} +\end{figure} +\\ +Następnie obraz zostaje poddany operacji matematycznej zwanej dylatacją (z ang. dilatation), w przypadku obrazów polega ona na tym, że wartość piksela wyjściowego jest maksymalną wartością wszystkich pikseli w jego sąsiedztwie. Na obrazie binarnym piksel ustawiony jest na 1, wówczas gdy którykolwiek z sąsiednich pikseli ma wartość 1 \cite{BibEntry2022Sep}. jest to pierwszy krok, aby pozbyć się tekstu, a pozostawić tylko tło. +\clearpage +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/o2.png} +\caption{Obraz po dylatacji} +\end{figure} +\\ +Drugi krok to zastosowanie filtra o nazwie rozmycie medianą (z ang. median blur). Filtr ten oblicza medianę z wartości sąsiadujących ze sobą pikseli, bardzo mocno wygładzając obraz, praktycznie pozbywając się z niego pierwotnego tekstu \cite{BibEntry2022Sep2}. +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/o3.png} +\caption{Obraz po rozmyciu medianą} +\end{figure} +\\ +Po tej operacji należy obliczyć różnicę między oryginalnym obrazem a nowo utworzonym tłem. Piksele, które są identyczne będą czarne (różnica $\approx 0$), tekst będzie zaś biały (duża różnica). +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/o4.png} +\caption{Obraz po wyliczeniu różnicy} +\end{figure} +\\ +Ostatnim krokiem jest normalizacja, służy ona do zwiększenia kontrastu, co pomaga w procesie ekstrakcji treści z obrazu, a także do usunięcia z obrazu szumu \cite{ContributorstoWikimediaprojects2022Apr2}. +\clearpage +\begin{figure}[h!] +\centering +\includegraphics[width=0.5\textwidth]{images/o5.png} +\caption{Znormalizowany obraz} +\end{figure} +\\ +Tak przygotowane obrazy przepuszczane są przez system OCR. Na potrzeby przygotowywanej pracy magisterskiej do tego zadania użyty został Tesseract OCR. Jest to narzędzie typu Open Source, które posiada swoją implementacje w postaci biblioteki języka programowania Python. Narzędzie to zostało opracowane przez firmę Google \cite{10.5555/1288165.1288167}. Tekst będący wynikiem działania OCR jest następnie czyszczony i umieszczany w bazie danych SQLite, a z jego treści ekstrahowane są słowa kluczowe. Do pozyskania słów kluczowych wykorzystany został przetrenowany oparty na sztucznych sieciach neuronowych model KeyBERT \cite{grootendorst2020keybert}. +\newline + +Finalnym produktem niniejszej pracy magisterskiej jest interfejs użytkownika, który pozwala na konstruowanie zapytań do bazy danych i wyświetlanie rezultatów, z możliwością podejrzenia szczegółów każdego z nich. Do obsługi zapytań użytkownika wykorzystana zostało narzędzie o nazwie Whoosh zaimplementowane w języku programowania Python. Pozwala ono na indeksowanie i wyszukiwanie pełnotekstowe \cite{BibEntry2022Sep3}. Założeniem wyszukiwania pełnotekstowego jest możliwość sprawnego i wydajnego przeszukiwania zbiorów danych. Dzieje się to według określonych kryteriów uwzględniających odmianę wyrazów, błędy ortograficzne oraz synonimy. Dokumenty zwracane są na podstawie z góry określonej oceny ich dopasowania \cite{Daniel2019Nov}. Ten element całej aplikacji w nawiązaniu do pierwowzoru nazwany został News Finder, co w tłumaczeniu na język polski oznacza Poszukiwacz Wiadomości. Działanie interfejsu graficznego przedstawione zostało poniżej w postaci galerii zrzutów ekranu: +\clearpage + +\begin{figure}[h!] + \centering + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/gui1.png} + \caption{Widok ekranu startowego} + \end{minipage}\hfill + \begin{minipage}{0.45\textwidth} + \centering + \includegraphics[width=1\textwidth]{images/gui2.png} + \caption{Widok ekranu głównego} + \end{minipage} +\end{figure} + +Na pierwszym zdjęciu znajduje się ekran startowy, użytkownik otrzymuje powitalną wiadomość oraz prośbę o cierpliwość, ponieważ komponenty aplikacji są aktualnie przygotowywane. W między czasie, kiedy użytkownik czeka, przygotowywane są dane, aby po chwili możliwe było obsługiwanie zapytań. Proces ten nie jest długi, trwa około 10 sekund, a po tym czasie program jest gotowy do pełnego użytku. Na drugim obrazku prezentowany jest już widok głównego ekranu aplikacji. Na samej górze znajduje się nazwa oraz logo programu, a tuż pod nim miejsce na wpisywanie zapytań. Wyszukiwanie rozpoczyna się po kliknięciu w przycisk 'Search'. +\begin{figure}[h!] +\centering +\includegraphics[width=0.72\textwidth]{images/gui3.png} +\caption{Widok ekranu wyników wyszukiwania} +\end{figure} +\\ +Po wpisaniu dowolnej frazy lub też kilku fraz zostaną zwrócone nam ikony treści wizualnych pasujące do danego zapytania. Na powyższym zrzucie ekranu zwrócone zostały wyniki dla przykładowego zapytania 'sausage', co w języku polskim oznacza wyrób wędliniarski, a konkretniej kiełbasę. Dzięki zaimplementowanemu w rozwiązaniu narzędziu do logowania wiadome jest, że zostało wyświetlone 10 treści wizualnych dla tego zapytania, jego obsługa z perspektywy znalezienia odpowiednich indeksów trwała jedynie 0.0005 sekundy. Czas zaś żeby wyświetlić wszystkie 10 obrazków to około 0.5 sekundy. Na samej górze, na pasku aplikacji, pokazuje się treść aktualnie obsługiwanego zapytania. Aby kontynuować przeszukiwanie bazy danych, można od razu zacząć wpisywać kolejne frazy zatwierdzając je przyciskiem 'Search' lub też najpierw nacisnąć przycisk 'Clear results', aby wymazać prezentowane rezultaty i powrócić do widoku głównego aplikacji. Treść aktualnego zapytania będzie pokazywała się na pasku, aż do momentu wybrania jednej z tych dwóch opcji. Jeżeli istnieje potrzeba, aby dowiedzieć się więcej szczegółów na temat jednego z prezentowanych wyników wystarczy w niego kliknąć, wówczas oczom użytkownika, pokaże się następujący widok: +\begin{figure}[h!] +\centering +\includegraphics[width=0.72\textwidth]{images/gui4.png} +\caption{Widok ekranu szczegółowego dla wybranego wyniku wyszukiwania} +\end{figure} +\\ +Szczegółowy widok przedstawia nam powiększoną wersje danej treści wizualnej, a także pola: słowa kluczowe (Keywords), etykieta przekazana przez model (Label), tekst pochodzący z OCR (OCR text) oraz nazwę oryginalnego zdjęcia gazety z której pochodzi dany wynik (Origin file). Dodatkowo na górnym pasku aplikacji znajduje się poza treścią zapytania, również nazwa pliku przedstawiającego zaznaczoną treść wizualną. + + +\section{Podsumowanie podejścia i miejsce do poprawy} +Całe przedstawione na wcześniejszych stronach podejście, począwszy od przygotowania danych, aż do końcowej warstwy wizualnej zostało zrealizowane zgodnie z oczekiwaniami, a nawet można by rzecz że znacząco przewyższyło postawione cele. Początkowo praca miała skupić się w zasadzie tylko na modelu, natomiast kolejne etapy potraktować jako najmniej ważne, tzn. miała zawierać jedynie prosty skrypt do wizualizacji wyników. Również same wyniki predykcji miały tylko jak najbardziej zbliżyć się do pierwowzoru, a jak zostało tu już pokazane, wyniki Newspaper Navigator zostały znacząco poprawione. W toku prac podejście mocno ewoluowało i ostatecznie stworzone zostało w pełni funkcjonalne narzędzie do pełnotekstowego przeszukiwania dużych zbiorów zdigitalizowanych starych gazet, uprzednio wytrenowawszy na nich model detekcji oparty na głębokim uczeniu maszynowym. Co bardzo ważne, dysponując dowolnym zbiorem danych o takiej samej strukturze jak prezentowany w ramach tej pracy zbiór danych Newspaper Navigator, będzie można bez większych problemów stworzyć identyczną aplikację, zawierającą jednak zupełnie inne dane początkowe. Jest to możliwe dzięki położeniu dużego nacisku od samego początku pracy na generalizację rozwiązania. Jeśli chodzi o elementy całościowego podejścia, które mogłyby zostać poprawione przy kolejnych aktualizacjach oprogramowania, to z pewnością byłyby to kwestie optymalizacyjne. Ze względu na fakt, że jest to praca magisterska, największy nacisk nałożony został na działającą wersję oprogramowania. Kwestie optymalizacyjne zostały zepchnięte na dalszy plan, co jednocześnie nie oznacza, że nie były w ogóle brane pod uwagę, czy że cała aplikacja działa zatrważająco wolno. Jest to jedynie wskazówka, że niektóre procesy można by było zoptymalizować, aby zapewnić przyszłym użytkownikom aplikacji jeszcze lepsze doznania. \ No newline at end of file diff --git a/images/1.png b/images/1.png new file mode 100644 index 0000000..a5d6dff Binary files /dev/null and b/images/1.png differ diff --git a/images/3.png b/images/3.png new file mode 100644 index 0000000..7472704 Binary files /dev/null and b/images/3.png differ diff --git a/images/5.png b/images/5.png new file mode 100644 index 0000000..1f98ae4 Binary files /dev/null and b/images/5.png differ diff --git a/images/adv2.png b/images/adv2.png new file mode 100644 index 0000000..65c2322 Binary files /dev/null and b/images/adv2.png differ diff --git a/images/advert.png b/images/advert.png new file mode 100644 index 0000000..4ea9820 Binary files /dev/null and b/images/advert.png differ diff --git a/ca_base.png b/images/ca_base.png similarity index 100% rename from ca_base.png rename to images/ca_base.png diff --git a/images/cart.png b/images/cart.png new file mode 100644 index 0000000..c6e3c0b Binary files /dev/null and b/images/cart.png differ diff --git a/images/cnn.png b/images/cnn.png new file mode 100644 index 0000000..0d910b0 Binary files /dev/null and b/images/cnn.png differ diff --git a/images/conf_mat.png b/images/conf_mat.png new file mode 100644 index 0000000..dc50b98 Binary files /dev/null and b/images/conf_mat.png differ diff --git a/cup_logo-eps-converted-to.pdf b/images/cup_logo-eps-converted-to.pdf similarity index 100% rename from cup_logo-eps-converted-to.pdf rename to images/cup_logo-eps-converted-to.pdf diff --git a/digital_library.png b/images/digital_library.png similarity index 100% rename from digital_library.png rename to images/digital_library.png diff --git a/digital_library1.png b/images/digital_library1.png similarity index 100% rename from digital_library1.png rename to images/digital_library1.png diff --git a/dpi.png b/images/dpi.png similarity index 100% rename from dpi.png rename to images/dpi.png diff --git a/images/elem_search_nn.png b/images/elem_search_nn.png new file mode 100644 index 0000000..edf4592 Binary files /dev/null and b/images/elem_search_nn.png differ diff --git a/images/elem_search_nn_2_wrong.png b/images/elem_search_nn_2_wrong.png new file mode 100644 index 0000000..b8906e7 Binary files /dev/null and b/images/elem_search_nn_2_wrong.png differ diff --git a/images/elem_search_nn_3_wrong.png b/images/elem_search_nn_3_wrong.png new file mode 100644 index 0000000..7d5db77 Binary files /dev/null and b/images/elem_search_nn_3_wrong.png differ diff --git a/images/err.png b/images/err.png new file mode 100644 index 0000000..efc3fd1 Binary files /dev/null and b/images/err.png differ diff --git a/images/err1.png b/images/err1.png new file mode 100644 index 0000000..2c8dc7d Binary files /dev/null and b/images/err1.png differ diff --git a/images/err2.png b/images/err2.png new file mode 100644 index 0000000..f764136 Binary files /dev/null and b/images/err2.png differ diff --git a/images/fasterrcnnn.png b/images/fasterrcnnn.png new file mode 100644 index 0000000..560d681 Binary files /dev/null and b/images/fasterrcnnn.png differ diff --git a/images/for_prop.png b/images/for_prop.png new file mode 100644 index 0000000..94b3647 Binary files /dev/null and b/images/for_prop.png differ diff --git a/images/ful2.png b/images/ful2.png new file mode 100644 index 0000000..c0d32af Binary files /dev/null and b/images/ful2.png differ diff --git a/images/ful3.png b/images/ful3.png new file mode 100644 index 0000000..2824290 Binary files /dev/null and b/images/ful3.png differ diff --git a/images/ful77.png b/images/ful77.png new file mode 100644 index 0000000..ee0123a Binary files /dev/null and b/images/ful77.png differ diff --git a/images/ful78.png b/images/ful78.png new file mode 100644 index 0000000..bd922f2 Binary files /dev/null and b/images/ful78.png differ diff --git a/images/ful79.png b/images/ful79.png new file mode 100644 index 0000000..bb320b0 Binary files /dev/null and b/images/ful79.png differ diff --git a/images/full1.png b/images/full1.png new file mode 100644 index 0000000..3507399 Binary files /dev/null and b/images/full1.png differ diff --git a/images/full11.png b/images/full11.png new file mode 100644 index 0000000..4b74de4 Binary files /dev/null and b/images/full11.png differ diff --git a/images/full2.png b/images/full2.png new file mode 100644 index 0000000..93a34f9 Binary files /dev/null and b/images/full2.png differ diff --git a/images/full3.png b/images/full3.png new file mode 100644 index 0000000..d2f6820 Binary files /dev/null and b/images/full3.png differ diff --git a/images/full4.png b/images/full4.png new file mode 100644 index 0000000..c2c807a Binary files /dev/null and b/images/full4.png differ diff --git a/gazety_per_terytorium.png b/images/gazety_per_terytorium.png similarity index 100% rename from gazety_per_terytorium.png rename to images/gazety_per_terytorium.png diff --git a/google_books.png b/images/google_books.png similarity index 100% rename from google_books.png rename to images/google_books.png diff --git a/google_books_search.png b/images/google_books_search.png similarity index 100% rename from google_books_search.png rename to images/google_books_search.png diff --git a/images/gui1.png b/images/gui1.png new file mode 100644 index 0000000..87eb977 Binary files /dev/null and b/images/gui1.png differ diff --git a/images/gui2.png b/images/gui2.png new file mode 100644 index 0000000..4d7ed72 Binary files /dev/null and b/images/gui2.png differ diff --git a/images/gui3.png b/images/gui3.png new file mode 100644 index 0000000..93db2ad Binary files /dev/null and b/images/gui3.png differ diff --git a/images/gui4.png b/images/gui4.png new file mode 100644 index 0000000..95c4851 Binary files /dev/null and b/images/gui4.png differ diff --git a/images/head.png b/images/head.png new file mode 100644 index 0000000..5288b58 Binary files /dev/null and b/images/head.png differ diff --git a/images/ilu_phot.png b/images/ilu_phot.png new file mode 100644 index 0000000..5dbab4c Binary files /dev/null and b/images/ilu_phot.png differ diff --git a/images/ilu_phot2.png b/images/ilu_phot2.png new file mode 100644 index 0000000..baf5fe7 Binary files /dev/null and b/images/ilu_phot2.png differ diff --git a/images/ilu_phot3.png b/images/ilu_phot3.png new file mode 100644 index 0000000..63f1048 Binary files /dev/null and b/images/ilu_phot3.png differ diff --git a/images/ilustration.png b/images/ilustration.png new file mode 100644 index 0000000..f565e37 Binary files /dev/null and b/images/ilustration.png differ diff --git a/images/ilustration2.png b/images/ilustration2.png new file mode 100644 index 0000000..b047ec5 Binary files /dev/null and b/images/ilustration2.png differ diff --git a/images/ilustration3.png b/images/ilustration3.png new file mode 100644 index 0000000..4adb99f Binary files /dev/null and b/images/ilustration3.png differ diff --git a/images/ilustration4.png b/images/ilustration4.png new file mode 100644 index 0000000..f2fdb10 Binary files /dev/null and b/images/ilustration4.png differ diff --git a/images/iou.png b/images/iou.png new file mode 100644 index 0000000..862a2ad Binary files /dev/null and b/images/iou.png differ diff --git a/images/kernel_cnn_vis.png b/images/kernel_cnn_vis.png new file mode 100644 index 0000000..0e5ec38 Binary files /dev/null and b/images/kernel_cnn_vis.png differ diff --git a/images/kernels.png b/images/kernels.png new file mode 100644 index 0000000..38af7cc Binary files /dev/null and b/images/kernels.png differ diff --git a/images/lr.png b/images/lr.png new file mode 100644 index 0000000..3ab4cce Binary files /dev/null and b/images/lr.png differ diff --git a/images/map.png b/images/map.png new file mode 100644 index 0000000..bf0a6e1 Binary files /dev/null and b/images/map.png differ diff --git a/images/map1.png b/images/map1.png new file mode 100644 index 0000000..7e98040 Binary files /dev/null and b/images/map1.png differ diff --git a/images/map3.png b/images/map3.png new file mode 100644 index 0000000..6fe6ea9 Binary files /dev/null and b/images/map3.png differ diff --git a/metadan.png b/images/metadan.png similarity index 100% rename from metadan.png rename to images/metadan.png diff --git a/images/nn.png b/images/nn.png new file mode 100644 index 0000000..7e7c0fd Binary files /dev/null and b/images/nn.png differ diff --git a/images/nn_interface_bar.png b/images/nn_interface_bar.png new file mode 100644 index 0000000..0bf3f71 Binary files /dev/null and b/images/nn_interface_bar.png differ diff --git a/images/nn_interface_football.png b/images/nn_interface_football.png new file mode 100644 index 0000000..5048229 Binary files /dev/null and b/images/nn_interface_football.png differ diff --git a/images/nn_part_for_backprop.png b/images/nn_part_for_backprop.png new file mode 100644 index 0000000..b2c743a Binary files /dev/null and b/images/nn_part_for_backprop.png differ diff --git a/images/nn_pipeline.png b/images/nn_pipeline.png new file mode 100644 index 0000000..3ba2bf6 Binary files /dev/null and b/images/nn_pipeline.png differ diff --git a/images/not_complete.png b/images/not_complete.png new file mode 100644 index 0000000..83449fe Binary files /dev/null and b/images/not_complete.png differ diff --git a/images/nowa1.png b/images/nowa1.png new file mode 100644 index 0000000..7fd0871 Binary files /dev/null and b/images/nowa1.png differ diff --git a/images/nowa2.png b/images/nowa2.png new file mode 100644 index 0000000..f641923 Binary files /dev/null and b/images/nowa2.png differ diff --git a/images/o1.png b/images/o1.png new file mode 100644 index 0000000..0d8fb02 Binary files /dev/null and b/images/o1.png differ diff --git a/images/o2.png b/images/o2.png new file mode 100644 index 0000000..3b52cc1 Binary files /dev/null and b/images/o2.png differ diff --git a/images/o3.png b/images/o3.png new file mode 100644 index 0000000..6a02dde Binary files /dev/null and b/images/o3.png differ diff --git a/images/o4.png b/images/o4.png new file mode 100644 index 0000000..4d4dba4 Binary files /dev/null and b/images/o4.png differ diff --git a/images/o5.png b/images/o5.png new file mode 100644 index 0000000..2674555 Binary files /dev/null and b/images/o5.png differ diff --git a/ocr_scheme.png b/images/ocr_scheme.png similarity index 100% rename from ocr_scheme.png rename to images/ocr_scheme.png diff --git a/pdf_katolik.png b/images/pdf_katolik.png similarity index 100% rename from pdf_katolik.png rename to images/pdf_katolik.png diff --git a/images/photo.png b/images/photo.png new file mode 100644 index 0000000..202e182 Binary files /dev/null and b/images/photo.png differ diff --git a/polish_ca.png b/images/polish_ca.png similarity index 100% rename from polish_ca.png rename to images/polish_ca.png diff --git a/images/pool.png b/images/pool.png new file mode 100644 index 0000000..9868fc7 Binary files /dev/null and b/images/pool.png differ diff --git a/images/pred.png b/images/pred.png new file mode 100644 index 0000000..2ddfcbf Binary files /dev/null and b/images/pred.png differ diff --git a/images/pred1.png b/images/pred1.png new file mode 100644 index 0000000..1b9eca3 Binary files /dev/null and b/images/pred1.png differ diff --git a/images/pred2.png b/images/pred2.png new file mode 100644 index 0000000..d208b49 Binary files /dev/null and b/images/pred2.png differ diff --git a/images/pred3.png b/images/pred3.png new file mode 100644 index 0000000..9d2efad Binary files /dev/null and b/images/pred3.png differ diff --git a/images/real.png b/images/real.png new file mode 100644 index 0000000..ca109df Binary files /dev/null and b/images/real.png differ diff --git a/images/real1.png b/images/real1.png new file mode 100644 index 0000000..417fd70 Binary files /dev/null and b/images/real1.png differ diff --git a/images/real2.png b/images/real2.png new file mode 100644 index 0000000..01be873 Binary files /dev/null and b/images/real2.png differ diff --git a/images/real3.png b/images/real3.png new file mode 100644 index 0000000..7e6d106 Binary files /dev/null and b/images/real3.png differ diff --git a/images/relu.png b/images/relu.png new file mode 100644 index 0000000..4d66671 Binary files /dev/null and b/images/relu.png differ diff --git a/images/resnt.png b/images/resnt.png new file mode 100644 index 0000000..20ef0ef Binary files /dev/null and b/images/resnt.png differ diff --git a/images/rpn.png b/images/rpn.png new file mode 100644 index 0000000..582e4e4 Binary files /dev/null and b/images/rpn.png differ diff --git a/images/schemat_aplikacji.png b/images/schemat_aplikacji.png new file mode 100644 index 0000000..d0fdbf6 Binary files /dev/null and b/images/schemat_aplikacji.png differ diff --git a/images/sigmoid.png b/images/sigmoid.png new file mode 100644 index 0000000..0b2ebf2 Binary files /dev/null and b/images/sigmoid.png differ diff --git a/stron_info_katol.png b/images/stron_info_katol.png similarity index 100% rename from stron_info_katol.png rename to images/stron_info_katol.png diff --git a/strony_per_terytorium.png b/images/strony_per_terytorium.png similarity index 100% rename from strony_per_terytorium.png rename to images/strony_per_terytorium.png diff --git a/strony_per_year.png b/images/strony_per_year.png similarity index 100% rename from strony_per_year.png rename to images/strony_per_year.png diff --git a/images/tanh.png b/images/tanh.png new file mode 100644 index 0000000..c281686 Binary files /dev/null and b/images/tanh.png differ diff --git a/trans_katolik.png b/images/trans_katolik.png similarity index 100% rename from trans_katolik.png rename to images/trans_katolik.png diff --git a/keywords-pl.tex b/keywords-pl.tex deleted file mode 100644 index 762847b..0000000 --- a/keywords-pl.tex +++ /dev/null @@ -1 +0,0 @@ -jedno słowo kluczowe, inne słowo kluczowe diff --git a/keywords.tex b/keywords.tex deleted file mode 100644 index 5bf0427..0000000 --- a/keywords.tex +++ /dev/null @@ -1 +0,0 @@ -some keyword, another keyword diff --git a/metadata.tex b/metadata.tex index b190762..ad970ae 100644 --- a/metadata.tex +++ b/metadata.tex @@ -20,8 +20,8 @@ %\stsexFourthAuthor{F} % --- Tytuł pracy (w języku polskim i angielskim) -\titlePL{ MSc Title } -\titleEN{My thesis} +\titlePL{Zadanie wyszukiwania obrazów w publikacjach historycznych} +\titleEN{The task of image retrieval in historical publications} % --- Typ pracy (inżynierska, licencjacka, magisterska) \type{magisterska} % --- Wydział (wykaz skrótów): @@ -49,14 +49,14 @@ % --- --- IKE --- Instytut Kultury Europejskiej w Gnieźnie \faculty{WMiI} % --- Kierunek (w mianowniku) -\field{ informatyka } +\field{Analiza i Przetwarzanie Danych} % --- Specjalność (w formie mianownikowej) % --- (ustaw puste, jeśli bez specjalności) -\specialty{ aaa } +\specialty{} % --- Promotor (w dopełniaczu) \supervisor{ prof. UAM Filip Graliński } % --- Data złożenia pracy (Miasto, miesiąc rok) -\date{Poznań, grudzień 2020} +\date{Poznań, wrzesień 2022} % --- Zgoda na udostępnienie pracy w czytelni (TAK/NIE) \stread{TAK} diff --git a/msc-drozdz.tex b/msc-drozdz.tex index 3f2fd81..119b17c 100644 --- a/msc-drozdz.tex +++ b/msc-drozdz.tex @@ -16,9 +16,13 @@ \usepackage{polski} \usepackage[utf8]{inputenc} \usepackage{authblk} -\usepackage[demo]{graphicx} -\usepackage{subfig} \usepackage{placeins} +\usepackage{amssymb} +\usepackage{MnSymbol} +\usepackage{adjustbox} +\usepackage{subfig} +\usepackage[demo]{graphicx} +\usepackage{dirtree} \input{metadata} @@ -54,15 +58,14 @@ \begin{streszczenie} \input{abstract-pl} -\paragraph{Słowa kluczowe:} klasa +\paragraph{Słowa kluczowe:} cyfrowe biblioteki, digitalizacja, detekcja obrazu, widzenie komputerowe, przetwarzanie języka naturalnego, sztuczne sieci neuronowe \end{streszczenie} % Blok abstraktu w języku angielskim \begin{abstract} \input{abstract} -\input{abstract} -\paragraph{Keywords:} klasa +\paragraph{Keywords:} digital libraries, digitization, object detection, computer vision, natural language processing, artificial neural networks \end{abstract} % Opcjonalny blok dedykacji @@ -85,6 +88,8 @@ Tu możesz umieścić swoją dedykację. \clearpage \input{chapter4} \clearpage +\input{outro} +\clearpage \bibliographystyle{unsrt} \bibliography{bibliography} diff --git a/outro.tex b/outro.tex new file mode 100644 index 0000000..daa0a9a --- /dev/null +++ b/outro.tex @@ -0,0 +1,4 @@ +% !TeX encoding = UTF-8 +% !TeX spellcheck = pl_PL +\chapter{Zakończenie} +Bez krzty wątpliwości digitalizacja jest niezwykle ważnym procesem, wręcz niezbędnym do utrzymania porządku i zapewnienia bezpieczeństwa niezliczonym zbiorom dokumentów przechowywanych aktualnie głównie w formie papierowej. Powszechny dostęp do cennych treści wysoce narażonych na zniszczenie, nie będzie możliwy jeżeli takowe dzieła nie zostaną umieszczone w przestrzeni cyfrowej. Digitalizacja jest swego rodzaju drogą do ocalenia dorobku kulturowego ludzkości, nie narażając go na negatywny wpływ czynnika jakim jest czas, a także oferowanie go w pełnej okazałości szerokiemu gronu odbiorców, aby pamięć o wydarzeniach historycznych i zawartych w nich naukach nigdy nie przeminęła. Faktem jest, że świat coraz to bardziej przenosi swoje zasoby i możliwości do Internet, dlatego też nie mogło by być inaczej w kontekście bibliotek, archiwów czy urzędów. Cyfrowe biblioteki, choć coraz powszechniejsze nadal wymagają wiele pracy i zasobów, aby w pełni wykorzystać potencjał dostępnej w dzisiejszych czasach technologii. Już sam proces digitalizacji dokumentów jest procesem czasochłonnym i wymagającym ogromnej uwagi, a także wysoce wyspecjalizowanej kadry pracowniczej, aby przeprowadzić go w prawidłowy sposób, lecz samo to nie jest niestety wystarczające, jest jedynie pierwszym z wielu kroków. Do stworzenia w pełni funkcjonalnego narzędzia pozwalającego w sposób efektywny korzystać z dostępnych zbiorów potrzebna jest wiedza i umiejętności korzystania z najnowszych technologii. Aby móc w pełni przeszukiwać zdigitalizowane dokumenty, wyszukiwać w nich odpowiednie treści, nawet nie wiedząc na starcie co tak na prawdę chcę się znaleźć, niezbędnym jest wykorzystanie technik sztucznej inteligencji. W ramach niniejszej pracy magisterskiej powstało w pełni funkcjonalne rozwiązanie zapewniające możliwość przeszukiwania treści wizualnych w zbiorze zdigitalizowanych starych amerykańskich gazet. Stworzona aplikacja wzorowana była na podejściu wytworzonym w trakcie projektu Chronicling America o nazwie Newspaper Navigator. Efekty jakie zostały osiągnięte w trakcie tworzenia rozwiązania przebiły postawione przed pracą oczekiwania, co przełożyło się na osiągnięcie lepszych rezultatów zbudowanego modelu detekcji treści wizualnych opartego o głębokie sieci neuronowe, niż miało to miejsce w przypadku pierwowzoru i inspiracji tej pracy. Następnym krokiem podejścia było stworzenie systemu przeszukiwania wyników, jakie zwraca utworzony model, poddanych działaniu systemu optycznego rozpoznawania znaków. Zwieńczeniem całej pracy jest warstwa wizualna pozwalająca na komunikacje z użytkownikiem w czasie rzeczywistym i pełno tekstowego przeszukiwania bazy danych. Reasumując niniejsza praca magisterska pozwoliła na stworzenie w pełni funkcjonalnego oprogramowania do wsparcia cyfrowych bibliotek, które już posiadają jakieś zdigitalizowane zasoby. Do realizacji tego celu wykorzystane zostały najnowsze metody sztucznej inteligencji i inżynierii oprogramowania, które pozwoliły utworzyć narzędzie, które być może ze względu na swoją uniwersalność okaże się pomocne wielu instytucją i tym samym dołoży swoją cegiełkę do ochrony dorobku kulturalnego ludzkości. \ No newline at end of file diff --git a/preamble.tex b/preamble.tex index a7b5fa9..1e3ed40 100644 --- a/preamble.tex +++ b/preamble.tex @@ -2,3 +2,4 @@ % extra packages and definitions \usepackage{amsmath} + diff --git a/scores/6ab4979e4629c5559feba452b7ca74c0cac89ebb.txt b/scores/6ab4979e4629c5559feba452b7ca74c0cac89ebb.txt deleted file mode 100644 index 6b683ca..0000000 --- a/scores/6ab4979e4629c5559feba452b7ca74c0cac89ebb.txt +++ /dev/null @@ -1 +0,0 @@ -19.501 \ No newline at end of file