¿Cómo es un proyecto de visión por computadora “típico”, de principio a fin?

Depende de su entorno y propósito para hacer un proyecto de Visión por computadora. ¿Estás en el laboratorio haciendo investigación pura, o en la industria o en algún punto intermedio, como un laboratorio industrial orientado a la investigación?

¿Es un proyecto de investigación en el que realiza investigaciones, recopila y anota datos, desarrolla algoritmos novedosos?

¿Es la visión industrial por computadora, donde busca los algoritmos correctos (rápidos, escalables y precisos) para su problema, y ​​los implementa en su entorno, ya sea un robot de selección y colocación, o una aplicación de teléfono móvil?

He estado en ambos lugares y he visto algunos puntos en común entre hacer proyectos industriales o de investigación orientados a la visión por computadora.

Mi flujo de trabajo es algo así:

  1. Piensa simple: acerca de tu visión por computadora. ¿Cuál es el objetivo del proyecto, qué se espera que entregue al final? Es posible que desee hacer una lectura inicial relacionada con el problema, pero tenga cuidado de no sentirse abrumado con la cantidad de veces que las personas ya intentaron resolverlo. Decida: ¿Necesitamos llevar estos hallazgos recientes más lejos o simplemente usar uno de ellos?
  2. Experimentos de referencia: no puede saber realmente si necesita investigar hasta que implemente al menos 1-2 algoritmos principales desarrollados anteriormente. Si también puede encontrar su código en la página del proyecto, sería genial. ¿Realmente están funcionando como ya se informó en el documento? En su mayoría no funcionan, es por eso que todavía no vemos robots locos dando vueltas. Los experimentos que realizan se basan en un conjunto limitado de clases y en un conjunto de imágenes muy controlado que no representa desafíos del mundo real. Encuentre fallas en su método, ¿qué suposiciones duras hacen que relacionan estos resultados poco realistas? Al final, esto le brinda una exposición para su propio problema específico y una idea para las soluciones existentes.
  3. Encuentre los datos correctos: y / o recopile uno. Aquí, es uno de los pasos desafiantes, debe tener mucho cuidado para no recolectar ruido, en lugar de una información estructurada que le sirva para sus propósitos de predicción.
  4. Visualice sus datos: una de las ventajas que he visto hasta ahora con la visión por computadora es que es una ciencia visual, y tenemos ojos, piense con sus ojos. Por lo tanto, podemos visualizar cosas y ver qué está sucediendo allí. ¿Realmente tenemos suficientes datos? Cuánto ruido disponible, y podemos limpiarlo (de forma manual o automática, preferiblemente). ¿Qué podemos extraer de esta información visual para intentar resolver nuestros problemas? Simplemente grafica imágenes relacionadas, mira horas de videos, anota todo lo que puedas para profundizar en los datos y el problema.
  5. Haga una lista de todas las cosas que tiene que estimar a partir de los datos: ahora hizo lecturas, realizó algunos experimentos de línea de base, entendió las soluciones ya disponibles, recopiló o encontró sus datos y miró los datos y entendió lo que está sucediendo allí. En esta etapa, debe conocer alguna lista de elementos que necesita obtener de sus datos: necesito detectar una lista de objetos domésticos, necesito encontrar el tipo de escena, necesito estimar dónde mirarán las personas en una imagen … Y supongamos que tiene todos estos datos disponibles en la etapa de predicción. Si puede estimar de manera confiable todos los elementos con mucha precisión (es decir, tener acceso a todas las anotaciones). Esto validará si está trabajando en un problema válido. De lo contrario, actualice sus suposiciones, sus datos, su comprensión de los datos …
  6. Intente predecir los elementos utilizando técnicas recientes de visión por computadora: ahora valida que si puede predecir toda esa información, podrá resolver su problema. Busque soluciones ya disponibles, objetos de última generación, escena, acción y otros detectores. Desarrollar uno consume mucho tiempo y energía, y generalmente desea no tener que hacerlo.
  7. Tome notas, hable con la gente e repita: Como puede ver, debe aumentar su conocimiento sobre lo que está trabajando tanto como pueda, en cada paso. Pero somos humanos, nos olvidamos de las cosas. Por lo tanto, mantenga un cuaderno de investigación y actualícelo. Hable con diferentes personas dentro o fuera del laboratorio, para saber dónde se queda atrapado: ¿Conocen una métrica de similitud más precisa para su espacio de características? También sabrá qué pasos debe reconsiderar después de observar su progreso. ¿Sus hallazgos son suficientes para hacerlos públicos?

Mi estrategia es:

Paso 1: Comience por recopilar / encontrar el tipo de datos con los que espero que funcione el sistema. Por ejemplo, para un sistema de vigilancia, podrían ser videos tomados desde la posición de la cámara relevante, en las condiciones de iluminación apropiadas, con el número relevante de personas deambulando.

Paso 2: A continuación, planteo la hipótesis de qué técnicas podrían ser relevantes: ¿flujo óptico junto con segmentación? detección de objetos? resta de fondo? ¿rastreo? ¿clasificación? ¿regresión? característica de aprendizaje?

