artykuły

Praktyczne zastosowania sztucznej inteligencji w komputerze osobistym

15
7 marca 2020, 14:01 Mateusz Brzostek

Wydajność w przykładowych zastosowaniach

Sprawdziliśmy kilka programów wykorzystujących przynajmniej częściowo algorytmy związane z SI. Wszystkie z nich należą do oprogramowania użytkowego – to nie są narzędzia developerskie ani eksperymenty programistyczne, lecz coś, co ma praktyczne zastosowanie w innych dziedzinach użytkowania komputerów. Wszystkie wykorzystują sieci neuronowe wyłącznie do wnioskowania i prowadzą wszystkie obliczenia lokalnie. Nie ma mowy o wysyłaniu naszych danych „do chmury” i oczekiwaniu na wyniki, ani o żadnym uczeniu się laptopa czy programu. Wszystkie polegają na nauczonych przez twórców programu, nie zmieniających się na naszym komputerze modelach sieci neuronowych.

Przedstawiamy tu efekty pracy tych programów, ale nie mamy zamiaru oceniać ich jakości. Algorytmy zostały w wielu przypadkach nauczone na podstawie subiektywnie dobranych przykładów. Efekt wnioskowania nie musi zawsze być taki sam – może mieć pewien element losowy. Na dodatek wszystkie przedstawione funkcje mogłyby zadziałać lepiej lub gorzej, gdybyśmy przedstawili im inne obrazy lub wideo. Dziś interesuje nas wyłącznie wydajność i sprzętowa akceleracja tych algorytmów, a nie to, jak satysfakcjonujące efekty dają.

Jak przykładowe konfiguracje sprzętowe posłużyły:

  • laptop z procesorem Ice Lake – recenzowany niedawno Dell Inspiron 15 5593 z procesorem Core i5-1035G1 (4 rdzenie, 8 wątków, od 1,0 do 3,6 GHz, układ graficzny UHD Graphics)
  • laptop z procesorem Ryzen – Huawei MateBook D 14 z Ryzenem 5 3500U (4 rdzenie, 8 wątków, 2,1-3,7 GHz, układ graficzny Radeon Vega 8)
  • komputer biurkowy z Ryzenem 7 3700X oraz kartą graficzną GeForce RTX 2080 lub Radeon RX 5700 XT

Tak się składa, że użyteczne zastosowania SI z lokalnymi danymi i obliczeniami dotyczą prawie wyłącznie obróbki obrazów i wideo. Dwa pierwsze programy, które sprawdziliśmy, to produkty firmy TopazLabs. Są reklamowane przez Intela (głównie na konferencjach prasowych) jako sztandarowe przykłady wykorzystania „mocy SI” w procesorach Ice Lake. Oba są płatne, ale można za darmo wypróbować w pełni funkcjonalne wersje przez 30 dni. Poza tym sprawdziliśmy kilka funkcji programów z pakietu Adobe CC oraz jedną z DaVinci Resolve.

Na tej liście brakuje przede wszystkim programów przetwarzających głos. Te byłoby bardzo trudno przetestować z kilku powodów. Po pierwsze, wydajność w tych zastosowaniach jest binarna – albo jakąś funkcję da się zrealizować w czasie rzeczywistym, albo nie. Po drugie, programów wykorzystujących GNA jako akcelerator jest bardzo mało, a informacji technicznych na ten temat jeszcze mniej.

Topaz Gigapixel AI – powiększanie zdjęć

Spośród wymienionych programów Gigapixel AI robi największe wrażenie i może potencjalnie zainteresować największą grupę użytkowników komputerów. Program służy do powiększania zdjęć z – jak twierdzi producent – „perfekcyjnym zachowaniem jakości obrazu”. Nie ma mowy o polepszeniu jakości obrazu, bo raz utraconych informacji nie da się wyciągnąć z przeszłości, ale efekty pracy tego programu mogą się przydać w wielu zastosowaniach. Największą zaletą powiększonych w ten sposób zdjęć jest to, że nie mają typowych znamion obrazu o niedostatecznej rozdzielczości. Do „pikselozy” jesteśmy już przywyczajeni i każdy rozpoznaje ją na pierwszy rzut oka. Powiększone przez SI obrazy nie robią tego pierwszego negatywnego wrażenia; potrzeba trochę dłuższej chwili, żeby zorientować się w ich niedostatkach.

 

