Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de Tensorflow para ssd

Código fuente de Tensorflow para ssd

TensorFlow Lite (TFLite) ahora admite la inferencia de GPU usando OpenCL en dispositivos Android, lo que mejora el rendimiento de TFLite aproximadamente 2 veces con respecto al uso del backend OpenGL existente.

El equipo de TensorFlow Lite presentó su progreso en el uso de OpenCL para la inferencia de GPU móvil y anunció el lanzamiento oficial de un motor de inferencia de GPU móvil para Android basado en OpenCL, en redes neuronales de tamaño razonable, con el backend OpenGL existente. , este motor proporciona una mejora de rendimiento de hasta el doble.

OpenGL ES 3.1 agregó sombreadores de cálculo, pero sus decisiones de diseño de API compatibles con versiones anteriores limitaron todo el potencial de la GPU. OpenCL, por otro lado, fue diseñado desde el principio para la informática utilizando varios aceleradores, por lo que es más relevante para el campo de la inferencia de GPU móvil.

Por lo tanto, el equipo de TFLite estudió el motor de inferencia basado en OpenCL e introdujo algunas funciones para optimizar el motor de inferencia para GPU móviles.

Por el contrario, el nuevo motor de inferencia de GPU móvil tiene los siguientes puntos:

Análisis de rendimiento: en comparación con OpenGL, la optimización del backend de OpenCL es mucho más fácil porque OpenCL proporciona Tiene muy buenas funciones de análisis y también está bien soportado por Qualcomm Adreno. Al utilizar estas API de creación de perfiles, el rendimiento de cada programa principal se puede medir con mucha precisión.

Optimización del tamaño del grupo de trabajo: el rendimiento de la GPU TFLite en la GPU Qualcomm Adreno es muy sensible al tamaño del grupo de trabajo. Elegir el tamaño correcto del grupo de trabajo puede mejorar el rendimiento y viceversa. Aprovechando las capacidades de creación de perfiles en OpenCL mencionadas anteriormente, es posible implementar un optimizador para el tamaño del grupo de trabajo con una aceleración promedio del 50%.

Punto flotante de precisión nativo de 16 bits (FP16): OpenCL admite de forma nativa FP16 y requiere que el acelerador especifique la disponibilidad del tipo de datos. Incluso algunas GPU más antiguas, como la Adreno 305 lanzada en 2012, son completamente funcionales como parte de la especificación oficial.

Memoria constante): OpenCL tiene el concepto de memoria constante. Qualcomm ha agregado una función de memoria física que lo hace ideal para usar con la memoria constante de OpenCL.

Esto ha demostrado ser muy efectivo para algunos casos especiales, como capas muy delgadas al principio o al final de una red neuronal. OpenCL en Adreno puede superar en gran medida el rendimiento de OpenGL a través de la sinergia con la memoria física constante y el soporte nativo FP16 mencionado anteriormente.

TFLite muestra específicamente una comparación de rendimiento entre una GPU que usa el backend OpenGL existente en la CPU y una GPU que usa el nuevo backend OpenCL (un solo subproceso en un núcleo grande).

El gráfico anterior ilustra el rendimiento del motor de inferencia en un dispositivo Android específico que utiliza OpenCL en dos redes neuronales conocidas, MNASNet 1.3 y SSD MobileNet v3 (a gran escala). Puede ver que el nuevo backend de OpenCL es aproximadamente dos veces más rápido que el backend de OpenGL y el rendimiento de OpenCL es incluso mejor en redes más grandes.

Además, dado que OpenCL en sí no forma parte de Android, es posible que algunos usuarios no puedan utilizarlo. Para simplificar el desarrollo, se agregaron algunas modificaciones al delegado de GPU TFLite. Primero, verifica la disponibilidad de OpenCL en tiempo de ejecución; si está disponible, utilizará el nuevo backend de OpenCL; de lo contrario, recurrirá al backend de OpenGL existente.

De hecho, el backend de OpenCL existe en el repositorio de TensorFlow desde mediados de 2009 y está perfectamente integrado a través del delegado de GPU TFLite v2.

Además, ahora es el "Período de cambio de empleo Jin-Nueve-Plata-Diez" y muchos amigos están ansiosos por probarlo. Para los programadores, existen demasiadas dificultades en los conocimientos y técnicas que deben aprender. Si desea ser eliminado en la entrevista, solo puede hacer un plan de revisión con anticipación, estudiar las preguntas detenidamente y mejorar continuamente durante el estudio. Personalmente, sugiero que es fundamental ordenar tus conocimientos y revisar las preguntas antes de la entrevista. Hacer una clasificación de conocimientos puede profundizar su comprensión de los principios, y repasar las preguntas puede mejorar la amplitud y profundidad de su entrevista técnica.

Recuerda, ¡siempre somos nosotros quienes nos adaptamos al entorno, y no el entorno que se adapta a nosotros!

Se adjuntan 20 conjuntos de preguntas de entrevistas de Android que recopilé anteriormente (incluidos BAT, Xiaomi, Huawei, Meituan, Didi) y mis propias notas de revisión de Android (incluidos los puntos de conocimiento básico de Android y los puntos de conocimiento extendido de Android, fuente de Android). análisis de código, resumen de patrones de diseño, puntos de conocimiento de Gradle y resumen de problemas de algoritmos comunes * * * 732 páginas).

Preguntas de la entrevista de Tencent para Android (parte de Java)

Preguntas de la entrevista de Tencent para Android (parte de Android)

Descripción general de la clasificación de las preguntas de la entrevista de Android en primera y segunda Empresas de Internet de primer nivel