Задание 2. Распознавание дорожных знаков.

Введение

Целью задания является знакомство с одним из популярных подходов к распознаванию объектов, основанном на использовании классификатора SVM и дескриптора HOG.

Описание задания

Обязательная часть задания

Реализовать метод классификации знаков дорожного движения по схеме linear SVM + HOG. Алгоритм должен быть реализован в виде функции со следующей сигнатурой: class = recognize_sign(img, model, mode), где

  • img - цветное изображение знака
  • model - модель классификатора. Будет подгружена один раз с помощью вызова функции load(model_path, 'model'). Для базового варианта файл модели должен называться model_base.mat, для бонусного - model_bonus.mat
  • mode - число uint, показывающее какую часть задания запускать. 0 - базовая часть задания, 1 - бонусная часть задания
  • class - строка, обозначающая распознанный класс дорожного знака

Общую схему алгоритма можно записать следующим образом:

  • Масштабирование входного изображения до заранее выбранного размера (например 30x30)
  • Извлечение дескриптора HOG
  • Классификация полученного дескриптора с помощью ранее обученной модели SVM

Для проверки того, что сигнатура вашей функции реализована правильно, необходимо воспользоваться скриптом check_signs_recognition.m. На вход скрипту подается папка с картинками и разметкой, путь к модели классификатора и режим работы (базовый или бонусный). На выходе печатается процент верно распознанных знаков. Рекомендуется воспользоваться данным скриптом хотя бы один раз до отправки решения. Именно этот скрипт будет использован для автоматической проверки задания на скрытой тестовой выборке.

Бонусная часть задания

В бонусной части задания вам предлагается попытаться улучшить результаты базовой схемы распознавания за счет замены линейного ядра SVM на нелинейное (например, на ядро radial basis function), либо за счет внесения изменений в дескриптор.

Реализация

Для извлечения дескриптора HOG можно воспользоваться скриптом compute_hog.m, либо написать свою реализацию. В скрипте compute_hog.m реализован вариант HOG'а с неперекрывающимися ячейками и симметричными углами (угол -90 попадает в ту же ячейку гистограммы, что и угол 90). Сигнатура функции выглядит следующим образом:
desc = compute_hog(img, n_cells, n_cells_in_block, n_angles), где

  • img - одноканальное квадратное изображение. Для извлечения дескриптора из RGB-картинки можно извлечь его по каждому из каналов
  • n_cells - количество ячеек HOG по высоте и по ширине (должно целочисленно делиться на размеры изображения). То есть всего будет n_cells^2 ячеек
  • n_cells_in_block - количество ячеек в блоке по ширине и по высоте (таким образом общее количество ячеек n_cells_in_block^2)
  • n_angles - количество ячеек в гистограмме

Например, для изображения размером 30x30 следующий вызов desc = compute_hog(img, 6, 2, 8) посчитает HOG с количеством ячеек, равным 36 (6 по горизонтали и 6 по вертикали), нормированных по блокам, состоящим из 4 (2x2) ячеек. Диапозон углов будет дискретизован на 8 ячеек.

Для работы с SVM рекомендуется воспользоваться библиотекой libSVM, о работе с которой и процедуре установки можно прочитать в упражнении 3 предыдущего года.

Описание базы знаков

База состоит из набора изображений знаков и разметки к каждому из них. В формате разметки для вас интерес представляет третий компонент, обозначающий класс знака, на данном изображении. Например, для изображения 00001_00000.png разметка лежит в файле 00001_00000.txt и представляет из себя следующую строку "1 1 be_C43 2 1 1 1 239 236 239 236 1", где be_C43 обозначает класс знака.

Содержание архива с выполненным заданием

Архив должен содержать файл readme, со следующей информацией:

Общая информация:

  1. ФИО: <Фамилия Имя Отчество> Группа: <номер группы>
  2. Задание: <номер задания> / <название задания>
  3. Система: <система программирования> ОС: <операционная система>
  4. Затраченное время: укажите, сколько потратили времени на выполнение задания, на что ушло больше всего и т.д.
  5. Комментарии: <комментарии по реализации / пожелания / впечатления и т.д.>

Базовая часть:

  • Краткое описание особенностей вашего алгоритма
  • Какой размер изображений был использован в распознавании?
  • С какими трудностями вы столкнулись при выполнении задания?
  • Какой точности вам удалось достичь на скользящем контроле на выданных вам данных?

Бонусная часть (описание только частей, которые были реализованы):

  • Какой точности вам удалось достичь на скользящем контроле на выданных вам данных?
  • В чем состояли внесенные вами изменения, по сравнению с базовой частью алгоритма?

Также в корневой директории архива должны быть помещены:

  • обученные модели распознавателя
  • код, использованный для обучения
  • код, для извлечения дескриптора
  • любой другой использованный вами код

Оценка и рейтинг

Задание считается выполненным, если реализована основная часть задания. Все задания будут оценены на скрытой тестовой базе и построены рейтинги для работы обоими методами на дневной и ночных базах изображений.

Материалы к заданию

Материалы (zip, 80Mb) .

© Лаборатория компьютерной графики при ВМиК МГУ