Proyecto Lucas-Kanade Programación de Arquitecturas Avanzadas Juan Diego Reyes Pablo Iñigo Blasco Miguel Ángel Pérez Rosa María Burrueco.

Slides:



Advertisements
Presentaciones similares
Pasaje de Parámetros en 64 bits para C
Advertisements

Computadores de alta velocidad (la lista top500).
Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Programando con OpenMP*
Medición de la usabilidad en aplicaciones de escritorio.
Fermín Sánchez Carracedo Universitat Politècnica de Catalunya
D. en C. Víctor H. Castillo Topete M. en C. Luis Eduardo Morán López Aguilar Anguiano Mizraim Chávez Bernal David 1.
INSTITUTO TECNOLOGICO DE MINATITLAN
Inferencia de Árboles Multicast
Optimización de aplicaciones
Procesadores de Lenguajes I
9. Detección de Circunferencias. Transformada de Hough
MARIA JOSE MERA COLLANTES CARLOS ANTONIO QUEZADA
Unidad 3 Punteros.
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
Tema 3. Optimización de Código
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
MÉTODOS CUANTITATIVOS
Medición y rendimientos de Algoritmos
Tracking de objetos articulados Model-Based Tracking of Complex Articulated Objects Kevin Nickels, Member, IEEE, and Seth Hutchinson, Senior Member, IEEE.
Juan Pablo Vásquez Ralf Wilke 18 de Diciembre 2008.
PROCESO DE DESARROLLO. Introducción Mediante esta presentación se pretende describir el proceso de desarrollo del TALLER I.
Trabajo De Investigación (9 Créditos) Realizado Por: Raúl Montoliu
Eduardo Brioso Moniz Álvaro Castilla Nieto Mario Colchero Pérez
Análisis de Algoritmos
Ejemplos openMP.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Programación de Memoria Compartida
Inicialización de Superficies Deformables mediante Elipsoides Generalizados R. Dosil, X. M. Pardo, A. Mosquera, D. Cabello Grupo de Visión Artificial Departamento.
Valor X Valor Y Punto (0,0) Coordenadas.
Programación de Memoria Compartida
Sesión 6: Campos de Markov
Reconocimiento y resolución de ecuaciones impresas Luis Fernández Pérez Marco Antonio Formoso Trigo.
Material de apoyo Unidad 4 Estructura de datos
Flujo óptico Omar Ocegueda 24 de Noviembre de 2003.
O PENCV Por Claudia Cortés López. Q UÉ ES O PEN CV OpenCV (Open Source Computer Vision).Es una librería de funciones comúnmente usadas en técnicas de.
IPC 2008 Estimaciones por Bootstrap
Simular: Representar una cosa, fingiendo o imitando lo que no es.
Conceptos de Gestión y Planificación de Proyectos Software
Introducción a la Robótica mecanismos avanzados Coordinación de Ciencias Computacionales, INAOE Dra Angélica Muñoz Dr Eduardo Morales
 Middleware  Portabilidad  Herramientas  Módulo central. Procesamiento y operaciones  Componentes:  Módulo de matemática  Módulo de física 
Problema de inclusión en una Curva Digital Por Orellana Muñoz, Alfonso Paz Vicente, Rafael Pérez Medina, Gerardo Rodríguez Naranjo.
CARPLATE Reconocimiento del marco de la matrícula de un coche
Una introducción a la computación evolutiva
Tema 3: Filtros.
3D structure from motion
Filtro Canny Detección de Esquinas
Una aproximación a la visión
Sentencias de repetición
Multiple Camera Tracking of Interacting and Occluded Human Motion SHILOH L. DOCKSTADER, STUDENT MEMBER, IEEE, AND A. MURAT TEKALP, SENIOR MEMBER, IEEE.
MATLAB Adriana Ruiz Martínez. Mario Cesar Taracena Contreras.
II QUIMESTRE PARCIAL 4.
Introducción a la Robótica mecanismos avanzados Coordinación de Ciencias Computacionales, INAOE Dra Angélica Muñoz Dr Eduardo Morales
Sesión 6: Campos de Markov. © L.E. Sucar: PGM - CAM2 Campos de Markov Introducción –Modelo de Ising Representación –Tipos de Modelos –Redes de Markov.
@ Angel Prieto BenitoApuntes de Matemáticas 3º ESO1 SISTEMAS DE ECUACIONES Tema 6 * 3º ESO.
Estimación de proyectos de software
Método de mínimos cuadrados
Programación de Videojuegos
Pixelación de imágenes avanzada usando el algoritmo slic
PROYECTO FIN DE CARRERA Visión por Computador en iPhone4 Autor: Pablo Roldán Ruz Tutor: Sergio Escalera.
INTRODUCCIÓN A SPSS Statistic Package for Social Sciencies.
Proceso de desarrollo de Software
MEMORIA DINÁMICA.
Marco de Trabajo para Indexación, Clasificación y Recopilación Automática de Documentos Digitales Javier Caicedo Espinoza Gonzalo Parra Chico.
U2 Tipos de datos, referenciación y errores 1. Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución.
PROCESO DE DESARROLLO. Introducción Mediante esta presentación se pretende describir el proceso de desarrollo del TALLER I.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Agenda  Historia  Características  Mecanismos de concurrencia  Ejemplos  Desventajas  Accesibilidad  Conclusiones  Bibliografía.
Transcripción de la presentación:

