Участник:Anton/Песочница

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
Строка 8: Строка 8:
{{Main|Графические модели (курс лекций)}}
{{Main|Графические модели (курс лекций)}}
-
'''Начало выполнения задания''': 9 апреля 2012
+
[[Изображение:GM12 task4 intro.png‎ | 600px]]
-
'''Срок сдачи''': {{ins| 18 апреля 2012, 18.00}}
+
'''Начало выполнения задания''': 18 апреля 2012
-
=== Задача 1 ===
+
'''Срок сдачи''': {{ins|2 мая 2012, 23:59}}
-
Построить граф, минимальный разрез которого соответствует минимизации энергии <tex> 1 - x_1 \dots x_n = [x_1 + \dots x_n \neq n] </tex>.
+
-
Здесь <tex>x_1,\dots, x_n</tex> — бинарные переменные, <tex>[\cdot]</tex> — [http://en.wikipedia.org/wiki/Iverson_bracket скобка Айверсона].
+
-
Доказать, что каждый возможный разрез этой конструкции соответствует определенной разметке переменных.
+
Среда реализации для всех вариантов — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
-
Подсказка: <tex> -x_1\dots x_n = \min_z \left( (n-1)z - zx_1 - \dots - zx_n \right) </tex>.
+
== Марковское случайное поле ==
 +
[[Изображение:SMAIS11_grid.jpg‎|100px|thumb|Система соседства — прямоугольная решетка]]
 +
Марковское случайное поле (MRF) — графическая модель, энергия которой записывается в виде:<br>
 +
<tex>
 +
E(X) = \sum_{p \in P} D_p(x_p) + \sum_{(p, q) \in E} V_{pq}(x_p, x_q),
 +
</tex><br>
 +
где P — множество индексов переменных, E — система соседства, D — унарные потенциалы, V — бинарные потенциалы.
-
=== Задача 2 ===
+
Рассмотрим модель со следующими ограничениями:
-
[[Изображение:GM2012_hw4_image1.png|250px|thumb|Функция f из задачи 2]]
+
*переменные <tex> x_p </tex> дискретны и принимают значения из множества {1,…,K}, K ≥ 2,
 +
*система соседства E — прямоугольная решетка,
 +
*бинарные потенциалы V представимы в виде произведения множителя, не зависящего от значений соседних переменных, и множителя, зависящего только от них: <tex>V_{pq} = c_{pq} d(x_p, x_q) </tex>.
-
Построить граф, минимальный разрез которого соответствует минимизации энергии <tex> f(x_1 + \dots + x_n) </tex>.
+
В рамках этого задания требуется:
-
Здесь <tex> f(k) = (n - k) / \ell [k > n - \ell] + [k \leq n - \ell] </tex>.
+
#реализовать алгоритм поиска конфигурации <tex>X</tex>, обладающей минимальной энергией (TRW или α-расширение),
-
Здесь <tex>x_1,\dots, x_n</tex> — бинарные переменные, <tex>[\cdot]</tex> — [http://en.wikipedia.org/wiki/Iverson_bracket скобка Айверсона].
+
#протестировать реализованный алгоритм на модельных задачах,
 +
#применить реализованный алгоритм для задачи стерео,
 +
#сравнить алгоритмы TRW и α-расширение на задаче стерео.
-
Доказать, что каждый возможный разрез этой конструкции соответствует определенной разметке переменных.
+
=== MRF для стерео ===
 +
Задача стерео состоит в сопоставлении каждому пикселю одного изображения пикселя другого изображений. В рамках данного задания рассматривается выровненное стерео, что означает, что соответствующие пиксели лежат на одной горизонтальной линии. В этих условиях переменные имеют смысл смещений по горизонтали (диспаритетов).
-
=== Задача 3 ===
+
Для задачи стерео марковское случайное поле строится следующим образом:
 +
*Переменная <tex>x_p</tex> соответствуют пикселям одного из изображений.
 +
*Используется стандартная 4-х связная система соседства.
 +
*Унарные потенциалы должны показывать, насколько хорошо выбранные пиксели двух изображений соответствуют друг другу. В простейшем случае можно взять евклидово расстояние между цветами пикселей в формате [http://en.wikipedia.org/wiki/YUV YUV]. Более совершенные унарные потенциалы описаны в статье: S. Birchfield, C. Tomasi, A pixel dissimilarity measure that is insensitive to image sampling, IEEE TPAMI, 20(4):401–409, 1998, http://ce.sharif.edu/~elno/disparitymap/Papers/dissimilarity_pami1998.pdf.
 +
*В качестве расстояния d между метками соседних переменных можно взять усеченный модуль разности: <tex>d(x_p, x_q) = |x_p - x_q| [x_p-x_q < L] + L [x_p-x_q \geq L]</tex>, L ≥ 0 — параметр.
 +
*Веса ребер c могут иметь большие значения там, где градиент на изображении мал, и маленькие значения там, где градиент большой. Например: <tex>c_{pq} = a \exp(-\|I_p - I_q\| / s)</tex>, где a ≥ 0, s ≥ 0 — параметры.
-
Как при помощи комбинации конструкций из задачи 2 построить конструкцию для минимизации энергии <tex> f(x_1 + \dots + x_n) </tex>, где f — произвольная вогнутая, кусочно-линейная функция?
+
== Вариант 1 : TRW==
 +
=== Задание ===
 +
* Вывести все формулы, использующиеся в вашей реализации TRW (формулировки прямой и двойственной задач, формула подсчета субградиента, конкретная схема субградиентного подъема, и т.д.).
 +
* Реализовать алгоритм TRW.
 +
* Протестировать алгоритм TRW на модельных данных.
 +
* Привести примеры наличия и отсутствия зазора между решениями прямой и двойственной задач (например, зазор должен отсутствовать в случае субмодулярной энергии).
 +
* Реализовать процедуру решения задачи стерео.
 +
* Подобрать параметры так, чтобы на выданных стереопарах достигался хороший результат. Набор параметров может быть своим для каждой стереопары.
 +
* На одной стереопаре из предыдущего пункта сравнить работу алгоритмов TRW и α-расширение. Реализацию недостающего алгоритма можно взять у товарища, выполняющего другой вариант (в отчете обязательно указывать, чей код вы используете). Требуется провести сравнение по энергии получаемого решения, по времени работы, по визуальному качеству решения. Все выводы должны быть подтверждены числами, графиками, картинками.
 +
* Написать отчет в формате PDF с описанием всех проведенных исследований.
-
=== Задача 4 ===
+
=== Спецификация реализуемых функций ===
 +
{|class="standard"
 +
!''Алгоритм TRW''
 +
|-
 +
|[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC, metric)
 +
|-
 +
|[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC, metric, options)
 +
|-
 +
|ВХОД
 +
|-
 +
|
 +
{|border="0"
 +
|unary — унарные потенциалы, массив типа double размера N x M x K, где N — высота решетки, M — ширина решетки, K — количество меток.
 +
|-
 +
|vertC — коэффициенты <tex> c_{pq}</tex>, соответствующие вертикальным ребрам, массив типа double размера (N — 1) x M;
 +
|-
 +
|horC — коэффициенты <tex> c_{pq}</tex>, соответствующие горизонтальным ребрам, массив типа double размера N x (M — 1);
 +
|-
 +
|metric - расстояние между метками соседних переменных, массив типа double размера K x K;
 +
|-
 +
|options — (необязательный аргумент) набор дополнительных параметров, массив типа '''cell''' вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
 +
|-
 +
|&nbsp;&nbsp;'maxIter' — максимально допустимое число итераций алгоритма (по умолчанию = 500);
 +
|-
 +
|&nbsp;&nbsp;'argEps' — порог сходимости по аргументу;
 +
|-
 +
|&nbsp;&nbsp;'display' — параметр типа logical: если true, то на каждой итерации нужно выводить на экран номер итерации, текущее значение энергии и нижней границы;
 +
|}
 +
|-
 +
|ВЫХОД
 +
|-
 +
|
 +
{|
 +
|labels — разметка, обладающая наименьшей энергией, массив типа double размера N x M;
 +
|-
 +
|energy — значения энергии на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
 +
|-
 +
|lowerBound — значения нижней границы на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
 +
|-
 +
|time — время, пройденное с начала работы алгоритма до каждой итерации, вектор типа double длины, равной количеству итераций алгоритма.
 +
|}
 +
|}
 +
Обратите внимание: в процедуре trwGridPotts параметры N, M, и K определяются неявно по размеру соответствующих элементов.
-
Рассмотрим двойственное разложение энергии <tex> E(x) = |x_1 - x_2| + |x_2 - x_3| + |x_3 - x_1|</tex> на две компоненты:
+
{|class="standard"
-
<tex> |x_1 - x_2| + |x_2 - x_3| </tex> и <tex> |x_3 - x_1|</tex>.
+
!''Стерео''
-
Здесь все переменные бинарны.
+
|-
-
Построить график двойственной функции. Есть ли зазор между прямой и двойственной задачами? Ответ обосновать.
+
|[disparity] = stereo(name)
 +
|-
 +
|ВХОД
 +
|-
 +
|
 +
{|border="0"
 +
|name — название стерео пары, строка.
 +
|}
 +
|-
 +
|ВЫХОД
 +
|-
 +
|
 +
{|
 +
|disparity — массив смещений массив типа double размера N x M со значениями -∞,...,∞.
 +
|}
 +
|}
 +
В каталоге, из которого будет запускаться решение при проверке, будет лежать выданный каталог datasets.
-
=== Задача 5 ===
+
=== Рекомендации по выполнению задания ===
 +
1. При разбиении MRF-решетки только на вертикальные и горизонтальные цепочки формулировка несколько упрощается:
 +
*Каждое ребро графа принадлежит только одному подграфу, а, значит, не нужно вводить двойственные переменные, соответствующие ребрам.
 +
*Каждая вершина принадлежит только двум деревьям, а, значит, можно ввести |P|K двойственных переменных, соответствующих условиям <tex> y_{pk}^{hor} = y_{pk}^{vert}, \;\; p \in P, \;\; k = 1,\dots,K</tex>, где hor и vert обозначают горизонтальную и вертикальную цепочку, проходящую через p-ю вершину.
-
Рассмотрим двойственное разложение энергии <tex> E(x) = |x_1 - x_2| + |x_2 - x_3| + |x_3 - x_4| + |x_4 - x_1|</tex> на две компоненты:
+
2. Поскольку двойственная функция вогнута и кусочно-линейна, оптимизировать ее можно при помощи алгоритма субградиентного подъема.
-
<tex> |x_1 - x_2| + |x_2 - x_3| + |x_3 - x_4| </tex> и <tex> |x_4 - x_1|</tex>. Построить график двойственной функции. Есть ли зазор между прямой и двойственной задачами? Ответ обосновать.
+
Каждый шаг метода субградиентного подъема состоит в пересчете значений двойственных переменных λ по следующему правилу:<br>
 +
<tex>\vec{\lambda}_{new} = \vec{\lambda}_{old} + \alpha_t \vec{g}_t, </tex>
 +
где <tex>\vec{g}_t</tex> — субградиент в текущей точке, <tex>\alpha_t</tex> — параметр, отвечающий за длину сдвига.
 +
В рамках данного практического задания можно использовать любой способ субградиентного подъема. Например, можно использовать следующий адаптивный метод выбора длины шага:<br>
 +
<tex>\alpha_t = \frac{\text{Approx}_t - \text{Dual}_t}{|| \nabla \vec{g}_t|| ^ 2},</tex><br>
 +
где <tex>\text{Dual}_t</tex> — текущее значение двойственной функции, <tex>\text{Approx}_t</tex> — оценка оптимума двойственной функции, которую можно определять следующим способом:<br>
 +
<tex>\text{Approx}_t = \text{BestDual}_t + \delta_t,</tex> где <tex>\text{BestDual}_t </tex> — лучшее на данный момент значение двойственной функции, <br>
 +
<tex>\delta_{t+1} = \begin{cases}
 +
\gamma_0 \delta_t, \;\; \text{Dual}_t > \text{Dual}_{t-1}, \\
 +
\max(\gamma_1 \delta_t, \; \varepsilon ), \;\; \text{Dual}_t \leq \text{Dual}_{t-1}. \end{cases}</tex><br>
 +
<tex>\gamma_0, \; \gamma_1, \; \varepsilon</tex> — параметры метода. Обычно <tex>\gamma_0 > 1, \; 1 > \gamma_1 > 0, \; \varepsilon \to 0+ </tex>. Конкретные значения этих параметров нужно подобрать.
 +
Подробнее о методах субградиентного подъема написано в статье:
 +
N. Komodakis, N.Paragios and G. Tziritas, MRF Energy Minimization and Beyond via Dual Decomposition, IEEE TPAMI, 33(3):531-552, 2011,
 +
http://www.csd.uoc.gr/~komod/publications/docs/DualDecomposition_PAMI.pdf
 +
 +
3. В качестве текущего значения энергии в рамках алгоритма TRW можно выбрать минимум энергий разметок, полученных по только вертикальным и только горизонтальным цепочкам.
 +
 +
4. При тестировании алгоритма TRW необходимо следить, чтобы наибольшее значение нижней границы было не больше, чем наименьшее значение энергии.
 +
 +
5. Потенциалы для стереопары tsukuba и примеры работы различных алгоритмов: http://vision.middlebury.edu/MRF/results/tsukuba/index.html
 +
 +
=== Данные для выполнения задания ===
 +
[[Media:SMAIS11_task2_Converter.zip|rgb2luv]] — конвертер изображений в формат [http://en.wikipedia.org/wiki/YUV YUV].
 +
 +
[[Media:GM_Stereo_Datasets.zip‎|datasets]] — стереопары.
 +
 +
=== Оформление задания ===
 +
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 3. ФИО, вариант 1». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
 +
 +
Письмо должно содержать:
 +
*PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
 +
*trwGridPotts.m
 +
*stereoTsukuba.m, stereoTeddy.m, stereoCones.m, stereoArt.m
 +
*Набор вспомогательных файлов при необходимости
 +
 +
== Вариант 2 : α-расширение ==
 +
=== Задание ===
 +
* Вывести все формулы, использующиеся в вашей реализации α-расширения (сведение шага алгоритма к разрезу графа).
 +
* Реализовать алгоритм α-расширение, используя выданный код разрезов графов.
 +
* Протестировать алгоритм α-расширение на модельных данных (например, решетка 100 x 100, 10 классов, случайные потенциалы).
 +
* Реализовать процедуру решения задачи стерео.
 +
* Подобрать параметры так, чтобы на выданных стереопарах достигался хороший результат. Набор параметров может быть своим для каждой стереопары.
 +
* На одной стереопаре из предыдущего пункта сравнить работу алгоритмов TRW и α-расширение. Реализацию недостающего алгоритма можно взять у товарища, выполняющего другой вариант (в отчете обязательно указывать, чей код вы используете). Требуется провести сравнение по энергии получаемого решения, по времени работы, по визуальному качеству решения. Все выводы должны быть подтверждены числами, графиками, картинками.
 +
* Написать отчет в формате PDF с описанием всех проведенных исследований.
 +
 +
=== Спецификация реализуемых функций ===
 +
{|class="standard"
 +
!''Алгоритм α-расширение''
 +
|-
 +
|[labels, energy, time] = alphaExpansionGridPotts(unary, vertC, horC, metric)
 +
|-
 +
|[labels, energy, time] = alphaExpansionGridPotts(unary, vertC, horC, metric, options)
 +
|-
 +
|ВХОД
 +
|-
 +
|
 +
{|border="0"
 +
|unary — унарные потенциалы, массив типа double размера N x M x K, где N — высота решетки, M — ширина решетки, K — количество меток.
 +
|-
 +
|vertC — коэффициенты <tex> c_{pq}</tex>, соответствующие вертикальным ребрам, массив типа double размера (N — 1) x M;
 +
|-
 +
|horC — коэффициенты <tex> c_{pq}</tex>, соответствующие горизонтальным ребрам, массив типа double размера N x (M — 1);
 +
|-
 +
|metric - расстояние между метками соседних переменных, массив типа double размера K x K;
 +
|-
 +
|options — (необязательный аргумент) набор дополнительных параметров, массив типа '''cell''' вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
 +
|-
 +
|&nbsp;&nbsp;'maxIter' — максимально допустимое число итераций алгоритма (по умолчанию = 500);
 +
|-
 +
|&nbsp;&nbsp;'display' — параметр типа logical: если true, то при каждом запуске алгоритма разреза графа нужно выводить на экран номер итерации, номер расширяемой метки, текущее значение энергии;
 +
|}
 +
|-
 +
|ВЫХОД
 +
|-
 +
|
 +
{|
 +
|labels — разметка, обладающая наименьшей энергией, массив типа double размера N x M;
 +
|-
 +
|energy — значения энергии на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
 +
|-
 +
|time — время, пройденное с начала работы алгоритма до каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
 +
|}
 +
|}
 +
Обратите внимание: в процедуре alphaExpansionGridPotts параметры N, M, и K определяются неявно по размеру соответствующих элементов.
 +
 +
{|class="standard"
 +
!''Стерео''
 +
|-
 +
|[disparity] = stereo(name)
 +
|-
 +
|ВХОД
 +
|-
 +
|
 +
{|border="0"
 +
|name — название стерео пары, строка.
 +
|}
 +
|-
 +
|ВЫХОД
 +
|-
 +
|
 +
{|
 +
|disparity — массив смещений массив типа double размера N x M со значениями -∞,...,∞.
 +
|}
 +
|}
 +
В каталоге, из которого будет запускаться решение при проверке, будет лежать выданный каталог datasets.
 +
 +
=== Рекомендации по выполнению задания ===
 +
# Обратите внимание на область применимости алгоритма α-расширение.
 +
# При тестировании алгоритма α-расширение необходимо следить за следующим:
 +
#* после каждого применения разреза графа общая энергия не возрастает;
 +
#* значение энергии, выдаваемое функцией graphCutMex, совпадает со значением энергии, подсчитанным независимой процедурой.
 +
# Потенциалы для стереопары tsukuba и примеры работы различных алгоритмов: http://vision.middlebury.edu/MRF/results/tsukuba/index.html
 +
 +
=== Данные для выполнения задания ===
 +
[[Media:GM_GraphCut.zip|graphCut]] — MATLAB интерфейс к разрезам графов.
 +
 +
[[Media:SMAIS11_task2_Converter.zip|rgb2luv]] — конвертер изображений в формат [http://en.wikipedia.org/wiki/YUV YUV].
 +
 +
[[Media:GM_Stereo_Datasets.zip‎|datasets]] — стереопары.
=== Оформление задания ===
=== Оформление задания ===
 +
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 3. ФИО, вариант 2». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
-
Выполненный вариант задания необходимо сдать лектору в бумажном виде или прислать на ''bayesml@gmail.com'' в электронном виде.
+
Письмо должно содержать:
-
Для решения задания можно использовать собственноручно написанные программные средства. Если таковые используются, то их тоже необходимо прислать.
+
*PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
 +
*alphaExpansionGridPotts.m
 +
*stereoTsukuba.m, stereoTeddy.m, stereoCones.m, stereoArt.m
 +
*Набор вспомогательных файлов при необходимости
[[Категория:Учебные курсы]]
[[Категория:Учебные курсы]]
[[Категория:Байесовские методы]]
[[Категория:Байесовские методы]]

Версия 11:57, 17 апреля 2012

Задание находится в разработке.

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


Содержание

Начало выполнения задания: 18 апреля 2012

Срок сдачи: 2 мая 2012, 23:59

Среда реализации для всех вариантов — MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.

Марковское случайное поле

Система соседства — прямоугольная решетка
Система соседства — прямоугольная решетка

Марковское случайное поле (MRF) — графическая модель, энергия которой записывается в виде:
 
E(X) = \sum_{p \in P} D_p(x_p) + \sum_{(p, q) \in E} V_{pq}(x_p, x_q),
где P — множество индексов переменных, E — система соседства, D — унарные потенциалы, V — бинарные потенциалы.

Рассмотрим модель со следующими ограничениями:

  • переменные  x_p дискретны и принимают значения из множества {1,…,K}, K ≥ 2,
  • система соседства E — прямоугольная решетка,
  • бинарные потенциалы V представимы в виде произведения множителя, не зависящего от значений соседних переменных, и множителя, зависящего только от них: V_{pq} = c_{pq} d(x_p, x_q) .

В рамках этого задания требуется:

  1. реализовать алгоритм поиска конфигурации X, обладающей минимальной энергией (TRW или α-расширение),
  2. протестировать реализованный алгоритм на модельных задачах,
  3. применить реализованный алгоритм для задачи стерео,
  4. сравнить алгоритмы TRW и α-расширение на задаче стерео.

MRF для стерео

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

Для задачи стерео марковское случайное поле строится следующим образом:

  • Переменная x_p соответствуют пикселям одного из изображений.
  • Используется стандартная 4-х связная система соседства.
  • Унарные потенциалы должны показывать, насколько хорошо выбранные пиксели двух изображений соответствуют друг другу. В простейшем случае можно взять евклидово расстояние между цветами пикселей в формате YUV. Более совершенные унарные потенциалы описаны в статье: S. Birchfield, C. Tomasi, A pixel dissimilarity measure that is insensitive to image sampling, IEEE TPAMI, 20(4):401–409, 1998, http://ce.sharif.edu/~elno/disparitymap/Papers/dissimilarity_pami1998.pdf.
  • В качестве расстояния d между метками соседних переменных можно взять усеченный модуль разности: d(x_p, x_q) = |x_p - x_q| [x_p-x_q < L] + L [x_p-x_q \geq L], L ≥ 0 — параметр.
  • Веса ребер c могут иметь большие значения там, где градиент на изображении мал, и маленькие значения там, где градиент большой. Например: c_{pq} = a \exp(-\|I_p - I_q\| / s), где a ≥ 0, s ≥ 0 — параметры.

Вариант 1 : TRW

Задание

  • Вывести все формулы, использующиеся в вашей реализации TRW (формулировки прямой и двойственной задач, формула подсчета субградиента, конкретная схема субградиентного подъема, и т.д.).
  • Реализовать алгоритм TRW.
  • Протестировать алгоритм TRW на модельных данных.
  • Привести примеры наличия и отсутствия зазора между решениями прямой и двойственной задач (например, зазор должен отсутствовать в случае субмодулярной энергии).
  • Реализовать процедуру решения задачи стерео.
  • Подобрать параметры так, чтобы на выданных стереопарах достигался хороший результат. Набор параметров может быть своим для каждой стереопары.
  • На одной стереопаре из предыдущего пункта сравнить работу алгоритмов TRW и α-расширение. Реализацию недостающего алгоритма можно взять у товарища, выполняющего другой вариант (в отчете обязательно указывать, чей код вы используете). Требуется провести сравнение по энергии получаемого решения, по времени работы, по визуальному качеству решения. Все выводы должны быть подтверждены числами, графиками, картинками.
  • Написать отчет в формате PDF с описанием всех проведенных исследований.

Спецификация реализуемых функций

Алгоритм TRW
[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC, metric)
[labels, energy, lowerBound, time] = trwGridPotts(unary, vertC, horC, metric, options)
ВХОД
unary — унарные потенциалы, массив типа double размера N x M x K, где N — высота решетки, M — ширина решетки, K — количество меток.
vertC — коэффициенты  c_{pq}, соответствующие вертикальным ребрам, массив типа double размера (N — 1) x M;
horC — коэффициенты  c_{pq}, соответствующие горизонтальным ребрам, массив типа double размера N x (M — 1);
metric - расстояние между метками соседних переменных, массив типа double размера K x K;
options — (необязательный аргумент) набор дополнительных параметров, массив типа cell вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
  'maxIter' — максимально допустимое число итераций алгоритма (по умолчанию = 500);
  'argEps' — порог сходимости по аргументу;
  'display' — параметр типа logical: если true, то на каждой итерации нужно выводить на экран номер итерации, текущее значение энергии и нижней границы;
ВЫХОД
labels — разметка, обладающая наименьшей энергией, массив типа double размера N x M;
energy — значения энергии на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
lowerBound — значения нижней границы на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
time — время, пройденное с начала работы алгоритма до каждой итерации, вектор типа double длины, равной количеству итераций алгоритма.

Обратите внимание: в процедуре trwGridPotts параметры N, M, и K определяются неявно по размеру соответствующих элементов.

Стерео
[disparity] = stereo(name)
ВХОД
name — название стерео пары, строка.
ВЫХОД
disparity — массив смещений массив типа double размера N x M со значениями -∞,...,∞.

В каталоге, из которого будет запускаться решение при проверке, будет лежать выданный каталог datasets.

Рекомендации по выполнению задания

1. При разбиении MRF-решетки только на вертикальные и горизонтальные цепочки формулировка несколько упрощается:

  • Каждое ребро графа принадлежит только одному подграфу, а, значит, не нужно вводить двойственные переменные, соответствующие ребрам.
  • Каждая вершина принадлежит только двум деревьям, а, значит, можно ввести |P|K двойственных переменных, соответствующих условиям  y_{pk}^{hor} = y_{pk}^{vert}, \;\; p \in P, \;\;  k = 1,\dots,K, где hor и vert обозначают горизонтальную и вертикальную цепочку, проходящую через p-ю вершину.

2. Поскольку двойственная функция вогнута и кусочно-линейна, оптимизировать ее можно при помощи алгоритма субградиентного подъема. Каждый шаг метода субградиентного подъема состоит в пересчете значений двойственных переменных λ по следующему правилу:
\vec{\lambda}_{new} = \vec{\lambda}_{old} + \alpha_t \vec{g}_t, где \vec{g}_t — субградиент в текущей точке, \alpha_t — параметр, отвечающий за длину сдвига. В рамках данного практического задания можно использовать любой способ субградиентного подъема. Например, можно использовать следующий адаптивный метод выбора длины шага:
\alpha_t  = \frac{\text{Approx}_t - \text{Dual}_t}{|| \nabla \vec{g}_t|| ^ 2},
где \text{Dual}_t — текущее значение двойственной функции, \text{Approx}_t — оценка оптимума двойственной функции, которую можно определять следующим способом:
\text{Approx}_t = \text{BestDual}_t + \delta_t, где \text{BestDual}_t — лучшее на данный момент значение двойственной функции,
\delta_{t+1} = \begin{cases}
\gamma_0 \delta_t, \;\; \text{Dual}_t > \text{Dual}_{t-1}, \\
\max(\gamma_1 \delta_t, \; \varepsilon ), \;\; \text{Dual}_t \leq \text{Dual}_{t-1}. \end{cases}
\gamma_0, \; \gamma_1, \;  \varepsilon — параметры метода. Обычно \gamma_0 > 1, \;  1 > \gamma_1 > 0, \; \varepsilon \to 0+ . Конкретные значения этих параметров нужно подобрать.

Подробнее о методах субградиентного подъема написано в статье: N. Komodakis, N.Paragios and G. Tziritas, MRF Energy Minimization and Beyond via Dual Decomposition, IEEE TPAMI, 33(3):531-552, 2011, http://www.csd.uoc.gr/~komod/publications/docs/DualDecomposition_PAMI.pdf

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

4. При тестировании алгоритма TRW необходимо следить, чтобы наибольшее значение нижней границы было не больше, чем наименьшее значение энергии.

5. Потенциалы для стереопары tsukuba и примеры работы различных алгоритмов: http://vision.middlebury.edu/MRF/results/tsukuba/index.html

Данные для выполнения задания

rgb2luv — конвертер изображений в формат YUV.

datasets — стереопары.

Оформление задания

Выполненный вариант задания необходимо прислать письмом по адресу bayesml@gmail.com с темой «Задание 3. ФИО, вариант 1». Убедительная просьба присылать выполненное задание только один раз с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.

Письмо должно содержать:

  • PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
  • trwGridPotts.m
  • stereoTsukuba.m, stereoTeddy.m, stereoCones.m, stereoArt.m
  • Набор вспомогательных файлов при необходимости

Вариант 2 : α-расширение

Задание

  • Вывести все формулы, использующиеся в вашей реализации α-расширения (сведение шага алгоритма к разрезу графа).
  • Реализовать алгоритм α-расширение, используя выданный код разрезов графов.
  • Протестировать алгоритм α-расширение на модельных данных (например, решетка 100 x 100, 10 классов, случайные потенциалы).
  • Реализовать процедуру решения задачи стерео.
  • Подобрать параметры так, чтобы на выданных стереопарах достигался хороший результат. Набор параметров может быть своим для каждой стереопары.
  • На одной стереопаре из предыдущего пункта сравнить работу алгоритмов TRW и α-расширение. Реализацию недостающего алгоритма можно взять у товарища, выполняющего другой вариант (в отчете обязательно указывать, чей код вы используете). Требуется провести сравнение по энергии получаемого решения, по времени работы, по визуальному качеству решения. Все выводы должны быть подтверждены числами, графиками, картинками.
  • Написать отчет в формате PDF с описанием всех проведенных исследований.

Спецификация реализуемых функций

Алгоритм α-расширение
[labels, energy, time] = alphaExpansionGridPotts(unary, vertC, horC, metric)
[labels, energy, time] = alphaExpansionGridPotts(unary, vertC, horC, metric, options)
ВХОД
unary — унарные потенциалы, массив типа double размера N x M x K, где N — высота решетки, M — ширина решетки, K — количество меток.
vertC — коэффициенты  c_{pq}, соответствующие вертикальным ребрам, массив типа double размера (N — 1) x M;
horC — коэффициенты  c_{pq}, соответствующие горизонтальным ребрам, массив типа double размера N x (M — 1);
metric - расстояние между метками соседних переменных, массив типа double размера K x K;
options — (необязательный аргумент) набор дополнительных параметров, массив типа cell вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
  'maxIter' — максимально допустимое число итераций алгоритма (по умолчанию = 500);
  'display' — параметр типа logical: если true, то при каждом запуске алгоритма разреза графа нужно выводить на экран номер итерации, номер расширяемой метки, текущее значение энергии;
ВЫХОД
labels — разметка, обладающая наименьшей энергией, массив типа double размера N x M;
energy — значения энергии на каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;
time — время, пройденное с начала работы алгоритма до каждой итерации, вектор типа double длины, равной количеству итераций алгоритма;

Обратите внимание: в процедуре alphaExpansionGridPotts параметры N, M, и K определяются неявно по размеру соответствующих элементов.

Стерео
[disparity] = stereo(name)
ВХОД
name — название стерео пары, строка.
ВЫХОД
disparity — массив смещений массив типа double размера N x M со значениями -∞,...,∞.

В каталоге, из которого будет запускаться решение при проверке, будет лежать выданный каталог datasets.

Рекомендации по выполнению задания

  1. Обратите внимание на область применимости алгоритма α-расширение.
  2. При тестировании алгоритма α-расширение необходимо следить за следующим:
    • после каждого применения разреза графа общая энергия не возрастает;
    • значение энергии, выдаваемое функцией graphCutMex, совпадает со значением энергии, подсчитанным независимой процедурой.
  3. Потенциалы для стереопары tsukuba и примеры работы различных алгоритмов: http://vision.middlebury.edu/MRF/results/tsukuba/index.html

Данные для выполнения задания

graphCut — MATLAB интерфейс к разрезам графов.

rgb2luv — конвертер изображений в формат YUV.

datasets — стереопары.

Оформление задания

Выполненный вариант задания необходимо прислать письмом по адресу bayesml@gmail.com с темой «Задание 3. ФИО, вариант 2». Убедительная просьба присылать выполненное задание только один раз с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.

Письмо должно содержать:

  • PDF-файл с описанием проведенных исследований (отчет должен включать в себя описание выполнения каждого пункта задания с приведением соответствующих графиков, изображений, чисел)
  • alphaExpansionGridPotts.m
  • stereoTsukuba.m, stereoTeddy.m, stereoCones.m, stereoArt.m
  • Набор вспомогательных файлов при необходимости
Личные инструменты