NVIDIA com Yolo em openCV: Resultado superior a 1500%

Utilizando todos os recursos de um equipamento, podemos turbinar a biblioteca openCV para Inferência. Nos meus testes com uma placa NVIDIA GeForce RTX 3060 Ti junto a tecnologia YOLO, utilizando os fontes do repositório oficial e com otimizações, atingi um desempenho máximo de 500% (2 para 10 fps).

Então resolvi turbinar os binários, efetuando compilação da biblioteca extraindo o máximo do hardware, tando da GPU e CPU. Para isto habilitei todos os recurso disponíveis no processador SSE 4.2, AVX2 e outros, também utilização das bibliotecas TBB, MKL, IPP, CUDA e CuDNN.

Então explorando todo o recurso do hardware, obtive desempenho muito superior. Para isto utilizei estas diretivas de compilação da biblioteca openCV:

Recursos da GPU :

-DWITH_CUDA=ON
-DWITH_CUDNN=ON
-DOPENCV_DNN_CUDA=ON
-DCUDA_FAST_MATH=1
-DCUDA_ARCH_BIN=8.6
-DWITH_CUBLAS=1

*** Para localizar a versão da arquitetura do modelo da GPU, utilizei o seguinte link: https://developer.nvidia.com/cuda-gpus

Recursos da CPU:

-DWITH_IPP=ON
-DWITH_MKL=ON
-DMKL_WITH_TBB=ON
-DMKL_USE_MULTITHREAD=ON
-DWITH_TBB=ON
-CPU_DISPATCH=SSE3,SSE4_1,SSE4_2,FP16,FMA3,AVX,AVX2,AVX512_ICL

Habilitei o uso da GPU o processamento da convolução com o seguinte comando:

net.setPreferableBackend(DNN_BACKEND_CUDA);
net.setPreferableTarget(DNN_TARGET_CUDA);

Para medir apenas o tempo da GPU, efetuei a medida apenas durante a inferência, conforme o trecho de código em C++ a seguir:

tm.start();
net.setInput(blob);
std::vector<Mat> outs;
net.forward(outs, outNames);
postprocess(frame, outs, net);
tm.stop();
double detectionTime = tm.getTimeMilli();
double fps = 1000 / detectionTime;

O resultado final foi um salto de 300ms para 20ms.

Pergunta comum: Mas Cabelo, o que farei com todo este todo?

Elementar meu caro, vejamos o exemplo a seguir:

Com relação ao desempenho da CPU, o equipamento sofreu muito menos overhead e obteve um ganho de 200%. O salto de performance foi de 2 para 8 fps

Mas a minha surpresa, o ganho da GPU resultou em um salto de 2 fps para 33 fps! O que equivale aproximadamente 1.650%.

Ciência aplicada: Imagina um cenário onde precisamos migrar um algoritmo biométrico com 51 milhões de usuários. Se o recalculo do hyper espaço matemático ou o processamento do modelo de inferência levasse 300 ms, o tempo de processamento seria equivalente a 177 dias aproximadamente.

Agora se em um exemplo hipotético, diminuíssemos o tempo de 300 ms para 20ms, cairíamos o tempo total de processamento de 177 dias para aproximadamente 11 dias.

E tem mais, ser aumentarmos o poder de processamento da GPU (modelo mais potente, como a NVIDIA A100), E SE HIPOTETICAMENTE de alguma maneira alcançássemos o tempo de 800us, levaríamos apenas 12 horas de processamento e não mais 177 dias. Em breve artigo no Viva O Linux.

Fiscal de EPIs com IA

O uso de EPIs nas empresas que exercem atividades que envolve riscos à saúde dos funcionários é essencial. A não utilização desses equipamentos pode trazer graves consequências à empresa, como o pagamento de multas, indenizações por meio de processos civis, trabalhistas e até mesmo criminais.

Baseado na lei Nº. 6.514/77, os EPIs são obrigatórios aos colaboradores que de alguma maneira afeta a sua segurança física e mental. O Descumprimento da lei implica em pagamento de multas penalizadores prevista na Norma de Regulamento 28 (NR 28).

Mas se o colaborador não utilizar os EPIs, a empresa pode aplicar Advertência, Suspensão e Justa causa. Se ocorrer reclamação trabalhista, uma IA baseada em visão computacional, pode gerar prova documental para as respectivas penalidades aplicadas.

Somente com número baixo de acidentes, as empresas conseguem benefícios no BNDES.

