Empower Ultralytics YOLOv5 model training & deployment with Neural Magic's DeepSparse for GPU-class performance on CPUs. Achieve faster, scalable YOLOv5 deployments.
Queres acelerar a formação e a implementação dos teus YOLOv5 modelos? Nós ajudamos-te! Apresentamos-te o nosso mais recente parceiro, Neural Magic. Como Neural Magic fornece ferramentas de software que enfatizam o desempenho máximo do modelo e a simplicidade do fluxo de trabalho, é natural que nos tenhamos juntado para oferecer uma solução para tornar o processo de implementação deYOLOv5 ainda melhor.
DeepSparse é o tempo de execução de inferência Neural Magic's CPU , que aproveita a esparsidade e a aritmética de baixa precisão dentro das redes neurais para oferecer um desempenho excecional em hardware de commodity. Por exemplo, em comparação com a linha de base ONNX Runtime, o DeepSparse oferece um aumento de velocidade de 5,8x para YOLOv5s em execução na mesma máquina!
Pela primeira vez, as tuas cargas de trabalho de aprendizagem profunda podem satisfazer as exigências de desempenho da produção sem a complexidade e os custos dos aceleradores de hardware. Simplificando, o DeepSparse oferece o desempenho das GPUs e a simplicidade do software:
O DeepSparse aproveita a esparsidade do modelo para ganhar velocidade de desempenho.
A esparsificação por meio de poda e quantização permite reduções de ordem de magnitude no tamanho e na computação necessários para executar uma rede, mantendo alta precisão. O DeepSparse é sensível à esparsidade, pulando as adições de multiplicação por zero e diminuindo a quantidade de computação em uma passagem direta. Como a computação esparsa é limitada pela memória, o DeepSparse executa a rede em profundidade, dividindo o problema em Tensor Columns, que são faixas verticais de computação que cabem no cache.
Redes esparsas com computação comprimida, executadas em profundidade na cache, permitem que o DeepSparse ofereça um desempenho de classe GPU em CPUs!
Neural MagicO repositório de modelos de código aberto da SparseZoo contém pontos de controlo pré-esparsos de cada modelo YOLOv5 . Utilizando o SparseML, que está integrado em Ultralytics, pode ajustar um ponto de verificação esparso aos seus dados com um único comando CLI .
Consulta a documentação Neural Magic's YOLOv5 para obteres mais detalhes.
Executa o seguinte para instalar o DeepSparse. Recomendamos que utilizes um ambiente virtual com Python.
pip install deepsparse[server,yolo,onnxruntime]
DeepSparse aceita um modelo no formato ONNX , passado como:
Iremos comparar os YOLOv5s densos padrão com os YOLOv5s com quantis podados, identificados pelos seguintes stubs SparseZoo:
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
DeepSparse oferece APIs convenientes para integrar o teu modelo numa aplicação.
Para experimentar os exemplos de implantação abaixo, puxa uma imagem de amostra para o exemplo e salva como basilica.jpg com o seguinte comando:
wget -O basilica.jpg https://raw.githubusercontent.com/neuralmagic/deepsparse/main/src/deepsparse/yolo/sample_images/basilica.jpg
Os pipelines envolvem o pré-processamento e o pós-processamento de saída em torno do tempo de execução, fornecendo uma interface limpa para adicionar o DeepSparse a um aplicativo. A integração DeepSparse-Ultralytics inclui um Pipeline pronto para uso que aceita imagens brutas e produz as caixas delimitadoras.
Cria um Pipeline e executa a inferência:
from deepsparse import Pipeline
# lista de imagens no sistema de ficheiros local
images = ["basilica.jpg"]
# cria o Pipeline
model_stub = "zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none"
yolo _pipeline = Pipeline.create(
task="yolo",
model_path=model_stub,
)
# executa a inferência em imagens, recebe caixas delimitadoras + classes
pipeline_outputs = yolo_pipeline(images=images, iou_thres=0.6, conf_thres=0.001)
print(pipeline_outputs)
Se estiveres a correr na nuvem, podes receber um erro em que o open-cv não consegue encontrar o libGL.so.1. Executando o seguinte no Ubuntu, instala-o:
apt-get install libgl1-mesa-glx
O DeepSparse Server é executado sobre o popular framework web FastAPI e o servidor web Uvicorn. Com apenas um único comando CLI , podes facilmente configurar um endpoint de serviço de modelo com o DeepSparse. O Servidor suporta qualquer Pipeline do DeepSparse, incluindo a deteção de objectos com YOLOv5, permitindo-te enviar imagens em bruto para o endpoint e receber as caixas delimitadoras.
Liga o servidor com o YOLOv5s podado e quantificado:
deepsparse.server \
--task yolo \
--model_path zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
Um exemplo de pedido, utilizando o pacote de pedidos do Python:
importa pedidos, json
# lista de imagens para inferência (ficheiros locais no lado do cliente)
path = ['basilica.jpg']
files = [('request', open(img, 'rb')) for img in path]
# envia o pedido por HTTP para o ponto final /predict/from_files
url = 'http://0.0.0.0:5543/predict/from_files'
resp = requests.post(url=url, files=files)
# a resposta é devolvida em JSON
annotations = json.loads(resp.text) # dicionário de resultados de anotação
bounding_boxes = annotations["boxes"]
labels = annotations["labels"]
Também podes utilizar o comando annotate para que o motor guarde uma fotografia anotada no disco. Experimenta --source 0 para anotar a tua webcam ao vivo!
deepsparse.object_detection.annotate --model_filepath zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none --source basilica.jpg
Ao executar o comando acima, cria uma pasta de resultados da anotação e guarda a imagem anotada no seu interior.
Usando o script de benchmarking do DeepSparse, vamos comparar a taxa de transferência do DeepSparse com a taxa de transferência do ONNX Runtime no YOLOv5s.
Os testes de referência foram executados numa instância AWS c6i.8xlarge (16 núcleos).
No lote 32, o ONNX Runtime alcança 42 imagens/seg. com os YOLOv5s densos padrão:
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1 -e onnxruntime
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do lote: 32
> Cenário: sincroniza
> Taxa de transferência (itens/seg): 41.9025
Embora o DeepSparse ofereça o seu melhor desempenho com modelos esparsos optimizados, também tem um bom desempenho com os YOLOv5s densos padrão.
No lote 32, o DeepSparse atinge 70 imagens/seg. com o YOLOv5s denso padrão - umamelhoria de desempenho de 1,7 vezes em relação ao ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 32 -nstreams 1
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do lote: 32
> Cenário: sincroniza
> Taxa de transferência (itens/seg): 69.5546
Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse em relação ao ONNX Runtime são ainda maiores.
No lote 32, o DeepSparse alcança 241 imagens/seg. com o YOLOv5s com quantização podada - umamelhoria de desempenho de 5,8x em relação ao ORT!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamanho do lote: 32
> Cenário: sincroniza
> Taxa de transferência (itens/seg): 241.2452
O DeepSparse também é capaz de ganhar velocidade em relação ao ONNX Runtime para o cenário de lote 1 sensível à latência.
No lote 1, o ONNX Runtime alcança 48 imagens/seg. com os YOLOv5s padrão e densos.
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none -s sync -b 1 -nstreams 1 -e onnxruntime
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/base-none
> Tamanho do lote: 1
> Cenário: sincroniza
> Taxa de transferência (itens/seg): 48.0921
Quando a esparsidade é aplicada ao modelo, os ganhos de desempenho do DeepSparse em relação ao ONNX Runtime são ainda maiores.
No lote 1, o DeepSparse alcança 135 imagens/seg. com o YOLOv5s com quantização reduzida - umamelhoria de desempenho de 2,8x em relação ao ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none -s sync -b 32 -nstreams 1
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned65_quant-none
> Tamanho do lote: 1
> Cenário: sincroniza
> Taxa de transferência (itens/seg.): 134.9468
Como as instâncias c6i.8xlarge têm instruções VNNI, a taxa de transferência do DeepSparse pode ser aumentada ainda mais se os pesos forem podados em blocos de 4.
No lote 1, o DeepSparse alcança 180 itens/seg. com um YOLOv5s de 4 blocos com quantização podada - umganho de desempenho de 3,7 vezes em relação ao ONNX Runtime!
deepsparse.benchmark zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni -s sync -b 1 -nstreams 1
> Caminho do modelo original: zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned35_quant-none-vnni
> Tamanho do lote: 1
> Cenário: sincroniza
> Taxa de transferência (itens/seg.): 179.7375
E pronto! Estás pronto para otimizar a tua implementação de YOLOv5 com DeepSparse.
Para entrar em contacto connosco, junta-te à nossa comunidade e deixa-nos as tuas perguntas e comentários. Consulta o repositórioUltralytics YOLOv5 e a documentação completa Neural Magic para implementar YOLOv5.
Em Ultralytics, estabelecemos parcerias comerciais com outras startups para nos ajudar a financiar a investigação e o desenvolvimento das nossas fantásticas ferramentas de código aberto, como YOLOv5, para as mantermos gratuitas para todos. Este artigo pode conter links de afiliados para esses parceiros.
Começa a tua viagem com o futuro da aprendizagem automática