Agrupamento de peso

Mantido por ferramentas Arm ML

Este documento fornece uma visão geral sobre clustering de peso para ajudá-lo a determinar como ele se ajusta ao seu caso de uso.

Visão geral

O clustering, ou compartilhamento de peso, reduz o número de valores de peso exclusivos em um modelo, trazendo benefícios para a implantação. Ele primeiro agrupa os pesos de cada camada em N clusters e depois compartilha o valor do centróide do cluster para todos os pesos pertencentes ao cluster.

Essa técnica traz melhorias por meio da compactação do modelo. O suporte futuro à estrutura pode desbloquear melhorias no consumo de memória que podem fazer uma diferença crucial na implantação de modelos de aprendizagem profunda em sistemas embarcados com recursos limitados.

Experimentamos agrupar tarefas de visão e fala. Vimos melhorias de até 5x na compactação do modelo com perda mínima de precisão, conforme demonstrado pelos resultados apresentados abaixo.

Observe que o clustering fornecerá benefícios reduzidos para convolução e camadas densas que precedem uma camada de normalização em lote, bem como em combinação com quantização pós-treinamento por eixo.

Matriz de compatibilidade de API

Os usuários podem aplicar clustering com as seguintes APIs:

  • Construção de modelo: keras apenas com modelos sequenciais e funcionais
  • Versões do TensorFlow: TF 1.x para versões 1.14+ e 2.x.
    • tf.compat.v1 com um pacote TF 2.X e tf.compat.v2 com um pacote TF 1.X não são suportados.
  • Modo de execução do TensorFlow: gráfico e ansioso

Resultados

Classificação de imagens

Modelo Original Agrupado
Precisão principal (%) Tamanho do .tflite compactado (MB) Configuração Nº de clusters Precisão principal (%) Tamanho do .tflite compactado (MB)
MobileNetV1 70.976 14,97
Seletivo (últimas 3 camadas Conv2D) 16, 16, 16 70.294 7,69
Seletivo (últimas 3 camadas Conv2D) 32, 32, 32 70,69 8.22
Completo (todas as camadas Conv2D) 32 69,4 4,43
MobileNetV2 71.778 12h38
Seletivo (últimas 3 camadas Conv2D) 16, 16, 16 70.742 6,68
Seletivo (últimas 3 camadas Conv2D) 32, 32, 32 70.926 7.03
Completo (todas as camadas Conv2D) 32 69.744 4.05

Os modelos foram treinados e testados no ImageNet.

Localização de palavras-chave

Modelo Original Agrupado
Precisão principal (%) Tamanho do .tflite compactado (MB) Configuração Nº de clusters Precisão principal (%) Tamanho do .tflite compactado (MB)
DS-CNN-L 95.233 1,46
Completo (todas as camadas Conv2D) 32 95.09 0,39
Completo (todas as camadas Conv2D) 8 94.272 0,27

O modelo foi treinado e testado no SpeechCommands v0.02.

  1. Serialize o modelo Keras em arquivo .h5
  2. Converta o arquivo .h5 em .tflite usando TFLiteConverter.from_keras_model_file()
  3. Compacte o arquivo .tflite em um zip

Exemplos

Além do exemplo de clustering de peso em Keras , consulte os exemplos a seguir:

  • Agrupe os pesos de um modelo CNN treinado no conjunto de dados de classificação de dígitos manuscritos MNIST: código

A implementação do agrupamento de peso é baseada no artigo Deep Compression: Compressioning Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding . Consulte o capítulo 3, intitulado Quantização treinada e compartilhamento de peso .