Abaixo: um vídeo comprovando a viabilidade da tecnologia.

SUSEConnect como usar.

Em alguma situações não encontramos um pacote presente na dependência de um determinado RPM. Abaixo um How To de como utilizar o recurso SUSEConnect em máquinas SLES.

# zypper se libCharLS
Refreshing service 'Basesystem_Module_x86_64'.
Refreshing service 'Containers_Module_x86_64'.
Refreshing service 'Desktop_Applications_Module_x86_64'.
Refreshing service 'Development_Tools_Module_x86_64'.
Refreshing service 'Legacy_Module_x86_64'.
Refreshing service 'Public_Cloud_Module_x86_64'.
Refreshing service 'Python_2_Module_x86_64'.
Refreshing service 'SUSE_Cloud_Application_Platform_Tools_Module_x86_64'.
Refreshing service 'SUSE_Linux_Enterprise_Server_x86_64'.
Refreshing service 'Server_Applications_Module_x86_64'.
Refreshing service 'Web_and_Scripting_Module_x86_64'.
Loading repository data…
Reading installed packages…
No matching items found.

For an extended search including not yet activated remote resources you may run 'zypper
search-packages' at any time.
Do you want to run 'zypper search-packages' now? yes/no/always/never: : yes

Could not search for the package: SUSE::Connect::UnsupportedOperation: Package search is not supported by the registration proxy: Alternatively, use the web version at https://scc.suse.com/packages/
No package found

No exemplo acima o pacote libCharLS2 não foi encontrado nos repositórios configurados no servidor atual. Para equacionar este problema, devemos entrar na URL https://scc.suse.com/packages/ e preencher os parâmetros do ambiente conforme o exemplo abaixo:

Então clique no botão pesquisar e selecione o pacote desejado. No meu caso esta a libCharLS2:

Após esta ação receberemos os comando para respectiva instalação:

Pronto, Basta agora executá-los:

# SUSEConnect -p PackageHub/15.2/x86_64
Registering system to registration proxy https://smt-ec2.susecloud.net

Updating system details on https://smt-ec2.susecloud.net …

Activating PackageHub 15.2 x86_64 …
-> Adding service to system …
-> Installing release package …

Successfully registered system

E agora finalmente o comando zypper in…

zypper install libCharLS2-2.0.0-bp152.3.23
Refreshing service ‘Basesystem_Module_x86_64’.
Refreshing service ‘Containers_Module_x86_64’.
Refreshing service ‘Desktop_Applications_Module_x86_64’.
Refreshing service ‘Development_Tools_Module_x86_64’.
Refreshing service ‘Legacy_Module_x86_64’.
Refreshing service ‘Public_Cloud_Module_x86_64’.
Refreshing service ‘Python_2_Module_x86_64’.
Refreshing service ‘SUSE_Cloud_Application_Platform_Tools_Module_x86_64’.
Refreshing service ‘SUSE_Linux_Enterprise_Server_x86_64’.
Refreshing service ‘SUSE_Package_Hub_x86_64’.
Refreshing service ‘Server_Applications_Module_x86_64’.
Refreshing service ‘Web_and_Scripting_Module_x86_64’.
Warning: The gpg key signing file ‘repomd.xml’ has expired.
Repository: SUSE-PackageHub-15-SP2-Backports-Pool
Key Fingerprint: 637B 32FF 3D83 F07A 7AE1 C40A 9C21 4D40 6517 6565
Key Name: openSUSE:Backports OBS Project
Key Algorithm: RSA 2048
Key Created: Wed Oct 2 13:17:53 2019
Key Expires: Fri Dec 10 13:17:53 2021 (EXPIRED)
Rpm Name: gpg-pubkey-65176565-5d94a381
Building repository ‘SUSE-PackageHub-15-SP2-Backports-Pool’ cache ………[done]
Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following NEW package is going to be installed:
libCharLS2

The following package has no support information from its vendor:
libCharLS2

1 new package to install.
Overall download size: 75.5 KiB. Already cached: 0 B. After the operation, additional 286.1 KiB will be used.
Continue? y/n/v/…? shows all options: y
Retrieving package libCharLS2-2.0.0-bp152.3.23.x86_64 (1/1), 75.5 KiB (286.1 KiB unpacked)
Retrieving: libCharLS2-2.0.0-bp152.3.23.x86_64.rpm ..……………[done]

