Skip to content

JakubIwicki/FruityClassify

Repository files navigation

Dokumentacja badania lekkich głębokich sieci CNN do wieloklasowej klasyfikacji obrazów owoców (10 klas)

Jakub Iwicki

1. Cele i opis badania

Celem projektu jest stworzenie systemu rozpoznawania obrazów owoców przy użyciu metod głębokiego uczenia, ze szczególnym naciskiem na klasyfikację wieloklasową (10 klas owoców). Projekt realizuje porównanie skuteczności różnych podejść do klasyfikacji obrazów:

  • Własny model CNN – zbudowany od podstaw, z warstwami konwolucyjnymi, normalizacją, dropoutem i augmentacją danych.

  • Transfer learning z EfficientNetB0 – wykorzystanie gotowego, wytrenowanego modelu jako ekstraktora cech, połączonego z własnymi warstwami gęstymi.

  • Transfer learning z MobileNetV3Large – analogicznie, użycie innego lekkiego modelu Keras jako ekstraktora cech.

  • Model połączony (ensemble) – łączenie cech wyekstrahowanych równolegle przez EfficientNetB0 i MobileNetV3Large, co pozwala na uzyskanie bogatszej reprezentacji obrazu i lepszą dokładność.

Projekt obejmuje:

  • Przygotowanie i optymalizację zbioru danych (podział na treningowy, walidacyjny, testowy, augmentacja, cache, prefetch).

  • Budowę i trening modeli, z zastosowaniem mechanizmów zapobiegających przeuczeniu (EarlyStopping).

  • Analizę wyników: wizualizację historii treningu, macierzy pomyłek, prezentację błędnie sklasyfikowanych obrazów.

  • Porównanie skuteczności wszystkich modeli oraz ranking według dokładności na zbiorze testowym. Zapis najlepszego modelu i predykcję na nowych obrazach.

2. Architektury sieci

Każdy z 4 modeli został zaprojektowany w celu maksymalizacji skuteczności klasyfikacji przy zachowaniu niskiej złożoności obliczeniowej:

  • Własny model CNN
    Składa się z kilku bloków konwolucyjnych (Conv2D + BatchNormalization + ReLU), warstw MaxPooling oraz Dropout. Na końcu zastosowano warstwy gęste (Dense) z aktywacją softmax. Model wykorzystuje augmentację danych (np. obrót, przesunięcie, zmiana jasności) w celu poprawy generalizacji.

  • EfficientNetB0 (transfer learning)
    Wykorzystuje pretrenowaną sieć EfficientNetB0 (bez warstw klasyfikacyjnych) jako ekstraktor cech. Dołączono własne warstwy gęste, Dropout oraz warstwę wyjściową softmax. Warstwy EfficientNetB0 mogą być zamrożone lub częściowo odblokowane do dalszego treningu.

  • MobileNetV3Large (transfer learning)
    Analogicznie do EfficientNetB0, użyto pretrenowanego modelu MobileNetV3Large jako ekstraktora cech. Dodano własne warstwy klasyfikujące, Dropout i softmax. Model cechuje się bardzo niską liczbą parametrów i szybkim działaniem.

  • Model połączony (ensemble)
    Równoległe wykorzystanie EfficientNetB0 i MobileNetV3Large do ekstrakcji cech z tego samego obrazu. Wyjścia obu modeli są łączone (np. przez konkatenację), a następnie przekazywane do wspólnych warstw gęstych i warstwy wyjściowej softmax. Pozwala to na uzyskanie bogatszej reprezentacji i lepszych wyników klasyfikacji.

Każda architektura została dostosowana do zadania klasyfikacji 10 klas owoców, a ich parametry (liczba warstw, dropout, liczba neuronów) były dobierane eksperymentalnie na podstawie wyników walidacji.

3. Opis algorytmu uczenia

