Задание

Цели задания — подготовиться и настроиться на участие в школе, получить опыт решения одной из задач компьютерного зрения — классификации изображений, а также освоить систему MATLAB, с использованием которой будут проходить практические занятия на школе.

Задача - классификация изображений на снятые в помещении (indoor) и на улице (outdoor). Результатом выполнения задания является настроенный классификатор. Задание направлено на развитие следующих навыков: низкоуровневая обработка изображений, извлечение признаков, выбор признаков, работа с реализациями методов машинного обучения, подбор параметров алгоритмов обучения.

По результатам выполнения задания будет составлен рейтинг, авторы 3х лучших работ будут награждены. Для обеспечения справедливости конкурса и простоты проверки установлена следующая схема оценки работ. Участники присылают реализации алгоритмов и обученные классификаторы до 24 июля включительно (до 24-00 по Москве). После этого, 25 июля публикуется скрытая тестовая выборка. Участники должны до 26 июля включительно (до 24-00 по Москве) после публикации сгенерировать файл с результатами применения к ней классификатора, который был отправлен ранее (мы оставляем за собой право проверить любой результат; результаты лидеров проверяются обязательно). Обратите внимание, что классификатор должен возвращать всегда одинаковый результат на одинаковых входах. Участники, приславшие результат, не сгенерированный их классификатором, могут быть дисквалифицированы. После этого составляется финальный рейтинг. Церемония награждения и обсуждение задания состоится во время школы. Участники должны быть готовы описать используемый подход.

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

Результатом выполнения задания является настроенный классификатор. В базовом варианте алгоритм должен классифицировать изображения на снятые в помещении (indoor) и на улице (outdoor). В более сложном варианте должна быть классификация на 4 класса:

  • indoor-dwelling — фотографии жилых помещений,
  • indoor-msu — фотографии, сделанные во 2 учебном корпусе МГУ,
  • outdoor-urban — городские сцены,
  • outdoor-blossoms — фотографии цветков.

Примеры фотографий:

indoor-dwelling
indoor-msu
indoor-msu
outdoor-urban
outdoor-urban
outdoor-blossoms
outdoor-blossoms

Рейтинг будет составляться по результатам классификации на перечисленные 4 класса.

При построении алгоритма классификации могут учитываться как априорные сведения о фотографиях перечисленных классов, так и информация, полученная из обучающей выборки. Тестовая выборка неизвестна участникам заранее, однако гарантируется, что обучающая выборка достаточно репрезентативна в смысле содержания изображений: например, там могут присутствовать похожие здания, или те же здания, снятые с другого ракурса или при другом освещении. При этом не гарантируется инвариантность статистик, не относящихся к содержанию изображения, таких как размер изображения, любая метаинформация (модель камеры, дата и т.д.), формат имени файлов, условия съёмки. Другими словами, в тестовой выборке может быть другое распределение тёмных или контрастных фотографии, в ней могут быть фотографии нетипичного размера или ориентации, но в ней будут похожие здания и похожие цветы.

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

Вариант решения

Мы не ограничиваем методологию решения задачи. Здесь приведён пример, который можно использовать в качестве отправной точки.

Как правило, системы распознавания изображений строятся по следующей схеме:

  • предобработка изображения (необязательный шаг),
  • сбор признаков,
  • обучение классификатора,
  • классификация.

Например, в качестве признаков можно использовать гистограммы яркости пикселей изображения по цветовым каналам. Чтобы при этом учесть возможные колебания в освещении, на этапе предобработки стоит выравнить яркость. В качестве алгоритма классификации можно использовать линейных классификатор, обученный с помощью метода опорных векторов (SVM). Структурным параметром алгоритма обучения является константа, определяющая силу регуляризации. Её можно подобрать на валидационной выборке или на скользящем контроле. Не стоит использовать для оценки подбора параметров и тестирования алгоритма одну и ту же выборку, поскольку это может привести к переобучению. Разделите данные на три части: обучающую, валидационную и тестовую.

Правила оформления работы

