Giter VIP home page Giter VIP logo

gabriel-motos-teste-cv's Introduction

Classificação de Motos - Teste Gabriel

Solução realizada por Fernando Lima

Modelos

Acesse o Colab para saber sobre a metodoloigia de construção e treinamento dos modelos, técnicas utilizadas e e possíveis reproduções dos passos para chegar nos modelos da demonstração.

Instruções da Aplicação

Para simular o ssitema distribuído a aplicação foi feita em Docker, logo é necessário instalar (nessa página) o ambiente onde serão inserido os containeres. Certifique-se que o docker etá instalado.

Baixe a aplicação no repositório do Github. É necessário também fazer download do modelo pré-treinado.

Para baixar o modelo, acesse o link para download. O arquivo model-sample.zip precisa ser descompactado. Ao descompactar, copie a pasta model presente dentro do arquivo compactado e cole na raiz da pasta classification-service, asssim a aplicação irá reconhecer o modelo.

Iniciando a aplicação

Com o docker e docker-compose instalados, basta executar a linha de comando pelo docker-compose essa pasta raiz:

docker-compose up -d

Esse conmando executará os containeries necessários para a demonstração da classificação, com modelos já pré-treinados

Acessando as rotas

A aplicação inicia, entre outros, um container cotando a API com rotas para acesso da predição das classes de Motos dos modelos além do motor com o modelo de predição. A API f feita utuilzando Typescript, enqunto o motor é uma aplicação em Python/Flask. A rotas disponívels estão listadas:

  • [GET]: / : Raiz
  • [GET]: /classification : Vesão do tensorflow utilizada
  • [GET]: /classification/description : Descrição das camados do modelo
  • [POST]: /classification/predict : Predição das classes

Para realizar a predição, basta enviar uma imagem em base 64 como descrito na requisão abaixo:

POST http://localhost:3000/classification/predict HTTP/1.1
Content-Type: application/json

{
    "base64": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADgCAIAAAD9mSinAAAgAElEQVR4AbTBabSl51ke6Pt532/ce5..."
}

A resposta da requisição retornará um JSON no formato:

{
  "best": "SUZUKI_custom_BOULEVARD-C1500",
  "predictions": {
    "BMW_dual-sport_F-750GS": "0.084813066",
    "BMW_naked_R-NINE": "0.06457235",
    "DAFRA_scooter_MAXSYM": "0.0060819862",
    "GUZZI_naked_V7": "0.03181451",
    "HONDA_dual-sport_CB-500-X": "0.084448434",
    "HONDA_touring_GOLDWING-2": "0.06717247",
    "SUZUKI_custom_BOULEVARD-C1500": "0.33477494",
    "TRIUMPH_naked_STREET-TRIPLE-675R": "0.2911342",
    "TVS_street_sport": "0.030125773",
    "YAMAHA_naked_XSR-700": "0.0050623366"
  }
}

A pasta http conta com exemplos prontos que podem ser usado pelo RestClient no Vscode.

Classificação - Teste 1

Para classificação das imagens, utilizaremos um modelo baseado na EfficientNet. Uma arquitetura de rede neural convolucional e um método de dimensionamento que dimensiona uniformemente todas as dimensões de profundidade/largura/resolução usando um coeficiente composto.

Ao contrário da prática convencional que dimensiona arbitrariamente hiperparâmetros, o método de dimensionamento EfficientNet dimensiona uniformemente a largura, a profundidade e a resolução da rede com um conjunto de coeficientes de dimensionamento fixos. Por exemplo, se quisermos usar vezes mais recursos computacionais, podemos simplesmente aumentar a profundidade da rede , a largura em , e o tamanho da imagem , onde são coeficientes constantes determinados por uma pequena pesquisa de grade no modelo pequeno original. O EfficientNet usa um coeficiente composto para dimensionar uniformemente a largura, a profundidade e a resolução da rede de uma maneira baseada em princípios.

O método de dimensionamento composto é justificado pela intuição de que, se a imagem de entrada for maior, a rede precisa de mais camadas para aumentar o campo receptivo e mais canais para capturar padrões mais refinados na imagem maior.

A rede base EfficientNet-B0 é baseada nos blocos residuais de gargalo invertidos do MobileNetV2, além dos blocos squeeze-and-excitation.

Otimização do modelo - Teste 2

A arquitetura da rede EfficientNet é muito conveniente em termos de escalabilidade, pois nos permite parametrizar os hiperparâmetros. A quantidade de camadas, número e dimensão dos filtros são hiperparâmetros que definem majortariamente a quantidade de operações de ponto flutuante (FLOPS), também define a quantidade de pesos e e o tamnaho do modelo em si.

alt text for screen readers

A rede do EfficientNet a quantidade associada a esses parâmetros fica proporcional aos três parâmetros de escala: largura (l), profundida (w) e dimensões (d). Podemos dimensionar a rede através desses hiperparâmetros.

O impacto dessa escalabilidade pode ser notado no desempenho das variações do EfficientNet B0-7, onde B0 é a base (l,w,d = 1) do modelo, de B1-B7, são redes maiores proporsionais a B0. O Gráfico abaixo mostra a acurácia dos 7 modelos em relação a quantidade de operações:

alt text for screen readers

De B0 a B7 o tamanho do modelo e a quantidade de FLOPS aumenta significantemente, coma vantagem de aprimoarar a acurácia em relação a B0, isso mostra o trade-off entre tamanho-acurácia presente nas Redes Neurais Convolucionais.

Para implementar o modelo em hardwares limitados, não precisamos seguir B0 como base, e sim reduzir a proporção l,w,d para construir modelos menores em escala.

Infraestrutura - Teste 3

Para realizar a Infraestrtura foi proposta uma arquitetura de sistemas distribuidos. No desenho UML abaix, podemos observar os artefatos presentes necessários para realizar a chamada de detecção. Também encontram-se uma sugestão para a evolução da arquitetura, incluindo agentes para o treinamento do classificador, armazenamento dos resultados e modelos e aplicação Front-End.

obs: Nessa prova de conceito toda a infra encontra-se dentro de um ambiente docker unificado para fins de demosnração e simplicidade de apresentação do conceito.

Arquitetura do Sistema

Para Fins de controle de um ou mais Modelos, podemos persistir os dados em um banco como o Postgres, extremamente efixaz e escalável. Cada treinamento gera uma entrada a partir de um modelo compactado e armazenado no banco, assim como o registro do desempenho nos datasets de treino e teste. Abaixo segue o diagrama de relação de entidades do banco, no qual pode ser colocado em ferramentas como o Enterprise Architect para gerar scirpts de criação de forma visual.

Diagrama de ER

gabriel-motos-teste-cv's People

Contributors

fol21 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.