{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Příloha1.ipynb","provenance":[{"file_id":"1ntAL_zI68xfvZ4uCSAF6XT27g0U4mZbW","timestamp":1585980754447}],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"lurqwjne0iEX","colab_type":"text"},"source":["# Import prostředí a výpis verzí PyTorche a Cuda"]},{"cell_type":"code","metadata":{"id":"KPLc9DEzIwMZ","colab_type":"code","colab":{}},"source":["import os\n","import torch\n","from IPython.display import Image, clear_output \n","print('PyTorch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"VHS_o3KGIyXm","colab_type":"code","colab":{}},"source":["!git clone https://github.com/roboflow-ai/yolov3 # naklonování yoloV3 pro využití s roboflow"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"DdZoG7inXjbS","colab_type":"text"},"source":["## Získání dat z Roboflow\n","\n","Při exportování Vybrat možnost \"YOLOv3 Darknet\" jako formát.\n","\n","Dále je nutné zakliknout možnost \"show download code\", která nám dá možnost stáhnout data přímo z RoboFlow"]},{"cell_type":"code","metadata":{"id":"yRk-zMxnJG6S","colab_type":"code","outputId":"d45b424c-d787-429c-9405-ca3fba350bc9","executionInfo":{"status":"ok","timestamp":1585983013797,"user_tz":-120,"elapsed":2906,"user":{"displayName":"Danny C","photoUrl":"","userId":"14630764421894385823"}},"colab":{"base_uri":"https://localhost:8080/","height":84}},"source":["# Tento link si vygenerujeme v RoboFlow, s nikým jej nesdílejte, protože obsahuje klíč specifický pro každého uživatele.\n","!curl -L https://app.roboflow.ai/ds/joIfmtbGEE?key=CCghjlqNu0 | jar -x\n"],"execution_count":0,"outputs":[{"output_type":"stream","text":[" % Total % Received % Xferd Average Speed Time Time Time Current\n"," Dload Upload Total Spent Left Speed\n","100 890 100 890 0 0 1171 0 --:--:-- --:--:-- --:--:-- 1169\n","100 4355k 100 4355k 0 0 4204k 0 0:00:01 0:00:01 --:--:-- 4204k\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"jqdjyjCsX1yn","colab_type":"text"},"source":["## Nutná organizace dat z RoboFlow\n","\n","Musíme rodělit labely a obrázky do dvou patřičných složek.\n","\n","Následující kód dělá právě to."]},{"cell_type":"code","metadata":{"id":"FbtE_d7MJG8p","colab_type":"code","colab":{}},"source":[" # Vstup do složky train\n","%cd train"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"yh2wijsTYQRf","colab_type":"code","colab":{}},"source":["# Vypsání obsahu dané složky\n","%ls"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"A12oR638YeRB","colab_type":"code","colab":{}},"source":["# Vytvoření složek\n","%mkdir labels\n","%mkdir images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"CZnDDHXxf-yz","colab_type":"code","colab":{}},"source":["# Přesun jednotlivých souborů do korespondujících složek\n","%mv *.jpg ./images/\n","%mv *.txt ./labels/"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"MDXCKc84mCuB","colab_type":"code","colab":{}},"source":["%cd images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"jCDdU0ZzmELL","colab_type":"code","colab":{}},"source":["# Vytvoření potřebného textového souboru, pro trénování. Obsahuje cesty k labelům a obrázkům\n","file = open(\"train_images_roboflow.txt\", \"w\") \n","for root, dirs, files in os.walk(\".\"):\n"," for filename in files: \n"," if filename == \"train_images_roboflow.txt\":\n"," pass\n"," else:\n"," file.write(\"../train/images/\" + filename + \"\\n\")\n","file.close()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"ZM13TrHOmPLF","colab_type":"code","colab":{}},"source":["# Vypsání obsahu souboru train_images_roboflow.txt\n","%cat train_images_roboflow.txt"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"iUO7VlGigRZO","colab_type":"code","colab":{}},"source":["# Změna složky \n","%cd ../../valid"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"UbNBFoRHgVl-","colab_type":"code","colab":{}},"source":["%mkdir labels\n","%mkdir images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"LGPh9B4ggVom","colab_type":"code","colab":{}},"source":["%mv *.jpg ./images/\n","%mv *.txt ./labels/"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"QvP5SAd0mIXc","colab_type":"code","colab":{}},"source":["%cd images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"HoX2KlMbmKGM","colab_type":"code","colab":{}},"source":["# Vytvoření textového souboru pro validaci obrázků. \n","file = open(\"valid_images_roboflow.txt\", \"w\") \n","for root, dirs, files in os.walk(\".\"):\n"," for filename in files\n"," if filename == \"valid_images_roboflow.txt\":\n"," pass\n"," else:\n"," file.write(\"../valid/images/\" + filename + \"\\n\")\n","file.close()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"vZDI0ghdhy4i","colab_type":"code","colab":{}},"source":["%cat valid_images_roboflow.txt"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"N_dkaQmirgA-","colab_type":"text"},"source":["## Konfigurace souborů pro trénování\n","\n","\n","\n"]},{"cell_type":"code","metadata":{"id":"55J0O7LRuoTv","colab_type":"code","outputId":"734c9562-3e87-43de-a96f-4fa3e8fc43b8","executionInfo":{"status":"ok","timestamp":1585983583648,"user_tz":-120,"elapsed":984,"user":{"displayName":"Danny C","photoUrl":"","userId":"14630764421894385823"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"source":["%cd ../../yolov3/data"],"execution_count":0,"outputs":[{"output_type":"stream","text":["/content/yolov3/data\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"IaVwHzdprdSN","colab_type":"code","colab":{}},"source":["# Výpys souboru, ve kterém jsou uložené naše třídy\n","%cat ../../train/_darknet.labels"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Kq-kLpfNlZTQ","colab_type":"code","colab":{}},"source":["# Převod .labels na .names \n","%cat ../../train/_darknet.labels > ../../train/roboflow_data.names"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"gol1kFpN0FQh","colab_type":"code","colab":{}},"source":["def get_num_classes(labels_file_path):\n"," classes = 0\n"," with open(labels_file_path, 'r') as f:\n"," for line in f:\n"," classes += 1\n"," return classes"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"yG4X2vQh0rZf","colab_type":"code","colab":{}},"source":["# Updatování souboru roboflow.data na správný počet tříd\n","import re\n","num_classes = get_num_classes(\"../../train/_darknet.labels\")\n","with open(\"roboflow.data\") as f:\n"," s = f.read()\n","with open(\"roboflow.data\", 'w') as f:\n"," s = re.sub('classes=[0-9]+',\n"," 'classes={}'.format(num_classes), s)\n"," f.write(s)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"un6Or-F31M1Z","colab_type":"code","colab":{}},"source":["# Zobrazí počet tříd\n","%cat roboflow.data"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"iqOa_ogHqhOg","colab_type":"text"},"source":["## Trénování modelu\n","\n","Trénování defaltně běží na 300 epochů. \n"]},{"cell_type":"code","metadata":{"id":"3pEzmWztuevf","colab_type":"code","colab":{}},"source":["%cd /content/yolov3"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"gnVZo1BknVC_","colab_type":"code","colab":{}},"source":["# Python kód pro spuštění trénování\n","!python3 train.py --data data/roboflow.data --epochs 300"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"iuRGoRDFq7md","colab_type":"text"},"source":["## Zobrazení průběhu trénování a uložení vah\n","\n","Kód níže je defaultně zprostředkovaný skript pro zobrazení průběhu trénování.\n"]},{"cell_type":"code","metadata":{"id":"gvKy7Isxn0n6","colab_type":"code","colab":{}},"source":["from utils import utils; utils.plot_results()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"ykPKzWdoCdb6","colab":{}},"source":["# Uložení natrénovaných vah na lokálním PC\n","from google.colab import files\n","files.download('./weights/last.pt')"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"QvH2bf4Xq-0I","colab_type":"text"},"source":["## Predikce a zobrazení výsledků\n","\n"]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"paj-RJigCpKf"},"source":["### Predikce\n","\n","Kód níže predikuje obrázky ze složky test pomocí námi vytrénovaných vah. Tyto predikce uloží do složky output ve složce yolov3."]},{"cell_type":"code","metadata":{"id":"FB4Lfxt-n0qP","colab_type":"code","colab":{}},"source":["!python3 detect.py --weights weights/last.pt --source=../test --names=../train/roboflow_data.names"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"jGgVRiJd8HJZ","colab_type":"text"},"source":["### Zobrazení výsledků na obrázcích\n","Zobrazení predikcí CNN, které již obsahují bounding boxy vytištěné přimo na jednotlivých obrázcích."]},{"cell_type":"code","metadata":{"id":"SdAEEulm4zxI","colab_type":"code","colab":{}},"source":["# Import knihoven pro zobrazení výsledků\n","%matplotlib inline\n","import matplotlib.pyplot as plt\n","import numpy as np\n","from IPython.display import display, Image\n","from glob import glob\n","import random\n","import PIL"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"8TW1ctRD51UO","colab_type":"code","colab":{}},"source":["# Zobrazení náhodného obrázku ze složky output\n","filename = random.choice(os.listdir('./output'))\n","print(filename)\n","Image('./output/' + filename)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"pzxLXker5dgx","colab_type":"code","colab":{}},"source":["# Zobrazení všech obrázků ze složky output\n","images = [ PIL.Image.open(f) for f in glob('./output/*') ]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"IZhWKKgFFmQ8","colab_type":"code","colab":{}},"source":["# Uložení natrénovaných vah na lokálním PC\n","from google.colab import files\n","files.download('./weights/last.pt')"],"execution_count":0,"outputs":[]}]}