Bezpłatne rozszerzenie Chrome — wycinanie na urządzeniu

Podstawy przetwarzania obrazu w Web Workerze

Ciężkie obliczenia na głównym wątku spowalniają stronę. Web Worker uruchamia wnioskowanie modelu na osobnym wątku, więc przyciski i podgląd zostają użyteczne.

Dla Ciebie wygląda to tak, że edytor nadal reaguje, podczas gdy maska jest liczona.

Główny wątek ma zadanie interfejsu użytkownika

Strona przeglądarki zwykle uruchamia JavaScript w głównym wątku. Ten wątek koordynuje także układ, malowanie i wprowadzanie danych. Jeśli zajmie to jedno długie obliczenie, kliknięcia mogą być opóźnione, animacja może się zatrzymać, a przeglądarka może ostrzec, że strona nie odpowiada.

Edytor obrazów ma wiele obowiązków związanych z wątkiem głównym, zanim w ogóle rozpocznie się wnioskowanie:

Umieszczenie pracy numerycznej modelu segmentacji w tym samym wątku spowodowałoby, że zadania te bezpośrednio ze sobą konkurowały. Pracownik tworzy wyraźniejszą granicę.

Granica oparta na komunikatach

Edytor i pracownik nie współdzielą zwykłych zmiennych. Komunikują się poprzez wysyłanie wiadomości. Uproszczony przepływ wygląda następująco:

  1. Edytor tworzy lub ponownie wykorzystuje pracownika.
  2. Prosi pracownika o zainicjowanie środowiska wykonawczego i modelu wnioskowania.
  3. Przygotowuje dane obrazu i wysyła żądanie wnioskowania.
  4. Pracownik konwertuje dane na oczekiwane dane wejściowe modelu.
  5. Pracownik uruchamia model i tworzy wartości maski.
  6. Wysyła maskę lub dane wynikowe z powrotem.
  7. Edytor składa podgląd i umożliwia jego udoskonalenie lub eksport.

Wiadomości powinny zawierać wystarczający kontekst, aby dopasować odpowiedź do prawidłowego żądania. Ma to znaczenie, jeśli użytkownik wybierze inny obraz przed zakończeniem poprzedniego zadania. Interfejs musi unikać wyświetlania starego wyniku zamiast nowego źródła.

Kopiowanie i przesyłanie danych obrazu

Wysłanie krótkiej wiadomości tekstowej jest tanie. Wysyłanie milionów wartości pikseli może być kosztowne, jeśli przeglądarka musi skopiować cały bufor. Zamiast tego interfejsy API sieci Web mogą przenosić własność niektórych buforów binarnych. Przesłany bufor staje się dostępny dla odbiorcy bez zachowania użytecznego duplikatu po stronie nadawcy.

Optymalizacja ta wiąże się z ograniczeniem projektowym: po przesłaniu nadawca nie może w dalszym ciągu korzystać z tego samego bufora, jakby nadal był właścicielem danych. Edytor może zachować oddzielną reprezentację wyświetlania, utworzyć dedykowany bufor wnioskowania lub zrekonstruować to, czego potrzebuje później.

Nie w każdej implementacji transfer odbywa się dokładnie w tych samych miejscach. Ogólna lekcja jest taka, że ​​separacja wątków nie powoduje zaniku ruchu danych. Wymiary obrazu, rozmiar buforu i liczba konwersji nadal wpływają na opóźnienia i pamięć.

Co Easy Background Remover wkłada do pracownika

Easy Background Remover wykorzystuje proces roboczy sieci Web ze środowiskiem wykonawczym wnioskowania przeglądarki do segmentacji na urządzeniu. Ciężki, automatyczny etap wycinania tworzy maskę. Następnie edytor wyświetla złożony wynik i obsługuje udoskonalanie pędzla płótna procesora.

Ta separacja nadaje awariom bardziej użyteczną granicę. Jeśli proces roboczy nie może zainicjować lub ulega awarii podczas wnioskowania, interfejs może zgłosić błąd związany z procesem roboczym, zamiast polegać na trwale zablokowanej karcie jako jedynym sygnale.

Dzięki temu twierdzenie o przetwarzaniu lokalnym jest zrozumiałe. Wysyłanie pikseli ze strony rozszerzenia do własnego procesu roboczego to komunikacja w środowisku przeglądarki, a nie przesyłanie do zdalnego interfejsu API wycinania. Podczas pierwszej sesji można oddzielnie pobrać zasób modelu do ponownego wykorzystania; zobacz Dlaczego pierwsze uruchomienie powoduje pobranie modelu.

