task2 (1124481), страница 2
Текст из файла (страница 2)
В случае реализации методов, отличных от описанных в этом руководстве, нужно кратко объяснить принципы их работы.Выполненная базовая часть работы оценивается в 5 баллов. При невыполненииодного или нескольких пунктов требований работа будет оценена в 0 баллов. Принарушении первого требования к заданию работа будет оценена в -5 баллов. Баллы за дополнительные части задания начисляются только при условии успешноговыполнения базовой части. Количество начисленных за задание баллов не можетпревышать 15.
Задание нужно сдать до 26 октября 23:59 (мягкий дедлайн). При отправке работы после срока с каждым днем опоздания будет начисляться штраф в 1балл, кроме первых двух дней, когда штраф составит 0.5 балла в день. После 2 ноября 23:59 работы приниматься не будут (жесткий дедлайн). Для решения спорныхвопросов и ситуаций предусмотрена апелляция, время и место проведения которойопределяется проверяющими для каждой группы отдельно. Также на апелляциюмогут быть приглашены студенты, авторство работ которых вызывает сомнения.97Сборка работыРазархивируйте cygwin.exe и запустите сценарий Cygwin.bat.
Откроется консольи вы окажетесь в папке /home/<username>.Скопируйте в эту папку архив task2_project.tar.gz с каркасом задания и разархивируйте командой tar xvf task2_project.tar.gz. Разархивируйте в корень полученной директории архив с обучающими и тестовыми данными.Зайдите в папку проекта, введя в консоли команду cd task2_project. Запуститесценарий компиляции командой make all. В папке build/bin появятся исполняемыeфайлы.
Их можно запустить из консоли командой ./build/bin/<имя файла> . Удалить все скомпилированные файлы можно командой make cleanЕсли вы добавляете новые файлы в проект, то заголовочные файлы следует поместить в папке include/, файлы исходного кода - в папке src/Примеры:Обучить модель:task2.exe -d ../../data/binary/train_labels.txt -m model.txt --trainКлассифицировать изображения из тестовой выборки с помощью обученногоклассификатора:task2.exe -d ../../data/binary/test_labels.txt -m model.txt -l predictions.txt--predictПроверка точности классификации:./compare.py data/binary/test_labels.txt build/bin/predictions.txt8Детали реализацииВ данном разделе содержится информация о некоторых деталях реализации шаб-лона.Загруженные изображения хранятся в виде объектов класса BMP.
Обращение кним осуществляется следующим образом:10RGBApixel pixel = image.GetPixel(0,0);int s = pixel.Red + pixel.Blue + pixel.Green;Основные используемые структуры данных описаны в начале файла task2.cpp:typedef vector<pair<BMP*, int> > TDataSet;typedef vector<pair<string, int> > TFileList;typedef vector<pair<vector<float>, int> > TFeatures;TDataSet — вектор, состоящий из пар "Указатель на изображение, Метка класса".TFileList — вектор, состоящий из пар "Имя файла с картинкой, Метка класса".TFeatures — вектор, состоящий из пар "Вектор признаков, Метка класса".9Дополнительные задания9.1Многоклассовая классификация (+2 балла)Бинарный классификатор из базовой части без изменения кода программы должен работать и в случае большего числа классов.
Вам необходимо обучить модельна примерах из подпапки data/multiclass:task2.exe -d ../../data/multiclass/train_labels.txt -m model_multiclass.txt --trainДалее, классифицировать изображения из тестовой выборки с помощью обученного классификатора:task2.exe -d ../../data/multiclass/test_labels.txt -m model_multiclass.txt -lpredictions.txt --predictИ проверить точность классификатора, она должна быть не ниже 50%./compare.py data/multiclass/test_labels.txt build/bin/predictions.txtФайл с обученной моделью model_multiclass.txt следует поместить в корень проекта.119.2Нелинейные ядра SVM (+3 балла)В этом задании необходимо реализовать нелинейное ядро для классификатораSVM.В линейном SVM в качестве функции расстояния между векторами признаковнеявно используется скалярное произведение в Евклидовом пространстве h·, ·i.
Этоне лучший вариант для признаков-гистограмм, поэтому совместно с HOG часто исPPyd, где сумпользуют нелинейный SVM с χ2 ядром: K(x, y) = d k(xd , yd ) = d xxdd+ydмирование идёт по всем компонентам векторов. Проблема в том, что сложность обучения становится вместо линейной по числу прецедентов, кубической. К счастью,благодаря специальным свойствам ядра χ2 (аддитивное, гомогенное), существует такое преобразование признакового пространства Ψ(x), что K(x, y) = hΨ(x), Ψ(y)i.Таким образом, можно сначала преобразовать признаки, а потом передавать их навход линейному SVM.Для каждой компоненты вектора x преобразование выглядит как [Ψ(x)]λ =pe−iλ log x xκ(λ), где в случае χ2 ядра κ(λ) = sech(πλ).
Чтобы получить точное значение, необходимо взять конкатенацию значений этой функции по всем вещественнымλ, но тогда вектор признаков будет иметь бесконечную размерность. Поэтому берутего значения в нескольких точках: −nL, (−n + 1)L, . . . , nL, где n - порядок аппроксимации (обычно достаточно 1 или 2), а L — шаг аппроксимации, который нужноподбирать по валидационной выборке или на скользящем контроле (начать можно созначений 0.25..0.5).
Поскольку значения функции комплексные, вещественные и мнимые части рассматриваются отдельно и конкатенируются (при этом размер векторавырастает ещё в два раза). Подробнее техника описана в статье• A. Vedaldi and A. Zisserman, “Efficient Additive Kernels via Explicit Feature Maps,”IEEE Conference on Computer Vision and Pattern Recognition, 2010.9.3Пирамида дескрипторов (+3 балла)Пирамида дескрипторов строится следующим образом:• Изображение делится на 4 части.12• В каждой части считается дескриптор HOG.• Все дескрипторы конкатенируются.
(1 дескриптор HOG всего изображения +4 дескриптора HOG частей изображения)9.4Цветовые признаки (+3 балла)В этом задании вам необходимо использовать цветовые признаки, чтобы улучшить качество классификатора.Извлекать цветовые признаки можно следующим образом:• Изображение делится на 64 блока (8 на 8)• В каждом блоке считается средний цвет (три значения - среднее для каждогоиз каналов)• Все значения вытягиваются в один вектор и приводятся к отрезку [0, 1] (необходимо поделить на 255)13• Полученный вектор конкатенируется с вектором HOG10Часто задаваемые вопросы• Нужно ли реализовывать классификатор, или достаточно реализовать дескриптор HOG?Результатом выполнения задания должен быть классификатор — программа,способная классифицировать изображения автодорожных знаков будучи запущенной с помощью команд, указанных выше.
Однако в шаблоне задания реализованы все части классификатора, кроме дескриптора HOG, поэтому обезадачи фактически эквивалентны.• Как соединить гистограммы для отдельных клеток в дескрипторизображения?Нужно просто конкатенировать, т.е. записать последовательно, друг за другом,эти гистограммы, в один массив.14.