아키텍처 개요
지원되는 운영 체제
우리는 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
'인턴 > LPR(번호판 인식)' 카테고리의 다른 글
[Doubango/ultimateALPR/Docs] Improving the accuracy 번역 (0) | 2021.08.25 |
---|---|
[Doubango/ultimateALPR/Docs] C++ API header 번역 (0) | 2021.08.03 |
[DoubangoTelecom/ultimateALPR-SDK/github] recognizer Readme.md 해석 (0) | 2021.07.26 |
[DoubangoTelecom] ultimateALPR SDK - Jetson.md 해석(Jetson과 Jetson_tftrt 차이) (0) | 2021.07.25 |
[Doubango-ultimateALPR-Docs] Parallel versus sequential processing 해석 (0) | 2021.07.19 |