Każdy model trenowano w możliwie zbliżonych warunkach, aby zapewnić rzetelne porównanie. Proces uczenia obejmował następujące etapy:

  • Podział danych: Zbiór obrazów został podzielony na część treningową (80%), walidacyjną (20%) i testową. Dane były zbalansowane względem klas.

  • Augmentacja danych: W fazie treningu stosowano augmentację (obrót, przesunięcie, zmiana jasności, zoom), aby zwiększyć różnorodność próbek i poprawić generalizację modeli.

  • Optymalizator: Użyto optymalizatora Adam.

  • Funkcja straty: Dla klasyfikacji wieloklasowej zastosowano categorical crossentropy (sparse).

  • Batch size: Ustalono rozmiar batcha 32

  • Early stopping: Wprowadzono mechanizm wczesnego zatrzymania treningu na podstawie braku poprawy w generalizacji (np. patience=8).

  • Checkpointing: Najlepszy model (na podstawie dokładności walidacyjnej) był zapisywany do pliku.

  • Liczba epok: Trening prowadzono maksymalnie przez 30 epok, jednak zwykle kończył się wcześniej dzięki early stopping.

Po zakończeniu treningu każdy model był oceniany na zbiorze testowym, a wyniki (dokładność, macierz pomyłek) były analizowane i porównywane. Dodatkowo, przeprowadzono predykcje na nowych, nieznanych obrazach w celu sprawdzenia praktycznej użyteczności modeli.

4. Informacje o wykorzystanych danych

Klasyfikacja owoców na bazie ich zdjęć

Źródło danych: Fruit Classification (10-class) – Kaggle

Zbiór danych zawiera zdjęcia 10 różnych gatunków owoców, wykonane w różnych warunkach oświetleniowych i na różnych tłach, co pozwala na realistyczną ocenę skuteczności modeli. Każda klasa reprezentuje inny owoc, a obrazy są pogrupowane w odpowiednie foldery:

  • train – obrazy używane do uczenia modeli (największa część zbioru, zbalansowana względem klas).
  • test – obrazy przeznaczone do końcowej oceny skuteczności modeli, niewykorzystywane podczas treningu.
  • predict – dodatkowe obrazy do sprawdzenia działania wytrenowanych modeli na nowych, nieznanych danych.

Każdy folder oprócz predict zawiera podfoldery odpowiadające poszczególnym klasom owoców (np. apple, banana, orange itd.), a w nich znajdują się pliki graficzne (.jpg, .png). Obrazy mają różne rozdzielczości, dlatego przed treningiem zostały przeskalowane do jednolitego rozmiaru (np. 128x128 pikseli).

Dane zostały poddane wstępnej analizie i weryfikacji pod kątem jakości oraz równomiernego rozkładu klas. W oryginalnym zbiorze danych dokonano jedynie korekty wielkości liter w nazwach folderów, aby zapewnić spójność i poprawność działania skryptów na różnych systemach operacyjnych.

5. Aplikacja terminalowa do klasyfikacji zdjęć (main.py)

Przygotowano prosty skrypt terminalowy umożliwiający klasyfikację pojedynczych zdjęć na podstawie podanej ścieżki do pliku graficznego. Skrypt ładuje wytrenowany model, przetwarza obraz (skalowanie, normalizacja) i wyświetla przewidywaną klasę owocu wraz z prawdopodobieństwem. Dzięki temu możliwe jest szybkie przetestowanie działania modelu na nowych, własnych zdjęciach bez konieczności uruchamiania całego notebooka.

6. Konfiguracja i wymagania

  • Python 3.x

  • Wszystkie biblioteki (requirements.txt)

  • Notebook

    • tensorflow
    • numpy
    • pandas
    • matplotlib
  • main.py (aplikacja do testowania pojedyńczych zdjęć)

    • tensorflow

7. Opis przeprowadzonych symulacji

Trening sieci wykonywany jest na dostarczonym zbiorze przez wszystkie cztery modele. Cały proces od przygotowania danych do prezentacji wyników końcowych znajdują się w pliku notebook.ipynb

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors