Dobrý den, jestli můžu tady dát jenom odkaz, kde je popsaný veškerý problém. Děkuji.
https://forum.ubuntu.cz/index.php?topic=86135.0
#1 Thomas_Kr
Co tak zběžně koukám, tak args.p_dataset_config, se nastavuje pouze pokud se spouští skripty train.py a query.py přímo a to se v scripts/pixelpick-dl-cv.sh neděje, děje se tak v případě těch dvou zbylých .sh.
Potom je ta chyba jasná, není to tím že by byla splněna ta podmínka, ale tím, že args nemá položku p_dataset_config. Myslím si, že byl v args.py v __init__ měla být nastavena výchozí hodnota, která tam není, tj. něco jako parser.add_argument("--p_dataset_config"), který pokud není dodán, je jako výchozí None.
#2 Pavel
Nastavení parser.add_argument("--p_dataset_config") jsem zkusil už
na počátku, ale ozvaly se mi chyby, že hodnota je již nastavena ve
skriptech train.py a query.py. Podle mého zjištění je to jenom query.py,
ze kterého by se mohla --p_dataset_config předávat do args.py. Hodnota
této položky je /usr/local/PixelPick/datasets/configs/custom.yaml, cesta
ke konfiguračnímu souboru custom.yaml. Do __init__ bych nic
nedoplňoval, protože věřím autorům, že programový kód je úplný.
Měním akorát cesty v adresářích, které zůstaly nastaveny podle původních
potřeb autora. Pro mnohé úpravy cest je doporučení v readme souborech,
zbytek nastavuji intuitivně, doufám, že správně. Když uměle doplním řádek
args.p_dataset_config=None, pak chyba AttributeError: 'Namespace' object
has no attribute 'p_dataset_config' nenastane, ale není splněná podmínka
if args.p_dataset_config is not None: neprovede se asi 10 řádků, a pak již celý
projekt funguje bez chyb. Grafická karta pracuje na plné obrátky, generují se
desítky smysluplných adresářů a v nich stovky smysluplných souborů s obrazy,
ale při jejich zkoumání mám pocit, že zde není něco v pořádku. Jako první,
nikoliv však postačující podmínka, je odstranění té chyby: AttributeError:
'Namespace' object has no attribute 'p_dataset_config'.
Děkuji.
#3 Thomas_Kr
Prostě AttributeError: 'Namespace' object has no attribute 'p_dataset_config' je prostě bug a "produkčním" kódu by se to stávat nemělo. Nelze pracovat s atributem, který v momentě používání neexistuje.
V query.py se ta hodnota nastavuje v if __name__ == '__main__': bloku, tedy pouze pokud je query.py spouštěn přímo, pokud se pouze importuje, tak ten kód neběží. Proto si myslím, že by to v tom initu mělo být.
#4 Pavel
Projekt byl vytvořen asi před dvěma lety, přitom v Issues - PixelPick uživatelé s autorem řeší, kdy bude nové grafické prostředí, ale nic o nějaké chybě v kódu. Myslím si, že současné řešení by beze změny fungovalo, pokud by se podařilo nějak z venku zajistit, aby v nedefinované položce args.p_dataset_config byla
sama od sebe hodnota None. Při prvním průchodu test neprojde, ale při dalším už bude hodnota v položce naplněna. To by mohla zajistit třeba vhodná verze knihovny pro args, argparse, ArgumentParser, Namespace atd. Prosím o radu, co tam přesně dát.
Myslím, že to trénování nemusíš dělat a můžeš použít předtrénovaný model (nejspíš proto na ten problém ostatní nenarazili).
Ale pokud chceš, tak můžeš upravit ten if v args.py.
- if args.p_dataset_config is not None:
+ if hasattr(args, "p_dataset_config"):
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku