es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inferencia de LeNet5 basada en el modelo TFLite cuantizado. ¿Cómo reducir la escala de int32 a int8 con el parámetro M?

Entrené una red CNN LeNet5 con Keras/TensorFlow. Utilicé TensorFlow Lite para cuantificar los pesos y activaciones de punto flotante de 32 bits (FP32) a enteros de 8 bits (INT8). Extraje y visualicé los pesos, sesgos, escalas y puntos cero gracias a Netron.

Necesitaba diseñar una red CNN LeNet5 en lenguaje C. En formato FP32, mi modelo de inferencia funciona bien. Sin embargo, no entiendo algunos puntos para hacer la inferencia con el formato INT8.

Según el artículo “Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference” , los autores detallaron el siguiente flujo de trabajo para hacer una inferencia con una convolución cuantizada INT8:
inferencia de convolución INT8
Después de la etapa de convolución entre la entrada y los pesos, y luego de agregar el sesgo, los autores precisan que la escala de INT32 a INT8 se realiza gracias a la constante M definida por M = (S1*S2)/S3.

S1 es la escala de la entrada. Y para mí, S2 es la escala de los pesos y S3 es la escala de la salida.

Sin embargo, en Netron, no puedo ver la escala asociada con los pesos de convolución:
filtros de convolución en Netron

Pero puedo ver la escala para las operaciones de Conexión Completa (Fully Connected):
pesos densos en Netron

Mi pregunta es: ¿cuál es S2 para la convolución? ¿Es un problema de visualización de Netron o entendí mal el factor de reducción de muestreo M para el proceso de convolución?

Gracias por tu ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en TensorFlow, Keras, TensorFlow Lite, inferencia y cuantización, puedo ayudar con la siguiente pregunta:

    La constante M se define como M = (S1*S2)/S3. S1 es la escala de la entrada y S3 es la escala de la salida. Sin embargo, en Netron no se puede ver la escala de los pesos de la convolución. ¿Significa esto que hay un problema con la visualización de Netron o una falta de comprensión del factor de reducción M para el proceso de convolución?

    La escala de los pesos de la convolución, S2, no está disponible en Netron porque no se utiliza directamente en el proceso de cuantización. En su lugar, el proceso de cuantización utiliza los valores mínimo y máximo de los pesos para calcular S2. Estos valores se utilizan para determinar el rango de cuantización de los pesos. Después, los pesos se cuantizan al formato INT8. Después del paso de convolución, se agrega el sesgo y se realiza la reducción de INT32 a INT8 con la ayuda de la constante M.

    Por lo tanto, la constante M no está directamente relacionada con la escala de los pesos de la convolución, sino más bien con las escalas de la entrada y salida. La salida reducida se obtiene dividiendo la suma de los resultados de la convolución por M y luego redondeando el resultado al entero más cercano. Este proceso asegura que la salida esté dentro del rango válido del formato INT8.

    En conclusión, no hay ningún problema con la visualización de Netron y la constante M no está relacionada con la escala de los pesos de la convolución, sino más bien con las escalas de la entrada y salida.

Comments are closed.