Obraz i Wizja Komputerowa

1. Czym są piksele i jak komputer „widzi” obraz?

Aby zrozumieć wizję komputerową, musimy najpierw zrozumieć, jak komputer reprezentuje obraz. Dla komputera obraz to nie zbiór kształtów i obiektów, tylko ogromna macierz (tabela) liczb.

  • Piksel (Picture Element):

    • To najmniejszy, pojedynczy element cyfrowego obrazu. Pomyśl o obrazie jako o mozaice lub siatce złożonej z tysięcy małych, jednokolorowych kafelków. Każdy taki kafelek to piksel.
    • Im więcej pikseli ma obraz, tym jest wyższej rozdzielczości i tym bardziej szczegółowy.
  • Reprezentacja cyfrowa:

    • Obraz w skali szarości: Każdy piksel jest reprezentowany przez jedną liczbę, zazwyczaj z zakresu 0-255.

      • 0 oznacza kolor czarny.
      • 255 oznacza kolor biały.
      • Wartości pomiędzy to odcienie szarości.
      • Taki obraz można zapisać jako pojedynczą macierz 2D.
    • Obraz kolorowy (np. RGB): Każdy piksel jest reprezentowany nie przez jedną, ale przez trzy liczby! Te liczby odpowiadają intensywności trzech kanałów kolorów:

      • R (Red – Czerwony)
      • G (Green – Zielony)
      • B (Blue – Niebieski)
      • Kombinacja tych trzech wartości (każda z zakresu 0-255) tworzy ostateczny kolor piksela. Na przykład:
        • (255, 0, 0) to czysty czerwony.
        • (0, 255, 0) to czysty zielony.
        • (0, 0, 255) to czysty niebieski.
        • (0, 0, 0) to czarny.
        • (255, 255, 255) to biały.
      • Obraz kolorowy można więc zapisać jako trzy macierze 2D (po jednej dla każdego kanału), ułożone w "kostkę" 3D.

Podsumowanie: Komputer "widzi" obraz jako tabelę numeryczną (lub trzy takie tabele). Jego zadaniem jest znalezienie w tych liczbach wzorców, które odpowiadają ludzkim pojęciom, takim jak "krawędź", "oko", "kot" czy "samochód".


2. CNN (Convolutional Neural Networks) – Podstawowa Architektura

Tradycyjna, w pełni połączona sieć neuronowa (jak opisana w poprzedniej notatce) jest fatalnym wyborem do przetwarzania obrazów.

  • Przykład: Obraz 100x100 pikseli ma 10 000 pikseli. Jeśli ma 3 kanały (RGB), to już 30 000 cech wejściowych! Warstwa ukryta z zaledwie 1000 neuronów prowadziłaby do 30 milionów połączeń (wag do nauczenia)! To jest nieefektywne obliczeniowo i prowadzi do szybkiego przetrenowania.

  • Problem: Taka sieć ignoruje strukturę przestrzenną obrazu. Dla niej piksele z górnego rogu i dolnego rogu są tak samo ważne i nieskorelowane, podczas gdy w rzeczywistości piksele blisko siebie są ze sobą ściśle powiązane.

CNN radzi sobie z tymi wyzwaniami! Jest to specjalny rodzaj sieci neuronowej zaprojektowany specjalnie do przetwarzania danych o strukturze siatki, takich jak obrazy. Jej kluczowe warstwy to:

1. Warstwa Konwolucyjna (Convolutional Layer) – Wykrywanie cech

  • Cel: Automatyczne wykrywanie prostych cech na obrazie, takich jak krawędzie, rogi, plamy koloru, tekstury.

  • Jak działa? Używa małych "okien" zwanych filtrami (lub jądrami – kernels).

    • Filtr to mała macierz (np. 3x3, 5x5) liczb (wag).

    • Filtr "przesuwa" się (przechodzi splot - convolution) po całym obrazie wejściowym, obliczając iloczyn skalarny pomiędzy swoimi wagami a wartościami pikseli pod spodem.

    • Wynikiem tego procesu jest mapa cech (feature map) – nowa macierz, która podświetla regiony obrazu, gdzie wykryto cechę, na którą "reaguje" filtr.

  • Analogia: Jeśli szukasz twarzy, pierwsza warstwa konwolucyjna może nauczyć się wykrywać pionowe krawędzie (jak kontur twarzy), kolejna – bardziej złożone kształty (jak oczy, nos), a jeszcze głębsza – całe twarze.

  • Kluczowe właściwości:

    • Współdzielenie wag (Weight Sharing): Ten sam filtr jest używany dla całego obrazu. Sieć uczy się, że "krawędź" wygląda podobnie, niezależnie od tego, gdzie się znajduje. To drastycznie redukuje liczbę parametrów.

    • Lokalne połączenia (Local Connectivity): Neurony w warstwie konwolucyjnej są połączone tylko z małym regionem warstwy poprzedniej, a nie ze wszystkimi neuronami.

2. Warstwa Pooling (Pooling Layer) – Redukcja wymiarowości

  • Cel: Zmniejszenie rozmiaru mapy cech, co:

    • Zmniejsza liczbę parametrów i obciążenie obliczeniowe.
    • Zapobiega przetrenowaniu.
    • Uodparnia model na małe przesunięcia obiektów (dzięki temu, że skupiamy się na obecności cechy, a nie na jej dokładnej lokalizacji).
  • Jak działa? Przechodzi "oknem" (zwykle 2x2) po mapie cech i podsumowuje region.

    • Max Pooling: Wybiera maksymalną wartość z okna. Jest to najpopularniejsza metoda. Skupia się na najsilniej obecnej cesze w regionie.
    • Average Pooling: Oblicza średnią wartość z okna.

3. Warstwa w pełni połączona (Fully Connected Layer) – Klasyfikacja

  • Cel: Po tym, jak warstwy konwolucyjne i poolingowe wyodrębniły najważniejsze cechy obrazu i zmniejszyły jego wymiar, potrzebujemy czegoś, co zinterpretuje te cechy i dokona ostatecznej klasyfikacji.

  • Jak działa? To jest zwykła, stara, dobra sieć neuronowa (jak z poprzedniej notatki). Spłaszcza otrzymaną trójwymiarową mapę cech do długiego wektora jednowymiarowego i na jego podstawie przewiduje etykietę (np. "kot", "pies", "samochód").

Podsumowanie architektury typowego CNN: Obraz wejściowy -> [Warstwa Konwolucyjna -> Warstwa Aktywacji (ReLU) -> Warstwa Pooling] x N -> Warstwy w pełni połączone -> Wynik

  • N powtarzanych bloków pozwala sieci uczyć się hierarchii cech: od prostych (krawędzie) do złożonych (kształty, obiekty).

Dlaczego CNN są tak potężne? Ponieważ automatycznie i hierarchicznie uczą się cech bez konieczności ich ręcznego kodowania przez człowieka. To właśnie one stoją za najnowocześniejszymi systemami rozpoznawania obrazów, samochodów autonomicznych, filtrów na Instagramie i algorytmów wykrywania chorób na skanach medycznych.

Popularne zastosowania CNN:

  • Rozpoznawanie i klasyfikacja obiektów na zdjęciach.
  • Wykrywanie twarzy (w telefonach i mediach społecznościowych).
  • Samochody autonomiczne (wykrywanie pieszych, znaków drogowych, innych samochodów).
  • Generowanie podpisów do obrazów (image captioning).
  • Sztuka (style transfer – np. aplikacja Prisma).
  • Diagnostyka medyczna (analiza zdjęć RTG, MRI).