Skip to content

Latest commit

 

History

History
155 lines (119 loc) · 7.2 KB

README.md

File metadata and controls

155 lines (119 loc) · 7.2 KB

청계산 셰르파

Look, Attend and Generate Poem 사진을 보고 시를 써내려가는 감성시인 서비스

해당 프로젝트는 네이버 커넥트재단 부스트캠프 AI Tech 2기 청계산셰르파 팀에서 진행한 최종 프로젝트로 사용자가 이미지를 업로드하면 이미지에 걸맞는 시를 생성하여 카드형태로 다운로드 혹은 공유할 수 있는 웹서비스입니다.

팀원 & 역할 소개

[T2011] 곽진성
@jskwak98
[T2025] 김민수
@lexiconium
[T2076] 문하겸
@ddobokki
[T2166] 이요한
@l-yohai
[T2195]
전준영
@20180707jun
[T2206] 정진원
@godjw
[T2210] 정희영
@hyeong01
데이터 수집 및 전처리 데이터 수집
및 전처리
데이터 수집 및 전처리 데이터 수집 및 전처리 데이터 수집
및 전처리
데이터 수집
및 전처리
데이터 수집 및 전처리
데이터 분석 생성 모델
모델링
Vision Encoder Decoder
모델 학습
모델링 및
베이스라인
작성
서비스 아키텍쳐 구성 및 모델 서빙 캡셔닝 모델 한국어 데이터에 대해 학습 데이터 분석
시 생성 모델 학습 및 개선 시 생성 모델 학습 및 개선 시 생성 모델 학습 서비스
아키텍쳐 구성 및 UI/UX 디자인
웹사이트 및 API 설계, UI/UX 디자인 시 생성 모델 학습 및 개선 모델
성능평가
방법론 연구개발

Installation

pip install -r requirements.txt

Architecture

Usage

Crawl

python data/crawl/crawl.py

Train

Caption Model

python model/vit_gpt2_train.py

Vision Encoder Decoder model의 경우 저희가 학습시킨 이후 서비스에서 사용하는 가중치는 이곳에 공개되어 있습니다.

Show, attend and Tell 방식의 캡셔닝은 최종적으로 사용되지는 않았지만, 사용해보고 싶으시면 이곳을 확인해주시면 됩니다.


Poem Model

# gpt2 base
python model/gpt2_base_train.py

Poem generator model의 경우 저희가 학습시킨 이후 서비스에서 사용하는 가중치는 이곳이곳에 공개되어 있습니다.

Inference

Caption Model

import requests
import torch
from PIL import Image
from transformers import (
    VisionEncoderDecoderModel, 
    ViTFeatureExtractor, 
    PreTrainedTokenizerFast,
)

# device setting
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# load feature extractor and tokenizer
encoder_model_name_or_path = "ddobokki/vision-encoder-decoder-vit-gpt2-coco-ko"
feature_extractor = ViTFeatureExtractor.from_pretrained(encoder_model_name_or_path)
tokenizer = PreTrainedTokenizerFast.from_pretrained(encoder_model_name_or_path)

# load model
model = VisionEncoderDecoderModel.from_pretrained(encoder_model_name_or_path)
model.to(device)

# inference
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
with Image.open(requests.get(url, stream=True).raw) as img:
    pixel_values = feature_extractor(images=img, return_tensors="pt").pixel_values

generated_ids = model.generate(pixel_values.to(device),num_beams=5)
generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)

>> ['고양이 두마리가 담요 위에 누워 있다.']

Poem Model

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# device setting
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# load model and tokenizer
model_name_or_path = "ddobokki/gpt2_poem"

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path)
model.to(device)

keyword_start_token = "<k>"
keyword_end_token = "</k>"
text = "산 꼭대기가 보이는 경치"
input_text = keyword_start_token + text + keyword_end_token

input_ids = tokenizer.encode(input_text, return_tensors="pt").to(device)
gen_ids = model.generate(
    input_ids, max_length=64, num_beams=100, no_repeat_ngram_size=2
)
generated = tokenizer.decode(gen_ids[0, :].tolist(), skip_special_tokens=True)
>> 오르락내리락
 꼭대기를 올려다보니
아득히 멀고 아득한
나뭇가지에 매달린
작은 산새  마리
이름 모를  한포기 안고
어디론가 훌쩍 떠나가 버렸다

Web

python web/app.py

web에 관련된 코드는 이곳에 공개되어 있습니다.

Service Outputs

Reference