Oba programy Topaz Labs, które sprawdziliśmy, wykorzystują modele przygotowane za pomocą TensorFlow. Oba umożliwiają wybór maszyny obliczeniowej, której chcemy użyć. W Gigapixel AI można dodatkowo wybrać czy chcemy używać API OpenVINO oraz czy chcemy używać „optymalizacji dla GPU”. Pod tymi opcjami kryje się jeszcze coś – każda kombinacja używa osobnego modelu sieci neuronowej. Program pobiera podczas instalacji różne wersje tej samej sieci, niektóre zoptymalizowane dla OpenVINO, inne dla OpenCL; jedne z wagami o precyzji 32-bitowej, inne o 16-bitowej.  Łącznie na różnych maszynach program użył 4 różnych sieci. Efekt pracy każdej z nich wygląda na pierwszy rzut oka podobnie. Nie mogliśmy stwierdzić, że któraś kombinacja daje gorsze efekty, jest mniej skuteczna niż inne. Jednak każda z tych kilku sieci oznacza inne zadanie obliczeniowe do wykonania, mniej lub więcej pracy. Porównujemy je tutaj przymykając na to oko, bo efekty pracy każdej z nich są porównywalne, ale stanowczo wydajność w czterech różnych algorytmach nie może być użyta do wnioskowania na temat wydajności sprzętu.

Wydaje się, że wydajność nie zależy w ogóle lub zależy bardzo małym stopniu od treści obrazu, a głównie od rozdzielczości i stopnia powiększenia. Najszybciej robią to osobne procesory graficzne. Wydajny desktopowy procesor wcale nie jest daleko w tyle, ale tylko dzięki optymalizacji przez OpenVINO – procesor użyty jako urządzenie OpenCL jest pięciokrotnie wolniejszy.

Topaz Mask AI – znajdowanie krawędzi

Program Mask AI służy do znajdowania krawędzi, a właściwie do oddzielania przedmiotu zdjęcia od tła. Wymaga ręcznej ingerencji: użytkownik określa w przybliżony sposób trzy strefy, jedną do usunięcia, jedną do zachowania, i pośrednią do obliczenia. Wynik można zapisać w formatach TIFF lub PNG; program może też działać jako wtyczka do Photoshopa.

Efekty pozostawiają nieco do życzenia. Co prawda oba pokazane obrazy są trudne do przerobienia nawet dla człowieka, ale właśnie tego oczekujemy od „maszynowej inteligencji” – sprawności przekraczającej ludzką.

W Mask AI można wybrać tylko czy chcemy używać do obliczeń GPU, czy nie, oraz ile pamięci GPU może zająć program. Nie można włączyć lub wyłączyć optymalizacji OpenVINO – jeśli wybierzemy obliczanie bez GPU, program zawsze wybiera model zoptymalizowany dla OpenVINO.

Najwydajniejsze znów są osobne GPU, ale laptopowy Ice Lake też radzi sobie zaskakująco dobrze. Po instalacji program robi krótki test wydajności i ustawiaa opcje tak, żeby zagwarantować najlepszą wydajność, ale jeśli coś zmienimy w sprzęcie, nie aktualizuje tego wyboru.

Adobe Photoshop – zaznaczanie przedmiotu

Photoshop ma wbudowaną funkcję podobną do działania programu Mask AI – zaznaczenie przedmiotu (select subject). Ta funkcja nie tworzy maski z poziomami przezroczystości, ale niemal binarną, jedynie z wygładzonymi krawędziami. Nie wymaga też żadnej ingerencji operatora: program sam zgaduje, co jest na zdjęciu najważniejsze. Podobnie jak w TopazLabs Mask AI, efekt nie jest doskonały i wymaga ręcznej poprawki.

