허깅페이스의 SOTA 모델을 가져와서 활용하는 가장 쉬운 방법

허깅페이스의 SOTA 모델을 가져와서 활용하는 가장 쉬운 방법

SOTA는 State-of-the-Art의 약자이며,

“현재 시점에서 최고 수준의 AI 모델”을 의미합니다.

본 게시글 에서는 허깅페이스(Hugging Face)에 있는 SOTA 모델을 가져와서 활용하는 방법을 살펴보려고 합니다.
사용자에게 필요한 AI 함수를 만들고, 그 다음에 채팅으로 자연어 질의를 하여 만들어진 AI 함수가 답을 하는 경우를 예로 들어 설명하겠습니다. 바로 그 AI 함수를 만들 때 허깅페이스의 SOTA 모델을 불러와서 등록하게 됩니다.

여기서는 많은 SOTA 모델들 중에서 CLIP 모델을 사용해보겠습니다. CLIP은 Contrastive Language-Image Pre-training model의 약자이며 OpenAI에서 개발한 신경망 아키텍처로 자연어를 이해하고 컴퓨터 비전을 구현하는 등 인간의 언어 또는 이미지를 컴퓨터로 처리할 수 있게 해주는 대표적인 모델입니다. CLIP은 2022년부터 쏟아져나온 AI 그림의 기반이 모두 여기에 있다고 할만큼 매우 강력한 도구 중에 하나입니다. 실제로 OpenAI의 DALL-E도 이 CLIP을 이용하여 만들었습니다.

허깅페이스의 ‘모델(Models)’ 탭에서 CLIP을 검색하면 아래 그림과 같이 2,900개가 넘는(‘24.09.20 기준) 모델들이 등록되어 있음을 알 수 있습니다.

우리는 이중에서 제로샷 이미지 분류 모델인 clip-vit-base-patch32 모델을 선택하겠습니다.
이 모델은 텍스트와 이미지를 동일하게 임베딩(embedding) 시키는 모델이며 실제로 어떻게 활용되는지를 이제부터 자세히 알아보겠습니다.

아래는 ThanoSQL에서 허깅페이스의 SOTA 모델을 가져와서 사용자 정의 함수를 만들고, 그 함수로 이미지를 검색하는 방법을 보여주는 동영상입니다. (본 게시글 후반부에 두번째 동영상도 있습니다.)

사운드 없이 재생되는 영상입니다. 자세한 내용은 아래에 단계별로 설명하였습니다.

SOTA 모델로 AI 함수 만들기

우리는 특정 이미지를 input으로 넣으면 그와 유사한 이미지를 찾아주거나, 또는 사용자의 텍스트 입력을 받아서 그에 해당하는 이미지를 찾아주는 AI 함수를 만들려고 합니다.

그 함수의 이름은 embed_clip이라고 명명하였고 함수 구현은 아래와 같습니다.

ThanoSQL의 쿼리매니저(QM)에서 위와 같이 함수를 선언하고 구현합니다. 이때 engine을 ‘huggingface’로 하고 model을 ‘openai/clip-vit-base-patch32’으로 정의하면 허깅페이스의 CLIP 관련 SOTA 모델인 clip-vit-base-patch32를 즉시 사용할 수 있게 됩니다.

쿼리 에디터 상단의 세모 버튼을 눌러서 실행하면 아래 쿼리 결과창에서 실행 결과가 나타납니다.

AI 함수가 동작할 샘플 테이블 만들기

이제 이 함수를 사용하기 위한 샘플 테이블을 만들도록 하겠습니다.
이미지들이 저장되어 있는 테이블이 필요한데 그런 테이블이 없다면 새로 만들어도 되고 기존의 DB에 있는 테이블을 가져오거나 csv 파일을 업로드해도 됩니다.

여기서는 임의로 웹에서 10개의 이미지를 다운받아서 unsplash_meta_sample 라는 이름의 테이블을 만들었고 그 테이블의 스키마(schema)는 아래 그림과 같습니다.

이미지 같은 비정형 데이터를 분류하고 검색하기 위해서는 먼저 해당 데이터를 임베딩해야 하므로 위에서 만든 embed_clip 함수를 사용해서 샘플 테이블을 임베딩합니다. 아래 그림은 embed_clip 함수를 샘플 테이블에 적용하여 그 결과를 test_vector라는 이름의 테이블에 저장하는 쿼리문입니다.

