<jupyter_start><jupyter_text>Физтех-Школа Прикладной математики и информатики (ФПМИ) МФТИ --- Детектирование объектов с помощью YOLOv3  Составитель: <NAME> (ФИВТ МФТИ, NeurusLab). По всем вопросам в Telegram: @ilyazakharkin На семинаре мы запускали SSD и Mask-RCNN из Tensorflow Object Detection API. На лекции же подробно разбирался алгоритм YOLOv3, давайте же теперь этот самый детектор и попробуем применить на практике. YOLOv3 **Идея детекторов:** использовать сильную свёрточную нейросеть, натренированную на классификации, чтобы извлечь признаки из изображения, потом использовать свёрточные слои для регрессии точек боксов и классификации объектов внутри них. Напомним, что архитектура у YOLOv3 следующая:  Словами:1. Картинка подаётся на вход2. Она сжимается до размера 300х300х33. Пропускается через backbone-нейросеть, которая извлекает признаки -- *Darknet53*4. Идут несколько свёрточных слоёв со свёртками 1х1 и 3х35. После них идёт yolo-слой: свёртка 1х1х(1 + 4 + NUM_CLASSES)6. Далее происходит upsampling (увеличение по ширине и высоте) в 2 раза и конкатенация с feature map'ами, которые были до upsampling'а (чтобы улучшить качество)7. Шаги 4-6 повторяются ещё 2 раза, чтобы улучшить качество детектирования мелких объектовПри обучении также: 8. Финальный feature map специальным образом подаётся в Loss для подсчёта ошибки9. Распространятся градиенты, как в обычном backpropagation, обновляются веса сетиВ слоях используются LeakyReLU активации. Перед YOLO-слоями используются линейные активации (то есть нет нелинейности). Как вся архитектура выглядит в коде вы можете посмотреть в этом файле: https://github.com/akozd/tensorflow_yolo_v3/blob/master/models/yolo_v3.py Оригинальная статья с arxiv.org: https://arxiv.org/abs/1804.02767 ***Примечание:*** Вы можете спросить: "Почему именно YOLOv3, ведь много других хороших детекторов?". Да, но на данный момент у YOLOv3 лучшее соотношение скорость/качество из широко применяемых нейросетевых детекторов. В этом плане он State-of-the-Art. Задание (10 баллов) ***Предполагается, что Вы знакомы с TensorFlow и  свёрточными нейросетями*** Лучше выполнять этот ноутбук локально, поставив TensorFlow: `pip install tensorflow` (CPU-версия, но слишком долго работать не будет, так как обучения в задании нет, только предсказание).Если Вы выполняете на Google Colab, то будьте готовы активно использовать переходы в подпапки (`os.chdir(*path*)`), как было на семинаре.  Писать свой нейросетевой детектор с нуля -- весьма непростая задача, поэтому сейчас просто используем код человека, который смог: https://github.com/akozd/tensorflow_yolo_v3 Напомню, что скачать с Github весь репозиторий можно командой: `git clone *адрес репозитория*`. Например, репозиторий, который нужен в этом задании, скачивается так: `git clone https://github.com/akozd/tensorflow_yolo_v3`  Этап 1 (2 балла): первичное ознакомлене с репозиторием Прочитать README этого репозитория: https://github.com/akozd/tensorflow_yolo_v3 ***Вопрос по `README.md` (1 балл)***: что автор репозитория предлагает для того, чтобы улучшить качество предсказания боксов пр обучении на собственных данных?<jupyter_code><Ответ>
...<jupyter_output><empty_output><jupyter_text>Прочитайте файл `train.py` ***Вопрос по `train.py` (1 балл)***: за что отвечает аргумент скрипта `train.py` под названием `--test_model_overfit`?<jupyter_code><Развёрнутый ответ>
...<jupyter_output><empty_output><jupyter_text>Этап 2 (3 балла): чтение кода репозитория Теперь нужно прочитать код автора и понять, что в нём происходит. Этот репозиторий был выбран не спроста -- весь код хорошо документирован и исправно работает.  Ваша задача состоит в том, чтобы понять, как связаны файлы друг с другом, какие файлы используются для обучения, какие для предсказания, какие вовсе не используются. Хорошая стратегия: основываясь на README.md начать разбираться с тем, как работает `detect.py`, то есть что принимает на вход и что на выход, какие сторонние файлы использует.  ***Задача (3 балла)***: подробно опишите структуру репозитория, пояснив, для чего нужен каждый файл. Чем более подробно вы опишите, что происходит внутри файла (можно прямо в виде "..в строчках 15-20 производится предсказание боксов по изображению.."), тем больше баллов получите.<jupyter_code><Подробное описание структуры репозитория>
...<jupyter_output><empty_output><jupyter_text>Этап 3 (5 баллов): установка нужных зависимостей, скачивание весов (`.ckpt`) и запуск `detect.py` на ваших изображениях Разомнём пальцы и позапускаем код из репозитория на ваших изображениях (любых, однако желательно, чтобы на них были объекты из [этого списка](https://github.com/nightrome/cocostuff/blob/master/labels.md), так как изначально детектор обучен на COCO датсете).  Сначала убедитесь, что у вас (или на Colab) стоят все нужные зависимости (5 ссылок в разделе Dependencdies в README.md).  Потом либо скриптом `.sh`, либо по ссылке, данной в ридми, скачайте в папку `model_weights` веса обученной на датасете COCO YOLOv3-модели. Баллы в этом задании ставятся следующим образом: * (1 балл) получены предсказания на любом вашем изображении (этот пункт служит подтверждением того, что у вас всё запустилось и вы смогли скачать и настроить репозиторий у себя/в колабе)  * (1 балл) найдена кратинка, где у нейросети есть ложные срабатывания (false positives)  * (1 балл) найдена картинка, где у нейросети есть пропуски в детекции (false negatives)  * (1 балл) найдена картинка, где сеть детектировала успешно все объекты, хотя они сильно перекрыватся* (1 балл) предыдущий пункт, но наоброт -- нейросеть справляется плохо<jupyter_code><Вашы попытки здесь>
<и здесь>
...<jupyter_output><empty_output><jupyter_text>* Дополнительный этап 4 (10 баллов): обучение детектора на собственной выборке  В этом задании Вы по-желанию можете обучить свой детектор. Чтобы упростить задачу, вот примеры небольших датасетов, на которых можно обучить и протестировать (**10 баллов ставится за один из двух вариантов, за оба варианта двойной балл ставиться не будет**): ***1). Датасет игровых карт: https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10***  Репозиторий состоит из туториала по обучению детектора с помощью TF Object Detection API. Вы можете либо взять датасет из папки `/images` этого репозитория и обучить текущий YOLOv3 с помощью `train.py` (готовьтесь, предстоит повозиться с переводом разметки данных в нужный формат), либо же пройти тот туториал и обучить любую модель из TF Object Detection API на этом датасете.  Главное: продемонстрировать работу вашего детектора не тестовых примерах с картами.<jupyter_code>...
<Ты сможешь!>
...<jupyter_output><empty_output><jupyter_text>**2). Датасет из картинок со снитчем из Гарри Поттера, ссылка на статью с подробным описанием задачи: https://apptractor.ru/develop/syigraem-v-kviddich-s-tensorflow-object-detection-api.html**В качестве результата нужно показать тестовые изображения, на которых верно детектирован снитч.<jupyter_code>...
<Торжественно клянусь, что совершаю только шалость>
...<jupyter_output><empty_output><jupyter_text>Также есть **ещё два пути, которые должны сработать**, если не работает то, что описано в домашнем ноутбуке:  а). **Darkflow** -- репозиторий с разными версиями YOLO, в Readme есть про то, как обучать: https://github.com/thtrieu/darkflow  б). **Darknet** -- фреймворк на С++ c авторским YOLOv3 (от Джозефа Редмона). Можно обучить детектор, следуя инструкциям на его сайте: https://pjreddie.com/darknet/yolo/<jupyter_code>...<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0758419517369398, 'fraction_numerical': 0.011005038451339167, 'mean_word_length': 5.734821428571428, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 10, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '48378', 'license': 'MIT', 'n_tokens_mistral': 3078, 'n_tokens_neox': 3584, 'n_words': 895, 'path': 'deep-learning-school/[13]object_detection/[homework]yolov3_detection.ipynb', 'repo_name': 'kryvokhyzha/examples-and-courses', 'size': '7549'}