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:
- fájlkiválasztás, beillesztés vagy dobás fogadása;
- dekódolni és megjeleníteni egy képet;
- frissíteni a folyamatot és a hibaállapotokat;
- rajzolja meg az előnézeti vásznat;
- fogantyú Add és Erase ecset mozgás;
- Letöltési vagy vágólapra vonatkozó műveletek előkészítése.
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:
- A szerkesztő létrehoz vagy újra felhasznál egy dolgozót.
- Megkéri a dolgozót, hogy inicializálja a következtetés futási idejét és modelljét.
- Képadatokat készít és következtetési kérelmet küld.
- A dolgozó az adatokat a modell várt bemenetére konvertálja.
- A dolgozó futtatja a modellt, és maszkértékeket állít elő.
- Visszaküldi a maszk- vagy eredményadatokat.
- 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:
- a modell inicializálásának valós költsége van;
- a pixel pufferek mindkét oldalon elfoglalják a memóriát, ha másolják;
- az átméretezés és a formátum konvertálása időt vesz igénybe;
- az alacsony memóriával rendelkező eszközök megküzdhetnek a nagy képekkel;
- több munkavállaló növelheti a viszályt ahelyett, hogy csökkentené azt;
- Az export és a vászonfrissítések továbbra is érinthetik a fő szálat.
Ö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:
- a modellelem nem elérhető;
- a modell inicializálása nem sikerült;
- a kép dekódolása vagy a bevitel előkészítése sikertelen;
- a következtetés sikertelen;
- a dolgozó váratlanul megállt;
- az eredmény már nem tartozik az aktuális kéréshez.
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 szerkesztő birtokolja az interakciót;
- a dolgozóé a nehéz következtetési feladat;
- a bináris képadatok átlépnek egy meghatározott határt;
- a dolgozó maszkot ad vissza, nem pedig minden élről kész ítéletet;
- a szerkesztő továbbra is felelős az aktuális állapotért, áttekintésért, finomításért és exportálásért.
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.