Student: Igor Zamojski
Implementacja WinCLIP: https://github.com/caoyunkang/WinClip
Projekt demonstruje integrację detekcji anomalii wizualnych (WinCLIP) z grafem wiedzy RDF. Model wykrywa defekty na zdjęciach elementów przemysłowych z zestawu MVTec AD, a wynik mapowany jest na węzeł ontologii. Stamtąd, przez zapytania SPARQL, pobierane są przyczyny defektu i zalecane działania naprawcze.
- CLIP - model wizyjno-językowy mapujący obrazy i tekst do wspólnej przestrzeni osadzeń (cosine similarity)
- WinCLIP - detekcja anomalii przez wieloskalowe okno przesuwne + porównanie z galerią dobrych obrazow
- RDF / Turtle - ontologia defektow (
knowledge/ontology.ttl) - rdflib - parsowanie ontologii w Pythonie
- SPARQL - zapytania po grafie wiedzy
- Flask - serwer webowy z interfejsem uzytkownika
python3 -m venv .venv
source .venv/bin/activate
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txtdata/input/<klasa>/
good/ <- obrazy referencyjne (bez defektow)
<typ_defektu>/ <- obrazy testowe - wady
Obslugiwane klasy: bottle, tile, screw, wood.
python3 src/calibrate.py <klasa>
# np. python3 src/calibrate.py bottleWyznacza optymalny prog detekcji metoda Youden's J i zapisuje go do data/config.json.
python3 src/test.py bottle "sciezka/do/obrazu.png"
python3 src/test.py bottle --evalpython3 sparql_server.pyNastępnie otwórz http://localhost:5351 w przeglądarce.
Aplikacja posiada dwie zakladki:
- Analyze - upload zdjecia, wybor klasy, wynik z heatmapa + typ wady + przyczyny + zalecane akcje
- SPARQL - eksplorator grafu wiedzy z predefiniowanymi zapytaniami
Kazda klasa ma oddzielna konfiguracje:
{
"bottle": { "anomaly_thr": 0.027, "scales": [3, 4], "top_k": 5 },
"wood": { "anomaly_thr": 0.065, "scales": [3, 4, 5], "top_k": 3 }
}scales- rozmiary okien przesuwanych przez WinCLIPtop_k- ile najbardziej anomalnych patchy brać do klasyfikacji typu wadyanomaly_thr- prog Youden's J, powyżej którego obraz jest traktowany jako anomalia
Hierarchia RDF z typami wad:
ex:DefectType -> ex:hasCause -> ex:Cause
-> ex:recommendedAction -> ex:Action
-> ex:promptTemplate (prompt CLIP opisujacy wyglad wady)
-> ex:applicableToClass (np. "bottle", "wood")
Uzyte klasy z MVTec AD: bottle, tile, screw, wood. Pokrywają różne typy defektów: mechaniczne, kontaminacyjne, powierzchniowe.
Model działa w trybie few-shot: galeria dobrych obrazów budowana jest przez build_image_feature_gallery. Wynik to fused_score (połączenie wyniku tekstowego i wizualnego) oraz mapa anomalii.
Backbone ViT-B-16-plus-240 (OpenCLIP). Próg detekcji kalibrowany automatycznie przez src/calibrate.py metodą Youden's J.
Każdy typ defektu w ontologii posiada ex:promptTemplate opisujące wygląd defektu. Defekt o najwyższym podobieństwie dostaje przypisany IRI np.:
http://example.org/defect#WoodScratch
http://example.org/defect#BottleBreak
Serwer Flask wystawia endpoint /analyze zwracający wynik z przyczynami i zalecanymi działaniami pobranymi z grafu przez rdflib. Dostępny jest również endpoint /sparql do bezpośrednich zapytań.
python src/test.py bottle --eval
python src/test.py wood --eval