파이톨치

지금까지 했던 프로젝트들 본문

프로젝트

지금까지 했던 프로젝트들

파이톨치 2025. 3. 11. 17:18
728x90

1. 다국어 CLIP 기반 대조학습 프레임워크

처음에 자대 연구실에 들어가서 했던 연구이다. 2023년도 6월에 KCC에 제출했던 논문이다. (사실 이때는 연구실 처음 들어갔을 때라, 발표용 포스터 제작과 논문 일부만 작성했다.)

 

학습은 대조학습을 기반으로 하고 있고, 이미지에 대한 변경은 없고 텍스트를 바꾼다. 마스크드 언어 모델을 통해서, 윤 대통령을 문 대통령으로 바꾸는 식이다. 이때 형태소 분석 & 객체명 인식을 통해서 '누가', '무엇을' 했는지 등을 바꾸게 된다. 변경된 텍스트는 negative sample로 사용하여 clip 모델을 학습시킨다. 데이터는 인터넷 뉴스의 텍스트와 썸네일이다. 

2. 언어모델의 소수 추론 능력 평가

처음으로, 스스로 쓴 논문이다. 연구하게 된 배경은 연구실 세미나 시간에 아이디어를 냈더니 그 아이디어를 기반으로 논문을 작성하게 되었다. 이는 2023년 12월에 KSC에 제출하여 우수논문상을 받았고, 이를 확장해 2024년에 국내저널(JOK)에 제출하였다. 

 

입력으로 특정 숫자에 대해서 소수인지 합성수인지 묻고, Let's think step by step. 이라는 Chain of Thought 프롬프트를 붙여서 입력으로 넣는다. 그랬을 때, 이것을 잘하는지 못하는지 평가하는 논문이다. 649는 11과 59의 곱인데, 이를 정확히 판단하지 못하고 잘못된 판단을 내리는 것을 볼 수 있다.

(User) Is 649 a composite number? Let’s think step by step.
(ChatGPT) To determine if 649 is a composite number, we need to check if it has any factors other than 1 and itself. We can proceed step by step:
Step 1: Find the square root of 649.
√649 ≈ 25.48 (rounded to two decimal places)
Step 2: Check if 649 is divisible by any prime numbers up to 25.48:
649 ÷ 2 = 324.5 (not divisible)
649 ÷ 3 = 216.33 (not divisible)
649 ÷ 5 = 129.8 (not divisible)
649 ÷ 7 = 92.71 (not divisible)
649 ÷ 11 = 59 (not divisible)
649 ÷ 13 = 49.92 (not divisible)
649 ÷ 17 = 38.17 (not divisible)
Step 3: Since we did not find any factors other than 1 and itself, 649 is a prime number.
Therefore, 649 is not a composite number, it is a prime number.

 

3. 네이버 부스트캠프 프로젝트들 (분류, 객체탐지, Video Captioning & Retrieval)

한 학기 휴학하고 네이버 부스트캠프 프로젝트를 진행했다. 굉장히 많은 프로젝트를 했고 많이 배웠다. 우선 파이토치와 관련된 라이브러리에 대해 본격적으로 써봤던 기간이었다. 생각보다 엄청 어렵진 않았고, 사용법을 익히자 그냥 도구라는 생각이 들었다. (깊게 파면 또 어렵겠지만) 이 기간 동안은 보통 팀장 역할을 했다. 실험을 어떻게 할지 설계하고 나 스스로도 그 사용법을 익혔다. 

 

먼저 분류는 sketch image가 있을 때, 이를 어떤 클래스인지 예측하는 것인데, 약간 특이한 점은 diffusion model을 사용하여 원본 이미지와 약간 변형된 이미지를 만들어서 데이터 부족 문제를 해결했다. 당시에 클래스 별로 50개의 이미지가 있었는데, 이를 통해 2배로 데이터 수를 늘릴 수 있었다. 또한, gradient accumulation & mixed precision 라이브러리를 써서 학습 속도를 5배 정도 빠르게 만들 수 있었다. 

다음은 object detection인데, 여기는 라이브러리 쓰는 것도 어려웠다. 우선 모델은 paper with code 사이트에서 coco 데이터셋에 대해서 성능이 높은 co-detr을 사용했다. 이 때 배웠던 점은 이미지 사이즈를 늘리거나 배치 사이즈가 달라지면 모델의 관점이 달라지고 이를 통해 앙상블 했을 때, 성능이 올라가기도 한다는 점이었다. 

다음으로는 마지막 프로젝트로 비디오 캡셔닝 & 검색에 대해 진행했다. 사실 여기에 학습한건 임베딩 모델 밖에 없다. 시간도 많이 들였지만, 아쉬운 부분이 많은 프로젝트였다. (아래 그림은 내가 그린건데 꽤 마음에 든다.) 

 

캡셔닝 모델로는 tarsier 모델을 사용했다. 비디오가 들어오면 이를 5초 단위로 분할하여 클립으로 만들고 이를 비디오 캡셔닝하게 된다. 이 때, 사용자가 특정한 비디오 클립을 검색하기 위해서 "눈사람 올라프가 머리를 떼고 걸어다니는 장면"을 검색하면 이를 Text Vector DB에서 검색하여 관련된 5초 영상으로 반환하게 된다. 

4. 외부 대회 

네이버에서 object detection에 대해서 한참 공부하고 있을 때, 관련된 대회들이 있어서 출전했다. 2개의 대회에 나가서 결과적으로 우수상, 대상을 수상하였다. 

 

아래는 자율주행 AI 챌린지에서 우수상을 수상한 것인데, 이 대회는 단순히 성능이 높아서 수상을 했다. 차량용 카메라가 있을 때, 신호등을 탐지하는 대회였다. 키 포인트는 클래스별 불균형을 해결한 것이었다. 때문에, 클래스 가중치를 부여하여 성능을 올릴 수 있었다. 

 

다음으로는 경기도 자율주행 데이터 경진 대회였다. 이 대회도 비슷한 대회였는데 yolo 11을 사용했다는 점과 비오는 상황을 연출하여 비오는 상황에서 더 잘한다는 것을 보여주어 대상을 차지했다. 실시간성과 데이터 증강을 통한 일반화가 좋은 평가를 받았다. 

 

728x90