← Tutte le guide Sotto il cofano

Perché il rilevatore viene eseguito nel tuo browser

Un modello da 40 MB, WebAssembly e nessun endpoint di caricamento. Cosa comporta quell'architettura, cosa costa e perché vale la pena fare questo compromesso.

· 8 min di lettura · Best AI Image Detector

In questo modo le tue immagini non lasciano mai il tuo dispositivo. Il modello viene scaricato una sola volta e viene eseguito sulla tua macchina, eliminando contemporaneamente il caricamento, il costo del server e il rapporto di elaborazione dei dati.

Qual è in realtà l'architettura

Un vision transformer, convertito in ONNX e compresso a circa 40 MB, suddiviso in due parti affinché ciascuna rimanga al di sotto del limite di dimensione file della piattaforma di hosting. Viene riassemblato nel browser e il suo checksum viene verificato prima dell'esecuzione di qualsiasi operazione.

L'inferenza avviene tramite WebAssembly, che consente a un runtime compilato di essere eseguito a una velocità vicina a quella nativa all'interno di una scheda del browser. Il runtime stesso è un binario WASM compresso caricato insieme ai pesi.

Nulla di tutto ciò è ormai esotico. Quella che nel 2021 era una dimostrazione di ricerca è ora un modo normale di distribuire un modello, e i browser hanno fatto la parte del leone.

Cosa si ottiene

Immobile Nel browser Su un server
L'immagine lascia il tuo dispositivo No impossibile Yes richiesto
Costo per verifica Yes zero No calcolo reale
Accordo di elaborazione dati necessario No Yes
Funziona senza rete dopo il caricamento Yes No
Il modello può essere mantenuto privato No viene scaricato Yes
La prima verifica è istantanea No il modello viene scaricato una volta Yes
Lo stesso prodotto, realizzato in due modi. Le differenze sono di natura architettonica piuttosto che scelte di policy.

La prima riga è il motivo per cui esistono le altre. Poiché non esiste un endpoint di caricamento, non c'è alcun archivio di fotografie di altre persone, nessuna policy di conservazione da scrivere, nessuna violazione da comunicare e nulla da consegnare su richiesta.

La seconda riga spiega perché può essere gratuito senza un contatore di utilizzo. Una verifica non costa nulla da erogare, quindi non vi è alcun costo per immagine da recuperare, il che cambia l'aspetto che deve avere il prezzo.

Cosa costa

Tre compromessi reali, dichiarati chiaramente, perché una pagina che elenca solo i vantaggi sta facendo pubblicità.

  1. La prima verifica è lenta. Quaranta megabyte devono arrivare prima che accada qualsiasi cosa. Su una connessione veloce sono pochi secondi; su una scarsa ci vuole più tempo. Le verifiche successive riutilizzano il modello memorizzato nella cache e si avviano immediatamente.
  2. I dispositivi meno recenti faticano. L'inferenza richiede memoria e capacità di calcolo che un telefono di cinque anni fa potrebbe non avere comodamente a disposizione. A un server non importerebbe quale dispositivo hai in mano.
  3. Il modello è pubblico. Qualsiasi elemento scaricato su un browser può essere conservato. Un modello lato server può essere proprietario; questo no, e i pesi costituiscono comunque un checkpoint di ricerca aperto.

Sul terzo punto vale la pena essere diretti. Distribuire un modello al client significa regalarlo. Qui è un compromesso accettabile perché i pesi sono già stati pubblicati e il lavoro che rende utile lo strumento è la calibrazione, la suddivisione in riquadri e l'interpretazione costruite attorno ad essi.

I problemi di ingegneria di cui vale la pena essere a conoscenza

Suddivisione di un file di grandi dimensioni

Le piattaforme di hosting statico pongono limiti alle dimensioni dei singoli file. Un modello da 40 MB superava il limite, quindi viene distribuito in due parti deterministiche che vengono riassemblate nel browser e verificate rispetto a un hash del manifesto prima dell'uso. Una parte corrotta o sostituita fallisce in modo evidente anziché produrre silenziosamente punteggi errati.

Non caricare nulla finché non è necessario

