Задача проекта сводится к классификации каждого пикселя. Необходимо определить к какому объекту (классу) он принадлежит. После, выделить на изображении части принадлежащие одному объекту, т.е. сегментировать изображение.
• Датасет в папке fishki_labelme
:
- набор из 140 изображений (2448x2448x3 JPG);
- файлы разметки в формате
.json
из labelme; - файл
obj.names
с именами объектов/классов:- background - фоновые пиксели;
- fishka - пиксели области фишки;
- defect - пиксели области дефекта.
• Скрипт 01_generate_dataset.py
- генерирует датасет для обучения НС в формате Pascal VOC. Он также разбивает выборку на train (95%) и val и test (5%). Последние 2 выборки одинаковые (val=test).
Задача №1: Подготовка датасета
Скрипт 01_generate_dataset.py
нужно модифицировать (или написать свой) чтобы он разбивал исходный набор отдельно на train(80%) val(10%) и test(10%).
Выходными данными должны являться:
Готовый к обучению датасет в формате Pascal VOC;
Задача №2: Обучение НС
Необходимо обучить НС сегментатора на датасете из задачи №1 Фреймворк машинного обучения и библиотеки можно использовать любые по желанию. Необходимо обосновать выбор. Входное разрешение нейросети при обучении необходимо также выбрать и обосновать.
Выходными данными должны являться
- обученная нейросеть сегментации с train датасетом из задачи №1;
- лог обучения (графики функции потерь и mIoU от эпохи);
- расчет метрик по сегментации на val датасете (IoU по каждому классу отдельно и mIoU);
- расчет метрик по сегментации на test датасете (IoU по каждому классу отдельно и mIoU);
Задача №3: Инференс НС
Необходимо прогнать изображения из тестового датасета через обученную в задаче №2 нейросеть сегментатора и получить визуализации.
При выполнении задания можно использовать средства фреймворка машинного обучения (PyTorch
, Tensorflow
), либо сконвертировать обученную НС в формат ONNX.
Выходными данными должны являться изображения из полученного в задаче №1 test датасета размеченные обученной в задаче №2 нейросетью.