Go to file
tomasz 129debec7c Added docs 2020-09-12 15:57:45 +02:00
__pycache__ Update 2020-06-24 20:22:23 +02:00
cfg Update 2020-09-11 18:52:00 +02:00
data/widok_01_21 Update 2020-07-26 10:49:20 +02:00
our_scripts Update 2020-09-11 18:52:00 +02:00
utils Update 2020-09-11 18:52:00 +02:00
weights Initial commit 2020-06-24 20:11:15 +02:00
.gitignore Update 2020-06-30 21:51:10 +02:00
README.md Added docs 2020-09-12 15:57:45 +02:00
detect.py update 2020-07-26 00:43:07 +02:00
models.py Fixed string format error during weight conversion (#1334) 2020-06-22 19:07:51 -07:00
test.py update test.py 2020-06-20 10:02:18 -07:00
train.py Update 2020-09-11 18:52:00 +02:00

README.md

#Dokumentacja skryptów

Implementacja yolov3 Pytorch

Użyta implementacja pochodzi z repozytorium i została zmodyfikowana na potrzeby projektu

Użyty model sieci: yolov3-spp

W katalogu znajdują się pliki konfiguracyjne dla poszczególnych modeli. W zależności od ilości klas musza zostać one odpowiednio zmodyfikowana jak opisano tutaj dodatkowo jest tutaj również opisany sposób renowania modelu na dowolnych danych.

Kod źródłowy

Głównie interesuje nas skrypt run_yolov3_process_bayes.py Który wykonuje kolejno nastęjące zadania:

  1. Trenowanie modelu na danych (train.py)
  2. Tworzenie katalogu z eksperymentem zawierającym:
    • najelpszy model
    • wyniki detekcji na zbiorze testowym (podzielone na błędnie sklasyfikowane i te poprawne)
    • użyty plik z nazwami klas
    • użyty plik konfiguracyjny .yml
  3. Puszczanie skryptu wykonującego detekcje (detect.py)
  4. Puszczanie skryptu generate-confusion-matrix.js obliczającego tzw. "macierz pomyłek" (ang. confussion matrix)

Skrypt wykonuje również trenowanie modelu wraz z optymalizacją bayesowską.

Najważniejszym plikiem który nas interesuje to config_bayes.yml oraz plik z rozszeżeniem *.data np. widok_01_21.data który zawiera konfigurację modelu. Parametry :

  • classes - liczba klas wykrywanych przez model
  • train - plik zawierający ścieżki do zdjeć uczących
  • valid - plik zawierający ścieżki do zdjęć testowych
  • names - plik z etykietami, musi być ich tyle samo co klas

Kilka uwag dotyczących pliku konfiguracyjnego config_bayes.yml

  • Parametry mogą być typu:
    • discrete - dyskretne wtedy wartości jakie może on przyjmować trzeba wymienić w liście values :

        batch-size:
          type: discrete
          values: [4]
      

      albo określić przedział wartości np:

         batch-size:
             type: discrete
             min: 1
             max: 5
             step: 1
      
    • continuous - parametry ciągłe, wtedy należy określić zakres min i max (jako liczba zmiennoprzecinkowa) w jakim może mieścić się wartość parametru np:

          giou:
            type: continuous
            min: 0.0
            max: 10.0
      

Jeśli chcemy aby optymalizacja bayesowska nie została wykonana to po prostu należy ustawić wszystkie parametry jako dyskretne z jedną wartością w liście. W przypadku różnych kombinacji parametrów skrypt uruchamiający proces wykona optymalizację bayesowską.

Uruchamianie detekcji

Puszczanie detekcji odbywa się za pomocą skryptu detect.py

Parametry wywołania (te które nas interesują):

  • source - źródło danych (plik/folder ze zdjęciami/nagraniami), może też być plik txt zawierający ścieżki do nagrań/zdjeć
  • output - folder do którego zostanią zapisane wyniki (musi być utworzony)
  • names - plik .names z etykietami klas
  • weights - plik .pt z wagami modelu, zazwyczaj będzie to plik best.pt zawierający wagi dla najlepszego modelu
  • test-img-size - rozmiar obrazu na jakim odbędzie się detekcja
  • conf-thres - próg prawdopodobieństwa, minimalna wartość stopnia "pewności" dla której model uzna że znalazł obiekt na zdjęciu/nagraniu
  • iou-thresh - próg dla współczynnika IoU, (współczynnik Jaccarda), wykorzysywany przy non-max-supression
  • save-txt - flaga określająca czy skrypt ma zapisać znalezione detekcje do pliku .txt
  • device - numer karty graficznej wykorzystywanej do obliczeń, w przypadku braku tej flagi model odpali się na wszystkich dostępnych

Przykładowe wywołanie:

python detect.py
--source
/home/tomekb/yolov3/data/widok_01_21/widok_01_21_test_labels.txt
--output
/home/tomekb/yolov3/experiments/2020-09-01_06-39-29/output
--names
/home/tomekb/yolov3/experiments/2020-09-01_06-39-29/widok_01_21.names
--weights
/home/tomekb/yolov3/experiments/2020-09-01_06-39-29/best.pt
--test-img-size
1024
--conf-thres
0.45
--iou-thres
0.6
--save-txt
--device
1