¿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?

Aquí hay tres cosas:

Necesita aprender cada uno de ellos independientemente de los otros dos. De esa forma, no estará limitado en términos de lo que puede construir y probablemente pueda ser más comercializable de esa manera.

Dicho esto, el aprendizaje automático no es algo tan complejo de aprender, especialmente si ya te sientes cómodo con lo siguiente:

  • Álgebra lineal
    • Matrices
    • Vectores
    • Descomposición de valores singulares (SVD)
  • Estadísticas y probabilidad
    • Teorema de Bayes
    • Funciones de densidad de probabilidad
    • Funciones de distribución de probabilidad como distribuciones binomiales o gaussianas.
    • Variables aleatorias
  • Cálculo
    • Cadena de reglas
    • Calculo diferencial
  • Optimización numérica
    • Métodos de optimización de primer orden.
    • Métodos de optimización de segundo orden.
  • Programación
    • Pitón
    • C / C ++
    • Java
    • DO#

Y con el procesamiento de imágenes necesita saber.

  • Circunvolución
    • Convolución continua como se define en las matemáticas típicas.
    • Convolución discreta aplicada en el diseño de filtros digitales.
  • Correlación cruzada que está relacionada con la operación convolucional pero sin voltear la imagen fuente o los núcleos.
    • La mayoría de las técnicas de ventanas deslizantes utilizan correlación cruzada.
  • Transformada de Fourier
    • Transformada continua de Fourier como se usa en matemáticas.
    • Transformada discreta de Fourier rápida.
  • Filtros digitales
    • Filtros de respuesta de impulso infinito (IIR).
    • Filtros de respuesta impuesta finita (FIR).

Para construir código de procesamiento de imágenes o ML portátil en todas las plataformas, mi consejo sería usar C ++. No soy el experto en software, pero los algoritmos escritos en C ++ son muy portátiles. Por ejemplo, escribí mi sistema de visión por computadora (CV) en C ++ usando Visual Studio y luego porté el código a Android a través del kit de desarrollador nativo de Android (NDK). Puedo portar el mismo código C ++ a aplicaciones iOS o Windows 10 Universal sin modificaciones.

Por lo tanto, para una portabilidad máxima, me quedaría con C ++.

C ++ también permite un código más eficiente, sí, los dispositivos actuales son potentes, pero aún es mucho más eficiente escribir las funciones de filtro en C ++ en lugar de Java o Python. Se vuelve aún más evidente para los cálculos pesados ​​que involucran efectos complejos utilizando algoritmos ML como la transferencia de estilos.

Aunque muchos módulos de Python en realidad ya están escritos de manera eficiente en C / C ++. Por lo tanto, la mayoría de las operaciones vectoriales o matriciales en Python se ejecutan en un nivel nativo de C / C ++. Dado que el procesamiento de imágenes implica tales operaciones, operaciones de vectores y matrices, aún puede usar Python con una buena biblioteca de álgebra lineal optimizada para ayudarlo con la aceleración de hardware, como enviar las operaciones a una unidad de procesamiento gráfico (GPU). El hecho de que Python sea un lenguaje de alto nivel similar al inglés significa que el código escrito en Python puede ser muy legible, fácil de mantener y más rápido de escribir (aunque no más rápido de ejecutar).

Con el desarrollo móvil aún no he trabajado con iOS, pero sigo desarrollando aplicaciones CV / ML para Android.

Por lo tanto, debe escribir su biblioteca de procesamiento de imágenes o ML de manera portátil y luego transferirla a otras plataformas a través de interfaces. Con Android estamos hablando de la interfaz nativa de Java (JNI).

Para desarrollar para Android solo use:

  • Android Studio
  • NDK para ayudar al código de Android a llamar a un eficiente código C ++ nativo portátil
  • Java
  • Kotlin

Por supuesto, hay bibliotecas de alto nivel que han implementado prácticamente la mayoría de los filtros, como los filtros de cuadro o gaussianos, pero a veces es divertido escribir uno propio. Me gusta escribir mis propias cosas.

La forma no portátil de escribir filtros para Android es usar renderscript, que está optimizado para ejecutarse en múltiples núcleos y GPU. Si tiene la intención de usar C ++, también debe buscar en OpenMP para dispositivos multiprocesador y probablemente OpenCL para aceleración de GPU. Es muy divertido codificar cerca del metal porque aprendes bastante.

Tenga en cuenta que para implementaciones más complejas, como la transferencia de estilo, necesita bibliotecas como TensorFlow (TF). TF está disponible para Android, pero no estoy seguro de la versión de iOS.

Pero una vez más, puede implementar su propia implementación de un código de transferencia de estilo usando C ++ simple con la ayuda de OpenMP u OpenCL para la aceleración, de nuevo, es muy divertido de esa manera.

Espero que esto ayude.

More Interesting

¿Cómo podemos usar la red neuronal para la clasificación de texto?

¿Cómo deberíamos comenzar con los conceptos básicos del aprendizaje automático para construir un sistema de recomendación utilizando Python?

¿Qué tan bueno es el programa de maestría en visión por computadora de la Universidad Autónoma de Barcelona en términos de contenido, costo y futura carrera (directamente trabajo o doctorado)?

Cómo comenzar con el aprendizaje de múltiples núcleos

¿Qué tema es importante para la ingeniería integrada, las redes neuronales o la automoción moderna?

¿Cuáles son los algoritmos disponibles para diseñar un detector de actividad de habla hablada cercana?

Si estuviéramos usando un SVM no lineal, ¿cuáles son los hiperparámetros? ¿Cómo elegiríamos los hiperparámetros correspondientes? (funciones de referencia utilizadas)

¿Qué debo hacer para poder contribuir al campo de la visión por computadora y trabajar en Google en el futuro?

¿Cuál es la mejor manera de manejar un modelo multitarea si las etiquetas de datos de capacitación tienen NA, es decir, no se analizaron todas las muestras para todas las tareas?

¿Cómo puede un programa determinar rápidamente si un tweet es negativo o positivo?

Cómo detectar objetos superpuestos casi circulares en MATLAB

¿Cuál es la relación entre IA, aprendizaje automático y ciencias de la computación? ¿Hay especializaciones en IA o aprendizaje automático, o son especializaciones en informática?

¿Dónde es importante la doble precisión en el aprendizaje profundo?

¿Por qué la pila de RBM después de aprender no es una máquina de Boltzmann profunda (DBM)?

¿Qué opinas de la exageración actual sobre Deep Learning?