시각 질의 응답 모델 사용하기¶
- 튜토리얼 난이도: ★☆☆☆☆
- 읽는데 걸리는 시간: 5분
- 사용 언어: SQL (100%)
- 실행 파일 위치: tutorial/thanosql_ml/question_answering/visual_question_answering.ipynb
- 참고 문서: COCO 데이터 세트, VQA, ViLT
튜토리얼 소개¶
시각 질의 응답 이해하기
시각 질의 응답은 이미지(Visual)와 그 이미지에 대한 질문(Question)이 주어졌을 때, 해당 질문에 대해 알맞은 답변(Answer)을 찾는 기술입니다. 시각 질의 응답은 어린이 학습, 인공지능 비서 등 여러 분야에 활용할 수 있는 기술입니다.
VQA Challenge는 2016년 CVPR을 시작으로 매년 개최되며, 1년마다 발전된 기술을 평가하고 시상하고 있습니다. 2017년부터는 같은 질문에 비슷한 이미지를 보여주고 다른 답변을 하는 데이터를 VQA 2.0 데이터 세트를 통해 수집한 후 인공지능의 유효성을 엄밀히 평가하고 있습니다. 예를 들어, ‘누가 안경을 쓰고 있나?‘라는 질문에 한 쌍의 비슷한 이미지가 주어지고 그 답이 각각 ‘남자‘와 ‘여자’가 되도록 균형을 맞춘 것을 말합니다.
아래는 ThanoSQL 시각 질의 응답의 활용 및 예시 입니다.
- 온라인 상품 판매 서비스에서 시각 장애인 보조 시스템으로 활용할 수 있습니다. 상품 이미지를 확인할 수 없는 고객이 해당 상품의 색상, 재질에 대한 질문을 할 때 시각 질의 응답 모델을 활용하여 CS 업무를 줄일 수 있습니다.
- 유사 이미지들에서 필요한 정보를 하나의 질문을 통하여 한 번에 찾을 수 있는 서비스를 만들 수 있습니다.
본 튜토리얼에서는
👉 해당 모델은 예측만 사용할 수 있기 때문에 사전 학습된 모델과 COCO 데이터 세트에서 사람이 있는 이미지들만 사용하여 해당 이미지에 몇 명의 사람이 있는지에 대해 질의를 하고 결과를 확인해 봅니다.
데이터 세트 설명
COCO 데이터 세트는 객체 탐지(object detection), 분할(segmentation), 키포인트 탐지(keypoint detection) 등의 목적으로 만들어진 데이터 세트입니다. 본 튜토리얼에서는 해당 데이터 세트에서 2017년 검증 이미지 중 사람 카테고리의 이미지(2,685장)만으로 구성되어 있습니다.
0. 데이터 세트 및 모델 준비¶
ThanoSQL의 쿼리 구문을 사용하기 위해서는 ThanoSQL 워크스페이스에서 언급된 것처럼 API 토큰을 생성하고 아래의 쿼리를 실행해야 합니다.
%load_ext thanosql
%thanosql API_TOKEN=<발급받은_API_TOKEN>
데이터 세트 준비¶
%%thanosql
GET THANOSQL DATASET coco_person_data
OPTIONS (overwrite=True)
Success
쿼리 세부 정보
- "GET THANOSQL DATASET" 쿼리 구문을 사용하여 원하는 데이터 세트를 워크스페이스에 저장합니다.
- "OPTIONS" 쿼리 구문을 통해 GET THANOSQL DATASET에 사용할 옵션을 지정합니다.
- "overwrite": 동일 이름의 데이터 세트가 존재하는 경우 덮어쓰기 가능 여부 설정. True일 경우 기존 데이터 세트는 새로운 데이터 세트로 변경됨 (bool, optional, True|False, default: False)
%%thanosql
COPY coco_person_data
OPTIONS (if_exists='replace')
FROM 'thanosql-dataset/coco_person_data/coco_person.csv'
Success
쿼리 세부 정보
- "COPY" 쿼리 구문을 사용하여 데이터베이스에 저장 할 테이블명을 지정합니다.
- "OPTIONS" 쿼리 구문을 통해 COPY에 사용할 옵션을 지정합니다.
- "if_exists": 동일 이름의 테이블이 존재하는 경우 처리하는 방법 설정. 오류 발생, 기존 테이블에 추가, 기존 테이블 대체 (str, optional, 'fail'|'replace'|'append', default: 'fail')
모델 준비¶
%%thanosql
GET THANOSQL MODEL vilt
OPTIONS (
model_name='tutorial_vilt',
overwrite=True
)
Success
쿼리 세부 정보
- "GET THANOSQL MODEL" 쿼리 구문을 사용하여 원하는 모델을 워크스페이스 및 데이터베이스에 저장합니다.
- "OPTIONS" 쿼리 구문을 통해 GET THANOSQL MODEL에 사용할 옵션을 지정합니다.
- “model_name”: 저장할 모델의 이름 (str, optional)
- "overwrite": 동일 이름의 모델이 존재하는 경우 덮어쓰기 가능 여부 설정. True일 경우 기존 모델은 새로운 모델로 변경됨 (bool, optional, True|False, default: False)
1. 데이터 세트 확인¶
본 튜토리얼을 진행하기 위해 ThanoSQL 워크스페이스 데이터베이스에 저장되어 있는 coco_person_data 테이블을 사용합니다. 아래의 쿼리 구문을 실행하고 테이블의 내용을 확인합니다.
%%thanosql
SELECT *
FROM coco_person_data
LIMIT 5
image_path | category | |
---|---|---|
0 | thanosql-dataset/coco_person_data/000000398905... | person |
1 | thanosql-dataset/coco_person_data/000000562243... | person |
2 | thanosql-dataset/coco_person_data/000000376307... | person |
3 | thanosql-dataset/coco_person_data/000000441586... | person |
4 | thanosql-dataset/coco_person_data/000000007281... | person |
데이터 테이블 이해하기
coco_person_data 테이블은 아래와 같은 정보를 담고 있습니다.
- image_path: 각 이미지 파일의 위치 정보
- category: 이미지의 범주
%%thanosql
PRINT IMAGE
AS
SELECT image_path
FROM coco_person_data
LIMIT 5
/home/jovyan/thanosql-dataset/coco_person_data/000000398905.jpg
/home/jovyan/thanosql-dataset/coco_person_data/000000562243.jpg
/home/jovyan/thanosql-dataset/coco_person_data/000000376307.jpg
/home/jovyan/thanosql-dataset/coco_person_data/000000441586.jpg
/home/jovyan/thanosql-dataset/coco_person_data/000000007281.jpg
2. 사전 학습된 모델을 사용하여 이미지의 질문에 대한 응답 예측¶
다음 쿼리 구문을 실행하여 tutorial_vilt 모델을 사용하여 결과를 예측합니다.
%%thanosql
PREDICT USING tutorial_vilt
OPTIONS (
image_col='image_path',
question='How many people are there?',
result_col='predict_result'
)
AS
SELECT image_path
FROM coco_person_data
image_path | predict_result | |
---|---|---|
0 | thanosql-dataset/coco_person_data/000000398905... | 1 |
1 | thanosql-dataset/coco_person_data/000000562243... | 1 |
2 | thanosql-dataset/coco_person_data/000000376307... | 2 |
3 | thanosql-dataset/coco_person_data/000000441586... | 1 |
4 | thanosql-dataset/coco_person_data/000000007281... | 10 |
... | ... | ... |
2680 | thanosql-dataset/coco_person_data/000000008844... | 1 |
2681 | thanosql-dataset/coco_person_data/000000321790... | 1 |
2682 | thanosql-dataset/coco_person_data/000000166478... | 1 |
2683 | thanosql-dataset/coco_person_data/000000122672... | 1 |
2684 | thanosql-dataset/coco_person_data/000000163562... | 1 |
2685 rows × 2 columns
쿼리 세부 정보
- "PREDICT USING" 쿼리 구문을 사용하여 이전 단계에서 불러온 tutorial_vilt 모델을 예측에 사용합니다.
- "OPTIONS" 쿼리 구문을 통해 예측에 사용할 옵션을 지정합니다.
- "image_col": 예측에 사용할 이미지의 경로가 기록되어 있는 컬럼의 이름 (str, default: 'image_path')
- "question": 예측에 사용할 질문 내용 (str)
- "result_col": 데이터 테이블에서 예측 결과를 담을 컬럼 이름 (str, optional, default: 'predict_result')
3. 튜토리얼을 마치며¶
이번 튜토리얼에서는 시각 질의 응답 모델을 사용하여 COCO 데이터 세트에서 이미지에 대한 질문을 통해 결과를 예측해 보았습니다. 초급 단계의 튜토리얼인 만큼 간단한 쿼리를 통해 눈에 보이는 결과를 얻는 것 위주로 진행했습니다. 필요한 이미지들에 대해서만 질문을 한다면, 보다 원하는 결과에 가까운 값을 얻을 수 있을 것입니다.
나만의 서비스를 위한 모델 배포 관련 문의
ThanoSQL을 활용해 나만의 모델을 만들거나, 나의 서비스에 적용하는데 어려움이 있다면 언제든 아래로 문의주세요😊
시각 질의 응답 모델 구축 관련 문의: contact@smartmind.team