Ingyenes Chrome-bővítmény — háttérkivágás az eszközön

Web workeres képfeldolgozás alapjai

A web workerek a nehéz munkát a UI szálán kívül végzik. Képfeldolgozáskor ez azt jelenti, hogy a kivágás folyhat, miközben a felület reszponzív marad, az eszköz memóriájának és CPU-jának határain belül.

Nem azt változtatja meg, hová mennek a képpontok — azt, hogyan szervezi a böngésző a helyi munkát.

A fő szálnak van egy felhasználói felületi feladata

A böngészőoldalak általában egy főszálon futtatják a JavaScriptet. Ez a szál koordinálja az elrendezést, a festést és a bevitelt is. Ha egy hosszú számítás elfoglalja, a kattintások késésnek tűnhetnek, az animáció leállhat, és a böngésző figyelmeztethet, hogy az oldal nem reagál.

A képszerkesztőnek rengeteg főszál-feladata van, mielőtt a következtetés még elindulna:

Ha egy szegmentációs modell numerikus munkáját ugyanarra a szálra helyezzük, akkor ezek a feladatok közvetlenül versenyeznek. A munkás világosabb határt hoz létre.

Az üzenet alapú határ

A szerkesztő és a dolgozó nem osztoznak a szokásos változókon. Üzenetküldéssel kommunikálnak. Egy egyszerűsített folyamat így néz ki:

  1. A szerkesztő létrehoz vagy újra felhasznál egy dolgozót.
  2. Megkéri a dolgozót, hogy inicializálja a következtetés futási idejét és modelljét.
  3. Képadatokat készít és következtetési kérelmet küld.
  4. A dolgozó az adatokat a modell várt bemenetére konvertálja.
  5. A dolgozó futtatja a modellt, és maszkértékeket állít elő.
  6. Visszaküldi a maszk- vagy eredményadatokat.
  7. A szerkesztő összeállítja az előnézetet, és lehetővé teszi a finomítást vagy az exportálást.

Az üzeneteknek elegendő kontextust kell tartalmazniuk ahhoz, hogy a válasz megfeleljen a megfelelő kérésnek. Ez akkor számít, ha a felhasználó másik képet választ az előző feladat befejezése előtt. Az interfésznek kerülnie kell a régi eredmény megjelenítését egy új forrás helyett.

Képadatok másolása és átvitele

Egy kis szöveges üzenet küldése olcsó. A pixelértékek millióinak küldése költséges lehet, ha a böngészőnek át kell másolnia a teljes puffert. A webes API-k ehelyett átruházhatják bizonyos bináris pufferek tulajdonjogát. Az átvitt puffer elérhetővé válik a fogadó számára anélkül, hogy a küldő oldalon megmaradna egy használható másolat.

Ez az optimalizálás tervezési korláttal jár: az átvitel után a küldő nem használhatja továbbra is ugyanazt a puffert, mintha továbbra is övé lenne az adatok. A szerkesztő megtarthat külön megjelenítési reprezentációt, létrehozhat egy dedikált következtetési puffert, vagy később rekonstruálhatja, amire szüksége van.

Nem minden megvalósítás használja az átvitelt pontosan ugyanazokon a helyeken. Az általános tanulság az, hogy a szálak szétválasztása nem szünteti meg az adatmozgást. A kép mérete, a puffer mérete és a konverziók száma továbbra is befolyásolja a késleltetést és a memóriát.

Mit tesz Easy Background Remover a munkásba

Az Easy Background Remover Web Worker-t használ böngésző következtetési futási idővel az eszközön történő szegmentáláshoz. A nehéz automatikus lekapcsolási lépés maszkot hoz létre. A szerkesztő ezután megjeleníti az összetett eredményt, és támogatja a CPU-vászon ecset finomítását.

Ez a szétválasztás hasznosabb határt ad a hibáknak. Ha a dolgozó nem tud inicializálni vagy összeomlik a következtetés során, az interfész jelenthet egy dolgozóval kapcsolatos hibát, ahelyett, hogy egyetlen jelzésként a tartósan lefagyott lapra hagyatkozna.

A helyi feldolgozásra vonatkozó követelést is érthetővé teszi. A képpontok küldése egy bővítményoldalról a saját dolgozójának kommunikációt jelent a böngészőkörnyezeten belül, nem pedig feltöltés egy távoli kivágási API-ra. Az első munkamenet külön letöltheti az újrafelhasználható modellelemet; Lásd: Miért tölt le első futtatással egy modellt.