DROP TABLE IF EXISTS test_vector;

CREATE TABLE test_vector
  AS SELECT photo_id
          , photo_image_url
          , photo_submitted_at
          , photo_description
          , embed_clip(photo_image_url) AS embedding
     FROM my_data.unsplash_meta_sample;

SELECT * FROM test_vector

쿼리가 정상적으로 실행되면 아래 그림처럼 Query Result 창에서 각각의 이미지들이 임베딩된 결과를 확인할 수 있습니다.

Data Viewer에서 확인해보면 임베딩 처리된 각각의 이미지들은 아래와 같이 나타납니다.

이미지로 이미지 검색하기

다음으로 웹에서 이미지를 하나 다운받습니다. 우리는 Unsplash라는 사이트에서 사막 사진을 한 장 받아보겠습니다. 해당 이미지의 주소(URL)를 복사해둡니다.

다시 ThanoSQL 워크스페이스로 돌아와서 왼편의 메뉴 중에 AI Chat을 선택하고 이전 단계에서 만들어둔 test_vector 테이블을 선택합니다.

이제 모든 준비가 끝났습니다. 채팅을 통해서 Unsplash에서 다운 받은 사막 사진과 유사한 사진 3장을 찾아보도록 하겠습니다.

채팅 입력 창에 다음과 같이 입력합니다.

“embed_clip 함수로 https://images.unsplash.com/photo-1464822759023-fed622ff2c3b 를 임베딩하고 가장 비슷한 사진 3개 찾아줘”

이 채팅의 의미는 사용자가 만든 함수에 다운받은 이미지 주소를 넘겨주고 샘플 테이블에서 그와 비슷한 사진 3장을 찾는 쿼리문을 실행하는 것입니다.

채팅 입력 후 엔터키를 누르면 쿼리가 실행되고 그 결과는 아래와 같이 나타납니다.

이때 실행된 쿼리는 아래 그림처럼 Query Editor에서 확인할 수 있습니다.

또한 Data Viewer를 통해 어떤 이미지가 검색되었는지도 확인할 수 있습니다.

텍스트로 이미지 검색하기

앞에서는 이미지로 이미지를 검색했는데 이번에는 텍스트로 이미지를 검색해보겠습니다.

다음 동영상은 텍스트로 이미지를 검색하는 방법을 보여주는 동영상입니다.

사운드 없이 재생되는 영상입니다. 자세한 내용은 아래에서 단계별로 설명하겠습니다.

아래는 바다에서 서핑하는 사람이 있는 사진을 찾는 예제입니다.
마찬가지로 ThanoSQL 워크스페이스에서 왼편의 메뉴 중에 AI Chat을 선택하고 이전 단계에서 만들어둔 test_vector 테이블을 선택합니다.

채팅 입력 창에 다음과 같이 입력합니다.

“embed_clip 함수로 ‘바다에서 서핑하는 사람’을 임베딩하고 가장 비슷한 사진 찾아줘”

이 채팅의 의미는 사용자의 텍스트 입력값을 임베딩하여 함수로 넘겨주고 샘플 테이블에서 그와 가장 비슷한 사진 1장을 찾는 쿼리문을 실행하는 것입니다.

채팅 입력 후 엔터키를 누르면 쿼리가 실행되고 그 결과는 아래와 같이 나타납니다.

이때 실행된 쿼리는 아래 그림처럼 Query Editor에서 확인할 수 있습니다.

답변에 있는 링크를 누르면 아래와 같이 검색된 이미지를 바로 확인할 수 있습니다.

마찬가지로 Data Viewer를 통해서도 이미지를 확인할 수 있습니다.

마치며

위과 같이 허깅페이스의 SOTA 모델을 불러와서 사용자 정의 함수를 만들고, 그 함수를 활용하여 2가지 방법으로 이미지를 검색하는 유스케이스를 살펴보았습니다. 이처럼 ThanoSQL을 사용하면 누구든 허깅페이스 또는 외부의 AI 모델들을 쉽고 빠르게 적용하여 즉시 실행해 볼 수 있습니다.

다음에는 이미지 분류 모델이 아닌 다른 머신러닝 모델을 활용한 유스케이스로 돌아오겠습니다.

ThanoSQL 도입 문의

ko_KRKOR
위로 스크롤