대학 대항전 : 퍼즐 이미지 AI 경진대회

알고리즘 | 월간 데이콘 | 대학 대항전 | 비전 | 자기지도학습 | 기술 혁신 | 분류

  • moneyIcon 상금 : 인증서
  • 842명 마감

 

public 0.85987] jigsawformer

2024.01.13 13:36 1,882 조회 language

인간이 퍼즐을 푸는 과정을 Transformer Architecture에 접목하려고 시도했습니다.

모델은  크게 2단계로 나누어져 있습니다.
1. 각 패치를 중심으로 인접한(상하좌우) 패치를 찾아 매트릭스 형태로 예측(16*16). 이를 통해 각 패치의 연결관계와 연결된 모양(ㅏ,ㅗ,ㅜ,ㅓ,+, ㄱ, 등)을 알 수 있음.
2. 1단계에서 구한 패치의 모양을 position bias로, 패치의 연결관계를 attention bias로 모델에 다시 입력. 최종 순서 예측

몇 가지 실험을 통해서 발견한 주요한 점은
1. patch embedding : 모델 학습 안정(4*4, relative pos는 시도해보지 않음)
2. model weight sharing : 모델 학습속도
3. joint training: 모델 학습속도(loss를 합쳐서 한번에 update)
입니다.

중간에 학습을 잘못 멈춰서 조금 더 학습을 한다면 0.88 이상은 가능하지 않을까 합니다.
해당 코드에는 추가적인 data transform, model ensemble, 등 이 포함되어있지 않습니다.

작성한 코드가 정확하지 않을 수 있습니다.  transformer 접근법, utility등이 다른분들께 도움이 되었으면 좋겠습니다.

Reference
vision electra : https://openreview.net/pdf?id=yKC6Jd0CsP
vit jigsaw : https://www.sciencedirect.com/science/article/pii/S0167865522003920

수정1)
trainer.fit 부분에서 limit_train_batches, limit_val_batches 해제해주셔야합니다.
수정2)
def attention_forward 에서 attn + attn_bias 를 attn = attn + attn_bias 로 바꿔야합니다

코드
로그인이 필요합니다
0 / 1000
권남우
2024.01.13 13:52

jigsaw-vit 공부하고 있었는데 대딘하십니다

co1dtype
2024.01.13 14:45

저도 대회 시작하자마자 이 래퍼런스를 봤는데요. 그 래퍼런스를 데이콘에서 보니 더 새롭네요. 재밌게 읽었습니다 ㅎㅎ

IDW
2024.02.05 00:48

삭제된 댓글입니다

Oak_tree
2024.01.13 17:07

공유 감사드립니다

shinhs
2024.01.13 17:57

이거 돌려보신 분들 중에 val_score 예제 처럼 나오시는 분 있나요?

EISLab_이희원
2024.01.13 18:13

데이터셋 전체에 대해 학습을 해야 나오는 거 같습니다.

shinhs
2024.01.13 18:22

아하 감사합니다

귀여미
2024.01.13 23:24

limit_train_batches 해제하셔야 합니다

파이썬초보만
2024.01.14 00:08

앗 limit_train_batches 를 적어놨군요; 귀여미님 감사합니다
imit_train_batches, limit_val_batches 해제해주셔야합니다

shinhs
2024.01.13 23:54

감사합니다 !!

건조한안구는싫어
2024.01.13 22:00

많은 도움이 되었습니다.

파이썬초보만
2024.01.15 20:26

transform 수정 권장드립니다.
from torchvision.transforms import v2 as  transforms
transform = transforms.Compose([
    transforms.Resize(size=(256,256), interpolation=transforms.InterpolationMode.BICUBIC),
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5,0.5,0.5), std=(0.5,0.5,0.5)),
])

Oak_tree
2024.01.18 08:11

좋은 자료 공유해주신 덕분에 많이 배워갑니다. 혹시 이런 자료, 모델, 래퍼런스페이퍼들은 어디서 찾으시는지 물어봐도 될까요?

파이썬초보만
2024.01.19 10:01

Oak_tree님 안녕하세요
보통 레퍼런스들은 구글검색이나 Paperwithcodes, 다른 경연대회, chatgpt 등을 참고합니다.

Oak_tree
2024.01.19 09:18

넵 감사합니다. 

McNuggetSet
2024.01.17 14:07

뭘 어떻게 해야될지 막막했는데, 코드공유 너무 감사합니다!

귀여미
2024.01.20 14:01

0.93까지 찍히네요!!

파이썬초보만
2024.01.20 14:46

감사합니다 ㅎㅎ

knhc12345
2024.01.24 01:41

정말 좋은 자료 감사드립니다

통계
2024.02.01 08:40

혹시 돌려본 분 있나요? 저는 validation step에서 에러가 뜨는 것 같아서요. 인수가 하나 부족하고 해서 batch_idx 인자도 넣어줬어요

McNuggetSet
2024.02.01 12:20

저는 이상없이 처음부터 끝까지 잘 돌아갔습니다

통계
2024.02.01 14:38

사실 위 코드는 gpu가 없는데 gpu 있는 코드가 있을까요?

파이썬초보만
2024.02.01 21:30

안녕하세요
두서없는 코드라 문제가 많을수있지만
말씀을 들어보니 lightning 라이브러리의 버전문제 일 수도 있을것 같습니다.
gpu는 L.trainer에서 자동으로 잡히게 되어있습니다. https://lightning.ai/docs/pytorch/stable/common/trainer.html#trainer-flags

co1dtype
2024.02.07 10:04

파이썬초보만님이 코드 공유를 하긴 전 이 래퍼런스를 보고 코드를 돌려봤는데 개인적으로는 모델 성능이 잘 안나왔습니다. 하지만 이 코드를 baseline 삼아서 여려 유저들이 상위권 점수를 받은 거 보니 모델 선택 및 실험에 더 신중하게 생각해봐야겠다는 생각을 해봤습니다. 좋은 코드 감사합니다.

파이썬초보만
2024.02.07 09:46

감사합니다. 
저도 적절한 레퍼런스를 찾지못했는데 그래서 모델 고민하는 과정이 더 재밌었던것 같습니다. co1dtype님의 방법도 뛰어나셨습니다. 축하드립니다