Egy dolgozó nem végez azonnali számítást

A dolgozók a válaszkészséget javítják, nem pedig a nyers eszköz képességét. A modell továbbra is CPU-t, GPU-t vagy egyéb futásidejű erőforrásokat fogyaszt, attól függően, hogy a böngésző mit tud biztosítani. Egy nagy bemenet továbbra is tovább tarthat, és több memóriát igényel, mint egy kicsi.

Számos korlátozás marad:

Öt következtetési munkás elindítása öt képhez nem automatikusan ötször gyorsabb. A dolgozók ugyanazon a gépen osztoznak. A párhuzamos jobok versenyezhetnek a memória sávszélességéért és a végrehajtási erőforrásokért, míg minden modellpéldánynak saját memóriaköltsége van.

Az előrehaladásról szóló jelentés kooperatív

A dolgozó küldhet állapotüzeneteket, de nem tudja automatikusan, hogy az előrehaladás hány százaléka lesz pontos. A modellletöltés, a futásidejű inicializálás, a bevitel előkészítése, a következtetés, a maszkkonverzió és az előnézeti renderelés külön fázisok, eltérő időzítéssel.

Egyes fázisok mérhető bájtszámmal rendelkeznek. Egyetlen modell végrehajtása csak a „kezdett” és a „befejezett” feliratot jelenítheti meg. Az egyenletesen előrehaladó sima százalék ezért lehet inkább kozmetikai, mintsem pontos mérés.

A hasznos folyamatkezelő felület, amikor lehetséges, megnevezi a fázist: modell előkészítése, képfeldolgozás vagy építési eredmény. Kezeli a kudarcot és a törlést is, ahelyett, hogy magyarázat nélkül hagyna pörögöt.

A törlés több, mint egy pörgető elrejtése

Ha a felhasználó bezár egy képet vagy újrakezdi, a felület figyelmen kívül hagyhatja az elavult kérés esetleges válaszát. Az alapul szolgáló számítás azonnali leállítása további támogatást igényelhet a futási környezettől, vagy a dolgozó leállítását és újbóli létrehozását.

A munkás megszüntetése döntő, de elveti inicializált állapotát. Lehetséges, hogy a következő munkához újra be kell tölteni és inicializálni kell a modellt. Egy rövid műveletnél olcsóbb lehet az eredmény elavultnak jelölése, mint mindent lebontani.

A helyes választás a memória nyomásától, a működés időtartamától és a futási képességektől függ. A felhasználó szempontjából fontos szabály, hogy az elavult munka nem írhatja felül az aktuális szerkesztést.

A hibáknak is át kell lépniük a határt

A dolgozón belüli kivétel nem lesz normál főszál-kivétel. A dolgozónak jelentenie kell a használható hibákat, a szerkesztőnek pedig figyelnie kell a dolgozói szintű hibákat.

A jó hibakezelés legalább a következőket különbözteti meg:

Ez jobban megtehető, mint egy általános „valami elromlott”, különösen akkor, ha az első beállítás és a normál képfeldolgozás különböző megoldásokat kínál.

A dolgozói kimenet még mindig csak egy első maszk

A szál architektúra önmagában nem javítja a kétértelmű élt. A dolgozó visszaküldheti a műszakilag érvényes maszkot, amelyből még hiányzik a szőrzet, az átlátszó anyag, a keskeny pántok vagy a kívánt árnyék. Ezek szegmentációs és szándékos kérdések.

A szerkesztő munkája a következtetés után folytatódik: méretezi a maszkot a működő koordinátarendszerbe, összeállít egy előnézetet, hagyja, hogy a felhasználó finomítsa, és exportálja az aktuális állapotot. A Maszk felbontás az előnézeti mérethez képest megmagyarázza, miért nem szabad összetéveszteni ezeket a koordinátarendszereket.

Egy tömör mentális modell

Gondoljon úgy a dolgozóra, mint egy helyi szakemberre az üzenetablak mögött:

A képpontok modell általi nézetéhez folytassa a Mit lát az eszközön lévő kivágási modell című részben. A teljes körű gyakorlati áttekintést a Hogyan működik a helyi háttér eltávolítása című témakör.

Folytassa a felfedezést

Érdekes