Ta operacja wykorzystuje wyłącznie procesor i trwa bardzo krótko. Sądzimy, że dobra wydajność laptopowego Ice Lake wynika po prostu z jednowątkowej wydajności procesora oraz sprawnej pamięci podręcznej, a nie z żadnych ukrytych optymalizacji dostosowanych do architektury Sunny Cove. Ponieważ ta operacja trwa stosunkowo krótko nawet na Ryzenie 3500U, funkcja select subject będzie pewnie chętnie wykorzystywana przez użytkowników Photoshopa. Ewentualne ręczne poprawki lub alternatywne metody zaznaczania będą i tak trwały dłużej.

Adobe Photoshop – powiększanie zdjęć

Inną przyspieszaną przez SI funkcją w Photoshopie jest nowa metoda skalowania obrazów. Jeśli wybierzemy metodę Preserve Details 2.0, program „dohalucynuje” brakujące piksele. Efekt powiększania jest lepszy niż zwykłego powielenia pikseli, ale przypomina raczej funkcję smart blur z Photoshopa niż wyniki pracy Gigapixel AI.

Zaskakująco, Core i5-1035G1 jest szybszy nawet od dużego desktopowego procesora. Photoshop nie wykorzystuje żadnych funkcji występujących tylko w Ice Lake; ta różnica w wydajności musi być jeszcze jednym przejawem typowej dla programów Adobe optymalizacji. Różnica między 2,2 a 1,4 sekundy raczej nie robi dużej różnicy użytkownikom programu, ale ponad 5 sekund na laptopowym Ryzenie to już dużo.

Adobe Camera RAW – demozaikowanie

W programach Adobe Lightroom i Camera RAW wbudowano funkcje SI najwcześniej. Właściwie to tylko jedną funkcję – ulepszone demozaikowanie, czyli łączenie danych z poszczególnych kanałów kolorystycznych sensora aparatu w jeden kolorowy obraz. Funkcja Enhance Details wykorzystuje wyuczoną przez Adobe sieć neuronową do lepszego demozaikowania zdjęć z aparatów o sensorach z mozaiką Bayera lub Fuji X-Trans. W tym teście wykorzystaliśmy zdjęcie z aparatu Fuji GFX 50R, w którym zastosowano matrycę z mozaiką Bayera. Plik RAW ma objętość 112 MB i rozdzielczość 8256 × 6192.

Jak informuje podpowiedź w oknie Camera RAW, „ta funkcja działa najlepiej z osobnym GPU”. Rzeczywiście, Radeon RX 5700 XT i GeForce RTX 2080 są dziesięciokrotnie szybsze niż laptopowy układ Vega 8. Różnica w wydajności między laptopowymi procesorami AMD i Intela nie ma naszym zdaniem większego znaczenia: tak czy siak czekamy na wynik operacji. Interaktywna część obróbki, w której przesuwamy suwaki i oceniamy subiektywnie to, co widać na ekranie, i tak potrwa dłużej.

Adobe Premiere Pro – automatyczne kadrowanie

Automatyczne kadrowanie klipu w Premiere Pro (auto reframe) pozwala określić rozmiar lub proporcje, do których chcemy przykroić kadr. Algorytm wykrywa, która część kadru jest istotna – jeśli wykryje postać lub twarz ludzką, próbuje podążać za nią, a jeśli nie, to próbuje wywnioskować co jest przedmiotem filmu. Tę funkcję stworzono głównie z myślą o przerabianiu materiału nakręconego w poziomych, panoramicznych formatach na kwadratowe lub pionowe wideo do zamieszczenia w sieciach społecznościowych. Oczywiście nic nie stoi na przeszkodzie, żeby za jego pomocą zmieniać tradycyjne formaty na inne tradycyjne, mniej lub bardziej panoramiczne. Ta funkcja nie dodaje żadnego wypełnienia poza krawędziami obrazu ani nie zniekształca go, ale wyłącznie przycina.

