SlideServe
Menu
Préférences
© SlideServe · v2026

Оптический поток с CUDA

yakov avatar
129 diapositives · 1.6K Views · Oct 13, 2014

Оптический поток с CUDA. Михаил Смирнов (ВМК МГУ). План. Что такое оптический поток Классический метод Horn-Schunck Современный подход к реализации модели Horn-Schunck. Оптический поток. Набор векторов смещения Плотный (для каждого пикселя)

Оптический поток с CUDA - slide 1
01 / 129Оптический поток с CUDA
1 / 17

Télécharger la présentation

Оптический поток с CUDA
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Оптический поток с CUDA Михаил Смирнов (ВМК МГУ)

  2. План • Что такое оптический поток • Классический метод Horn-Schunck • Современный подход к реализации модели Horn-Schunck

  3. Оптический поток • Набор векторов смещения • Плотный (для каждого пикселя) • Разреженный (для некоторого подмножества пикселей) • Описывает движение в кадре

  4. Как найти оптический поток? • Яркость объекта в кадре не меняется • Если никто не меняет освещения

  5. Как найти оптический поток? • Яркость объекта в кадре не меняется • Если никто не меняет освещения • Будем сопоставлять пиксели одинаковой яркости

  6. Не самый удачный вариант • Нужна дополнительная информация

  7. Aperture Problem

  8. Дополнительная информация • Посмотрим на движение в целом

  9. Дополнительная информация • Посмотрим на движение в целом • Соседние точки скорее всего двигаются одинаково

  10. Гладкость поля смещений

  11. Обозначения • Смещение по вертикали • Смещение по горизонтали

  12. Гладкость поля смещений

  13. Гладкость поля смещений

  14. Гладкость поля смещений • «Хорошее» поле • Небольшие абсолютные значения производных

  15. «Хорошее» поле смещений • Сохраняет яркость • Гладкое

  16. Обозначения • Прямоугольная область изображения • Яркость изображения с номером в точке

  17. Классическая модель Horn-Schunck • Сохранениеяркости • data term • Гладкость поля • smoothness term

  18. Точка минимума • Линеаризуем подинтегральное выражение в • Уравнения Эйлера-Лагранжа для линеаризованной модели Граничные условия: отражение

  19. Метод Якоби для дискретных уравнений Эйлера-Лагранжа где

  20. РеализацияОбщая схема • Копирование изображений в память GPU • Вычисление производных изображения • Решение СЛАУ • Копирование результат в основную память

  21. Производные изображения • Пятиточечный шаблон: • Усреднение по времени

  22. Производные изображенияРеализация • Чтение через текстуры • Нормализованные координаты • cudaAddressModeMirror

  23. Производные изображения float t0, t1; // x derivative t0 = tex2D(texSource, x - 2.0f * dx, y); t0 -= tex2D(texSource, x - 1.0f * dx, y) * 8.0f; t0 += tex2D(texSource, x + 1.0f * dx, y) * 8.0f; t0 -= tex2D(texSource, x + 2.0f * dx, y); t0 /= 12.0f; t1 = tex2D(texTarget, x - 2.0f * dx, y); t1 -= tex2D(texTarget, x - 1.0f * dx, y) * 8.0f; t1 += tex2D(texTarget, x + 1.0f * dx, y) * 8.0f; t1 -= tex2D(texTarget, x + 2.0f * dx, y); t1 /= 12.0f; Ix[pos] = (t0 + t1) * 0.5f; // t derivative Iz[pos] = tex2D(texTarget, x, y) - tex2D(texSource, x, y);

  24. Решение уравнений Эйлера-Лагранжа • Ядро выполняют одну итерацию • Обновляются и , и • Каждый поток обрабатывает вектор для одного пикселя • Исходные данные общие для всех потоков • Возможен выигрыш от использования кеша

  25. Одна итерация // handle borders if (ix != 0) left = pos - 1; else left = pos; … floatsumU = (u0[left] + u0[right] + u0[up] + u0[down]) * 0.25f; floatsumV = (v0[left] + v0[right] + v0[up] + v0[down]) * 0.25f; floatfrac = (Ix[pos] * sumU + Iy[pos] * sumV + Iz[pos]) / (Ix[pos] * Ix[pos] + Iy[pos] * Iy[pos] + alpha); u1[pos] = sumU - Ix[pos] * frac; v1[pos] = sumV - Iy[pos] * frac;

  26. Современный подход • Классический метод хорошо работает только для небольших смещений • Линеаризация

  27. Современный подход • Уменьшим изображения • «Большие» смещения станут «маленькими» • Решим задачу для уменьшенных изображений • Классический метод Horn-Schunck • Используем найденное решение как стартовую точку в исходной задаче

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

  29. Современный подход • Линеаризация работает для небольших смещений • Разобьем решение на текущем уровне на два слагаемыхрешение с предущего уровня

  30. Деформация • На текущем уровне вместо будем работать с • Задача сводится к нахождению небольших смещений • Классический Horn-Schunck

  31. Общая схема • Копирование изображений в память GPU • Построение пирамиды (коэффициент 0.5) • Начинаяснаименьшегоразрешения • Замена на его деформированную версию • Вычисление производных (для и ) • Нахождение • Масштабирование (переход к большему разрешению) • Копирование результатов в основную память

  32. Деформация constint ix = threadIdx.x + blockIdx.x * blockDim.x; constintiy = threadIdx.y + blockIdx.y * blockDim.y; constintpos = ix + iy * stride; if (ix >= width || iy >= height) return; float x = ((float)ix + u[pos] + 0.5f) / (float)width; float y = ((float)iy + v[pos] + 0.5f) / (float)height; out[pos] = tex2D(texToWarp, x, y);

  33. Современный подход • На каждом уровне изображение можно деформировать несколько раз • warping iterations

  34. Современный подход • Создание пирамиды • Для всех уровней пирамиды начиная с наименьшего • Деформация • Вычисление производных • Нахождение • Перейти к следующему уровню Выполнить несколько итераций(warping iterations)

  35. Warping iterations решение Размер изображения Warping iterations Продолжитьu, v Warping iterations Продолжитьu, v

  36. Решение СЛАУОптимизация доступа к памяти • Выравнивание адреса начала строк матрицы • Использование текстур • Использование общей памяти мультипроцессора (shared memory)

  37. Решение СЛАУОптимизация доступа к памяти • 640x480, 500 итераций • G92 (GeForce 8800GTX)

  38. Решение СЛАУОптимизация доступа к памяти • 640x480, 500 итераций • GF104 (GeForce GTX 460)

  39. Ресурсы нашего курса • Steps3d.Narod.Ru • Google Site CUDA.CS.MSU.SU • Google Group CUDA.CS.MSU.SU • Google Mail CS.MSU.SU • Google SVN • Tesla.Parallel.Ru • Twirpx.Com • Nvidia.Ru