우리 프로젝트에서는 특정 객체(사과, 꽃병, 인물 등) 에 대한 설명을 자동으로 제공해주는 AI 도슨트를 만들고자 합니다.
전체 구조 요약
[전체 작품 이미지]
YOLOV8 segmentation
->
[객체 감지 및 CROP]
clip 임베딩
->
[백터화된 이미지]
FAISS Index 저장
->
[ 질의 -> 관련 객체 검색]
LLaMA 문장 생성
->
[관람객 맞춤 도슨트 설명 ]
먼저, yolov8-seg-pt 모델을 활용하여 작품 이미지에서 작품을 감지합니다. 이때, bouning box가 아니라 segmentation mask를 사용하여 마스크 기반으로 객체만 추출합니다.
각 crop된 객체 이미지에 대해 clip을 사용하여 시멘틱 벡터로 변환합니다.
나중에 사용자 질문과 유사한 의미의 객체를 검색할 수 있습니다.
시멘틱 벡터란 ?
단어나 문장, 이미지처럼 인간이 이해하는 의미를 컴퓨터가 수치적으로 다룰 수 있게 만든 벡터 표현을 말합니다.
쉽게 말해, 의미를 담고 있는 숫자의 배열을 의미합니다.
ex) 고양이 : [0.8, 0.2, 0.5] , 강아지 [0.79, 0.21, 0.52] 자동차 [0.1 , 0.9, 0.3]
고양이와 강아지는 유사한 동물이기 때문에 벡터값이 비슷, 자동차는 전혀 다른 의미라서 벡터가 다름
--> 벡터 간의 유사도를 계산하면 서로 의미적으로 얼마나 비슷한지를 판단할 수 있음
clip은 이미지와 텍스트를 같은 의미 공간에 임베딩함
"an apple on the table" -> [텍스트 시멘틱 벡터]
실제 사과 사진 -> [이미지 시멘틱 벡터], 이 둘이 서로 가까운 위치에 있도록 학습함
사용자가 '사과가 어딨지' 라고 질문하면 벡터로 바꿔 faiss에서 가장 가까운 이미지 벡터를 찾고, 그에 대한 설명을 해줄 수 있습니다.
CLIP 임베딩된 벡터들을 FAISS 를 사용하여 인덱스에 저장
이 인덱스를 통해 나중에 의미적으로 유사한 객체를 빠르게 검색할 수 있음
질의 기반 객체 검색 및 LLaMA로 설명 생성