Como rodar Posenet localmente

dom 13 outubro 2019

Hoje fiquei me batendo para rodar um modelo do Posenet sem ter que baixá-los do Google Storage toda vez.

TL;DR: baixe o modelo usando o curl com a opção --compressed

Minha ideia era conseguir usar o TensorflowJS na Jetson Nano (que não tem wifi) ou em algum outro contexto sem depender da internet.

O projeto em que estou trabalhando é o rest-your-arms: https://github.com/ocarneiro/rest-your-arms

Eu queria configurar ele assim:

var config = {
  architecture: 'MobileNetV1',
  outputStride: 16,
  inputResolution: 417, //  { width: 640, height: 480 },
  multiplier: 0.75,
  modelUrl: '/models/075/model-stride16.json'
};

Fazendo isso, o browser buscava o meu json, e a partir dele ia buscar os dois arquivos .bin que formam o modelo, mas ainda assim o tensorflowjs me dava um erro estranho: "RangeError: byte length of Float32Array should be a multiple of 4".

Depois de muito lutar, descobri que os arquivos .bin não estavam sendo baixados completamente, veja:

Acontece que por mais que eu tentasse baixar o arquivo bin de formas diferentes, ele sempre baixava parcial, sem descompactar. Para conseguir uma versão dele completa, descompactada, tive que abrir o modo desenvolvedor do Firefox, clicar com o botão direito do arquivo na aba Rede e usar a opção "copiar como cURL". Isso gerou o seguinte comando:

curl 'https://storage.googleapis.com/tfjs-models/...'
       --compressed

O ponto principal do comando eu acho que é a opção "--compressed", veja:

   --compressed
          (HTTP) Request a compressed response using one of the algorithms
          curl  supports, and save the uncompressed document.  If this op‐
          tion is used and the server sends an unsupported encoding,  curl
          will report an error.

Traduzindo: o curl requisita uma resposta comprimida e salva o documento descomprimido.

Isso resolveu meu problema. Espero que te ajude também.

Abraço!

machine learning / tensorflowjs / posenet /

Comentários