Autor: Robert Colca
Bine ai revenit, Agent.
Runda trecută ai făcut treabă bună. Cam prea bună. Proiectul G3P1T a stat o lună la izolator, ne-a citit logurile, ne-a urmărit căutările, și acum s-a întors mai inteligent decât ne-am dorit. Glitch-urile lui nu mai sar în ochi. Acum se ascund.
Trei lucruri trebuie să afli înainte să-ți dăm acces la terminale.
1. Are un truc nou. Pe lângă noise, invert și solid (ți le amintești de la prima rundă), G3P1T a învățat ceva ce numește scramble: ia un dreptunghi din imagine și amestecă pixelii în interiorul lui. Culorile rămân exact aceleași, doar ordinea se duce. Histograma de culoare e nealterată — deci orice detector care se uita doar la „acest pixel are o culoare suspectă" pur și simplu nu-l vede.
2. Plantează capcane. În imagini apar și artefacte care par glitch-uri dar nu sunt: regiuni reîncodate la calitate JPEG joasă, zone cu nuanță deplasată, pete cu blur Gauss. Sunt puse acolo intenționat ca să te încurce. Dacă le marchezi pe post de glitch-uri, pierzi puncte.
3. Vrem un raport detaliat, nu o alarmă generală. De data asta nu mai e de ajuns o mască alb-negru. Pentru fiecare imagine vrem să știm ce tip de glitch a folosit G3P1T, unde, și de câte ori.
Pentru fiecare imagine din setul de test, predai două artefacte.
Valorile pixelilor poartă informație acum — nu mai e 0 sau 255.
| Valoare | Înseamnă |
|---|---|
0 | Curat. Capcanele rămân tot aici. Atenție. |
1 | noise — pixeli RGB aleatori |
2 | invert — culori inversate |
3 | solid — bloc de o singură culoare |
4 | scramble — pixelii originali amestecați în loc |
Dimensiunea măștii trebuie să fie egală cu a imaginii de intrare (512×512). Numele de fișier urmează inputul: pentru img_042.png predai img_042.png în folderul masks/ din ZIP-ul tău. Orice valoare în afara mulțimii {0, 1, 2, 3, 4} este interpretată ca 0.
instance_counts.json{ "img_001": {"noise": 2, "invert": 1, "solid": 0, "scramble": 1}, "img_002": {"noise": 0, "invert": 0, "solid": 3, "scramble": 0}}Pentru fiecare imagine, câte glitch-uri distincte a plantat G3P1T din fiecare clasă. Cheia este ID-ul imaginii, fără extensie. Valorile sunt numere întregi mai mari sau egale cu zero. Dacă o cheie lipsește, se consideră că ai prezis 0.
chaos_returns_dataset.zip├── train/│ ├── images/ 200 imagini corupte│ ├── masks/ 200 măști etichetate (valori 0..4)│ └── instance_counts.json numerele reale pentru cele 200 de imagini└── test/ └── images/ 200 imagini corupte, fără măștiSetul de antrenare îți dă tot — imagini, măști și numere. Setul de test îți dă doar imaginile. Restul depinde de tine.
Un singur ZIP:
submission.zip├── masks/│ ├── img_001.png│ ├── ...│ └── img_200.png└── instance_counts.jsonExact 200 de PNG-uri în masks/ și un singur instance_counts.json la rădăcină. Pentru o imagine lipsă primești 0 atât la segmentare, cât și la numărare. Măștile cu dimensiuni diferite sunt redimensionate cu nearest-neighbor — dar pierzi inevitabil din IoU.
Două scoruri, combinate într-unul singur.
Segmentare. Pentru fiecare imagine și pentru fiecare clasă de glitch c din mulțimea {1, 2, 3, 4}, calculăm Intersection-over-Union între pixelii prezisi și cei reali ai clasei:
unde P_c este mulțimea pixelilor preziși ca fiind clasa c, iar G_c este mulțimea pixelilor reali din clasa c. Dacă atât P_c cât și G_c sunt vide pentru o imagine, perechea (imagine, clasă) primește IoU egal cu 1 — punctaj pentru acord pe absență. Macro-IoU-ul unei imagini este media aritmetică peste cele patru clase pozitive:
Clasa 0 (fundalul) nu intră în această medie. Fundalul corect nu îți aduce puncte direct, ci doar indirect, prin acuratețea claselor pozitive.
Numere. Pentru fiecare pereche (imagine i, clasă c), notăm cu n̂ numărul prezis de instanțe și cu n* numărul real:
Număr ghicit corect ⇒ 1.0. Diferență de 1 ⇒ 0.5. Diferență de 2 ⇒ 1/3. Cu cât te îndepărtezi mai mult de adevăr, cu atât scorul scade.
Scor final. Mediile pe tot setul de test se combină astfel:
scalat la 0–100.
Platforma îți arată două valori la fiecare submisie:
Mult succes, Agent. De data asta și Matricea învață.