¿Cuál es la mejor práctica para ‘portar’ modelos de Machine Learning (especialmente aprendizaje profundo) de Python a sistemas integrados para aplicaciones como visión artificial?

Algunas de las investigaciones que realizo involucran hacer exactamente eso (agrupación de imágenes casi en tiempo real en teléfonos móviles). Dependiendo de la complejidad de la tubería y las suposiciones sobre los recursos disponibles, la transferencia puede ser bastante sencilla (capacitación en la nube y envío de parámetros del modelo al dispositivo incorporado) o puede implicar algo más complejo, como combinar versiones aproximadas de los algoritmos que está considerando (es decir, http://research.microsoft.com/pu…) y moverlos al dispositivo. A veces eso no es suficiente y tienes que jugar trucos para optimizar aún más: obtener ‘pistas’ de las mediciones / contexto o reducir la precisión numérica de tus cálculos.

Con respecto a los recursos, debe tener en cuenta la cantidad de datos que va a procesar (no mucho en un sistema integrado), qué procesamiento y memoria tiene disponible, si va a ejecutarlos en un solo procesador integrado o muchos, etc. Por lo tanto, el problema realmente depende de la carga de trabajo y el rendimiento que está buscando.

Con respecto a las mejores prácticas, comenzaría con la carga de trabajo, caracterizada por el tamaño de los datos y el régimen de rendimiento en el que desea estar. También buscaría oportunidades en su algoritmo para eliminar la carga y buscar diferentes optimizaciones / aproximaciones para ver dónde se encuentra su régimen de rendimiento. Pero, por supuesto, comience con un puerto directo y vaya desde allí.