Пожалуйста, серьёзно отнеситесь к правилам оформления работы. В целом, руководствуйтесь принципом наименьшего удивления, так чтобы запуск программы занимал у проверяющего как можно меньше времени. В частности, старайтесь соответствовать установленным сигнатурам функций, в этом случае мы сможем сделать проверку автоматической. Все параметры алгоритма должны быть необязательными, т.е. автор должен сам подобрать параметры по умолчанию (если таковые имеются). Именно с этими параметрами будет запускаться алгоритм для получения очков в рейтинг.

Работа должна быть оформлена в виде zip-архива. Содержимое архива:

  • файл readme.txt, содержащий информацию об архиве (см. ниже),
  • директория src, содержащая исходный код алгоритмов классификации и обучения (если применимо) изображений,
  • директория bin, содержащая необходимые исполняемые файлы (если применимо), а также параметры алгоритма классификации (если применимо; например, mat-файл с конфигурацией SVM).

Алгоритм должен быть реализован в виде набора функций для MATLAB. Сигнатура функции классификации строго фиксирована (это необходимо для автоматизированной проверки заданий):

function [results] = classifyImages(imagePathsFile)
  • imagePaths — файл из N строк, в каждой строке которого путь к изображению, последняя строка пустая,
  • results — вектор-столбец размера N, который содержит номера классов, соответствующих изображениям — результаты классификации: 0 outdoor-urban, 1 indoor-dwelling, 2 outdoor-blossoms, 3 indoor-msu.

Используйте следующий код, чтобы распарсить файл с путями:

fid = fopen(imagePathsFile);   
while ~feof(fid) 
   imgPath = strtrim(fgets(fid));
   img = imread(imgPath);
   % handle img 
end;
fclose(fid); 

При использовании компилируемых языков используйте следующий формат вызова программы:

classify input output
  • input — файл из N строк, в каждой строке которого путь к изображению, последняя строка пустая,
  • output — файл, в который программа должна записать вектор размера N, который содержит номера классов — результаты классификации: 0 outdoor-urban, 1 indoor-dwelling, 2 outdoor-blossoms, 3 indoor-msu.

Формат файла readme.txt:

ФИО: [Фамилия Имя Отчество]
Организация: [название университета, института или фирмы] 

Система: [система программирования] 
ОС: [операционная система] 

Предоброаботка: [Пара предложений о стадии предобработки, если она присутствует] 
Признаки: [Список используемых признаков] 
Классификатор: [Используемый алгоритм обучения и его параметры] 

[Если выбрана другая схема работы алгоритма, её нужно описать]  

Комментарии: [комментарии по реализации / пожелания / впечатления и т.д.] 

Материалы

  • Архивы с тренировочной выборкой: indoor-dwelling, indoor-msu, outdoor-urban, outdoor-blossoms
  • VL feat - библиотека с MATLAB-интерфейсом, в которой реализованы различные алгоритмы, используемые в компьютерном зрении, есть реализация SVM(VL_PEGASOS),
  • libSVM и libLINEAR - реализации SVM, есть MATLAB интерфейсы,
  • OpenCV - популярная библиотека с реализациями алгоритмов компьютерного зрения и машинного обучения, есть Python интерфейс,
  • Spider toolbox - MATLAB-порт библиотеки WEKA, содержит множество алгоритмов обучения,
  • Слайды для лекций спецкурса по тематике машинного обучения cv_2009_06.pdf, cv_2009_07.pdf
  • Слайды по классификации и поиску изображений cv2011_07_recognition.pdf, cv2011_10_cbir.pdf

Рекомендации по использованию MATLAB

  • для вычисления признаков, создания интегрального изображения и вообще везде, где только можно, пользуйтесь векторными и матричными операциями, иначе Ваши скрипты будут очень медленно работать,
  • функция dir позволяет получить все файлы в каталоге. Не забудьте оставить только изображения, удалив '.', '..' и возможные другие файлы
  • используйте функции sum, mean, var для подсчёта статистических параметров. Функция histc строит гистограмму,
  • в MATLAB есть тулбокс, реализующий обнаружение границ (в частности, метод Canny). См. функцию edge.

Не стесняйтесь задавать вопросы на форуме курса!

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