Proyecto Lucas-Kanade Programación de Arquitecturas Avanzadas Juan Diego Reyes Pablo Iñigo Blasco Miguel Ángel Pérez Rosa María Burrueco

Índice 2 Objetivos Conceptos teóricos Punto de Partida: Biblioteca OpenCV Presentación del proyecto Optimizaciónes con SSE2 Optimizaciónes con OpenMP Optimizaciones con MPI Decisiones equivocadas Conclusiones

Objetivos Enfoque del equipo Introducirnos OpenCV: librería avanzada de visión artificial implementada por Intel. Aprender mas sobre el estado del arte teórico en algoritmos de tracking. Reto de intentar optimizar algo que actualmente está muy optimizado. Implementar algoritmo de tracking sencillo Aplicar técnicas de optimización aprendidas en clase

Optical Flow: base matemática

Optical Flow: el problema de la apertura 5 - Imposibilidad de asignar un valor unívoco al desplazamiento de un punto. ¿Solución?: Aplicar criterios de vecindad. Problema: Con eso no es suficiente Solución completa: Añadir condición adicional Surgen los algoritmos basados en la Ecuación de Contención del Optical Flow: Horn Schunk, Lucas Kanade, etc…

Método Lucas-Kanade 6 Método diferencial para la estimación del Optical flow. Nos dará una solución al problema de apertura. Todos los elementos de la ventana mantienen el mismo gradiente. Sistema superdeterminado, se aplica la solución de mínimos cuadrados.

Método Lucas-Kanade Piramidal 7 - Cada píxel contiene la distribución Gaussiana de él con sus vecinos - Con esto obtenemos la imagen en varios niveles jerárquicos. - El primer nivel Imagen original - El segundo nivel Imagen submuestreada - Así sucesivamente… - Lucas-Kanade Piramidal Pirámides Gaussianas

Lukas-Kanade Piramidal: Implementación Crear N imágenes aplicando suavizado gausiano Para cada nivel de la piramide Fin Para Obtener la posición del punto en esa imagen Calcular el vector movimiento aplicando Lukas Kanade Sumar el vector movimiento en un acumulador

Good Features to Track Método Shi y Tornasi Define un conjunto de puntos con características singulares Aporta fortaleza al tracking Principalmente se basa en bordes y texturas.

DEMO: Tracking de vídeo

Punto de partida: OpenCV ¿Por que es adecuada para este proyecto? Utilidades relacionadas: abrir imágenes, vídeos... Interface gráfica integrada y sencilla. Funcionalidad de pintado No reinventar la rueda, ahorrar tiempo y centrarnos en las optimizaciones Biblioteca libre de visión artificial Código abierto Licencia BSD Multiplataforma De Intel Orientada al tratamiento de imágenes en tiempo real Utiliza (IPP) de intel: Integrated Performance Primitives

Funcion cvCalcOpticalFlowPyrLK void cvCalcOpticalFlowPyrLK( const CvArr* imgA, const CvArr* imgB, CvArr* pyrA, CvArr* pyrB, CvPoint2D32f* featuresA, CvPoint2D32f* featuresB, int count, CvSize winSize, int level, char* status, float* error, CvTermCriteria criteria, int flags );

CvCalcOpticalFlowPyrLK : Optimizaciones potenciales Algoritmos pesado y uso de punto flotante: Ensamblado en línea SSE2: Algoritmo con bucles paralelizables: OpenMP MPI Latencia elevada. No es viable para optimizar la función, al menos para tamaños de imágenes normales. Puede utilizarse para un tracking de vídeo, utilizando ventana temporal, repartiendo frames entre procesos.

Código del proyecto Está en google code. Proyecto no es fácil de montar dada sus depencencias · Platform SDK de windows · Librerias de Visual C 9.0 · Mpich

Extensión del código fuente de OpenCv cvCalcOpticalFlowPyrLK cvCalcOpticalFlowPyrLK_paa cvCalcOpticalFlowPyrLK_paa_omp El código del proyecto contiene: Fachada para el manejo de las funciones anteriores de forma sencilla. Programa de ejemplo para testear cvCalcOpticalFlowPyrLK con distintas configuraciones. Utilidades para medir tiempos (minimos, suma...). Ejemplos y utilidades para trabajar con imágenes y MPI Código del proyecto

Ensamblado en linea y SSE2 ¿Que optimizar? - Bucles de orden superior (hay hasta de grado 4º). - Bucles con mayor latencia independientemente de su orden Se requiere un estudio temporal: Inicialización ~2 ms Para cada nivel de la piramide Para cada punto Init punto ~11 ms (poco paralelizable) Calculo de gradiente() ~16 ms Para cada criterio ~10 ms proceso Fin Para PostProceso ~5ms (poco paralelizable) Fin Para

for( x = 0; x < src_width; x+=4 ){ __asm { mov eax, x shl eax, 2 //Numero de bytes a desplazar mov esi, src3 add esi, eax mov edi, src add edi, eax movups xmm1, [esi] movups xmm5, [edi] addps xmm1, xmm5 //xmm1 is t0 but needs more calculation movups xmm2, [esi] movups xmm5, [edi] subps xmm2, xmm5 //xmm2 is t1 and is ready to use mulps xmm1, xmm7 //(src3[x] + src[x])*smooth_k[0] mov edi, src2 add edi, eax movups xmm4, [edi] mulps xmm4, xmm6 addps xmm1, xmm4 //t0 fully worked mov esi, buffer0 add esi, eax movups [esi], xmm1 mov esi, buffer1 add esi, eax movups [esi], xmm2 } for( x = 0; x < src_width; x++ ) { float t0 = (src3[x] + src[x]) *smooth_k[0] + src2[x]*smooth_k[1]; float t1 = src3[x] - src[x]; buffer0[x] = t0; buffer1[x] = t1; }

SS2: Retos y conclusiones priori resultados: La técnica de paralelización de bucles con SSE2 es compleja de aplicar cuando un bucle tiene otros bucles anidados. Mover datos no alineados (no pudimos usar __despec(align)) movups Hay que se cuidadoso donde aplicar las optimizaciones si no se quiere perder el tiempo. Elije tus batallas.

Optimizaciones con OpenMP Para cada punto reparir entre el número de procesadores que tiene Problemas que hemos encontrado: ensamblado en línea y openmp funciones inline. /* do processing from top pyramid level (smallest image) to the bottom (original image) */ for( l = level; l >= 0; l-- ){ CvSize levelSize = size[l]; int levelStep = step[l]; #pragma omp parallel for num_threads(threadCount) schedule(dynamic) for( i = 0; i < count; i++ ) //LN1 {...

Tiempos de ejecución: consideraciones Resultados pueden ser sensible al valor de parámetros, el vídeo en sí... ¡Se necesita simplificar! Mismo vídeo Misma configuración Ley de Ahmrad, no todo el código es paralelizable ¿Que estamos midiendo? Solo la función cvCalcOpticalFlowPyrLK if(a==algoritmo::LKpyramidalClassic){ for(int i=0;i<numeroRepeticiones;i++){ c1.Start(); cvCalcOpticalFlowPyrLK(...); c1.Stop(); } }else if(a==algoritmo::LKpyramidalPAA){...

Características de la máquina.

Tiempos de ejecución GRAFICA -----

MPI: Tracking de movimiento Objetivo: Tracking de vídeo en tiempo real blando. Repartir los N próximos frames entre varios procesos. N es el tamaño de la ventana temporal, define el retraso en la respuesta. Desarrollado a nivel de usario de openCV. A continuación se explica el proceso que se ha seguido.

El maestro tiene el vídeo

Maestro despacha las imágenes

Esclavos realizan calculos

Maestro une la información y la representa en pantalla

MPI: Resultados

DEMO: Uso de MPI

Decisiones equivocadas Las técnicas avanzadas de tracking actuales no son triviales: Complejidad elevada y necesidad de mas tiempo Al intentar optimizar con SSE2 deberiamos haber medido los tiempos en lugar de especular. Mucho trabajo perdido. Opemp ya estaba hecho, algo que no sabíamos a priori, pensamos que lo podríamos mejorar. Estos errores nos han impedido tener tiempo para profundizar en otros aspectos, pej: usar MPI en un cluster

Conclusiones Las técnicas de paralelismo estudiadas teóricamente pueden ser aplicadas simultaneamente a un proyecto. La mejora en el rendimiento viene dada: · Por el hardware (numero de cores, capacidades del procesador ) · El porcentaje de código que pueda ser paralelizado · La calidad del código original.

Conclusiones Programar SSE2 a mano puede no ser tan óptimo si no lo realiza un experto o un compilador especializado: Intel OpenMP puede ser una alternativa muy interesante debido a su relación esfuerzo de desarrollo/rendimiento. MPI no debe utilizarse para algoritmos ligeros ya que el overhead de coordinación y la latencia empeorarán los resultados, sin embargo es viable para algoritmos pesados como el tracking de vídeo.

Referencias Detection and tracking of point features. C Tomasi, T Kanade. Good Features to Track. J Shi, C Tornasi. Pyramidal Implementation of the Lucas Kanade Feature Tracker. JY Bouguet.