Open Source Robotics

Uma coleção selecionada de projetos, ferramentas e software de robótica de código aberto de alta qualidade.

Binary Neural Network in Robotic Manipulation: Flexible Object Manipulation for Humanoid Robot Using Partially Binarized Auto-Encoder on FPGA

Autores: Satoshi Ohara, Tetsuya Ogata, Hiromitsu Awano · IROS 2021

Licenças

  • Acesso aberto
  • Artigo: CC BY 4.0

Tudo o que segue se baseia no artigo completo sob a licença CC BY 4.0; sua figura é mostrada com crédito aos autores.

Em resumo

Binarizar apenas o codificador de um autocodificador convolucional permite que um modelo de ponta a ponta de dobrar roupa para um humanoide rode em uma FPGA Zynq a 41,1 FPS e 3,1 W, com pouca perda de acurácia.

Por que importa

Políticas visuomotoras aprendidas costumam precisar de uma GPU no robô ou perto dele; este trabalho mostra um modelo de câmera para ângulos das juntas para dobrar roupa rodando acima da taxa de quadros da câmera em uma placa embarcada de 3,1 W. A ideia da binarização parcial se aplica a qualquer controlador de autocodificador mais RNN em que o decodificador só é necessário no treinamento.

Problema

A manipulação aprendida de ponta a ponta de objetos flexíveis como toalhas tem dependido de plataformas GPU que consomem centenas de watts, que não cabem no corpo de um robô com espaço limitado. As FPGAs são eficientes em energia, mas têm pouca memória on-chip, e binarizar ingenuamente o autocodificador de imagem para reduzi-lo corrompe as características de imagem extraídas.

Solução proposta

Os autores propõem um autocodificador convolucional profundo parcialmente binarizado (PB-DCAE) no qual apenas os pesos e as ativações do codificador são binarizados, enquanto o decodificador de precisão total, usado só no treinamento e depois removido, permite que os gradientes se propaguem. O codificador binarizado roda na lógica programável da FPGA de uma Xilinx ZCU102 com aritmética XNOR e popcount, com a normalização em lote incorporada a limiares inteiros e todos os parâmetros na BRAM on-chip. Uma LSTM que prevê os próximos ângulos das juntas e o comando da garra a partir das características de imagem roda em ponto flutuante no processador ARM da placa, treinada com perdas combinadas de vários passos, de um passo e de estado interno.

Principais ideias

  • Binarizar totalmente o autocodificador bloqueia o fluxo do gradiente e corrompe as características (PSNR de 7,164 dB), mas manter em precisão total apenas o decodificador, usado no treinamento, restaura a qualidade sem custo de memória na inferência.
  • O codificador de imagem responde por 99,94% das multiplicações por passo de inferência, então acelerar apenas ele na lógica da FPGA acelera todo o sistema mesmo com a LSTM deixada no núcleo ARM.
  • A LSTM é apenas 1,2% do tamanho do modelo, por isso é deixada sem quantização para manter sua acurácia.
  • A binarização permite que todos os parâmetros do codificador e os mapas de características fiquem na BRAM on-chip, evitando tráfego com memória externa e reduzindo latência e consumo.

Principais resultados

  • PSNR médio das imagens reconstruídas: 21,85 dB para o DCAE de precisão total, 7,164 dB para o DCAE totalmente binarizado e 20,78 dB para o PB-DCAE.
  • Erro de predição dos ângulos das juntas em vários passos: 2,98° com características de precisão total, 6,32° totalmente binarizado e 3,43° com PB-DCAE (uma degradação de 0,45°).
  • O tamanho do modelo caiu de 51,3 MB para 2,20 MB, uma redução de 95,7%.
  • ZCU102: 24,3 ms por passo, 41,1 FPS a 3,1 W, 13,3 FPS/W; Core i7 6700K: 73,0 FPS a 55,4 W, 1,32 FPS/W; RTX 2080 Ti: 248 FPS a 69 W, 3,59 FPS/W.
  • A eficiência energética melhorou 10× em relação à CPU e 3,7× em relação à GPU, mantendo-se acima da taxa de 30 FPS de uma câmera RGB comercial.

Limitações

  • A avaliação relata o erro de predição em vários passos em malha aberta e a qualidade de reconstrução de imagem em demonstrações reservadas; o sucesso da dobra no robô com a FPGA no loop não é relatado.
  • O sistema em FPGA é mais lento em termos absolutos que a GPU (41,1 FPS contra 248 FPS) e a CPU (73,0 FPS); o ganho está na energia por quadro.
  • Apenas uma tarefa (dobrar roupa com a garra direita) em um robô é testada, com 75 sequências de demonstração.
  • A LSTM é reimplementada em NumPy no processador ARM e responde por 4,48 ms dos 24,3 ms do tempo por passo na ZCU102.

Impacto na área

O artigo foi finalista do IROS 2021 Best RoboCup Paper Award e tem 2 citações. Ele não informa a publicação de código ou dados.

Resumo

Propõe-se um sistema de manipulação de objetos flexíveis baseado em redes neurais para um robô humanoide em FPGA. Embora a manipulação de objetos flexíveis por robôs atraia uma atenção cada vez maior, já que essas tarefas são atividades básicas e essenciais do nosso dia a dia, ela só foi colocada em prática recentemente com a ajuda de redes neurais profundas. No entanto, esses sistemas têm dependido de aceleradores GPU, que não podem ser implementados no corpo robótico com espaço limitado. Embora os arranjos de portas programáveis em campo (FPGAs) sejam conhecidos por serem eficientes em energia e adequados a sistemas embarcados, o tamanho do modelo precisa ser drasticamente reduzido, já que as FPGAs têm memória on-chip limitada. Para isso, propomos uma técnica de autocodificador convolucional profundo binarizado "parcialmente", em que apenas a parte do codificador é binarizada para comprimir o tamanho do modelo sem degradar a acurácia da inferência. O modelo implementado na Xilinx ZCU102 atinge 41,1 quadros por segundo com um consumo de energia de 3,1 W, o que corresponde a melhorias de 10× e 3,7× em relação aos sistemas implementados em um Core i7 6700K e em uma RTX 2080 Ti, respectivamente.

Links

  • arXiv 2107.00209: https://arxiv.org/abs/2107.00209
  • DOI 10.1109/IROS51168.2021.9636825: https://doi.org/10.1109/IROS51168.2021.9636825
  • PDF: https://arxiv.org/pdf/2107.00209v1

Este site requer JavaScript. Por favor, habilite o JavaScript para explorar nossos projetos de robótica.