Paso 3: Intento encontrar el código de terceros donde esté disponible e implementar los bits que no puedo encontrar. De todos modos, siempre se debe escribir algún código de pegamento. Es mejor probar esto en algún lenguaje de creación de prototipos como MATLAB.

Paso 4: El primer intento en el paso 3 nunca funciona realmente. Así que trato de visualizar resultados intermedios: es el flujo óptico que tiene sentido visualmente, ¿puedo ver segmentos emergentes antes de alimentarlo al algoritmo de segmentación? Recuerde, basura en la basura fuera! Realice comprobaciones de cordura intentando simplificar el problema, por ejemplo, intente trabajar con imágenes menos desordenadas o imágenes donde los peatones son bastante grandes. Si estoy siendo justo con el módulo, en lugar de saltar de una técnica a otra tan pronto como una idea no funcione, este paso debería tomar al menos 1-2 semanas por módulo.

Paso 5: Por lo general, vaya al paso 2, a la luz del análisis realizado en el paso 4, reemplazando un módulo por otra cosa, ¡tal vez flujo óptico con resta de fondo! Una vez que los resultados comienzan a parecer cualitativamente razonables, organizaría algunos experimentos para obtener resultados cuantitativos. Esto podría requerir recopilar un conjunto de datos más adecuado / más grande y anotar muchas imágenes. Escribiría scripts para generar métricas como la precisión promedio promedio y dibujar curvas de Precisión-Recuperación, etc. Por lo general, este análisis cuantitativo en subconjuntos de datos de prueba, me daría más pistas sobre lo que se puede mejorar.

Paso 6: si es necesario, optimice el código, vuelva a escribir en C ++ o CUDA o algo así. Refactorizar los resultados!

En un proyecto típico de visión por computadora, un cliente puede tener algunos videos o imágenes en los que necesita encontrar algo. Ese algo puede ser concreto, como los intrusos o los Broncos blancos, o puede ser algo abstracto como la belleza o el porno. Si es concreto, entonces un proceso como los detalles del Dr. Zia iterarán en una solución. Si es incluso un poco abstracto, entonces debes mirar las CNN. En ese caso, lo primero que debe recordar es que los resultados que se ven bien en una tesis no son lo suficientemente buenos para usos comerciales. Y si va a construir un clasificador de Deep Learning, pasará todo su tiempo construyendo sus conjuntos de datos, clasificando sus datos y haciendo que su modelo tenga una apariencia de coherencia. En ese momento, encontrará que necesitará tanto preprocesar como postprocesar sus aportaciones para obtener cualquier tipo de resultados aceptables. Al realizar el preprocesamiento, descubrirá que utiliza toda esa teoría del procesamiento de imágenes que parecía anticuada en comparación con el aprendizaje automático, pero las máquinas deben tener una entrada constante para obtener resultados consistentes. Al realizar el procesamiento posterior, se encontrará en el espacio lingüístico; tiene algunas clasificaciones y necesitará tener una taxonomía clara para asegurarse de que sus informes sean lógicamente consistentes y no ridículos. Mi experiencia es que necesitará al menos dos enfoques diferentes que deben estar de acuerdo para tener un nivel comercial de confianza en sus resultados.

More Interesting

¿Cómo se construye una máquina del tiempo?

Los algoritmos de ML escritos en Java funcionan bien para un conjunto de datos más pequeño. Para un conjunto de datos grande, ¿cómo podemos escalar estos algoritmos? ¿Necesitamos buscar algoritmos distribuidos / mapas distribuidos en memoria / NOSQL / archivos para leer y escribir grandes conjuntos de datos o hay alguna buena API?

¿Qué significa splines de regresión adaptativa múltiple (MARS) en términos simples?

¿Cuál es un ejemplo de un sistema, proceso o actividad que no puede ser modelado por un proceso de decisión de Markov?

¿Por qué el aprendizaje automático se usa mucho para la clasificación de anuncios de Google y menos para su clasificación de búsqueda? ¿Qué llevó a esta diferencia?

¿Cómo aprendo el aprendizaje automático y el procesamiento de imágenes para aplicaciones móviles? Por ejemplo, para usar los mismos efectos de filtro en aplicaciones iOS y Android, ¿debería usar Python?

¿Hay casos en que las ideas del aprendizaje profundo hayan sido útiles para problemas de datos pequeños?

¿Qué aplicaciones prácticas ve para ejecutar los modelos TensorFlow en un teléfono inteligente?

¿Preferiría que una novela sobre la era medieval fuera históricamente precisa y llena de conceptos verificables o fácilmente legible pero de hecho escasa?

¿Cuál es la mejor manera de crear un conjunto de redes neuronales?

¿Existen aplicaciones para bandidos multi armados en el campo de aprendizaje profundo?

¿Qué es un codificador / decodificador en aprendizaje profundo?

¿Es una buena idea dejar el aprendizaje automático después de 2 años y estudiar desarrollo web, si me di cuenta de que no soy tan inteligente para todas esas matemáticas de ML?

¿Por qué el aprendizaje profundo no tiene un mínimo local?

¿Por qué es óptimo establecer el tamaño del paso para la regresión logística con el descenso del gradiente al recíproco de la consistencia de lipschitz?