forked from vojirt/kcf
-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FINAL] Konverze ComplexMat => cv::Mat #55
Open
oraveja1
wants to merge
123
commits into
CTU-IIG:master
Choose a base branch
from
oraveja1:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
nyní přesunuty do nového souboru cvmat_func.h
- Prozatím asi jediná užitečná věc odstranění warning a přesun do nového souboru - je třeba připravit úpravy volání v kódu k otestování
- also removed test comment
- výsledek nového volání je 2 kanálový cv::Mat - obsah je stejný jako jeho protějšek v ComplexMat (otestováno) - původní volání zatím ponecháno, volá se teď zápis do původní i upravené proměnné
- změna z typu MatScaleFeats na cv::Mat - přidáno alternativní volání na začátku funkce KCF_Tracker::train - funkce plane() a scale() patřící do MatScaleFeats byly přepsány do cvmat_func.cpp
- pro výpis cv::Mat je teď zohledněna přítomnost váce kanálů, při volbě počtu vypsaných elementů
- pro výpis cv::Mat je teď zohledněna přítomnost váce kanálů, při volbě počtu vypsaných elementů
- přejmenováno na matutil.h - nepoužívané funkce zakomentovány - funkce přesunuty do hlavičky ve formě statických funkcí třídy MatUtil (definice v souboru .cpp nejsou viditelné kompilátorem ?)
replaced by matutil.h
replaced by matutil.cpp
- všechny kroky do zavolání fft.forward_window() mají přidanou alternativu, která zapisuje do nahrazující proměnné cv::Mat v Modelu - fft.forward_window() předběžně reprezentuje reálnou a imag. složku dvěma sousedícími kanály - MatUtil::set_channel() pozměněna pro práci s formátem cv::Mat. - všechny změněné kroky otestovány Pozn.: Formát cv::Mat = Každý pixel je souvislý blok hodnot kanálů ve vnitřním poli. (délka bloku = počet kanálů) Formát ComplexMat = Každý kanál je souvislý blok hodnot pixelů ve vnitřním poli. (délka bloku = plocha obrázku)
- v podstatě jen kopie Model::xf, nejspíš to bude jiné pro další volání funkce train() s jiným parametrem
- funkce použita v KCF_Tracker::train()
- funkce použita v KCF_Tracker::train()
…č m_use_linearkernel - MatUtil::mul() přejmenován na mul_matn_mat1() - přidána funkce MatUtil::mul_matn_matn() - zatím netestováno, malá priorita upravené části
- použito v KCF_tracker::train()
- oprava struktury lambdy
- opraveno volání GaussianCorrelation v KCF_Tracker::train() - pro GaussianCorrelation::operator() odstraněny kvalifikatory const - přepracovana další část metody GaussianCorrelatio::operator()
- přepsáno volání v GaussianCorrelation::operator()
- Většina podpůrných funkcí, včetně init(), train() a track() také konvertována - Některé ze závislých podpůrných funkcí nechány jako Mat, kvůli nekompatibilitě funkcí OpenCV - Kód do začátku funkce KCF_Tracker::track() má v tuto chvíli otestovaný výstup jako shodný s původní implementací cv::Mat
- program by v tuto chvíli měl být připravený k přepnutí na testovací proměnné - Před uzavřením ještě třeba provést test shody obsahu proměnných a funkce programu
- Testovací a původní verze má otestovaný shodný výstup i obsah proměnných
- Původní proměnné cv::Mat odstraněny a nahrazeny stejnojmennými cv::UMat - Testovací volání pracující s cv::UMat nahrazují původní volání s cv::Mat - Všechny výskyty postfixu "_Test" byly odstraněny z projektu - Předběžné testování rychlosti zatím nevykazuje výraznější rozdíl oproti originálu
- na této funkci jsou závislé funkce sqr_mag(), conj() a add_scalar() - podle zdrojů na internetu tato změna zrychlí průběh všech těchto funkcí zhruba 5-násobně
- problém byl v typovém argumentu forEach(), který přistupoval k datům nesprávným způsobem - vyřešeno konverzí pracovávané matice na cv::_Mat< std::complex<float> > a vypuštěním typového argumentu forEach() - prozatím implementováno pouze na funkcích používajících mat_const_operator(), další budou následovat - Celý program však už teď pracuje mnohem, mnohem rychleji
- vypadá to že GAPI balíky příjmají jako vstupní argument také typ cv::Mat_< std::complex<float> > - GAPI operace vykonávané nad takto předanými vstupy se zřejmě chovají správným způsobem, tzn. je použita artimetika std::complex<float> - původní implementace forEach() je uchována pro pozdější porovnání výkonů obou funkcí
…veden do GAPI implementace
- GAPI nepoužito, neposkytuje nástroje potřebné ke konverzi této funkce - otestováno na shodu výsledků - rychlejší zpracování
- tato konverze má shodný výstup s původní funkcí - napsána také konverze GAPI této funkce, která však NEMÁ shodný výstup s původní funkcí, ale liší se pouze na imaginárních pozicích, a pouze o drobné hodnoty - předpokládám chybu knihovny GAPI, ponechávám v kódu pro pozdější použití
- hlavní tělo této funkce a mul_matn_matn() přesunuto do mat_mat_operator()
- funkce mul_matn_mat1() byla jako poslední konvertována na paralelní foreach() - bohužel, GAPI ve verzi OpenCV 4.1.1 není schopná správně pracovat s maticemi obsahujícími komplexní čísla - GAPI byla implementována na konverzích barevného formátu, konverzích typu matic, změny velikosti a klasických matematických výrazech - GAPI nebyla implementována z větší části na funkcích MatUtil. Tam kde to šlo byly vytvořeny zakomentované funkce používající GAPI, které však zatím nebudou spolehlivě vykazovat správné výstupy (dokud nebude přidána oprava OpenCV) - Funkce MatUtil byly místo toho zrychleny implementací cv::Mat.foreach(), která používá paralelní zpracování dat - Testování programu ukázalo, že aplikace je nyní opravdu zřetelně rychlejší
- Ke konverzi použit Kernel API, vše implementováno ve stejném souboru - Implementace Kernel API opatřena komentáři ohledně syntaxe a fungování - Původní funkce zachovány s postfixem "_cpu" za jejich jménem - Nové funkce používají opět cv::dft(), ale v kontextu GAPI - Měření bohužel vykazují 2 až 3 násobné zpomalení všech upravených funkcí
- z nějakého důvodu dochází ke korupci dat ve všech Fourierových funkcích, a to včetně původní implementace - po přepnutí na implementaci OpenCV program funguje bez problémů - předpokládám jedno z následujícího: -> původní implementace v originále nefungovala -> fungovala, ale pod jinou verzí knihovny fftw3 -> některá z mých předchozích úprav změnila formát inputu
- důvod proč ComplexMat dával všechny hodnoty každého kanálu do jednoho celistvého bloku je pravděpodoně kvůli této funkci - z pohledu implementace fftw je prostor v matici kam zapsat zpracovanou submatici celistvým blokem, a současně jedním kanálem matice - fftw zapisuje výsledné submatice postupně za sebou do datového prostoru, na který dostal ve vstupním argumentu ukazatel - V cv::Mat jsou hodnoty jednoho kanálu rozděleny na pozice každého bodu v matici, což způsobovalo chybnou reprezentaci dat po zápisu stylem fftw - Původní implementace Fftw::forward_window() nyní dokáže správně pracovat s datovým typem cv::Mat místo ComplexMat
- vypuštěny nadbytečné argumenty a přeformátování v GAPI funkci
…ZHRANÍ GAPI - implementace CUDA byla vynechána na základě dohody s vedoucím práce - deklarovány nové GAPI funkce pomocí Kernel API, a implementovány pomocí funkcí knihoven v daném buildu - nové GAPI funkce otestovány na shodnost výstupu a funkčnost - velká část funkcí je bohužel pomalejší než původní implementace
- odstraněno zakomentované implementační hřiště - přidána funkce MatUtil::set_channel() pro typ cv::Mat
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Další úpravy: