Deep Image - aplikacja, która powiększa grafiki zachowując ich dobrą jakość

Zastanawialiście się kiedyś skąd biorą się innowacyjne pomysły? Naszym zdaniem najczęściej jest to albo dzieło przypadku albo zapotrzebowania na rozwiązanie jakiegoś problemu. Deep Image, aplikacja, którą stworzył nasz full stack developer - Andrzej, powstała przypadkiem, by rozwiązać pewien problem dotyczący jakości plików graficznych.

“A komu to potrzebne?”

Zanim opowiemy Ci czym jest Deep Image sprawdź czy któraś z poniższych sytuacji dotyczy Ciebie:

  • tracisz oryginalne grafiki, a jedyne co Ci pozostało to uploadowane archiwa, w bardzo kiepskiej jakości, raczej nie nadające się do druku
  • masz legalne, archiwalne pliki graficzne ulubionych artystów, chciałbyś je mieć w formie plakatu ale ich rozdzielczość nie pozwala na wydruk
  • masz archiwum prywatnych zdjęć w niskiej rozdzielczości i chciałbyś poprawić ich jakość
  • interesuje Cię odrestaurowanie starych fotografii z rodzinnego archiwum
  • potrzebujesz powiększyć lub wyciąć konkretny fragment zdjęcia/grafiki np. ze szkolnej fotografii sprzed lat, ale obawiasz się o jakość
  • pracujesz w CSI Miami i musisz powiększyć zdjęcie z kamery miejskiej, bo w okularach przechodnia widać odbicie twarzy przestępcy

tutaj z pomocą przyjdzie Ci właśnie Deep Image.

Ale jak to właściwie działa?

deep image

Każdy plik graficzny stanowi macierz i jest zbiorem zapisanych w nim danych (liczb - pikseli). Po powiększeniu obrazu ilość danych nie zwiększa się, więc otrzymany obraz ma wizualnie gorszą jakość. Standardowo, w celu poprawy wartości stosuje się techniki filtrowania (za pomocą Photoshopa lub innego narzędzia), np. interpolację dwusześcienną. Tymczasem w Deep Image, dzięki zastosowaniu machine learning, uzyskujemy powiększenie grafiki ze zdecydowanie lepszą jakością, w porównaniu do interpolacji dwusześciennej. Wykorzystując technikę super rozdzielczości (SR) aplikacja rekonstruuje obraz lub sekwencję o wyższej rozdzielczości, z obserwowanych obrazów o niskiej rozdzielczości (LR).

Neurony, wzorowane na ludzkich, w akcji

Core aplikacji stanowi konwolucyjna sieć neuronowa. W machine learning jest to klasa splotowych sieci neuronowych (CNN lub ConvNet), które z powodzeniem stosuje się do analizy obrazów. CNN są zaprojektowane tak, aby wymagały minimalnego przetwarzania wstępnego, w porównaniu do innych algorytmów klasyfikacji obrazów, co oznacza, że sieć uczy się filtrów, które w tradycyjnych algorytmach zostały opracowane manualnie.

Sieci splotowe bazują na procesach biologicznych, wzorowanych na ludzkich neuronach. W Deep Image sieci rozwijają się, a im więcej przykładów dostaną (przeanalizują większą liczbę danych), tym bardziej inteligentna będzie aplikacja. Mówiąc prościej - sieć uczy się, że linia na grafice nie może mieć ostrych krawędzi i powinna być gładka, a im więcej możliwości wygładzenia, tym lepsza jakość pliku wyjściowego.

“We need to go deeper!”

Zabawa w sieci neuronowe nie wygląda jak standardowy proces programowania. Bardziej przypomina naukę, opartą o pokazywanie wzorca. Zobaczcie sami:

  • w Deep Image na wejściu mamy grafikę, która jest niskiej rozdzielczości, zaś na wyjściu musimy otrzymać wysoką rozdzielczość. Na początku współpracy z siecią neuronową ustawiamy randomowe parametry
  • Od momentu wejścia sieć neuronowa uczy się jak za pomocą różnych przekształceń stworzyć grafikę dobrej jakości.
  • Sieć liczy sobie błąd, analizując różnicę między wejściem (czyli obrazkiem początkowym), a wyjściem (obrazkiem końcowym). Następnie modyfikuje wagi tak, by różnica między kolejnymi wyjściami była jak najmniejsza.
  • Proces nauki i tworzenia bazuje na algorytmach (zbiorach filtrów), na podstawie których sieć neuronowa przyswaja informacje o danej krawędzi, aby w efekcie końcowym linia była gładka.

deep image

Działanie aplikacji jest oparte o proces iteracyjny, który doprowadza grafikę końcową niemalże do ideału. Wszystko dzieje się automatycznie poprzez framework, który jest używany w Deep Image - Keras (API wysokiego poziomu napisane w Python dla splotowych sieci neuronowych TensorFlow i Theano).

Remove artifacts/resize

W całym procesie używane są 2 algorytmy opracowane na podstawie badań naukowych:

  • Zoom algorithm (resize) powstał na bazie publikacji naukowej: "Accelerating the Super-Resolution Convolutional Neural Network" , w której opisano model z 7 warstwami splotu i jedną warstwą dekonwolucyjną. Każdy obraz podzielono na części o wymiarach 200x200 pikseli i przetwarzano osobno. W badaniu opisano użycie “skoku” stride, czyli ilości pikseli co jaką przesuwa się filtr konwolucji. Stride użyty w warstwie rekonstrukcji (na końcu) pozwala na zwielokrotnienie ilości danych wychodzących, np. stride = 2 to macierz 2 razy większa, 3 to 3 razy, itp. czyli zapewnia to, czego dokładnie potrzebujemy przy powiększaniu obrazu.

  • Jpg algorithm (remove artifacts) - powstał na bazie publikacji "Compression Artifacts Removal Using Convolutional Neural Networks". Model jest niezbyt skomplikowany i składa się z jednej warstwy splotowej z 128 cechami z jądrem 3x3. Każdy obraz jest podzielony na części o wymiarach 200x200 pikseli i przetwarzany osobno.

Oba algorytmy można porównać do tych, które znajdziemy w telewizorach 4K - tzw. system upscaling.

Skoro już wiecie jak działa Deep Image teraz możecie sprawdzić jego działanie w praktyce: SPRAWDŹ JAK TO DZIAŁA

Przy okazji zapraszamy do obejrzenia wystąpienia Andrzeja na SPARKcamp Koszalin, podczas którego Andrzej opowiedział o Deep Image:

click to subscribe
hire us

Let’s talk about Mobile Apps

We’d love to design, develop and release them for you.

Highest DevOps Standards

Our team wield the right skills to make things work.

Angular magic in the making

Most flexible development technology for stunnig results.

Web Apps cooked the right way

The ultimate combination of code, design and user experience.

Django REST Framework

TEONITE develops, supports and donates open source projects.