Il modello, il runtime e il lettore di credenziali non vengono recuperati al caricamento della pagina. Arrivano alla prima interazione, così chi legge un articolo non ne scarica alcuna parte. Questo mantiene le pagine veloci per la grande maggioranza dei visitatori che non eseguono mai una verifica.

Decodifica di formati complessi

HEIC da iPhone, AVIF, TIFF e JPEG XL richiedono tutti la decodifica prima del punteggio. I browser ora gestiscono la maggior parte di questi formati in modo nativo, il che rimuove quella che un tempo era la parte più consistente del lavoro lato client in uno strumento come questo.

Quando questa architettura è la scelta sbagliata

Non è universalmente migliore. Un server ha più senso quando il modello è proprietario e merita di essere protetto, quando è troppo grande per essere distribuito, quando hai bisogno di risultati in una pipeline di backend anziché di fronte a una persona, o quando hai bisogno di un tempo di risposta garantito indipendentemente dal dispositivo.

Per uno strumento che qualcuno apre per controllare un'immagine sospetta, nessuna di queste condizioni si applica e la proprietà della privacy vale più di tutto ciò che un server aggiungerebbe.

Cosa viene escluso da questo approccio

La scelta del client comporta conseguenze che vanno oltre la privacy, e alcune di esse sono limitazioni che vale la pena nominare piuttosto che funzionalità.

Non esiste una cronologia. Un risultato esiste solo nella scheda che lo ha prodotto, quindi non è possibile consultarlo in seguito a meno che non sia stato esportato. Questo è il costo diretto del fatto di non avere un account ed è la richiesta più frequente che l'architettura rende difficile da gestire.

Non esiste uno stato condiviso. Due persone non possono vedere la stessa coda e un team non può esaminare le verifiche degli altri. Un link condiviso trasporta un singolo risultato, che copre una conversazione e non un flusso di lavoro.

Non esiste un'API. Qualsiasi cosa venga eseguita in una scheda del browser non può essere chiamata da una pipeline di backend, il che esclude del tutto gli utilizzi a volumi più elevati. Queste sono lacune reali, e la posizione onesta è che rappresentano il prezzo da pagare per la proprietà che conta di più.

Domande frequenti

La mia immagine non viene davvero caricata?
Sì, e non devi prenderlo per fede. Apri la scheda di rete negli strumenti di sviluppo ed esegui una verifica. Vedrai il download del modello e del runtime e nessuna richiesta che trasporta il tuo file. È una delle poche dichiarazioni sulla privacy che un utente può verificare direttamente in circa trenta secondi.
Perché il modello è così grande?
Si tratta di un vision transformer con milioni di parametri, compresso al massimo senza perdere precisione. Esistono modelli più piccoli che offrono prestazioni notevolmente inferiori, in particolare sulle immagini compresse e ritagliate che le persone controllano effettivamente. Quaranta megabyte sono il prezzo dell'accuratezza.
Funziona offline?
Dopo il primo caricamento, in gran parte sì. Una volta memorizzato nella cache, il modello calcola i punteggi senza alcuna connessione di rete. L'unica parte che richiede una connessione è il recupero di un'immagine da un URL incollato, mentre il controllo di un file locale funziona anche senza.
Consumerà la batteria del mio telefono?
Una singola verifica richiede pochi secondi di elaborazione, paragonabili al caricamento di una pagina web pesante. Eseguire un batch di venticinque si nota di più. Non è qualcosa che faresti girare continuamente, e non rappresenta un costo significativo per un uso occasionale.
Non potreste usare WebGPU per renderlo più veloce?
Per i dispositivi che lo supportano, sì, ma il supporto è ancora abbastanza discontinuo da richiedere comunque la presenza di un percorso WASM. L'aggiunta di un secondo percorso di esecuzione raddoppia la superficie in cui i risultati potrebbero divergere tra gli utenti, il che rappresenta un costo reale a fronte di un guadagno di velocità che la maggior parte delle persone nonnoterebbe.
Il browser invia qualcosa sulla mia immagine?
No. Non ci sono telemetrie su nomi di file, dimensioni o punteggi, perché il risultato non esiste da nessuna parte se non nella tua scheda. Questa è una conseguenza dell'architettura anziché un'impostazione, ed è l'aspetto su cui vale la pena riflettere.