Update on Overleaf.

This commit is contained in:
Alex Drożdż 2022-09-10 19:48:34 +00:00 committed by node
parent 4577a174f0
commit cbed83e4ad
6 changed files with 306 additions and 151 deletions

View File

@ -1,6 +1,73 @@
% here the bibliographic entry for the paper itself should be given, % here the bibliographic entry for the paper itself should be given,
% used for generating declarations % used for generating declarations
@misc{BibEntry2022Sep_GH_actions,
title = {{Features {\ifmmode\bullet\else\textbullet\fi} GitHub Actions}},
journal = {GitHub},
year = {2022},
month = sep,
note = {[Online; accessed 10. Sep. 2022]},
url = {https://github.com/features/actions}
}
@misc{BibEntry2022Sep_black,
title = {{Black 22.8.0 documentation}},
year = {2022},
month = sep,
note = {[Online; accessed 10. Sep. 2022]},
url = {https://black.readthedocs.io/en/stable}
}
@article{Paszke2019Dec,
author = {Paszke, Adam and Gross, Sam and Massa, Francisco and Lerer, Adam and Bradbury, James and Chanan, Gregory and Killeen, Trevor and Lin, Zeming and Gimelshein, Natalia and Antiga, Luca and Desmaison, Alban and K{\ifmmode\ddot{o}\else\"{o}\fi}pf, Andreas and Yang, Edward and DeVito, Zach and Raison, Martin and Tejani, Alykhan and Chilamkurthy, Sasank and Steiner, Benoit and Fang, Lu and Bai, Junjie and Chintala, Soumith},
title = {{PyTorch: An Imperative Style, High-Performance Deep Learning Library}},
journal = {arXiv},
year = {2019},
month = dec,
eprint = {1912.01703},
doi = {10.48550/arXiv.1912.01703}
}
@article{Girshick2015Apr,
author = {Girshick, Ross},
title = {{Fast R-CNN}},
journal = {arXiv},
year = {2015},
month = apr,
eprint = {1504.08083},
doi = {10.48550/arXiv.1504.08083}
}
@article{Girshick2013Nov,
author = {Girshick, Ross and Donahue, Jeff and Darrell, Trevor and Malik, Jitendra},
title = {{Rich feature hierarchies for accurate object detection and semantic segmentation}},
journal = {arXiv},
year = {2013},
month = nov,
eprint = {1311.2524},
doi = {10.48550/arXiv.1311.2524}
}
@article{Kingma2014Dec,
author = {Kingma, Diederik P. and Ba, Jimmy},
title = {{Adam: A Method for Stochastic Optimization}},
journal = {arXiv},
year = {2014},
month = dec,
eprint = {1412.6980},
doi = {10.48550/arXiv.1412.6980}
}
@misc{madmaze2022Sep,
author = {madmaze},
title = {{pytesseract}},
journal = {GitHub},
year = {2022},
month = sep,
note = {[Online; accessed 10. Sep. 2022]},
url = {https://github.com/madmaze/pytesseract}
}
@article{Daniel2019Nov, @article{Daniel2019Nov,
author = {Daniel, W.}, author = {Daniel, W.},
title = {{Wyszukiwanie pe{\l}notekstowe}}, title = {{Wyszukiwanie pe{\l}notekstowe}},

View File

@ -1,6 +1,6 @@
% !TeX encoding = UTF-8 % !TeX encoding = UTF-8
% !TeX spellcheck = pl_PL % !TeX spellcheck = pl_PL
\chapter{Problematyka digitalizacji treści archiwalnych - przegląd literatury} \chapter{Problematyka digitalizacji treści archiwalnych - przegląd literatury}\hypertarget{chap:1}{}
\section{Zagadnienie digitalizacji archiwalnych dokumentów i cyfrowej biblioteki} \section{Zagadnienie digitalizacji archiwalnych dokumentów i cyfrowej biblioteki}
\bigbreak \bigbreak
@ -67,7 +67,7 @@ Kolejnym etapem procesu digitalizacji jest pozyskiwanie obrazu dzieł, które zo
\caption{Wizualizacja czym w rzeczywistości mogą być metadane} \caption{Wizualizacja czym w rzeczywistości mogą być metadane}
\end{figure} \end{figure}
Następne punkty procesu związane są głównie z pojęciem metadanych. Na wstępnie pozwolę sobie wytłumaczyć samo to pojęcie w ogólnym rozumieniu, aby następnie móc szerzej opisać jego znaczenie w procesie digitalizacji treści. Metadane definiuje się jako dane dostarczające informacji o jednym lub kilku aspektach danych; służą one do podsumowania podstawowych informacji o danych, co może ułatwić śledzenie i pracę z konkretnymi danymi. Najprościej mówiąc metadane są to takie dane, które opisują inne dane. Doskonałym przykładem są zdjęcia. Tak jak zostało to zaprezentowane na powyższej rycinie obraz w tym wypadku to dane (macierze z wartościami pikseli), a wszystkie dodatkowe informacje, takie jak nazwa pliku, autor, data utworzenia, rozdzielczość, lokalizacja, które właśnie opisują dany obraz to metadane. Z kolei w przypadku dokumentu tekstowego metadane mogą zawierać informacje o tym, jak długi jest dokument, kto jest jego autorem, kiedy został napisany, krótkie streszczenie dokumentu, a także słowa kluczowe powiązane z zawartością \cite{ContributorstoWikimediaprojects2022Apr}. Metadane są następnie przekazywane podmiotom uczestniczącym w łańcuchu publikacji książek, takim jak dostawcy usług, badacze, fundatorzy, bibliotekarze, czy kuratorzy danych \cite{BibEntry2022May_metada_books}. Metadane mogą być przechowywane i zarządzane w bazie danych, często nazywanej rejestrem metadanych lub repozytorium metadanych. Jednak bez kontekstu i punktu odniesienia identyfikacja metadanych na podstawie samego ich oglądania może okazać się niemożliwa \cite{ContributorstoWikimediaprojects2022Apr}. Istnieje wiele standardów metadanych, ale jeśli chodzi o cyfrowe biblioteki powszechnie używanym jest standard Dublin Core. Proste metadane zgodne ze standardem Dublin Core składają się z 15-stu elementów, które przedstawia poniższa tabela \cite{Alasem2009Jan}. Następne punkty procesu związane są głównie z pojęciem metadanych. Na wstępnie pozwolę sobie wytłumaczyć samo to pojęcie w ogólnym rozumieniu, aby następnie móc szerzej opisać jego znaczenie w procesie digitalizacji treści. Metadane definiuje się jako dane dostarczające informacji o jednym lub kilku aspektach danych; służą one do podsumowania podstawowych informacji o danych, co może ułatwić śledzenie i pracę z konkretnymi danymi. Najprościej mówiąc metadane są to takie dane, które opisują inne dane. Doskonałym przykładem są zdjęcia. Tak jak zostało to zaprezentowane na powyższej rycinie obraz w tym wypadku to dane (macierze z wartościami pikseli), a wszystkie dodatkowe informacje, takie jak nazwa pliku, autor, data utworzenia, rozdzielczość, lokalizacja, które właśnie opisują dany obraz to metadane. Z kolei w przypadku dokumentu tekstowego metadane mogą zawierać informacje o tym, jak długi jest dokument, kto jest jego autorem, kiedy został napisany, krótkie streszczenie dokumentu, a także słowa kluczowe powiązane z zawartością \cite{ContributorstoWikimediaprojects2022Apr}. Metadane są następnie przekazywane podmiotom uczestniczącym w łańcuchu publikacji książek, takim jak dostawcy usług, badacze, fundatorzy, bibliotekarze, czy kuratorzy danych \cite{BibEntry2022May_metada_books}. Metadane mogą być przechowywane i zarządzane w bazie danych, często nazywanej rejestrem metadanych lub repozytorium metadanych. Jednak bez kontekstu i punktu odniesienia identyfikacja metadanych na podstawie samego ich oglądania może okazać się niemożliwa \cite{ContributorstoWikimediaprojects2022Apr}. Istnieje wiele standardów metadanych, ale jeśli chodzi o cyfrowe biblioteki powszechnie używanym jest standard Dublin Core. Proste metadane zgodne ze standardem Dublin Core składają się z 15-stu elementów, które przedstawia tabela \ref{tab_meta} \cite{Alasem2009Jan}.
\newline \newline
\begin{center} \begin{center}
@ -91,8 +91,11 @@ Następne punkty procesu związane są głównie z pojęciem metadanych. Na wst
\textbf{Identyfikator} & Jednoznaczne odniesienie do zasobu w danym kontekście \\ \hline \textbf{Identyfikator} & Jednoznaczne odniesienie do zasobu w danym kontekście \\ \hline
\textbf{Język} & język (języki), w którym zapisana jest intelektualna zawartość zasobu \\ \hline \textbf{Język} & język (języki), w którym zapisana jest intelektualna zawartość zasobu \\ \hline
\end{tabular} \end{tabular}
\caption{Tabela przedstawiająca standard Dublin Core}
\label{tab_meta}
\end{table} \end{table}
\end{center} \end{center}
\clearpage
Po skompletowaniu metadanych zarówno one jak i pozyskane obrazy zostają umieszczone w systemie zarządzania biblioteką cyfrową, który został już opisany we wcześniejszym podrozdziale. Dokumenty znajdujące się już w systemie podobnie jak dokumenty fizyczne również podlegają konserwacji. Cyfrowa konserwacja to przede wszystkim nowe wyzwania przed bibliotekami i archiwami cyfrowymi, które i tak już borykały się z koniecznością tradycyjnej (fizycznej) konserwacji książek, czy dokumentów. Konserwację cyfrową można definiować jako planowanie i alokację zasobów oraz zastosowanie metod i technik konserwatorskich niezbędnych do zapewnienia, aby informacje cyfrowe o trwałej wartości pozostały dostępne dla użytkowników przez bardzo długi czas \cite{hedstrom1997digital}. Pierwszą myślą odnośnie cyfrowej konserwacji jest bez wątpienia tworzenie regularnych kopii zapasowych, czy migracji danych, jednak myślenie że dotyczy ona wyłącznie tych pojęć jest błędne. Kopie zapasowe są doskonałą odpowiedzią na krótkoterminowe ryzyko związane z awarią nośników cyfrowych. Jeśli są one wykonane prawidłowo, to są w stanie zapewnić ochronę strumienia bitów ale nie rozwiązują takich problemów jak przestarzałe formaty plików, kwestie prawne oraz autentyczności i pewnego źródła pochodzenia. Kopie zapasowe mogą chronić dane przed przypadkowym usunięciem, przypadkowymi zmianami, działaniem wirusów i hakerów oraz katastrofami, takimi jak powodzie i pożary. Głównym problemem są zmiany technologiczne, starsze kopie cyfrowe mogą stać się nie możliwe do przeczytania przez dane oprogramowanie czy sprzęt, ponieważ ich nowsze wersje mogą nie być przystosowywane do odczytu przestarzałych plików. Ważne jest aby zasoby były regularnie aktualizowane do odpowiednich formatów, a także aby dostęp do nich był nadzorowany, szczególnie jeśli mowa tu o plikach źródłowych których pochodne trafiają później do cyfrowych bibliotek, gdzie dostępne są dla szerokiego grona odbiorców. Podsumowując, długoterminowa konserwacja nie odnosi się do pojęcia kopii zapasowych (konserwacja krótkoterminowa), długoterminowa konserwacja to przede wszystkim uodpornienie zbiorów na zmiany technologiczne \cite{corrado2017digital}. Po skompletowaniu metadanych zarówno one jak i pozyskane obrazy zostają umieszczone w systemie zarządzania biblioteką cyfrową, który został już opisany we wcześniejszym podrozdziale. Dokumenty znajdujące się już w systemie podobnie jak dokumenty fizyczne również podlegają konserwacji. Cyfrowa konserwacja to przede wszystkim nowe wyzwania przed bibliotekami i archiwami cyfrowymi, które i tak już borykały się z koniecznością tradycyjnej (fizycznej) konserwacji książek, czy dokumentów. Konserwację cyfrową można definiować jako planowanie i alokację zasobów oraz zastosowanie metod i technik konserwatorskich niezbędnych do zapewnienia, aby informacje cyfrowe o trwałej wartości pozostały dostępne dla użytkowników przez bardzo długi czas \cite{hedstrom1997digital}. Pierwszą myślą odnośnie cyfrowej konserwacji jest bez wątpienia tworzenie regularnych kopii zapasowych, czy migracji danych, jednak myślenie że dotyczy ona wyłącznie tych pojęć jest błędne. Kopie zapasowe są doskonałą odpowiedzią na krótkoterminowe ryzyko związane z awarią nośników cyfrowych. Jeśli są one wykonane prawidłowo, to są w stanie zapewnić ochronę strumienia bitów ale nie rozwiązują takich problemów jak przestarzałe formaty plików, kwestie prawne oraz autentyczności i pewnego źródła pochodzenia. Kopie zapasowe mogą chronić dane przed przypadkowym usunięciem, przypadkowymi zmianami, działaniem wirusów i hakerów oraz katastrofami, takimi jak powodzie i pożary. Głównym problemem są zmiany technologiczne, starsze kopie cyfrowe mogą stać się nie możliwe do przeczytania przez dane oprogramowanie czy sprzęt, ponieważ ich nowsze wersje mogą nie być przystosowywane do odczytu przestarzałych plików. Ważne jest aby zasoby były regularnie aktualizowane do odpowiednich formatów, a także aby dostęp do nich był nadzorowany, szczególnie jeśli mowa tu o plikach źródłowych których pochodne trafiają później do cyfrowych bibliotek, gdzie dostępne są dla szerokiego grona odbiorców. Podsumowując, długoterminowa konserwacja nie odnosi się do pojęcia kopii zapasowych (konserwacja krótkoterminowa), długoterminowa konserwacja to przede wszystkim uodpornienie zbiorów na zmiany technologiczne \cite{corrado2017digital}.
\newline \newline
@ -112,16 +115,17 @@ Istnieje również pojęcie masowej cyfryzacji czyli czegoś więcej aniżeli ty
\caption{Podgląd przeszukiwania tekstu wybranej pozycji w usłudze Google Books \cite{Westover2012}} \caption{Podgląd przeszukiwania tekstu wybranej pozycji w usłudze Google Books \cite{Westover2012}}
\end{figure} \end{figure}
Swobodne przeszukiwanie publikacji udostępnionych w ramach usługi Google Books jest możliwe dzięki zastosowaniu technik OCR, czyli optycznego rozpoznawanie znaków (z ang. Optical Character Recognition). OCR można zdefiniować jako proces przekształcania obrazów cyfr, liter i innych symboli drukowanych maszynowo lub pisanych odręcznie na format możliwy do zrozumienia przez komputer. Długa historia badań w tej dziedzinie w tej dziedzinie, sukces komercyjny oraz ciągła potrzeba i możliwość obsługi mniej ograniczonych form tekstu czynią OCR jednym z najważniejszych obszarów zastosowań uczenia maszynowego. \cite{Srihari2003Jan} Swobodne przeszukiwanie publikacji udostępnionych w ramach usługi Google Books jest możliwe dzięki zastosowaniu technik OCR, czyli optycznego rozpoznawanie znaków (\emph{z ang. Optical Character Recognition}). OCR można zdefiniować jako proces przekształcania obrazów cyfr, liter i innych symboli drukowanych maszynowo lub pisanych odręcznie na format możliwy do zrozumienia przez komputer. Długa historia badań w tej dziedzinie w tej dziedzinie, sukces komercyjny oraz ciągła potrzeba i możliwość obsługi mniej ograniczonych form tekstu czynią OCR jednym z najważniejszych obszarów zastosowań uczenia maszynowego \cite{Srihari2003Jan}.
\newline \newline
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.95\textwidth]{images/ocr_scheme.png} \includegraphics[width=0.95\textwidth]{images/ocr_scheme.png}
\caption{Schemat działania OCR \cite{PatrickFarley2022May}} \caption{Schemat działania OCR \cite{PatrickFarley2022May}}
\label{ocerek}
\end{figure} \end{figure}
Na powyższym schemacie zaobserwować możemy etapy działania OCR, od momentu zeskanowania, aż po przygotowany plik JSON z zawartością przetwarzanego obrazu. Optyczne rozpoznawanie znaków umożliwia konwersję różnych różnych typów dokumentów, takich jak zeskanowane dokumenty papierowe, pliki PDF lub obrazy zarejestrowane przez aparat cyfrowy na dane ,które później można edytować i przeszukiwać. Warto podkreślić, że obrazy przechwycone przez aparat cyfrowy różnią się od zeskanowanych dokumentów lub obrazów. Mają one często przeróżne wady takie jak zniekształcenia na krawędziach i źle dopasowane światło, co utrudnia większości aplikacji OCR prawidłowe rozpoznanie tekstu. Na proces jaki przeprowadza OCR przejść składają się trzy etapy. Pierwszym z nich to segmentacja, czyli identyfikacja poszczególnych glifów, które są podstawowymi jednostkami reprezentującymi jeden lub więcej znaków zazwyczaj przylegających do siebie, na podstawie binarnego obrazu wejściowego. Drugim krokiem jest ekstrakcja cech, czyli wyliczenie z każdego glifu wektora liczb, które posłużą jako cechy wejściowe dla sztucznej sieci neuronowej. Ostatnim zadaniem jest klasyfikacja konkretnych wystąpień słów \cite{mithe2013optical}. Na schemacie przedstawionym na rysunku \ref{ocerek} zaobserwować możemy etapy działania OCR, od momentu zeskanowania, aż po przygotowany plik JSON z zawartością przetwarzanego obrazu. Optyczne rozpoznawanie znaków umożliwia konwersję różnych różnych typów dokumentów, takich jak zeskanowane dokumenty papierowe, pliki PDF lub obrazy zarejestrowane przez aparat cyfrowy na dane ,które później można edytować i przeszukiwać. Warto podkreślić, że obrazy przechwycone przez aparat cyfrowy różnią się od zeskanowanych dokumentów lub obrazów. Mają one często przeróżne wady takie jak zniekształcenia na krawędziach i źle dopasowane światło, co utrudnia większości aplikacji OCR prawidłowe rozpoznanie tekstu. Na proces jaki przeprowadza OCR przejść składają się trzy etapy. Pierwszym z nich to segmentacja, czyli identyfikacja poszczególnych glifów, które są podstawowymi jednostkami reprezentującymi jeden lub więcej znaków zazwyczaj przylegających do siebie, na podstawie binarnego obrazu wejściowego. Drugim krokiem jest ekstrakcja cech, czyli wyliczenie z każdego glifu wektora liczb, które posłużą jako cechy wejściowe dla sztucznej sieci neuronowej. Ostatnim zadaniem jest klasyfikacja konkretnych wystąpień słów \cite{mithe2013optical}.
\section{Wyzwania i problemy digitalizacji} \section{Wyzwania i problemy digitalizacji}

View File

@ -1,15 +1,16 @@
% !TeX encoding = UTF-8 % !TeX encoding = UTF-8
% !TeX spellcheck = pl_PL % !TeX spellcheck = pl_PL
\chapter{Podstawy teoretyczne sieci neuronowych} \chapter{Podstawy teoretyczne sieci neuronowych}\hypertarget{chap:2}{}
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. 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{Podstawowe informacje o sieciach neuronowych} \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: 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ą (\emph{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 (\emph{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 tak jak na wykresie \ref{neurony_licz}.
\begin{equation} \begin{equation}
Liczba\: neuronow = Liczba\: cech\: w\: danych\: treningowych + 1 Liczba\: neuronow = Liczba\: cech\: w\: danych\: treningowych + 1
\label{neurony_licz}
\end{equation} \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}. Wyrażenie '+ 1' w powyższym wzorze odnosi się do wyrazu wolnego (\emph{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 (\emph{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!] \begin{figure}[h!]
\centering \centering
@ -17,15 +18,17 @@ Wyrażenie '+ 1' w powyższym wzorze odnosi się do wyrazu wolnego (z ang. bias)
\caption{Wizualizacja podstawowej architektury sieci neuronowej \cite{BibEntry2021Aug_nn}} \caption{Wizualizacja podstawowej architektury sieci neuronowej \cite{BibEntry2021Aug_nn}}
\end{figure} \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: 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. 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 \ref{wyrazwol} określa zachodzącą operacje wewnątrz neuronów.
\begin{equation} \begin{equation}
Y = \sum (wagi * dane\: wejsciowe) + wyraz\: wolny Y = \sum (wagi * dane\: wejsciowe) + wyraz\: wolny
\label{wyrazwol}
\end{equation} \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: Zanim wyliczona suma zostanie przekazana do kolejny ukrytej warstwy lub warstwy wyjściowej nakłada się na nią nieliniowość, poprzez tak zwaną funkcje aktywacji (\emph{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, 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 wzór \ref{activo}.
\begin{equation} \begin{equation}
Y = f( \sum (wagi * dane\: wejsciowe) + wyraz\: wolny) Y = f( \sum (wagi * dane\: wejsciowe) + wyraz\: wolny)
\label{activo}
\end{equation} \end{equation}
Najczęściej stosowane funkcje aktywacji to: Najczęściej stosowane funkcje aktywacji przedstawia tabela \ref{tab_activ}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c c c} \begin{tabular}{c c c c}
@ -39,50 +42,54 @@ Najczęściej stosowane funkcje aktywacji to:
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} \\ 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 \bottomrule
\end{tabular} \end{tabular}
\caption{Najczęściej stosowane funkcje aktywacji}
\label{tab_activ}
\end{table} \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: 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 (\emph{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ą rysunek \ref{layers}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/for_prop.png} \includegraphics[width=1\textwidth]{images/for_prop.png}
\caption{Wizualizacja algorytmu propagacji w przód \cite{BibEntry2020Aug_nn_guide}} \caption{Wizualizacja algorytmu propagacji w przód \cite{BibEntry2020Aug_nn_guide}}
\label{layers}
\end{figure} \end{figure}
Przykładowe wyliczenia sumy ważonej dla neurona 'h1': Przykładowe wyliczenia sumy ważonej dla neurona 'h1':
\begin{equation} \begin{equation}
w1*x1 + w2*x2 + w3*x3 = 1*0.9 + 0*0.8 + 1*0.1 = 1 w1*x1 + w2*x2 + w3*x3 = 1*0,9 + 0*0,8 + 1*0,1 = 1
\end{equation} \end{equation}
Następnie na wyliczoną sumę ważoną nakłada się nieliniowość (w tym wypadku sigmoid): Następnie na wyliczoną sumę ważoną nakłada się nieliniowość (w tym wypadku sigmoid):
\begin{equation} \begin{equation}
h1 = \sigma(1) = \dfrac{1}{1+e^{-1}} \approx 0.73 h1 = \sigma(1) = \dfrac{1}{1+e^{-1}} \approx 0,73
\end{equation} \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}. 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 (\emph{z ang backward propagation}), czyli krótko mówiąc optymalizacji wag sieci \cite{BibEntry2020Aug_nn_guide}.
\newline \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: Zanim jednak przejdziemy do algorytmu propagacji wstecznej stosownym wydaje się być wytłumaczenie pojęcia funkcji kosztu lub inaczej straty (\emph{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} \begin{equation}
MSE = \dfrac{1}{n}\sum_{n=1}^{n}(y-y')^2 MSE = \dfrac{1}{n}\sum_{n=1}^{n}(y-y')^2
\end{equation} \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. MSE, czyli błąd średniokwadratowy (\emph{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} \begin{equation}
MAE = \dfrac{1}{n}\sum_{n=1}^{n}|y-y'| MAE = \dfrac{1}{n}\sum_{n=1}^{n}|y-y'|
\end{equation} \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. MAE, czyli średni błąd absolutny (\emph{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 (\emph{z ang. outliers}) występujące w rozkładzie zmiennej objaśnianej.
\begin{equation} \begin{equation}
MSLE = \dfrac{1}{n}\sum_{n=1}^{n}(\log(y+1)-\log(y'+1))^2 MSLE = \dfrac{1}{n}\sum_{n=1}^{n}(\log(y+1)-\log(y'+1))^2
\end{equation} \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: MSLE, czyli błąd średniokwadratowy zlogarytmizowany (\emph{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 stosowaną miarą w przypadku problemów klasyfikacyjnych jest BCE.
\begin{equation} \begin{equation}
BCE = -\dfrac{1}{n}\sum_{n=1}^{n}(y\log(p) + (1 - y)\log(1 - p)) BCE = -\dfrac{1}{n}\sum_{n=1}^{n}(y\log(p) + (1 - y)\log(1 - p))
\end{equation} \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}. BCE, czyli binarna entropia krzyżowa (\emph{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 \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: 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. Wycinek ten przedstawia rycina \ref{neuuro}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.5\textwidth]{images/nn_part_for_backprop.png} \includegraphics[width=0.5\textwidth]{images/nn_part_for_backprop.png}
\caption{Wizualizacja wycinka sieci neuronowej \cite{BibEntry2020Aug_nn_guide}} \caption{Wizualizacja wycinka sieci neuronowej \cite{BibEntry2020Aug_nn_guide}}
\label{neuuro}
\end{figure} \end{figure}
Z algorytmu propagacji w przód wiadome jest, że: Z algorytmu propagacji w przód wiadome jest, że:
@ -92,19 +99,22 @@ Z algorytmu propagacji w przód wiadome jest, że:
\begin{equation} \begin{equation}
z = \sum w*x= w1*x1 + w2*x2 + w3*x3 z = \sum w*x= w1*x1 + w2*x2 + w3*x3
\end{equation} \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: Zakładając, że chcemy zbadać jaka zmiana w1 spowoduje minimalizacje funkcji kosztu, oznaczmy ją jako E, musimy zastosować regułę łańcuchową (\emph{z ang. chain rule}) służącą do obliczania pochodnych funkcji złożonych. Opisuje to wzór \ref{chain}.
\begin{equation} \begin{equation}
\frac{\partial E}{\partial w1} = \frac{\partial E}{\partial \sigma(z)} * \frac{\partial \sigma(z)}{\partial z} * \frac{\partial z}{\partial w1} \frac{\partial E}{\partial w1} = \frac{\partial E}{\partial \sigma(z)} * \frac{\partial \sigma(z)}{\partial z} * \frac{\partial z}{\partial w1}
\label{chain}
\end{equation} \end{equation}
Zaktualizowana wartość wagi w1 prezentuje się następująco: Zaktualizowana wartość wagi w1 prezentuje przykład \ref{w1}.
\begin{equation} \begin{equation}
w1' = w1 - (\frac{\partial E}{\partial w1} * lr) w1' = w1 - (\frac{\partial E}{\partial w1} * lr)
\label{w1}
\end{equation} \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: Powyższy proces nosi nazwę metody gradientu prostego (\emph{z ang. gradient descent}). Pod symbolem 'lr' kryje się parametr oznaczający długość kroku (\emph{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 rycina \ref{minim}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/lr.png} \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}} \caption{Wizualizacja procesu minimalizacji funkcji kosztu w zależności od długości kroku \cite{JeremyJordan2020Aug_lr}}
\label{minim}
\end{figure} \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. 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.
@ -113,55 +123,61 @@ Cały proces opisany powyżej wykonywany jest dla każdej wagi jaka znajduje si
\section{Konwolucyjne sieci neuronowe przetwarzające obraz} \section{Konwolucyjne sieci neuronowe przetwarzające obraz}
\bigbreak \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. 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 (\emph{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 rycina \ref{convner}.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/cnn.png} \includegraphics[width=1\textwidth]{images/cnn.png}
\caption{Architektura konwolucyjnych sieci neuronowych \cite{Sharma2020May_cnn_png}} \caption{Architektura konwolucyjnych sieci neuronowych \cite{Sharma2020May_cnn_png}}
\label{convner}
\end{figure} \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). 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 (\emph{z ang. kernel lub filter}).
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.5\textwidth]{images/kernels.png} \includegraphics[width=0.5\textwidth]{images/kernels.png}
\caption{Przykładowe filtry i ich wpływ na obraz \cite{ContributorstoWikimediaprojects2022May}} \caption{Przykładowe filtry i ich wpływ na obraz \cite{ContributorstoWikimediaprojects2022May}}
\end{figure} \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.
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 na rysunku \ref{fe}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/kernel_cnn_vis.png} \includegraphics[width=1\textwidth]{images/kernel_cnn_vis.png}
\caption{Wizualizacja procesu zachodzącego w warstwie konwolucyjnej \cite{Galante2022Mar}} \caption{Wizualizacja procesu zachodzącego w warstwie konwolucyjnej \cite{Galante2022Mar}}
\label{fe}
\end{figure} \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}. 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 (\emph{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 (\emph{z ang. stride}) oraz wielkości (\emph{z ang. size}), dysponujemy także wypełnieniem (\emph{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 \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: Zgodnie z rysunkiem 2.5 kolejnym elementem architektury konwolucyjncyh sieci neuronowych jest krok o nazwie łączenie (\emph{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} \begin{enumerate}
\item max pooling - mapowaną wartością jest maksymalna wartość wynikająca z sąsiednich wartości pikseli, \item \textbf{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. \item \textbf{average pooling} -- mapowaną wartością jest średnia wartość wynikająca z sąsiednich wartości pikseli.
\end{enumerate} \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. Dzięki zastosowania warstwy pooling'u sieci łatwiej jest identyfikować te cechy obrazu, których sygnał jest najsilniejszy \cite{Yamashita2018Aug}. Proces ten wizualizuje rysunek \ref{poole}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.6\textwidth]{images/pool.png} \includegraphics[width=0.6\textwidth]{images/pool.png}
\caption{Wizualizacja procesu zachodzącego w warstwie pooling'u \cite{Yani2019May}} \caption{Wizualizacja procesu zachodzącego w warstwie pooling'u \cite{Yani2019May}}
\label{poole}
\end{figure} \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. Ostatnią warstwą CNN jest, znana już z opisywanej w poprzednim podrozdziale klasycznej architektury sieci neuronowych, warstwa w pełni połączona (\emph{z ang. fully connected layer}). Warstwa ta odpowiedzialna jest za klasyfikacje. Używając funkcji aktywacji softmax (lub wcześniej scharakteryzowana funkcja sigmoid), opisanej wzorem \ref{wzorel}, otrzymaną predykcją będzie prawdopodobieństwo przynależności obrazu do danej klasy.
\begin{eqnarray} \begin{eqnarray}
\sigma(y_{i}) = \left(\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right)\: \sigma(y_{i}) = \left(\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right)\:
j = 1,...,n j = 1,...,n
\label{wzorel}
\end{eqnarray} \end{eqnarray}
Użycie tej funkcji w celu utworzenia prawdopodobieństw opisuje zaś przykład poniżej: Użycie tej funkcji w celu utworzenia prawdopodobieństw opisuje zaś przykład \ref{matrixmatrix}.
\begin{eqnarray} \begin{eqnarray}
y \rightarrow y \rightarrow
\begin{bmatrix}{2.}\\{1.}\\{0.1}\end{bmatrix} \begin{bmatrix}{2}\\{1}\\{0,1}\end{bmatrix}
\longrightarrow \longrightarrow
\left[\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right] \left[\frac{e^{y_{i}}}{ \sum\limits_{j} e^{y_{j}}}\right]
\longrightarrow \longrightarrow
\begin{bmatrix}{0.7}\\{0.2}\\{0.1}\end{bmatrix} \begin{bmatrix}{0,7}\\{0,2}\\{0,1}\end{bmatrix}
= 1 = 1
\label{matrixmatrix}
\end{eqnarray} \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}. 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}.

View File

@ -1,6 +1,6 @@
% !TeX encoding = UTF-8 % !TeX encoding = UTF-8
% !TeX spellcheck = pl_PL % !TeX spellcheck = pl_PL
\chapter{Digitalizacja treści na podstawie projektu Chronicling America} \chapter{Digitalizacja treści na podstawie projektu Chronicling America}\hypertarget{chap:3}{}
\section{Przedstawienie projektu Chronicling America} \section{Przedstawienie projektu Chronicling America}
@ -10,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}. 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 \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 (\emph{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} \begin{itemize}
\item[$\bullet$] miejsce publikacji, \item[$\bullet$] miejsce publikacji,
@ -26,10 +26,10 @@ Dobre praktyki digitalizacji wymagają aby katalogowane dzieła zawierały opis.
\item[$\bullet$] innowacyjność w procesie produkcji. \item[$\bullet$] innowacyjność w procesie produkcji.
\end{itemize} \end{itemize}
\ \\ \ \\
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}. 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 \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, 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 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 (\emph{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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.6\textwidth]{images/dpi.png} \includegraphics[width=0.6\textwidth]{images/dpi.png}
@ -48,17 +48,18 @@ Kolejnymi kluczowymi aspektami, które porusza przygotowany przez Bibliotekę Ko
W dokumencie sporządzono bardzo szczegółowy opis metadanych, jakie mają zostać opracowane. Organizacje biorące udział w projekcie zostały poinstruowane w kontekście prawie 60 pól jakie mogą zostać przez nie wypełnione, z których 26 jest polami obowiązkowymi. Przedstawiona został również dokładna struktura pliku XML w którym mają być one zawarte. Instrukcja zawiera między innymi nazwę opisywanych danych, ich typ, przykład, notatkę z dokładniejszym wytłumaczeniem, czy konkretną ścieżkę w pliku XML w jakiej mają zostać zawarte. Przykładami pól są: oryginalne repozytorium z którego pochodzi dany materiał, wykonawca obsługujący skaner pozyskujący obraz, model takiego skanera, jego oprogramowanie, tytuł materiału, data wydania, format źródłowy, czy wymiary \cite{BibEntry2022Jun_tech}. W dokumencie sporządzono bardzo szczegółowy opis metadanych, jakie mają zostać opracowane. Organizacje biorące udział w projekcie zostały poinstruowane w kontekście prawie 60 pól jakie mogą zostać przez nie wypełnione, z których 26 jest polami obowiązkowymi. Przedstawiona został również dokładna struktura pliku XML w którym mają być one zawarte. Instrukcja zawiera między innymi nazwę opisywanych danych, ich typ, przykład, notatkę z dokładniejszym wytłumaczeniem, czy konkretną ścieżkę w pliku XML w jakiej mają zostać zawarte. Przykładami pól są: oryginalne repozytorium z którego pochodzi dany materiał, wykonawca obsługujący skaner pozyskujący obraz, model takiego skanera, jego oprogramowanie, tytuł materiału, data wydania, format źródłowy, czy wymiary \cite{BibEntry2022Jun_tech}.
\newline \newline
Interfejs internetowej aplikacji do przeszukiwania i przeglądania zbiorów zebranych w ramach Chronicling America dostępny jest pod adresem: \url{https://chroniclingamerica.loc.gov/newspapers/}. Jego główna strona preznetuje się następująco: Interfejs internetowej aplikacji do przeszukiwania i przeglądania zbiorów zebranych w ramach Chronicling America dostępny jest pod adresem: \url{https://chroniclingamerica.loc.gov/newspapers/}. Jego główną stronę prezentuje rysunek \ref{chronicamer}.
\newline \newline
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/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}} \caption{Interfejs aplikacji do obsługi zbiorów Chronicling America \cite{Humanities2022Jun_CA_inter}}
\label{chronicamer}
\end{figure} \end{figure}
\clearpage \clearpage
Ze strony internetowej Chronicling America mamy swobodny dostęp do bazy wszystkich skolekcjonowanych w ramach tego projektu obrazów. Na dzień dzisiejszy zbiór ten obfituje w 19,706,097 zdjęć pojedynczych stron gazet. Liczba ta przekłada się na około 3,750 historyczne gazety, czyli ponad 2.5 miliona egzemplarzy. Aby przeszukiwać bazę danych możemy wybrać z takich opcji filtrowania jak: filtrowanie po regionie z którego pochodzą oraz po zakresie dat ich wydawania. Zważając na ilość metadanych jakie zostały zebrane i ilość informacji jakie przechowywane są w bazie Chronicling America na temat każdej z gazet liczba filtrów jest jednak dość mała, chociaż możliwość przeszukiwania tekstu obrazów po dowolnych frazach i fakt, że podkreślane są one w wynikach wydaje się zaspokajać większość potrzeb z tym związanych. Jest to zdecydowanie najważniejsza funkcjonalność jaką oferuje ta witryna. Dzięki zastosowaniu technologii OCR możemy wyszukać dowolną frazę wpisując ją w panel wyszukiwania w prawym górnym rogu. Wyjątkowo interesującym rozwiązaniem jest podkreślenie na każdym z rezultatów wyszukiwanej frazy, co znacznie ułatwia wyszukiwanie interesujących treści, już później na etapie samych wyników. Przykład działania zademonstruje wyszukując frazę "polish" w celu znalezienia jakichkolwiek polskich gazet wydawanych na terenie Stanów Zjednoczonych skolekcjonowanych w trakcie trwania projektu Chronicling America. Ze strony internetowej Chronicling America mamy swobodny dostęp do bazy wszystkich skolekcjonowanych w ramach tego projektu obrazów. Na dzień dzisiejszy zbiór ten obfituje w 19\,706\,097 zdjęć pojedynczych stron gazet. Liczba ta przekłada się na około 3\,750 historyczne gazety, czyli ponad 2,5 miliona egzemplarzy. Aby przeszukiwać bazę danych możemy wybrać z takich opcji filtrowania jak: filtrowanie po regionie z którego pochodzą oraz po zakresie dat ich wydawania. Zważając na ilość metadanych jakie zostały zebrane i ilość informacji jakie przechowywane są w bazie Chronicling America na temat każdej z gazet liczba filtrów jest jednak dość mała, chociaż możliwość przeszukiwania tekstu obrazów po dowolnych frazach i fakt, że podkreślane są one w wynikach wydaje się zaspokajać większość potrzeb z tym związanych. Jest to zdecydowanie najważniejsza funkcjonalność jaką oferuje ta witryna. Dzięki zastosowaniu technologii OCR możemy wyszukać dowolną frazę wpisując ją w panel wyszukiwania w prawym górnym rogu. Wyjątkowo interesującym rozwiązaniem jest podkreślenie na każdym z rezultatów wyszukiwanej frazy, co znacznie ułatwia wyszukiwanie interesujących treści, już później na etapie samych wyników. Przykład działania zademonstruje wyszukując frazę "polish" w celu znalezienia jakichkolwiek polskich gazet wydawanych na terenie Stanów Zjednoczonych skolekcjonowanych w trakcie trwania projektu Chronicling America.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
@ -66,7 +67,7 @@ Ze strony internetowej Chronicling America mamy swobodny dostęp do bazy wszystk
\caption{Wyniki wyszukiwania frazy "polish" na stronie głównej projektu Chronicling America \cite{Humanities2022Jun_CA_inter}} \caption{Wyniki wyszukiwania frazy "polish" na stronie głównej projektu Chronicling America \cite{Humanities2022Jun_CA_inter}}
\end{figure} \end{figure}
Po wpisaniu tej frazy w wyszukiwarkę otrzymaliśmy aż 1,350,355 wyników, jednak przez identyczną pisownie w języku angielskim jak słowo polerować zapewne większość z tych wyników nie dotyczy wzmianek o Polakach czy Polsce. Jednakże już na pierwszy rzut oka dostrzec możemy takie pozycje jak "Dziennik Chicagowski" czy pismo "Katolik". Po wpisaniu tej frazy w wyszukiwarkę otrzymaliśmy aż 1\,350\,355 wyników, jednak przez identyczną pisownie w języku angielskim jak słowo polerować zapewne większość z tych wyników nie dotyczy wzmianek o Polakach czy Polsce. Jednakże już na pierwszy rzut oka dostrzec możemy takie pozycje jak "Dziennik Chicagowski" czy pismo "Katolik".
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
@ -74,9 +75,10 @@ Po wpisaniu tej frazy w wyszukiwarkę otrzymaliśmy aż 1,350,355 wyników, jedn
\qquad \qquad
\subfloat[\centering Wycinek transkryptu strony tytułowej]{{\includegraphics[width=3cm]{images/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}}% \caption{Przykład polskiego pisma w zbiorach Chronicling America \cite{Humanities2022Jun_CA_inter}}%
\label{katol}
\end{figure} \end{figure}
Zaprezentowane powyżej czasopismo to "Katolik", wydanie z dnia 12 kwietnia 1894 roku. Pod tą nazwą pismo to wydawane było jednak jedynie przez 2 lata (1893-1895) swojej historii. Szerzej znane może jako "Wiarus", który zadebiutował w 1886 roku w stanie Minnesota, a dokładniej w miejscowości Winona, która stanowiła centrum polskiej emigracji dla tego stanu. Treści w niej przedstawiane były w większości w języku polskim, chociaż już na prezentowanej stronie można zauważyć również treści w języku angielskim. Sam "Wiarus" ma bardzo ciekawą historie, ponieważ już same początki tego pisma nie należały do najprostszych, mimo ambicji zarządu wydawnictwa. Po utracie dwóch redaktorów w ciągu dziesięciu numerów, w tym jednego rosyjskiego szpiega, który wypełniał gazetę antypolskimi nastrojami, wydawnictwo dość niechętnie zatrudniło Hieronima Derdowskiego, byłego redaktora gazety "Pielgrzym Polski" z Detroit o dość szemranej przeszłości. Derdowski był z pochodzenia Kaszubą i właśnie swojemu pochodzeniu zawdzięcza on sukces jaki udało mu się osiągnąć, ponieważ to Winony masowo emigrowali właśnie Kaszubi. Dzięki znajomości języka kaszubskiego szybko nawiązał on kontakt z osadnikami w Winonie. Rozpowszechniając język polski, edukując, a także przystosowując polską ludność do życia w Ameryce, Derdowski odniósł tak duży sukces, że 19 września 1889 r. udało mu się nabyć całe wydawnictwo. Jak jednak bywa z każdym sukcesem, a co za tym idzie i rozgłosem, "Wiarus" otrzymywał również głosy sprzeciwu ze względu na ataki na osoby publiczne jakich dokonywał Derdowski w swojej gazecie. Największy sprzeciw i wystawienie na publiczną debatę przyniosła zmiana nazwy pisma na "Katolik", które jednak ugięło się pod naporem opinii publicznej i po dwóch latach powróciło do swojej pierwotnej nazwy. Gazeta wydawana była nawet po śmierci Derdowskiego, wciąż głosząc jego poglądy aż do 1919 roku. Historia ta to zaledwie streszczenie informacji jakie zawarte są dla tej gazet na stronie Chronicling Amercica, jest to o tyle imponujące że przedstawiona jest tam cała historia dość niszowego pisma i to w dodatku w obcym dla amerykanów języku, co podkreśla nakład prac i staranność z jakim przeprowadzony został ten projekt. Zrzut ekranu ze strony z informacjami na temat pisma "Katolik" przedstawiony został ponieżej. Dla każdej gazety istnieje też możliwość pobrania transkryptu, jednakże jak nie trudno zauważyć w tym przypadku jakościowo nie należy on do najlepszych. Możliwe jest jednak zrozumienie sensu przewodniego prezentowanej treści, co jest już i tak dużym sukcesem zważając na to, że polsko języczne treści to zaledwie mikroskopijna część zbioru i nie są one zbiorem docelowym, a jedynie dodatkiem wzbogacającym bujną historie amerykańskiego piśmiennictwa \cite{Humanities2022Jun_ca_katol}. Zaprezentowane na rysunku \ref{katol} czasopismo to "Katolik", wydanie z dnia 12 kwietnia 1894 roku. Pod tą nazwą pismo to wydawane było jednak jedynie przez 2 lata (1893-1895) swojej historii. Szerzej znane może jako "Wiarus", który zadebiutował w 1886 roku w stanie Minnesota, a dokładniej w miejscowości Winona, która stanowiła centrum polskiej emigracji dla tego stanu. Treści w niej przedstawiane były w większości w języku polskim, chociaż już na prezentowanej stronie można zauważyć również treści w języku angielskim. Sam "Wiarus" ma bardzo ciekawą historie, ponieważ już same początki tego pisma nie należały do najprostszych, mimo ambicji zarządu wydawnictwa. Po utracie dwóch redaktorów w ciągu dziesięciu numerów, w tym jednego rosyjskiego szpiega, który wypełniał gazetę antypolskimi nastrojami, wydawnictwo dość niechętnie zatrudniło Hieronima Derdowskiego, byłego redaktora gazety "Pielgrzym Polski" z Detroit o dość szemranej przeszłości. Derdowski był z pochodzenia Kaszubą i właśnie swojemu pochodzeniu zawdzięcza on sukces jaki udało mu się osiągnąć, ponieważ to Winony masowo emigrowali właśnie Kaszubi. Dzięki znajomości języka kaszubskiego szybko nawiązał on kontakt z osadnikami w Winonie. Rozpowszechniając język polski, edukując, a także przystosowując polską ludność do życia w Ameryce, Derdowski odniósł tak duży sukces, że 19 września 1889 r. udało mu się nabyć całe wydawnictwo. Jak jednak bywa z każdym sukcesem, a co za tym idzie i rozgłosem, "Wiarus" otrzymywał również głosy sprzeciwu ze względu na ataki na osoby publiczne jakich dokonywał Derdowski w swojej gazecie. Największy sprzeciw i wystawienie na publiczną debatę przyniosła zmiana nazwy pisma na "Katolik", które jednak ugięło się pod naporem opinii publicznej i po dwóch latach powróciło do swojej pierwotnej nazwy. Gazeta wydawana była nawet po śmierci Derdowskiego, wciąż głosząc jego poglądy aż do 1919 roku. Historia ta to zaledwie streszczenie informacji jakie zawarte są dla tej gazet na stronie Chronicling Amercica, jest to o tyle imponujące że przedstawiona jest tam cała historia dość niszowego pisma i to w dodatku w obcym dla amerykanów języku, co podkreśla nakład prac i staranność z jakim przeprowadzony został ten projekt. Zrzut ekranu ze strony z informacjami na temat pisma "Katolik" przedstawiony został ponieżej. Dla każdej gazety istnieje też możliwość pobrania transkryptu, jednakże jak nie trudno zauważyć w tym przypadku jakościowo nie należy on do najlepszych. Możliwe jest jednak zrozumienie sensu przewodniego prezentowanej treści, co jest już i tak dużym sukcesem zważając na to, że polsko języczne treści to zaledwie mikroskopijna część zbioru i nie są one zbiorem docelowym, a jedynie dodatkiem wzbogacającym bujną historie amerykańskiego piśmiennictwa \cite{Humanities2022Jun_ca_katol}.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
@ -92,27 +94,30 @@ Strona Chronicling America nie oferuje jednak dostępu do żadnych statystyk zwi
\centering \centering
\includegraphics[width=0.87\textwidth]{images/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} \caption{Liczba wszystkich skolekcjonowanych stron gazet w repozytorium Chronicling America w rozbiciu na lata ich wydawania}
\label{wykres0}
\end{figure} \end{figure}
Powyższy wykres przedstawia liczebność skolekcjonowanych obrazów stron poszczególnych gazet ze względu na lata w których je wydawano. Jak nie trudno zauważyć najstarsze okazy charakteryzują się bardzo znikomą liczebnością. Dla trzech pierwszych lat (1777-1779), spośród obejmowanych przez projekt Chronicling America dat, zbiór zdigitalizowanych stron gazet wynosi zaledwie 316 obrazów. Kolejne 9 lat (1780-1788) to z kolei brak jakichkolwiek materiałów, co wydaje się być dość zrozumiałe ze względu na burzliwą historie Stanów Zjednoczonych i panujące w tych latach walki o niepodległość, a także jej późniejszą formalizacje. Największa ilość publikacji jaka została skolekcjonowana w ramach projektu pochodzi z lat 1908-1921, ta liczba wynosi aż 6,876,837 stron co stanowi 35\% całości zbiorów. Jest to o tyle ciekawe, że spodziewać by się można było tendencji wzrostowej przez cały zakres dat jeżeli chodzi o liczbę skatalogowanych materiałów, a z danych ewidentnie wynika, że po 1921 roku zauważalny jest drastyczny spadek ich ilości. Rycina \ref{wykres0} przedstawia wykres z liczebnościami zebranych obrazów stron poszczególnych gazet ze względu na lata w których je wydawano. Jak nie trudno zauważyć najstarsze okazy charakteryzują się bardzo znikomą liczebnością. Dla trzech pierwszych lat (1777-1779), spośród obejmowanych przez projekt Chronicling America dat, zbiór zdigitalizowanych stron gazet wynosi zaledwie 316 obrazów. Kolejne 9 lat (1780-1788) to z kolei brak jakichkolwiek materiałów, co wydaje się być dość zrozumiałe ze względu na burzliwą historie Stanów Zjednoczonych i panujące w tych latach walki o niepodległość, a także jej późniejszą formalizacje. Największa ilość publikacji jaka została skolekcjonowana w ramach projektu pochodzi z lat 1908-1921, ta liczba wynosi aż 6\,876\,837 stron co stanowi 35\% całości zbiorów. Jest to o tyle ciekawe, że spodziewać by się można było tendencji wzrostowej przez cały zakres dat jeżeli chodzi o liczbę skatalogowanych materiałów, a z danych ewidentnie wynika, że po 1921 roku zauważalny jest drastyczny spadek ich ilości.
\newline \newline
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.85\textwidth]{images/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} \caption{Liczba wszystkich skolekcjonowanych gazet w repozytorium Chronicling America w rozbiciu na poszczególne obszary}
\label{wykres1}
\end{figure} \end{figure}
Na wykres przedstawionym powyżej zaprezentowana została liczebność gazet jakie zostały skolekcjonowane w ramach Chronicling America do których dostęp możliwy jest z wykorzystaniem przedstawianego interfejsu. Jak widzimy na samym szycie plasuje się stan Virginia, który to dysponuje zbiorem 125 tysięcy gazet przeznaczonych do digitalizacji w ramach projektu. Tuż za nim znajduje się District od Columbia, co jest w pełni zrozumiałe ze względu na jego główną siedzibę, Waszyngton, jednocześnie będący stolicą Stanów Zjednoczonych, choć i tak dziwić może fakt, że nie znajduje się on na miejscu pierwszym. Szczególne zainteresowanie wzbudza jedna pozycja w tym rankingu, a mianowicie pozycja ostatnia "Piedmont". Pomimo, że na stronie w opcji filtrowania mamy dostępne filtrowanie po stanach, to znalazły się tutaj też miejsca takie jak Puerto Rico czy Wyspy Dziewicze (z ang. Virgin Islands) i wspomniany wcześniej, zamykający ranking z zaledwie 773 zdigitalizowanymi pozycjami, Piedmont. Jest to o tyle zaskakujące, że nie jest to ani stan ani terytorium zależne, jak chociażby Wyspy Dziewicze, a jest to region płaskowyżu położony we wschodnich Stanach Zjednoczonych rozciągający się od Nowego Jorku na północy do środkowej Alabamy na południu. Nie sposób jednak znaleźć informacji z jakich pobudek miejsce to znalazło się w listingu "stanów" w opcji filtrowania i czy aby na pewno jest to poprawne miejsce, a nie swego rodzaju niedopatrzenie. Na rysunku \ref{wykres1} zaprezentowany został wykres liczebności gazet jakie zostały zebrane w ramach Chronicling America do których dostęp możliwy jest z wykorzystaniem przedstawianego interfejsu. Jak widzimy na samym szycie plasuje się stan Virginia, który to dysponuje zbiorem 125 tysięcy gazet przeznaczonych do digitalizacji w ramach projektu. Tuż za nim znajduje się District od Columbia, co jest w pełni zrozumiałe ze względu na jego główną siedzibę, Waszyngton, jednocześnie będący stolicą Stanów Zjednoczonych, choć i tak dziwić może fakt, że nie znajduje się on na miejscu pierwszym. Szczególne zainteresowanie wzbudza jedna pozycja w tym rankingu, a mianowicie pozycja ostatnia "Piedmont". Pomimo, że na stronie w opcji filtrowania mamy dostępne filtrowanie po stanach, to znalazły się tutaj też miejsca takie jak Puerto Rico czy Wyspy Dziewicze (\emph{z ang. Virgin Islands}) i wspomniany wcześniej, zamykający ranking z zaledwie 773 zdigitalizowanymi pozycjami, Piedmont. Jest to o tyle zaskakujące, że nie jest to ani stan ani terytorium zależne, jak chociażby Wyspy Dziewicze, a jest to region płaskowyżu położony we wschodnich Stanach Zjednoczonych rozciągający się od Nowego Jorku na północy do środkowej Alabamy na południu. Nie sposób jednak znaleźć informacji z jakich pobudek miejsce to znalazło się w listingu "stanów" w opcji filtrowania i czy aby na pewno jest to poprawne miejsce, a nie swego rodzaju niedopatrzenie.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/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} \caption{Liczba wszystkich zebranych stron gazet w repozytorium Chronicling America w rozbiciu na poszczególne obszary}
\label{wykres2}
\end{figure} \end{figure}
Dla porządku wykres przedstawiający już niecałe gazety w rozbiciu na miejsce pochodzenia lecz pojedyncze strony posiada dokładnie tą samą kolejność co poprzedni. Jak widzimy poniżej w tym zestawieniu District of Columbia już zdecydowanie nie ma sobie równych. Obrazów pochodzących z tamtego regionu skatalogowane w ramach projektu dla tego stanu w repozytroium znajduje sie zawrotna liczba 1,835,519, która stanowi 10\% całości zbioru. To dwukrotnie więcej niż drugi w tym zestawieniu stan Nowy Jork. W tym wypadku Virginia uplasowała się dopiero na pozycji trzeciej. Stawkę ponownie zamyka Piedmont w ramach którego dostępne jest jedynie 32,120 pojedynczych stron gazet. Dla porządku wykres na rysunku \ref{wykres2}, przedstawiający już niecałe gazety w rozbiciu na miejsce pochodzenia lecz pojedyncze strony posiada dokładnie tą samą kolejność co poprzedni. Jak widzimy poniżej w tym zestawieniu District of Columbia już zdecydowanie nie ma sobie równych. Obrazów pochodzących z tamtego regionu skatalogowane w ramach projektu dla tego stanu w repozytroium znajduje sie zawrotna liczba 1\,835\,519, która stanowi 10\% całości zbioru. To dwukrotnie więcej niż drugi w tym zestawieniu stan Nowy Jork. W tym wypadku Virginia uplasowała się dopiero na pozycji trzeciej. Stawkę ponownie zamyka Piedmont w ramach którego dostępne jest jedynie 32\,120 pojedynczych stron gazet.
\clearpage \clearpage
Z ramienia Chronicling America narodził się kolejny projekt, który stanowi następny krok w stronę pełnej cyfryzacji posiadanych treści. Projekt ten nazywa się Newspaper Navigator, a jego celem było dołożyć kolejną cegiełkę do już i tak mocno rozbudowanych możliwości przeszukiwania skolekcjonowanych zbiorów, a mianowicie rozpoznawania znajdujących się w nich konkretnych rodzajów elementów, głównie będących różnego rodzaju obrazami. Opisowi Newspaper Navigator w pełni poświęcony został następny podrozdział. Z ramienia Chronicling America narodził się kolejny projekt, który stanowi następny krok w stronę pełnej cyfryzacji posiadanych treści. Projekt ten nazywa się Newspaper Navigator, a jego celem było dołożyć kolejną cegiełkę do już i tak mocno rozbudowanych możliwości przeszukiwania skolekcjonowanych zbiorów, a mianowicie rozpoznawania znajdujących się w nich konkretnych rodzajów elementów, głównie będących różnego rodzaju obrazami. Opisowi Newspaper Navigator w pełni poświęcony został następny podrozdział.
@ -132,91 +137,100 @@ Newspaper Navigator to nazwa eksperymentu z dziedziny uczenia maszynowego, a bę
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}. 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 \newline
Na poniższym obrazie znajduje się interfejs wyszukiwarki z przykład wyszukiwania dla frazy 'football' (z ang. futbol amerykański): Na rysunkach \ref{wysz00} oraz \ref{wysz01} przedstawiono interfejs wyszukiwarki z przykład wyszukiwania dla frazy 'football' (\emph{z ang. futbol amerykański}):
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/nn_interface_football.png} \includegraphics[width=1\textwidth]{images/nn_interface_football.png}
\caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'football' \cite{BibEntry2022Jul_nn_search}} \caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'football' \cite{BibEntry2022Jul_nn_search}}
\label{wysz00}
\includegraphics[width=1\textwidth]{images/elem_search_nn.png} \includegraphics[width=1\textwidth]{images/elem_search_nn.png}
\caption{Szczegółowy widok wybranego rezultatu wyszukiwania \cite{BibEntry2022Jul_nn_search}} \caption{Szczegółowy widok wybranego rezultatu wyszukiwania \cite{BibEntry2022Jul_nn_search}}
\label{wysz01}
\end{figure} \end{figure}
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): 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' (\emph{z ang. bar}):
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/nn_interface_bar.png} \includegraphics[width=1\textwidth]{images/nn_interface_bar.png}
\caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'bar' \cite{BibEntry2022Jul_nn_search}} \caption{Przykład użycia wyszukiwarki Newspaper Nawigator dla frazy 'bar' \cite{BibEntry2022Jul_nn_search}}
\label{wysz1}
\end{figure} \end{figure}
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/elem_search_nn_2_wrong.png} \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}} \caption{Szczegółowy widok wybranego błędnego rezultatu wyszukiwania 1 \cite{BibEntry2022Jul_nn_search}}
\label{wysz2}
\includegraphics[width=1\textwidth]{images/elem_search_nn_3_wrong.png} \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}} \caption{Szczegółowy widok wybranego błędnego rezultatu wyszukiwania 2 \cite{BibEntry2022Jul_nn_search}}
\label{wysz3}
\end{figure} \end{figure}
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. Jak widzimy na rysunku \ref{wysz1}, 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 \ref{wysz2} oraz \ref{wysz3}. Pierwszy z nich prezentuje rabarbarową galaretkę (\emph{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 \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: 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 tabela \ref{tabnn}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c c c} \begin{tabular}{c c c c}
\toprule \toprule
Kategoria & & Liczebność zbioru: & \\ Kategoria & & Liczebność zbioru: & \\
& ogółem & treningowego & testowego \\ & ogółem & uczącego & testowego \\
\toprule \toprule
Fotografie & 4,254 & 3,375 & 879 \\ Fotografie & 4\,254 & 3\,375 & 879 \\
\midrule \midrule
Ilustracje & 1,048 & 842 & 206 \\ Ilustracje & 1\,048 & 842 & 206 \\
\midrule \midrule
Mapy & 215 & 181 & 34 \\ Mapy & 215 & 181 & 34 \\
\midrule \midrule
Komiksy & 1,150 & 939 & 211 \\ Komiksy & 1\,150 & 939 & 211 \\
\midrule \midrule
Karykatura & 293 & 239 & 54 \\ Karykatura & 293 & 239 & 54 \\
\midrule \midrule
Tytuły & 27,868 & 22,179 & 5,689 \\ Tytuły & 27\,868 & 22\,179 & 5\,689 \\
\midrule \midrule
Reklamy & 13,581 & 10,723 & 2,858 \\ Reklamy & 13\,581 & 10\,723 & 2\,858 \\
\bottomrule \bottomrule
Suma & 48,409 & 38,478 & 9,931 \\ Suma & 48\,409 & 38\,478 & 9\,931 \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\end{table} \caption{Liczebność adnotacji w projekcie Newspaper Navigator z podziałem na zbiór}
\label{tabnn}
\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: 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 tabela \ref{NN_wynik}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c} \begin{tabular}{c c}
\toprule \toprule
Kategoria & Wartość metryki AP \\ Kategoria & Wartość metryki AP \\
\toprule \toprule
Fotografie & 0.616 \\ Fotografie & 0,616 \\
\midrule \midrule
Ilustracje & 0.309 \\ Ilustracje & 0,309 \\
\midrule \midrule
Mapy & 0.695 \\ Mapy & 0,695 \\
\midrule \midrule
Komiksy & 0.656 \\ Komiksy & 0,656 \\
\midrule \midrule
Karykatura & 0.630 \\ Karykatura & 0,630 \\
\midrule \midrule
Tytuły & 0.743 \\ Tytuły & 0,743 \\
\midrule \midrule
Reklamy & 0.787 \\ Reklamy & 0,787 \\
\midrule \bottomrule
Średnia (mAP) & 0.634 \\ Średnia (mAP) & 0,634 \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\end{table} \caption{Wyniki modelu detekcji w projekcie Newspaper Navigator}
\label{NN_wynik}
\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: Metryka za pomocą której przedstawione zostały powyższe wyniki to średnia predykcja (\emph{z ang. average precision - AP}). Metryka ta jest najpopularniejszym sposobem prezentowania wyników w przypadku zagadnień z zakresu detekcji obrazu (\emph{z ang. object detection}). AP bazuje na następujących sub-formułach:
\begin{enumerate} \begin{enumerate}
\item[$\bullet$] \textbf{Tablica pomyłek (z ang. confusion matrix)} \\ \item[$\bullet$] \textbf{Tablica pomyłek (\emph{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. 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} \begin{center}
\item[{\includegraphics[scale=0.6]{images/conf_mat.png}}] \item[{\includegraphics[scale=0.6]{images/conf_mat.png}}]
@ -229,7 +243,7 @@ Metryka za pomocą której przedstawione zostały powyższe wyniki to średnia p
\item[$\bullet$] TN = Ludzie zdrowi poprawnie zdiagnozowani jako zdrowi \cite{WspoltworcyprojektowFundacjiWikimedia2015Feb_CONF_MATRIX} \\ \item[$\bullet$] TN = Ludzie zdrowi poprawnie zdiagnozowani jako zdrowi \cite{WspoltworcyprojektowFundacjiWikimedia2015Feb_CONF_MATRIX} \\
\end{enumerate} \end{enumerate}
\item[$\bullet$] \textbf{Indeks Jaccarda (z ang. Intersection over Union - IoU)} \\ \item[$\bullet$] \textbf{Indeks Jaccarda (\emph{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: 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} \begin{center}
\item[{\includegraphics[scale=0.45]{images/iou.png}}] \item[{\includegraphics[scale=0.45]{images/iou.png}}]
@ -244,7 +258,7 @@ Metryka za pomocą której przedstawione zostały powyższe wyniki to średnia p
\end{equation} \end{equation}
\end{center} \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}. \\ 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} \\ \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). Recall jest stosunkiem wartości poprawnie sklasyfikowanych jako pozytywne (TP) do sumy obiektów poprawnie sklasyfikowanych jako pozytywne oraz negatywne (TP + FN).
@ -256,9 +270,10 @@ Metryka za pomocą której przedstawione zostały powyższe wyniki to średnia p
Metryka ta oblicza, jak wiele z rzeczywistych pozytywnych obserwacji klasyfikator faktycznie przewiduje jako obserwacje pozytywne \cite{Shung2020Apr}. Metryka ta oblicza, jak wiele z rzeczywistych pozytywnych obserwacji klasyfikator faktycznie przewiduje jako obserwacje pozytywne \cite{Shung2020Apr}.
\end{enumerate} \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: Ś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 wzór \ref{AP}.
\begin{equation} \begin{equation}
AP = \sum_{n}(R_{n}=R_{n-1})P_{n} AP = \sum_{n}(R_{n}=R_{n-1})P_{n}
\label{AP}
\end{equation} \end{equation}
W powyższym wzorze P oraz R oznaczają kolejno precyzję i recall przy n-tym progu IoU. W powyższym wzorze P oraz R oznaczają kolejno precyzję i recall przy n-tym progu IoU.
\begin{equation} \begin{equation}
@ -267,7 +282,7 @@ W powyższym wzorze P oraz R oznaczają kolejno precyzję i recall przy n-tym pr
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}. 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 \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}. 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 (\emph{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!] \begin{figure}[h!]
\centering \centering

View File

@ -1,26 +1,27 @@
% !TeX encoding = UTF-8 % !TeX encoding = UTF-8
% !TeX spellcheck = pl_PL % !TeX spellcheck = pl_PL
\chapter{Eksperyment na podstawie danych Newspaper Navigator} \chapter{Eksperyment na podstawie danych Newspaper Navigator}\hypertarget{chap:4}{}
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: 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 schemat przedstawiony na rysunku \ref{schemat_aplikacji}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\textwidth]{images/schemat_aplikacji.png} \includegraphics[width=1\textwidth]{images/schemat_aplikacji.png}
\caption{Schemat działania aplikacji} \caption{Schemat działania aplikacji}
\label{schemat_aplikacji}
\end{figure} \end{figure}
Budowanie rozwiązania składało się z kilku kluczowych element, które zostały wylistowane w sposób chronologiczny poniżej: Budowanie rozwiązania składało się z kilku kluczowych element, które zostały wylistowane w sposób chronologiczny poniżej:
\begin{enumerate} \begin{enumerate}
\item Pozyskiwanie obrazów o wysokiej rozdzielczości przy użyciu web scraper'a. \item pozyskiwanie obrazów o wysokiej rozdzielczości przy użyciu robota internetowego (\emph{z ang. web scraper}),
\item Przetworzenie obrazów wraz z ich adnotacjami do użytecznej postaci. \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 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 ladrowanie 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 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. \item zaprojektowanie graficznego interfejsu użytkownika, który wyświetla wybrane treści wizualne zgodne z zapytaniem tekstowym użytkownika.
\end{enumerate} \end{enumerate}
\section{Architektura techniczna rozwiązania} \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: 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{% \dirtree{%
.1 \textbf{Master\_degree}. .1 \textbf{Master\_degree}.
@ -40,67 +41,74 @@ Całość prac związanych z przygotowaniem rozwiązania wykonana została przy
} }
\begin{itemize} \begin{itemize}
\item[$\bullet$]\textbf{cropped\_visual\_content} - wykadrowane treści wizualne. \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{model\_config} -- folder ten zawiera zapisany model, statystyki ewaluacyjne z ostatniej epoki treningu, a także parametry konfiguracyjne 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{data} -- na folder data składają się 3 inne foldery o takiej samej strukturze (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 (uczącego, 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{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{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{scraped\_photos} -- pozyskane za pomocą robota internetowego obrazy.
\item[$\bullet$]\textbf{source\_annotations} - oryginalne adnotacje do obrazów pobrane z repozytorium Newspaper Navigator. \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. \item[$\bullet$]\textbf{src} -- rdzeń aplikacji i całe jej zaplecze techniczne.
\begin{itemize} \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{runners} -- zestaw skryptów wywoływanych z wiersza poleceń uruchamiających odpowiednie fragmenty kodu zgromadzonego w folderze 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. \item[$\bullet$]\textbf{lib} -- zbiór skryptów zawierających skategoryzowane w odpowiednie pliki, klasy i funkcje, wywoływane następnie przez skrypty z folderu runners.
\end{itemize} \end{itemize}
\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. Repozytorium wzbogacono o CI/CD z pomocą rozszerzenia oferowanego przez używany system kontroli wersji, tj. GitHub Actions \cite{BibEntry2022Sep_GH_actions}. W tym przypadku CI/CD odpowiedzialne było za automatyczne formatowanie kodu z wykorzystaniem narzędzia jakim jest Black \cite{BibEntry2022Sep_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} \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: 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 odpowiednio zbiór uczący (treningowy) i testowy. Ważnym było zachowanie tej samej struktury testowego zbioru danych, aby mieć możliwość porównania ich z wynikami pierwowzoru. Dodatkowo, ze zbioru uczącego wyodrębniony został zestaw danych walidacyjnych, którego przeznaczeniem jest możliwość ewaluacji wyników jeszcze podczas 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 funkcja haszująca (\emph{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, 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 jeden wiersz 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 (uczący, walidacyjny lub testowy). Twórcy projektu Newspaper Navigator umieścili zebrane obrazy na internetowym nośniku danych Amazon S3, do ich pobrania zbudowany został robot internetowy 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 przedstawia tabela \ref{liczebnosc_moja}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c c} \begin{tabular}{c c c}
\toprule \toprule
\multicolumn{3}{c}{Liczebność zbioru} \\ \multicolumn{3}{c}{Liczebność zbioru} \\
treningowego & walidacyjnego & testowego \\ uczącego & walidacyjnego & testowego \\
\toprule \toprule
2,630 & 215 & 712\\ 2\,630 & 215 & 712\\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\caption{Liczebność zdjęć z podziałem na zbiór}
\label{liczebnosc_moja}
\end{table} \end{table}
\newline \newline
Z kolei rozkład odpowiadającym im adnotacją prezentuje się w ten sposób: Z kolei rozkład odpowiadającym im adnotacją prezentuje tabela \ref{liczebnosc_moja2}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c c c c} \begin{tabular}{c c c c c}
\toprule \toprule
Etykieta & \multicolumn{4}{c}{Liczebność zbioru} \\ Etykieta & \multicolumn{4}{c}{Liczebność zbioru} \\
& ogółem & treningowego & walidacyjnego & testowego \\ & ogółem & uczącego & walidacyjnego & testowego \\
\toprule \toprule
Tytuły & 27,868 & 20,528 & 1,651 & 5,689\\ Tytuły & 27\,868 & 20\,528 & 1\,651 & 5\,689\\
\midrule \midrule
Reklamy & 13,581 & 9,910 & 813 & 2,858\\ Reklamy & 13\,581 & 9\,910 & 813 & 2\,858\\
\midrule \midrule
Fotografie & 4,254 & 3,135 & 240 & 879\\ Fotografie & 4\,254 & 3\,135 & 240 & 879\\
\midrule \midrule
Komiksy & 1,443 & 1,070 & 108 & 265\\ Komiksy & 1\,443 & 1\,070 & 108 & 265\\
\midrule \midrule
Ilustracje & 1,048 & 786 & 56 & 206\\ Ilustracje & 1\,048 & 786 & 56 & 206\\
\midrule \midrule
Mapy & 215 & 170 & 11 & 34\\ Mapy & 215 & 170 & 11 & 34\\
\bottomrule \bottomrule
Suma & 48,409 & 35,599 & 2,879 & 9,931\\ Suma & 48\,409 & 35\,599 & 2\,879 & 9\,931\\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\caption{Liczebność adnotacji z podziałem na zbiór}
\label{liczebnosc_moja2}
\end{table} \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 powstałych w trakcie tworzenia adnotacji. 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: 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".
\newline
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ć wyniki między projektami. 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 pozyskanych zdjęć o wyższej rozdzielczości. 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. Niektóre adnotacje znajdowały się poza granicami pozyskanych obrazów, co musiało być efektem błędów powstałych w trakcie tworzenia adnotacji. Wszystkie tego rodzaju obserwacje zostały poprawione w taki sposób, że zostały nałożone na nie odpowiednie ograniczenia. Statystyki dotyczące tej procedury przedstawia tabela \ref{tab_problem}.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c c c c} \begin{tabular}{c c c c c}
\toprule \toprule
Problem & & Liczebność zbioru: & & Rozwiązanie \\ Problem & & Liczebność zbioru: & & Rozwiązanie \\
& treningowego & walidacyjnego & testowego & \\ & uczącego & walidacyjnego & testowego & \\
\midrule \midrule
x0 < 0 & 3 & 0 & 1 & x0 = 0 \\ x0 < 0 & 3 & 0 & 1 & x0 = 0 \\
\midrule \midrule
@ -111,9 +119,11 @@ Porównując tabele przedstawione powyżej z tabelami odnoszącymi się do klas
y1 > wys. & 3 & 0 & 1 & y1 = wys. \\ y1 > wys. & 3 & 0 & 1 & y1 = wys. \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\caption{Błędy wśród adnotacji dotyczące współrzędnych treści wizualnych}
\label{tab_problem}
\end{table} \end{table}
Pomimo, że odsetek błędów jest znikomy lepiej było takowe obserwacje poprawić. Na poniższych rycinach przedstawione zostały przykładowe zdjęcia wraz z adnotacjami już po etapie przetwarzania danych: Kolejno na rysunkach \ref{1png}, \ref{2png}, \ref{3png} i \ref{4png} przedstawione zostały przykładowe zdjęcia wraz z adnotacjami już po etapie wstępnego przetwarzania danych.
\begin{figure}[h!] \begin{figure}[h!]
\label{ fig7} \label{ fig7}
@ -122,33 +132,41 @@ Pomimo, że odsetek błędów jest znikomy lepiej było takowe obserwacje popraw
\includegraphics[width=1\linewidth]{images/1.png} \includegraphics[width=1\linewidth]{images/1.png}
\caption{Przykład 1} \caption{Przykład 1}
\vspace{4ex} \vspace{4ex}
\label{1png}
\end{minipage}%% \end{minipage}%%
\begin{minipage}[b]{0.5\linewidth} \begin{minipage}[b]{0.5\linewidth}
\centering \centering
\includegraphics[width=1\linewidth]{images/3.png} \includegraphics[width=1\linewidth]{images/3.png}
\caption{Przykład 2} \caption{Przykład 2}
\vspace{4ex} \vspace{4ex}
\label{2png}
\end{minipage} \end{minipage}
\begin{minipage}[b]{0.5\linewidth} \begin{minipage}[b]{0.5\linewidth}
\centering \centering
\includegraphics[width=1\linewidth]{images/5.png} \includegraphics[width=1\linewidth]{images/5.png}
\caption{Przykład 3} \caption{Przykład 3}
\vspace{4ex} \vspace{4ex}
\label{3png}
\end{minipage}%% \end{minipage}%%
\begin{minipage}[b]{0.5\linewidth} \begin{minipage}[b]{0.5\linewidth}
\centering \centering
\includegraphics[width=1\linewidth]{images/not_complete.png} \includegraphics[width=1\linewidth]{images/not_complete.png}
\caption{Przykład 4} \caption{Przykład 4}
\vspace{4ex} \vspace{4ex}
\label{4png}
\end{minipage} \end{minipage}
\end{figure} \end{figure}
\clearpage \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. Jak nietrudno 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 obiekt wejściowy dla modelu ma być interpretowany jako mapa, a raz bardzo podobna treść jako tło (brak adnotacji). Im lepszej jakości danymi dysponujemy tym lepszych rezultatów możemy się spodziewać. Na tej podstawie sformułować można tezę, że w kolejnych krokach należałoby 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} \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}. \subsection{Architektura modelu}
Model detekcji treści wizualnych stworzony na potrzeby tej pracy 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. Wśród konkurencyjnych narzędzi wyróżnia go przede wszystkim używanie dynamicznych grafów obliczeniowych, co ułatwia dostosowywanie i badanie przebiegu tworzonego modelu na bieżąco, kontrolując wykonywany kod linia po linii. Dodatkowo twórcy zadbali o odpowiedni styl kodowania, który wykorzystuje unikalne cechy języka Python, dzięki czemu jest on łatwy do interpretacji i przyjazny do nauki \cite{Paszke2019Dec}.
\newline
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ą na regionach. Przedrostek Faster oznacza zaś jej kolejne ulepszenie. Pierwsza implementacja tej architektury nosiła nazwę R-CNN \cite{Girshick2013Nov}, następna Fast R-CNN \cite{Girshick2015Apr}, zaś aktualnie najnowsza nosi nazwę właśnie Faster R-CNN \cite{Bharati2019Aug}.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
@ -157,16 +175,17 @@ Model detekcji treści wizualnych stworzony na potrzeby tej pracy dyplomowej zos
\caption{Architektura Faster R-CNN \cite{Ren2015Jun}} \caption{Architektura Faster R-CNN \cite{Ren2015Jun}}
\end{figure} \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: Architektura Faster R-CNN zaczyna się od konwolucyjnej sieci neuronowej używanej do proponowania regionów (\emph{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 (\emph{z ang. vanishing gradient}) oraz eksplodującego gradientu (\emph{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 nietrudno zauważyć, oba te zjawiska są wysoce niepożądane. ResNet pozwolił na rozwiązywanie jeszcze bardziej skomplikowanych problemów z dziedziny komputerowej wizji (\emph{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ę wokół 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, jest to tzw. połączenie rezydualne (\emph{z ang. residual connection}) \cite{He2015Dec}. Mechanizm ten został zaprezentowany na rysunku \ref{resnt}.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.8\textwidth]{images/resnt.png} \includegraphics[width=0.8\textwidth]{images/resnt.png}
\caption{Koncepcja sieci ResNet \cite{He2015Dec}} \caption{Koncepcja sieci ResNet, połączenie rezydualne \cite{He2015Dec}}
\label{resnt}
\end{figure} \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}. 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 (\emph{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 (zobacz rozdział \hyperlink{chap:2}{2}). 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 wtedy, 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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.6\textwidth]{images/rpn.png} \includegraphics[width=0.6\textwidth]{images/rpn.png}
@ -175,45 +194,57 @@ RPN wyposażona jest zarówno w klasyfikator jak i regresor. Klasyfikator ma za
Ostatnim etapem architektury Faster R-CNN jest detektor, którego zadaniem jest predykcja klasy dla danego regionu. 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. 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 znany 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. Podany czas dotyczy wykonywania przeliczeń na karcie graficznej Nvidia GeForce RTX z 24 GB pamięci VRAM.
\newline \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: Wejściem modelu są zdjęcia gazet w skali szarości przeskalowane do rozmiaru 1024 x 1024 podzielone na 20-elementowe partie (\emph{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.
\newline
Długość kroku (zobacz rozdział \hyperlink{chap:2}{2}) wynosiła 0,00035, dodatkowo była ona dwukrotnie zmniejszana co każde 7 epok wykorzystując do tego planistę tempa uczenia (\emph{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 \cite{Kingma2014Dec}. 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.
\subsection{Analiza predykcji i wyników}
\subsubsection{Wyniki modelu}
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 Newspaper Navigator prezentuje tabela \ref{table_my_map}. 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 zaskakiwać, 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 wokół 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.
\begin{table}[h!] \begin{table}[h!]
\centering \centering
\begin{tabular}{c c} \begin{tabular}{c c}
\toprule \toprule
Kategoria & Wartość metryki AP \\ Kategoria & Wartość metryki AP \\
\toprule \toprule
Fotografie & 0.7323 \\ Fotografie & 0,7323 \\
\midrule \midrule
Ilustracje & 0.3512 \\ Ilustracje & 0,3512 \\
\midrule \midrule
Mapy & 0.7659 \\ Mapy & 0,7659 \\
\midrule \midrule
Komiksy & 0.7189 \\ Komiksy & 0,7189 \\
\midrule \midrule
Tytuły & 0.8918 \\ Tytuły & 0,8918 \\
\midrule \midrule
Reklamy & 0.8502 \\ Reklamy & 0,8502 \\
\bottomrule \bottomrule
Średnia (mAP) & 0.7184 \\ Średnia (mAP) & 0,7184 \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\end{table} \caption{Wyniki metryki AP}
\label{table_my_map}
\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: Na następnej stronie przedstawiona została przykładowa predykcja dla każdej klasy w opisywanym zbiorze danych, tj. reklamy, mapy, ilustracji, tytułu, fotografii, czy komiksu. Na pierwszym obrazie, tj. obrazie \ref{adv2}, przedstawiona została bardzo typowa dla tego zbioru reklama, a mianowicie reklama odzienia wierzchniego. Rysunek \ref{map3} przedstawia zaś mapę obrazującą zjawisko głodu w Europie. Następnie na rycinie \ref{ilustration4} widzimy gęś, a obok niej na kolejnym już obrazie \ref{head}, znajduje się tytuł sekcji. W tytule tym zawarto apel do, jak to nazwano obywateli patriotów, aby wspierali pobór wojenny oraz kupowali wojenne obligacje. Ostatni rysunek w tym rzędzie, czyli rysunek \ref{photo} przedstawia fotografie. Na samym dole, na rycinie \ref{cart}, ostatnią klasę, czyli komiks, reprezentuje rysunkowa historyjka o łowieniu ryb w domowym akwarium.
\clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\begin{minipage}{0.45\textwidth} \begin{minipage}{0.45\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/adv2.png} \includegraphics[width=1\textwidth]{images/adv2.png}
\caption{Reklama} \caption{Reklama}
\label{adv2}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.45\textwidth} \begin{minipage}{0.45\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/map3.png} \includegraphics[width=1\textwidth]{images/map3.png}
\caption{Mapa} \caption{Mapa}
\label{map3}
\end{minipage} \end{minipage}
\end{figure} \end{figure}
\begin{figure}[h!] \begin{figure}[h!]
@ -222,61 +253,72 @@ Porównując otrzymane wyniki z rezultatami osiągniętymi przez naukowców prac
\centering \centering
\includegraphics[width=1\textwidth]{images/ilustration4.png} \includegraphics[width=1\textwidth]{images/ilustration4.png}
\caption{Ilustracja} \caption{Ilustracja}
\label{ilustration4}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.3\textwidth} \begin{minipage}{0.3\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/head.png} \includegraphics[width=1\textwidth]{images/head.png}
\caption{Tytuł} \caption{Tytuł}
\label{head}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.3\textwidth} \begin{minipage}{0.3\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/photo.png} \includegraphics[width=1\textwidth]{images/photo.png}
\caption{Fotografia} \caption{Fotografia}
\label{photo}
\end{minipage} \end{minipage}
\end{figure} \end{figure}
\clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.9\textwidth]{images/cart.png} \includegraphics[width=1\textwidth]{images/cart.png}
\caption{Komiks} \caption{Komiks}
\label{cart}
\end{figure} \end{figure}
\clearpage
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: \subsubsection{Analiza błędów}
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 i na odwrót. Nie jest to jednak zaskakujące, ponieważ nawet człowiek może mieć z tym zadaniem problem w omawianym zbiorze. Opisane zjawisko przedstawiają predykcje przedstawione na poniższych obrazach.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\begin{minipage}{0.3\textwidth} \begin{minipage}{0.3\textwidth}
\centering \centering
\includegraphics[width=0.7\textwidth]{images/ilu_phot.png} \includegraphics[width=0.7\textwidth]{images/ilu_phot.png}
\caption{Błąd, przykład 1} \caption{Błąd podwójnej predykcji 1}
\label{ilu_phot}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.3\textwidth} \begin{minipage}{0.3\textwidth}
\centering \centering
\includegraphics[width=0.75\textwidth]{images/ilu_phot2.png} \includegraphics[width=0.75\textwidth]{images/ilu_phot2.png}
\caption{Błąd, przykład 2} \caption{Błąd podwójnej predykcji 2}
\label{ilu_phot2}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.3\textwidth} \begin{minipage}{0.3\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/ilu_phot3.png} \includegraphics[width=1\textwidth]{images/ilu_phot3.png}
\caption{Błąd, przykład 3} \caption{Błąd podwójnej predykcji 3}
\label{ilu_phot3}
\end{minipage} \end{minipage}
\end{figure} \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. 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 następnej stronie, kolejno na obrazach \ref{err} oraz \ref{err1}. 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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.7\textwidth]{images/err.png} \includegraphics[width=0.62\textwidth]{images/err.png}
\caption{Błąd, przykład 4} \caption{Błąd niewystarczającej liczby wykrytych treści}
\label{err}
\end{figure} \end{figure}
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.8\textwidth]{images/err1.png} \includegraphics[width=0.62\textwidth]{images/err1.png}
\caption{Błąd, przykład 5} \caption{Błąd niewystarczającej liczby wykrytych treści, a także podwójnej predykcji}
\label{err1}
\end{figure} \end{figure}
\clearpage \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. \subsubsection{Analiza poprawnych predykcji}
Na tej i następnych stronach przedstawione zostały przykłady zdjęć gazet, dla których wszystkie możliwe wizualne treści, jakie znajdowały się na obrazach, zostały 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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.9\textwidth]{images/full11.png} \includegraphics[width=0.9\textwidth]{images/full11.png}
@ -354,36 +396,40 @@ Poniżej zaś przygotowane zostało zestawienie predykcji (obrazki po lewej stro
\end{figure} \end{figure}
\clearpage \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ł'. \subsection{Eksperyment z polską współczesną gazetą}
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ść słabo. Na zdjęciu \ref{nowa1} tylko 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 jako reklama. Na pierwszy rzut oka wydawać się może, że ich struktura znacznie bardziej pasuje właśnie do etykiety 'Tytuł'.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.72\textwidth]{images/nowa1.png} \includegraphics[width=0.72\textwidth]{images/nowa1.png}
\caption{Głos Wielkopolski, przykład 1} \caption{Głos Wielkopolski, przykład 1}
\label{nowa1}
\end{figure} \end{figure}
\clearpage \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. Przykład drugi wygląda zaś nieco lepiej, ponieważ aż 5 z 6 predykcji jest w miarę sensowna, jedyną nietrafioną klasyfikacją jest reklama na samym dole. Pominięta została jednak spora część treści wizualnych zgromadzonych na zdjęciu.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.72\textwidth]{images/nowa2.png} \includegraphics[width=0.72\textwidth]{images/nowa2.png}
\caption{Głos Wielkopolski, przykład 2} \caption{Głos Wielkopolski, przykład 2}
\label{nowa2}
\end{figure} \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. Jak widać na obrazie \ref{nowa2}, 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 przetworzyć przez nią dowolny zbiór danych o tej samej strukturze i na tej podstawie swobodnie wytrenować własny model, a jego wyniki poddać kolejnym etapom programu.
\section{Wyszukiwarka obrazów na bazie wyników z OCR} \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. 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 \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. \subsection{Transformacja obrazów oraz system OCR}
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 przedstawiony w skali szarości.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.5\textwidth]{images/o1.png} \includegraphics[width=0.5\textwidth]{images/o1.png}
\caption{Oryginalny obraz} \caption{Oryginalny obraz}
\end{figure} \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. Następnie obraz zostaje poddany operacji matematycznej zwanej dylatacją (\emph{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 \clearpage
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
@ -391,7 +437,7 @@ Następnie obraz zostaje poddany operacji matematycznej zwanej dylatacją (z ang
\caption{Obraz po dylatacji} \caption{Obraz po dylatacji}
\end{figure} \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}. Drugi krok to zastosowanie filtra o nazwie rozmycie medianą (\emph{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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.5\textwidth]{images/o3.png} \includegraphics[width=0.5\textwidth]{images/o3.png}
@ -413,10 +459,11 @@ Ostatnim krokiem jest normalizacja, służy ona do zwiększenia kontrastu, co po
\caption{Znormalizowany obraz} \caption{Znormalizowany obraz}
\end{figure} \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}. Tak przygotowane obrazy przepuszczane są przez system OCR. Na potrzeby przygotowywanej pracy magisterskiej do tego zadania użyty został Tesseract OCR. Narzędzie to zostało opracowane przez firmę Google \cite{10.5555/1288165.1288167}. Silnik Tesseract dostępny jest na licencji Open Source, dzięki czemu można swobodnie używać go do własnych celów. W języku programowania Python dostępna jest biblioteka, która pozwala korzystać z tego silnika z poziomu kodu aplikacji, po jego uprzednim zainstalowaniu \cite{madmaze2022Sep}. 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 \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: \subsection{Interfejs graficzny użytkownika}
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 przedstawione na poniższych zrzutach ekranu.
\clearpage \clearpage
\begin{figure}[h!] \begin{figure}[h!]
@ -425,30 +472,37 @@ Finalnym produktem niniejszej pracy magisterskiej jest interfejs użytkownika, k
\centering \centering
\includegraphics[width=1\textwidth]{images/gui1.png} \includegraphics[width=1\textwidth]{images/gui1.png}
\caption{Widok ekranu startowego} \caption{Widok ekranu startowego}
\label{gui1}
\end{minipage}\hfill \end{minipage}\hfill
\begin{minipage}{0.45\textwidth} \begin{minipage}{0.45\textwidth}
\centering \centering
\includegraphics[width=1\textwidth]{images/gui2.png} \includegraphics[width=1\textwidth]{images/gui2.png}
\caption{Widok ekranu głównego} \caption{Widok ekranu głównego}
\label{gui2}
\end{minipage} \end{minipage}
\end{figure} \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'. Obraz \ref{gui1} przedstawia ekran startowy aplikacji, na którym użytkownikowi wyświetla się wiadomość powitalna oraz prośba o cierpliwość, ponieważ komponenty aplikacji są aktualnie przygotowywane. W międzyczasie, kiedy użytkownik czeka, przygotowywane są dane, aby po chwili możliwe było obsługiwanie jego zapytań. Proces ten nie jest długi, trwa około 10 sekund, a po tym czasie program jest gotowy do pełnego użytku. Z kolei na obrazie \ref{gui2} 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!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.72\textwidth]{images/gui3.png} \includegraphics[width=0.72\textwidth]{images/gui3.png}
\caption{Widok ekranu wyników wyszukiwania} \caption{Widok ekranu wyników wyszukiwania}
\label{gui3}
\end{figure} \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: 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 (obrazek \ref{gui3}) zwrócone zostały wyniki dla przykładowego zapytania 'sausage', co w języku polskim oznacza 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ś potrzebny, żeby wyświetlić wszystkie 10 obrazków, to około 0,5 sekundy.
\newline
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ę widok jak na rysunku \ref{gui4}.
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=0.72\textwidth]{images/gui4.png} \includegraphics[width=0.72\textwidth]{images/gui4.png}
\caption{Widok ekranu szczegółowego dla wybranego wyniku wyszukiwania} \caption{Widok ekranu szczegółowego dla wybranego wyniku wyszukiwania}
\label{gui4}
\end{figure} \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ą. 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} \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. Przedstawione w niniejszym rozdziale 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 szybkość działania aplikacji jest nieakceptowalna. 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.

View File

@ -1,5 +1,4 @@
% extra packages and definitions % extra packages and definitions
\usepackage{amsmath} \usepackage{amsmath}
\usepackage{hyperref}