tomasz 129debec7c | ||
---|---|---|
__pycache__ | ||
cfg | ||
data/widok_01_21 | ||
our_scripts | ||
utils | ||
weights | ||
.gitignore | ||
README.md | ||
detect.py | ||
models.py | ||
test.py | ||
train.py |
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:
- Trenowanie modelu na danych (train.py)
- 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
- Puszczanie skryptu wykonującego detekcje (detect.py)
- 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 modeltrain
- plik zawierający ścieżki do zdjeć uczącychvalid
- plik zawierający ścieżki do zdjęć testowychnames
- 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ścievalues
: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ć zakresmin
imax
(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 klasweights
- plik.pt
z wagami modelu, zazwyczaj będzie to plikbest.pt
zawierający wagi dla najlepszego modelutest-img-size
- rozmiar obrazu na jakim odbędzie się detekcjaconf-thres
- próg prawdopodobieństwa, minimalna wartość stopnia "pewności" dla której model uzna że znalazł obiekt na zdjęciu/nagraniuiou-thresh
- próg dla współczynnika IoU, (współczynnik Jaccarda), wykorzysywany przy non-max-supressionsave-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