Proces roboczy nie wykonuje obliczeń natychmiastowo

Pracownicy poprawiają responsywność, a nie surową wydajność urządzenia. Model nadal zużywa procesor, procesor graficzny lub inne zasoby wykonawcze, w zależności od tego, co może zapewnić przeglądarka. Duże dane wejściowe mogą nadal trwać dłużej i wymagać więcej pamięci niż małe.

Pozostaje kilka ograniczeń:

Uruchamianie pięciu procesów wnioskowania dla pięciu obrazów nie jest automatycznie pięć razy szybsze. Pracownicy korzystają z tej samej maszyny. Zadania równoległe mogą konkurować o przepustowość pamięci i zasoby wykonawcze, podczas gdy każda instancja modelu może wiązać się z własnym kosztem pamięci.

Raportowanie postępów sprzyja współpracy

Pracownik może wysyłać komunikaty o stanie, ale nie wie automatycznie, jaki procent postępu będzie dokładny. Pobieranie modelu, inicjalizacja środowiska wykonawczego, przygotowanie danych wejściowych, wnioskowanie, konwersja maski i renderowanie podglądu to oddzielne fazy o różnym czasie.

Niektóre fazy mają mierzalną liczbę bajtów. Wykonanie pojedynczego modelu może ujawnić tylko informacje „rozpoczęte” i „zakończone”. Płynny procent, który rośnie równomiernie, może zatem mieć charakter kosmetyczny, a nie precyzyjny pomiar.

Przydatny interfejs postępu nazywa fazę, jeśli to możliwe: przygotowanie modelu, przetwarzanie obrazu lub wynik budowania. Radzi sobie również z awarią i anulowaniem, zamiast pozostawiać spinner bez wyjaśnienia.

Anulowanie to coś więcej niż ukrywanie pokrętła

Jeśli użytkownik zamknie obraz lub zacznie od nowa, interfejs może zignorować ostateczną odpowiedź na nieaktualne żądanie. Natychmiastowe zatrzymanie podstawowych obliczeń może wymagać dodatkowego wsparcia ze strony środowiska wykonawczego lub zakończenia i ponownego utworzenia procesu roboczego.

Zakończenie procesu roboczego jest decydujące, ale powoduje odrzucenie jego stanu zainicjowanego. W następnym zadaniu może być konieczne ponowne załadowanie i zainicjowanie modelu. W przypadku krótkiej operacji oznaczenie wyniku jako nieaktualnego może być tańsze niż zburzenie wszystkiego.

Właściwy wybór zależy od ilości pamięci, czasu trwania operacji i możliwości środowiska wykonawczego. Z punktu widzenia użytkownika ważną zasadą jest to, że nieaktualne prace nie mogą nadpisywać bieżącej edycji.

Błędy też muszą przekroczyć granicę

Wyjątek wewnątrz procesu roboczego nie staje się normalnym wyjątkiem wątku głównego. Pracownik musi zgłaszać użyteczne błędy, a redaktor powinien wykrywać awarie na poziomie pracownika.

Dobra obsługa błędów wyróżnia co najmniej:

Jest to bardziej wykonalne niż ogólne „coś poszło nie tak”, zwłaszcza gdy pierwsza konfiguracja i normalne przetwarzanie obrazu mają różne rozwiązania.

Dane wyjściowe pracownika to nadal tylko pierwsza maska

Architektura wątków sama w sobie nie poprawia niejednoznacznej krawędzi. Pracownik może zwrócić sprawną technicznie maskę, w której brakuje jeszcze futra, przezroczystego materiału, wąskich ramiączek lub pożądanego cienia. Są to pytania dotyczące segmentacji i intencji.

Zadanie edytora zostaje wznowione po wnioskowaniu: przeskaluj maskę do roboczego układu współrzędnych, złóż podgląd, pozwól użytkownikowi go udoskonalić i wyeksportuj bieżący stan. Rozdzielczość maski a rozmiar podglądu wyjaśnia, dlaczego nie należy mylić tych układów współrzędnych.

Zwięzły model mentalny

Pomyśl o pracowniku jako o lokalnym specjalistze za oknem wiadomości:

Aby zobaczyć model samych pikseli, przejdź do Co widzi model z wycięciem na urządzeniu. Aby zapoznać się z kompleksowym praktycznym omówieniem, zobacz Jak działa lokalne usuwanie tła.

Dowiedz się więcej

Ciekawe materiały