Checking for file conflicts: …………………………………………….[done]
(1/1) Installing: libCharLS2-2.0.0-bp152.3.23.x86_64 …….………….[done]

E pronto!

Modelos de difusão superam Redes Adversárias Generativas (GANs)

Existem fragilidades quando treinamos um modelo para sintetizar amostragem de alta qualidade com complexos dados em alta resolução, principalmente quando utilizando métodos convencionais de síntese natural de imagens criada por redes adversarias generativas.

Os métodos de difusão apresentam superioridade durante o aprendizado de máquina e por consequência geração de alta qualidade de imagens e áudios. Os modelos de difusão trabalha corrompendo os dados de treinamento adicionando ruídos gaussiano gradualmente, excluem os detalhes lentamente até os ruídos prevalecer 100%. E finalmente uma rede neural reverte o processo de corrupção. Este processo reverso sintetiza as informações eliminando o ruído gradativamente até produzir uma amostra perfeita.

Fonte: https://arxiv.org/abs/2105.05233

Veja o exemplo a seguir:

Ritchie CLI oficialmente no openSUSE

Depois de muito trabalho, o Ritchie-CLI 2.11.3 chega oficialmente disponível no repositório openSUSE Tumbleweed. Ritchie-CLI se tornou oficial em 11 de novembro no Tumbleweed. Parabéns para toda a equipe ZUP!

Ritchie é uma ferramenta de código aberto desenvolvida pela ZUP Company e permite aos usuários criar, armazenar e compartilhar automações com segurança. Otimiza comandos repetitivos para que os usuários tenham mais autonomia de programação. Estou trabalhando para adicionar um novo pacote ao Factory e a ajuda da comunidade openSUSE é bem-vinda. O pacote também está no meu Open Build Service de Alessandro para aqueles interessados . Mais informações podem ser encontradas nas notas de lançamento do pacote. E neste link a notícia OFICIAL!

Log4J 2.15.0 com problemas, veja a solução definitiva!

Log4Shell Is Spawning Even Nastier Mutations | Threatpost

Concluíram que a correção para CVE-2021-44228 no Apache Log4j 2.15.0 estava incompleta em certas configurações. Com isto foi lançado uma nova versão Log4j 2.16.0 corrige esse problema removendo o suporte para padrões e funcionalidade JNDI. Abaixo uma maneira de eliminar o problema nas versões anteriores < 2.16.0.

$ zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

AMI openSUSE Tumbleweed agora disponível com o kernel 5.15.5

O openSUSE Tumbleweed agora está disponível com um kernel atualizado do Linux (5.15.5) como uma imagem Amazon (AMI). O kernel 5.15 introduz diversos recursos e melhorias de performance, incluindo otimizações para processadores Intel Ice Lake, melhororia no NTFSe nas placas de vídeo Intel Arc para potencializar as instâncias do Amazon EC2 de última geração. A aplicação de patch do kernel 5.15 que introduzi em nome da iniciativa openSUSE Innovators é compatível para arquiteturas de x86-64 .

Para mais detalhes adicionais ou informações sobre atualização, entre em contato com Innovators for openSUSE https://aws.amazon.com/marketplace/pp/B086VDH9KM.

Os recursos mencionados são alguns mas não são os únicos! Outros recursos são listados no anúncio oficial publicado por Linus Torvalds.

Abaixo também alguns pacotes alterados neste release:

  • ritchie cli (2.11.3)
  • groff
  • groff-full
  • harfbuzz (2.9.1 -> 3.1.1)
  • libstorage-ng (4.4.61 -> 4.4.63)
  • makedumpfile
  • osinfo-db
  • rubygem-cheetah (0.5.2 -> 1.0.0)
  • rubygem- yast-rake (0.2.42 -> 0.2.43)
  • scout (0.2.5 + 20210424.3bff388 -> 0.2.6 + 20211130.022a45c)
  • xen (4.16.0_01 -> 4.16.0_02)
  • yast2 (4.4.22 -> 4.4. 27)
  • yast2-add-on (4.4.3 -> 4.4.5)
  • yast2-installation (4.4.23 -> 4.4.26)
  • yast2-packager (4.4.14 -> 4.4.17)
  • yast2-ruby-bindings (4.4 .4 -> 4.4.6)
  • yast2-storage-ng (4.4.15 -> 4.4.20)
  • yast2-update (4.4.5 -> 4.4.6)
  • yast2-users (4.4.8 -> 4.4.9)