인턴/LPR(번호판 인식)

[Doubango-ultimateALPR-Docs] Architecture overview 해석

용성군 2021. 7. 16. 12:33
728x90
반응형

아키텍처 개요

 

지원되는 운영 체제

우리는 C++11 컴파일러가 있는 모든 OS를 지원합니다. 이 코드는 Android, iOS, Windows, Linux, Raspberry Pi 및 다양한 맞춤형 임베디드 장치(예: 카메라)에서 테스트되었습니다.

Github 리포지토리에는 개발자가 구현을 테스트할 수 있도록 참조 코드로 Android, Raspberry Pi, Linux 및 Windows용 바이너리가 포함되어 있습니다. 이 참조 구현은 Java 및 C++ API와 함께 제공됩니다. API는 모든 운영 체제에 공통적이므로 Android, Raspberry Pi, Linux 또는 Windows에서 애플리케이션을 개발하고 테스트할 수 있으며 앞으로 나아갈 준비가 되면 OS용 바이너리를 제공합니다.

 

지원되는 CPU

우리는 공식적으로 모든 ARM32(AArch32), ARM64(AArch64), X86 및 X86_64 아키텍처를 지원합니다. 이 SDK는 이런 모든 CPU에서 테스트되었습니다.

MIPS32/64에서 작동할 수 있지만 테스트되지 않았으며 이러한 아키텍처에 대해 작성된 SIMD 가속이 없기 때문에 엄청나게 느릴 것입니다.

거의 모든 컴퓨터 비전 함수는 어셈블러를 사용하여 작성되었고 SIMD 코드(NEON, SSE 및 AVX)로 가속화됩니다. 일부 컴퓨터 비전 함수는 https://github.com/DoubangoTelecom/CompV에서 사용할 수 있는 CompV 프로젝트에서 오픈 소스 및 공유되었습니다.

 

지원되는 GPU

우리는 컴퓨터 비전 부분에 대해 GPU와 호환가능한 모든 OpenCL 1.2+ 지원합니다. 딥 러닝 모듈의 경우:

  • TensorRT 덕분에 모든 NVIDIA GPU를 지원합니다.
  • OpenVINO 덕분에 모든 Intel GPU를 지원합니다.
  • 모바일(ARM) 구현은 OpenCL, OpenGL 셰이더, Metal 및 NNAPI와 같은 여러 백엔드 덕분에 어디에서나 작동합니다.

모바일(ARM) 구현의 경우 GPU가 전혀 필요하지 않습니다. 대부분의 경우 이 코드는 고정 소수점(fixed-point) math implementation 및 양자화된 추론 덕분에 GPU보다 CPU에서 더 빠르게 실행됩니다. GPU 구현은 32비트 부동 소수점(floating-point) 수학에 의존하므로 더 높은 정확도를 제공합니다. 앞으로 우리는 16비트 부동 소수점 모델을 제공하기 위해 노력하고 있습니다.

주의
전체 GPGPU 가속은 TensorRT 및 TF-TRT를 사용하는 NVIDIA Jetson 장치용 버전 3.1.0에 추가되었습니다.
https://github.com/DoubangoTelecom/ultimateALPR-SDK/blob/master/Jetson.md를 확인하십시오.


지원되는 VPU

OpenVINO 덕분에 Intel Movidius Vision Processing Unit(VPU)을 지원합니다.

 

지원되는 FPGA

OpenVINO 덕분에 Intel FPGA를 지원합니다.

 

지원되는 프로그래밍 언어

코드는 C++11과 어셈블러를 사용하여 개발되었지만 API(응용 프로그래밍 인터페이스)는 SWIG 덕분에 바인딩이 많습니다.

바인딩: ANSI-C, C++, C#, Java, ObjC, Swift, Perl, Ruby 및 Python.

 


지원되는 raw formats

RGBA32, BGRA32, RGB24, BGR24, NV12, NV21, Y(그레이스케일), YUV420P, YVU420P, YUV422P 및 YUV444P와 같은 이미지/비디오 형식을 지원합니다. NV12 및 NV21은 YUV420SP라고도 하는 semi-planar 형식입니다.

 

최적화

  • 손으로 쓴 어셈블러
  • 내장 함수(intrinsics) 또는 어셈블러를 사용하는 SIMD(SSE, AVX, NEON)
  • GPGPU(CUDA, TensorRT, TF-TRT, OpenVINO, OpenCL, OpenGL, NNAPI 및 금속)
  • 스마트한 멀티스레딩(컨텍스트 전환 최소화, no false-sharing, no boundaries crossing...)
  • 스마트한 메모리 액세스(데이터 정렬, 캐시 사전 로드, 캐시 차단, 캐시 오염 최소화를 위한 비일시적 로드/저장, 스마트 참조 카운팅…)
  • 고정 소수점
  • 양자화된 추론
  • … 그리고 더 많은

많은 함수들이 오픈 소스이며 CompV 프로젝트에 포함되었습니다: https://github.com/DoubangoTelecom/CompV. 딥 러닝 부분의 더 많은 함수들이 앞으로 몇 달 안에 오픈 소스로 제공될 예정입니다. 당사에 연락하여 앞으로 우리가 공개할 비공개 소스 코드를 얻을 수 있습니다.

 

스레드 안전성

SDK의 모든 함수들은 스레드로부터 안전하므로 여러 스레드에서 동시에 호출할 수 있습니다. 그러나 다음과 같은 여러 가지 이유로 해서는 안 됩니다.

 

  • SDK는 이미 효율적인 방식으로 대규모 다중 스레드를 지원합니다(스레딩 모델 섹션 참조).
  • 결국 CPU를 포화시키고 모든 것을 느리게 실행하게 됩니다. 스레딩 모델은 SDK가 가상 CPU 코어 수보다 많은 스레드를 사용하지 않도록 합니다. 다른 스레드에서 엔진을 호출하면 SDK 외부에서 생성된 스레드를 제어할 수 없으므로 이 규칙이 깨집니다.
  • 비공개 API에 대한 액세스 권한이 없는 한 엔진은 단일 컨텍스트를 사용합니다. 즉, 공유 리소스에 쓰려고 할 때 동시 호출(concurrent calls)이 잠깁니다.


원문 : https://www.doubango.org/SDKs/anpr/docs/Architecture_overview.html

 

Architecture overview — ultimateALPR 3.3.0 documentation

Supported operating systems We support any OS with a C++11 compiler. The code has been tested on Android, iOS, Windows, Linux, Raspberry Pi and many custom embedded devices (e.g. Cameras). The Github repository contains binaries for Android, Raspberry Pi,

www.doubango.org

 

728x90
반응형