Квантизация моделей представляет собой процесс уменьшения разрядности весов и активаций нейронной сети для снижения объёма модели и ускорения её работы без значительной потери точности. В контексте ml5.js, которая базируется на TensorFlow.js, квантизация особенно актуальна при развертывании моделей на веб-платформах с ограниченными ресурсами, таких как мобильные устройства или браузеры с низкой производительностью.
Ключевые подходы к квантизации:
Постобученная квантизация (Post-training Quantization) Этот метод применяется после завершения обучения модели. Веса модели переводятся из формата 32-битных чисел с плавающей точкой (float32) в более компактные форматы, например:
Постобученная квантизация часто используется для моделей ml5.js, импортируемых из TensorFlow.js, поскольку она не требует повторного обучения.
Квантизация во время обучения (Quantization-aware Training, QAT) Веса и активации симулируются с низкой точностью прямо во время обучения модели. Такой подход позволяет модели адаптироваться к уменьшенной точности, минимизируя потерю точности. В ml5.js этот метод применяется редко напрямую, но может быть использован на этапе подготовки модели в TensorFlow.js перед её экспортом в формат для ml5.js.
ml5.js упрощает работу с моделями, предоставляя высокоуровневый API, однако поддержка квантизации напрямую ограничена возможностями TensorFlow.js. Основные шаги использования квантизованных моделей включают:
Подготовка модели в TensorFlow.js Перед использованием в ml5.js модель может быть квантизована с помощью инструментов TensorFlow.js:
import * as tf from '@tensorflow/tfjs';
import { loadLayersModel } from '@tensorflow/tfjs-layers';
async function quantizeModel() {
const model = await tf.loadLayersModel('model/model.json');
const quantizedModel = tf.quantization.quantizeWeights(model, 'int8');
await quantizedModel.save('downloads://quantized-model');
}
После этого квантизованная модель становится доступной для импорта в ml5.js.
Загрузка квантизованной модели в ml5.js Ml5.js
поддерживает загрузку пользовательских моделей через
ml5.imageClassifier, ml5.poseNet и другие
классы. Для квантизованных моделей формат остается совместимым, если они
сохранены в формате TensorFlow.js:
const classifier = await ml5.imageClassifier('quantized-model/model.json', modelLoaded);
function modelLoaded() {
console.log('Квантизованная модель успешно загружена');
}Эффект квантизации на производительность
Квантизация моделей является критически важным инструментом оптимизации при работе с ml5.js, обеспечивая уменьшение объема, ускорение инференса и повышение мобильности моделей, что особенно важно для интерактивных веб-приложений с использованием машинного обучения.