Żeby skorzystać z automatycznego kadrowania trzeba wybrać klip na osi czasu i określić docelowy format. Program jednorazowo analizuje wideo i generuje sekwencję klatek kluczowych i przypisanych do nich ruchów. Tylko ten etap jest kosztowny obliczeniowo: dalsza edycja i eksportowanie filmu odbywa się tak jak zwykle, bez udziału sieci neuronowej. Niewielkie zmiany w raz przeanalizowanym edytowanym wideo wymagają skróconej, bardzo szybkiej analizy.

Wideo: Dima Kalenda / Blackmagic Design

Ta funkcja używa API OpenCL do wykonywania obliczeń za pomocą GPU – również na kartach Nvidii, choć te w wielu innych funkcjach w Premiere Pro są wykorzystywane za pośrednictwem CUDA.

Czas analizowania klipu z osobnym GPU jest dość krótki. Laptopowy Core i5 robił to dwa razy dłużej, a Ryzen 5 3500U – ponad 3 razy dłużej. Zwykle taką operację wykonuje się tylko raz dla jednego wideo, więc wobec całego czasu spędzonego nad jednym projektem kilkanaście sekund oczekiwania nie będzie dużym obciążeniem.

Adobe Premiere Pro – spowalnianie wideo

Najbardziej wymagającą funkcją akcelerowaną przez SI w Premiere Pro jest zmiana prędkości wideo. Najprostsza metoda spowalniania polega po prostu na wyświetlaniu klatek dłużej niż zwykle. Wspomagana SI metoda pozwala ocenić ruch kadru i przedmiotów i wygenerować pośrednie klatki. Efekty są niezłe w przypadku powoli poruszających się obiektów na filmie o dużej głębi ostrości i krótkim czasie migawki. Z trudniejszymi filmami algorytm radzi sobie raczej słabo.

Frame sampling to tradycyjna metoda (pokazana na filmie po lewej stronie), polegająca na wyświetlaniu jednej klatki kilkukrotnie. Metoda przyspieszana SI nazywa się optical flow (nazwa pochodzi od wykrywania kierunku ruchu obiektów w kadrze); Premiere Pro wykorzystuje do obliczeń API OpenCL (AMD) lub CUDA (Nvidia). Wybranie bardziej złożonej metody w niewielkim stopniu wpływa na wydajność na desktopowych GPU, ale w ogromnym w przypadku laptopów. Core i5-1035G1 był szybszy w eksportowaniu filmu bez skomplikowanych efektów, ale kiedy trzeba było jednocześnie kodować wideo i prowadzić obliczenia na GPU, Ryzen 3500U skończył zadanie dużo szybciej.

DaVinci Resolve – spowalnianie wideo

W coraz popularniejszym programie DaVinci Resolve wbudowano kilka funkcji opartych na maszynowej inteligencji, zgrupowanych pod nazwą Neural Engine. Sprawdziliśmy wydajność w spowalnianiu wideo z generowaniem pośrednich klatek – to najbardziej kosztowna obliczeniowo spośród nich. Neural Engine może też powiększać wideo, dopasowywać kolorystykę sąsiadujących klipów i katalogować materiały wideo na podstawie rozpoznanych na nich osób. 

Algorytm spowalniania poradził sobie znacznie lepiej z trudnym wideo, niż ten z Adobe Premiere Pro. Na ścianie wokół sylwetki gracza pojawia się znacznie mniej artefaktów, chociaż szybkie ruchy paletki są zbyt wymagające dla SI.

Resolve wykorzystuje API OpenCL (AMD) lub CUDA (Nvidia) do wnioskowania. Jednocześnie w użytku są też sprzetowy dekoder wideo wbudowany w GPU (dekodowanie pliku wejściowego) oraz CPU (kodowanie przerobionego wideo).

Operacja nie działa na laptopowych GPU, najprawdopodobniej z powodu zbyt małej pojemności pamięci. Pierwszy etap kodowania, w którym model jest ładowany do pamięci GPU, trwa w nieskończoność lub kończy się nieoczekiwanym zamknięciem programu. GeForce RTX 2080 był daleko wydajniejszy od Radeona RX 5700 XT.

3