Skip to content

Pilleow/WinCLIPsparql

Repository files navigation

WinCLIP + Graf Wiedzy RDF

Student: Igor Zamojski
Implementacja WinCLIP: https://github.com/caoyunkang/WinClip


Cel projektu

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.


Technologie

  • 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

Instalacja

python3 -m venv .venv
source .venv/bin/activate

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

Struktura danych wejsciowych

data/input/<klasa>/
    good/            <- obrazy referencyjne (bez defektow)
    <typ_defektu>/   <- obrazy testowe - wady

Obslugiwane klasy: bottle, tile, screw, wood.


Uruchomienie

Kalibracja progu

python3 src/calibrate.py <klasa>
# np. python3 src/calibrate.py bottle

Wyznacza optymalny prog detekcji metoda Youden's J i zapisuje go do data/config.json.

Testowanie jednego obrazu lub calej klasy

python3 src/test.py bottle "sciezka/do/obrazu.png"
python3 src/test.py bottle --eval

Serwer webowy (UI + SPARQL)

python3 sparql_server.py

Następnie otwórz http://localhost:5351 w przeglądarce.


Interfejs webowy

Aplikacja posiada dwie zakladki:

  • Analyze - upload zdjecia, wybor klasy, wynik z heatmapa + typ wady + przyczyny + zalecane akcje
  • SPARQL - eksplorator grafu wiedzy z predefiniowanymi zapytaniami

Konfiguracja (data/config.json)

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 WinCLIP
  • top_k - ile najbardziej anomalnych patchy brać do klasyfikacji typu wady
  • anomaly_thr - prog Youden's J, powyżej którego obraz jest traktowany jako anomalia

Ontologia (knowledge/ontology.ttl)

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")

Realizacja wymagan projektowych

1. Dane

Uzyte klasy z MVTec AD: bottle, tile, screw, wood. Pokrywają różne typy defektów: mechaniczne, kontaminacyjne, powierzchniowe.

2. Inference WinCLIP

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.

3. Ontologia i IRI

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

4. SPARQL i UI

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ń.

5. Ewaluacja

python src/test.py bottle --eval
python src/test.py wood --eval

About

This project integrates zero-/few-shot visual anomaly detection (WinCLIP) with an RDF knowledge graph to map detected defects to structured IRI nodes and retrieve recommended actions via SPARQL queries. Part of "Warsztaty sztucznej inteligencji I (WFAIS.IF-XG322.0)" UJ course.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors