{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"příloha2.ipynb","provenance":[{"file_id":"1Mh2HP_Mfxoao6qNFbhfV3u28tG8jAVGk","timestamp":1585851933565}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"ngQsy2AT256U","colab_type":"text"},"source":["# Klonování Darknetu\n","Následující buňky kódu zkopírují darknet z velmi známeho uložiště AlexeyAB. Dále se zde upravují soubor Makefile kvůli podpoře OPENCV a práci s GPU pro darknet. Náslesledně je spuštěna funkce !make, která inicializuje darknet a vytvoří darknet.exe (darknet).\n"]},{"cell_type":"code","metadata":{"id":"HCs4VQmESACk","colab_type":"code","colab":{}},"source":["# Klonování darknetu\n","!git clone https://github.com/AlexeyAB/darknet"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"5H-Taj06Tw1c","colab_type":"code","colab":{}},"source":["# změny v Makefile pro podporu OPENCV a práce s GPU\n","%cd darknet\n","!sed -i 's/OPENCV=0/OPENCV=1/' Makefile\n","!sed -i 's/GPU=0/GPU=1/' Makefile\n","!sed -i 's/CUDNN=0/CUDNN=1/' Makefile"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"3DWRrVatZZZg","colab_type":"code","colab":{}},"source":["# inicializace darknetu (build darknet)\n","!make"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"W1rXTnjN4dTI","colab_type":"text"},"source":["# Připojení Colabu na Drive\n","V následujícím kódu se připojíme na drive za pomoci vygenerovaného kódu v odkazu.\n","Následně přiřadíme symbolický link, abychom do \"MY\\ Drive/\" jednoduše přistupovali pomocí \"/mydrive\"."]},{"cell_type":"code","metadata":{"colab_type":"code","id":"tLtm_Iw14gI5","colab":{}},"source":["%cd ..\n","from google.colab import drive\n","drive.mount('/content/gdrive')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"NYVHtPq54p_-","colab":{}},"source":["!ln -s /content/gdrive/My\\ Drive/ /mydrive\n","!ls /mydrive"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Dye1-pgt4WS0","colab_type":"text"},"source":["# Získání dat pro učení z Google Drive\n","Nyní stáhneme z Google Drive zazipované obrázky a rozbalíme je do složky data.\n"]},{"cell_type":"code","metadata":{"id":"YpljhMVHOx9X","colab_type":"code","colab":{}},"source":["# Zkopírování zazipovaných obrázků\n","!cp /mydrive/yolov3/obj.zip ../"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"45en565PPLce","colab_type":"code","colab":{}},"source":["# Rozbalení zazipovaných obrázků do složky /darknet/data/obj\n","!unzip ../obj.zip -d /content/darknet/data"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Q6fyknGEu0_4","colab_type":"text"},"source":["Nahrání souboru yolov3.cfg na Google Drive pro úpravu."]},{"cell_type":"code","metadata":{"id":"Uk0yNelLnTmg","colab_type":"code","colab":{}},"source":["# Nahrání souboru na Google Drive\n","!cp cfg/yolov3.cfg /mydrive/yolov3/yolov3_custom.cfg"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Onlmv2V571co","colab_type":"text"},"source":["Nahrání upraveného souboru yolov3_custom.cfg, který obsahuje strukturu sítě."]},{"cell_type":"code","metadata":{"colab_type":"code","id":"FpS6ZRiF70Re","colab":{}},"source":["# Nahrání souboru yolov3_custom.cfg z Google Drive\n","!cp /mydrive/yolov3/yolov3_custom.cfg /content/darknet/cfg"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"cPcOku_CAt39","colab_type":"text"},"source":["Nahrání vytvořených souborů obj.names a obj.data. z Google Drive"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"sDGR3TxeAuM0","colab":{}},"source":["# Nahrání souborů obj.names a obj.data z Google Drive\n","!cp /mydrive/yolov3/obj.names /content/darknet/data\n","!cp /mydrive/yolov3/obj.data /content/darknet/data\n"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"nG-dtsUqBIOC","colab_type":"text"},"source":["Přechod do složky Darknet a nahrání souboru generate_train.py. "]},{"cell_type":"code","metadata":{"colab_type":"code","id":"dnVksVIiBQ6x","colab":{}},"source":["%cd darknet/"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"tLJiYa1nZ4Fw","colab":{}},"source":["# Nahrání souboru generate_train.py z Google Drive\n","!cp /mydrive/yolov3/generate_train.py ./"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"pbSQ_7CnaTQ4","colab":{}},"source":["# Spuštění scriptu generate_train.py, který vytvoří soubor train.txt, ten obsahuje relativní cesty k našim trénovacím datům. \n","!python generate_train.py"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"DKDmFrUH7JHy","colab_type":"text"},"source":["# Stáhnutí předtrénovaných vah\n","Nyní je třeba stáhnout předtrénované váhy pro YOLOv3 CNN. \n"]},{"cell_type":"code","metadata":{"id":"k5SYWDPv7qG-","colab_type":"code","colab":{}},"source":["# Stáhnutí vah\n","!wget http://pjreddie.com/media/files/darknet53.conv.74"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"VHw00Cro8ONr","colab_type":"text"},"source":["# Trénování YOLOv3\n","Nyní se pomocí následujícího kódu natrénuje YOLOv3. \n","Parametr dont_show zde zajišťuje, aby se neukazoval graf učení. Google Colab možnost otevírat obrázky i za chodu kódu nepodporuje.\n"]},{"cell_type":"code","metadata":{"id":"IrT9LSjc8LMt","colab_type":"code","colab":{}},"source":["# train your custom detector\n","!./darknet detector train data/obj.data cfg/yolov3_custom.cfg darknet53.conv.74 -dont_show"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"xCYF19wDArJz","colab_type":"text"},"source":["Pokud se trénování z nějakého důvodu přeruší, využijeme k trénování následující kód, který naváže na předešlou práci."]},{"cell_type":"code","metadata":{"id":"yE_Q7BXxXxMl","colab_type":"code","colab":{}},"source":["!./darknet detector train data/obj.data cfg/yolov3_custom.cfg /mydrive/yolov3/backup/yolov3_custom_last.weights -dont_show"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"N29uHgipYsY2","colab_type":"text"},"source":["# Detekce obrazu\n","Po natrénování vah zkusíme predikovat na několika obrázcích."]},{"cell_type":"code","metadata":{"id":"CzWTss9BZaDx","colab_type":"code","colab":{}},"source":["# Nastavení souboru yolov3_custom.cfg do testovacího módu\n","%cd cfg\n","!sed -i 's/batch=64/batch=1/' yolov3_custom.cfg\n","!sed -i 's/subdivisions=16/subdivisions=1/' yolov3_custom.cfg\n","%cd ..\n"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"rBPEqumuZ0aG","colab_type":"code","colab":{}},"source":["# Detekce objektů na obrázku z Google Drive, výsledek se uloží do složky Darknet pod jménem prediction.jpg\n","!./darknet detector test data/obj.data cfg/yolov3_custom.cfg /mydrive/yolov3/backup/yolov3_custom_last.weights /mydrive/images/pomstul.jpg -thresh 0.8\n","imShow('predictions.jpg')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"ttV7mOt0Gb8G","colab_type":"code","colab":{}},"source":["# Stáhnutí predikovaného obrázku na Google Drive\n","!cp predictions.jpg /mydrive/images/pomstul80tresh.jpg"],"execution_count":0,"outputs":[]}]}