Added docs
This commit is contained in:
parent
4a923445bc
commit
129debec7c
|
@ -0,0 +1,109 @@
|
||||||
|
#Dokumentacja skryptów
|
||||||
|
|
||||||
|
## Implementacja yolov3 Pytorch
|
||||||
|
Użyta implementacja pochodzi z [repozytorium](https://github.com/ultralytics/yolov3) i została zmodyfikowana na potrzeby projektu
|
||||||
|
|
||||||
|
Użyty model sieci: **yolov3-spp**
|
||||||
|
|
||||||
|
W [katalogu](./cfg) znajdują się pliki konfiguracyjne dla poszczególnych modeli. W zależności od ilości klas
|
||||||
|
musza zostać one odpowiednio zmodyfikowana jak opisano [tutaj](https://github.com/ultralytics/yolov3/wiki/Train-Custom-Data)
|
||||||
|
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](./our_scripts/run_yolov3_process_bayes.py)
|
||||||
|
Który wykonuje kolejno nastęjące zadania:
|
||||||
|
|
||||||
|
1. Trenowanie modelu na danych ([train.py](./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](./detect.py))
|
||||||
|
4. Puszczanie skryptu [generate-confusion-matrix.js](./our_scripts/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](./our_scripts/config_bayes.yml) oraz plik
|
||||||
|
z rozszeżeniem `*.data` np. [widok_01_21.data](./data/widok_01_21/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](./our_scripts/config_bayes.yml)
|
||||||
|
* Parametry mogą być typu:
|
||||||
|
* `discrete` - dyskretne wtedy wartości jakie może on przyjmować trzeba wymienić w liście `values` :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
batch-size:
|
||||||
|
type: discrete
|
||||||
|
values: [4]
|
||||||
|
```
|
||||||
|
|
||||||
|
albo określić przedział wartości np:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
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:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
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](./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:
|
||||||
|
|
||||||
|
```shell script
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
Loading…
Reference in New Issue