본문 바로가기
SingleStoreDB/엔지니어링

[AI_ML] 인 메모리 속도로 이미지 인식

by 에이플랫폼 [Team SingleStore Korea] 2020. 2. 28.

SingleStore는 실시간 데이터 웨어하우스(DW)이면서 대규모 운영 분석을 위한 완벽한 시스템입니다. SingleStore는 분석 쿼리에 밀리초 응답 시간을 제공하며 실시간 응용 프로그램의 중요한 경로의 구성으로 활용됩니다.

우리는 고객들로부터 IoT 데이터뿐 아니라 이미지에 대한 다양한 종류의 인공지능(AI)과 기계학습(ML) 모델 평가를 실시간으로 하고 싶다는 말을 자주 듣곤 합니다.

이것의 좋은 예는 큰 이미지 데이터 모음에서 유사한 이미지를 찾아야 하는 경우입니다. 예를 들어, 카메라가 사람을 가리키고 그 사람이 데이터베이스에 있는지 신속하게 확인할 수 있게 하는 것을 실시간 얼굴 인식이라고 합니다.

이미지로부터 피처 벡터(feature Vector)로

얼굴 인식에서 이미지로부터 피처(feature) 벡터를 효율적으로 추출하기 위해 딥러닝(Deep learning)을 사용하는 것은 지속적인 연구 주제입니다. 다음은 현대적 접근법에 대한 참고 사이트입니다.

http://www.robots.ox.ac.uk/~vgg/software/vgg_face/

이 포스트의 목적상, 이것이 어느 정도 해결된 문제라고 가정하고 들어오는 이미지로부터 피처 벡터를 효율적으로 추출할 수 있고, 이러한 피처 벡터가 생성되면 다음과 같은 간단한 스키마를 사용하여 SingleStore 테이블에 Insert 하기만 하면 됩니다.

CREATE TABLE features (
   id bigint(11) NOT NULL AUTO_INCREMENT,
   feature_vector binary(4096) DEFAULT NULL,
   KEY id('id') USING CLUSTERED COLUMNSTORE
)

벡터를 Insert하는 대표적인 방법은 Apache Spark를 사용하여 SingleStore로 데이터를 빠르게 병렬로 전송할 수 있도록 하는 것입니다.

유사성 검색(Similarity Search)

벡터 간 유사성 측정에 자주 사용되는 접근 방식은 코사인 유사성(Cosine similarity) 과 유클리드 거리(Euclidean distance) 두 가지가 있습니다. 코사인 유사성(벡터 간 각도의 코사인)은 벡터의 내적(dot product)을 벡터 표준의 곱(벡터의 길이)으로 나눈 값으로 정의됩니다. 벡터가 정규화 되면 코사인 유사성은 단순히 벡터의 내적입니다(표준의 곱이 1이므로).

(일례로, SingleStore는 벡터의 내적과 코사인 유사성을 수행하는 데이터베이스로 대규모 구축에 SingleStore를 사용하여 Google 검색에 사용한 고객이 있습니다.)

코사인 유사성을 사용하여 검색하기 위해, 아래 쿼리를 실행하여 유사한 이미지를 찾을 수 있습니다.

SELECT id FROM features WHERE DOT_PRODUCT(feature_vector, <Input>) > 0.9

입력은 들어오는 이미지로부터 추출 된 피쳐 벡터이며 0.9는 실험적으로 조정된 상수이며, 피쳐 벡터와 입력 사이의 각도가 26도 미만입니다.

유클리드 거리는 유사성을 측정하는데도 자주 사용됩니다. 2개의 입력 벡터의 뺄셈으로 인한 벡터의 표준으로 정의됩니다. 내장 EUCLIDEANCE_DISTANCE도 벡터 간의 유사성을 효율적으로 측정하는데 사용될 수 있습니다.

이 쿼리가 전체 테이블 스캔을 수행해서 속도가 느릴 것 같지만, 이 쿼리가 메모리 대역폭 속도로 계산을 어떻게 수행하는지에 대한 방식을 공유할 것입니다.

성능

가정은 다음과 같습니다.

- 메모리 속도: 50GB/초

- 개별 이미지 피쳐(Feature) 벡터는 1024개의 피쳐를 포함하고, 그 결과 4KB/벡터가 생성 됨

메모리 대역폭에 제약이 있다는 것은 100개 노드 클러스터에서 개별 노드에서 초당 1250만 개의 이미지 또는 초당 10억 개의 이미지를 검색할 수 있다는 것입니다. 이게 실제로 사실인지 확인해보고자 합니다. 위의 스키마로 SingleStore 컬럼 스토어 테이블을 만들어 간단한 테스트 프로그램을 개발하여 1250만개의 랜덤 4KB 정규화 된 피쳐 벡터로 채웠습니다. 사용한 머신은 Xeon E5 프로세서 6개 코어입니다. 검색 쿼리를 실행했을 때 응답 시간이 0.25초였습니다.

어떻게 SingleStore가 메모리 대역폭보다 더 빨리 실행될 수 있을까요? 이것에 대한 해답은 컬럼 스토어 테이블 압축에 있습니다. 랜덤 벡터가 정규화되었기 때문에 50GB에서 0.25초 이내에 메모리에서 읽을 수 있는 크기로 압축할 수 있었습니다.

이는 DOT_PRODUCT 연산이 50GB/sec보다 빠르게 수행될 수 있으며, 압축이 적용되지 않는 경우 메모리 대역폭이 제한 요소임을 나타냅니다.

SingleStore는 Intel의 최신 명령 셋(AVX2와 AVX512)을 통해 빠른 벡터화된 테이블 스캔을 사용하고, 또한 DOT_PRODUCT 자체를 계산을 하기 위해 이러한 명령 셋 확장을 사용합니다.

결론

인 메모리 속도로 이미지 인식을 수행할 수 있기 때문에 유사성 연산을 위한 병목 을 반드시 계산할 필요가 없습니다. 우리는 약간의 정확성만을 양보하면서 전체 테이블 스캔을 피함으로써 효율성을 얻는 다른 알고리즘들이 있다는 것을 알고 있습니다. 그러나 전체 테이블 스캔을 하게 하는 것과 같은 아주 직접적인 구현으로 실질적인 좋은 결과를 얻을 수 있습니다.

 

June 29, 2017

출처: https://www.singlestore.com/blog/image-recognition-at-the-speed-of-memory-bandwidth/

Fast Image Recognition at the Speed of Memory Bandwidth - SingleStore Blog - MemSQL is Now SingleStore

MemSQL provides millisecond response times for analytical queries & is a part of the critical path for real-time apps. Get fast image recognition with MemSQL now!

www.singlestore.com

www.a-platform.biz | info@a-platform.biz