일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 수학
- 코딩 테스트
- transformer
- HTTP
- 데이터 분석
- 코딩 마스터스
- cheatsheet
- aice
- 기자단
- pandas
- KT 에이블스쿨
- deep learning
- k-digital
- 역행자
- 확률과 통계
- OOP
- associate
- 경제적 자유
- 국방부
- 코딩마스터스
- MAICON
- CS
- 국방AI경진대회
- 선형대수
- 미적분
- 해커톤
- 코딩테스트
- ai
- 글쓰기
- 머신러닝
- Today
- Total
처음부터 시작하는 개발자
[대외활동] 2023 국방AI경진대회 (MAICON) 본선 후기 본문
2023 국방AI경진대회(MAICON)이 11월 29일 ~ 12월 1일까지 본선 대회가 진행되었고, 이에 참가한 회고를 남겨본다.
대회 개요
이제 올해로 2회차가 된 국방ai 경진대회는 1500명 선착순으로 대회참가 접수를 받는다. (https://maicon.kr/)
나는 이런 대회가 있는지도 몰랐는데, 우연히 광고로 메일에 떠서 신청하게 되었고, 지인들한테도 알려주었다.
그리고 참가신청한 대상자를 대상으로 10월에 elice 플랫폼으로 AI 지식 객관식과 간단한 머신러닝 구현문제가 나오는 예선을 응시했다.
예선은 3주동안 가능한 일요일을 골라서 2시간 동안 풀 수 있으므로 일정이 겹치거나 하는 문제는 없었다.
이 예선에서 군장병 부문 60명, 일반인 부문 60명을 선발하여 본선 대회를 연다. 다행히 예선은 무난하게 통과하였다.
선발된 뒤 4명이 모여 한 팀을 꾸려야하는데, 자유롭게 짤수 있다보니 지인들과 팀을 꾸렸다. 사실 본선만 진출하면 꾸려진 각 부문 별 15팀 중 7팀까지 수상하기 때문에 충분히 할만하다고 생각했다. 그리고 이렇게 짜여진 팀원들과 본선 전까지 매주 1회 스터디를 진행했다.
또한 본선 몇주 전, 부문별 문제유형을 공지해주었는데, 일반인 부분은 CV(동영상)였다.
AI 해커톤은 처음으로 참여하는 거라서 기대가 컸다.
처음 개회식 할때부터 화려한 불꽃 이펙트를 보여주는 것부터 뭔가 범상치 않았다.
대회 진행
본선은 대전 KT 인재개발원에서 진행되었다. 사실 대전에서도 오지여서 다른 사람들은 어떡하나 했는데 주최 측에서 버스를 제공해주었다.
대회에서 지원해준 버스를 타고 대상자들이 모두 도착하고 등록을 마치면 대회가 시작된다.
11월 29일에 13시에 개회식을 시작하여 14시쯤 대회진행에 관한 OT가 시작된 뒤, 12월 1일 9시까지 본선이 진행되었다.
강당에 모아두고 테이블마다 팀자리를 마련해두고 주어진 컴퓨터 및 서버(elice 플랫폼)를 이용해 문제를 푸는 방식이었다.
팀 한명에게는 윈도우 데스크탑 컴퓨터 (팀장님에게 양보), 나머지는 윈도우 노트북을 제공하고, 대회 진행 중 elice 플랫폼으로 서버에 접속하면 A100 (1++등급 GPU) 사용할 수 있는 주피터 환경을 사용할 수 있다.
대회를 진행하면서 강당 한켠에 누워서 쉴 수 있는 휴게실 (근데 항상 만원이라서 한번도 못 누워봄) 및 탕비실이 마련되어 있었다.
탕비실에는 아무리 먹어도 줄어들지 않는 음료수, 과자, 컵라면이 있어서 굉장히 좋았다.
밤에는 KT 인재개발원 숙소에서 잘 수 있었다. 다만 강당 입출입 시 출입기록을 적고 가야 했는데 부정행위 방지를 위한 것 같았다.
여담으로 대회 진행동안 복장의 통일성을 위해 대회에서 제공한 후리스를 입으라고 했다.
일반인 부문 문제는 딥페이크 영상판별 문제가 나왔다. 동영상에 사람이 나오는데 이게 AI로 조작된 영상인지 판별하면 된다. 사실 공지에서 베이스라인 코드를 제공해준다고 되어 있었는데, 딱 데이터만 제공해서 약간 당황했다. 그리고 첫날에 네트워크 장애가 터져서 더 당황했다.
대회 주요 규정은 지급된 컴퓨터로만 학습이 진행되어야 하고, 대회날 이전에 공개적으로 알려진 모델 소스코드와 사전학습모델의 가중치 사용을 허용했다. 단, 대회에서 제공되지 않은 데이터셋을 사용해 학습하는 것은 금지되어 있었다.
우리팀은 2대 2로 나누어 EDA 및 모델링을 진행하였다. 그런데 논문을 찾고 관련 소스코드를 사용하는 과정에서 굉장히 애로사항이 있었고, 결국 마지막날 구현이 완료되고 시간 부족으로 훈련을 조금씩 진행하다 성능을 많이 올리지 못하고 제출하고 말았다. 딱 우리 팀의 점수가 제대로 문제를 접근한 팀들 중 마지막에 있었다. (인간 baseline)
마무리 및 시상식
12월 1일 당일 9시까지 주피터 코드 및 발표 ppt 제출이 끝나고나면 10시에 다른 곳으로 이동해 발표평가를 진행한다.
사실 여기서 많은 인사이트를 얻을 수 있었는데, 다른 잘하는 팀들의 발표를 보고 대회에서는 어떻게 해야하는지 감을 많이 잡을 수 있었다.
특히 석박사이신 분들도 많고, 논문 형식으로 모델 성능평가표? (해당 처리task 수행여부에 따라 성능결과를 표로 표시)나 동영상에 맞는 트랜스포머 아키텍쳐를 직접 구현한다거나, 동영상을 라플라스 변환 한다던지 라는 것들은 나에게 격차를 느끼게 했다. 그래도 우리팀은 EDA에서 인사이트를 많이 찾았고, (시간부족으로 증강으로 연결되진 못함) 우리가 사용한 모델이 1등이 사용한 모델과 같은 것이었다는 것에서 뿌듯함을 느꼈다. (데이터셋 증강, 스케쥴러, 앙상블 등에서 차이가 있었을 뿐..)
그리고 점심에는 출장뷔페를 먹을 수 있었는데, 너무 늦게가서 인기있는 음식이 다 떨어졌다.
이후 시상결과를 발표하기 전에 경품추첨 이벤트를 했다. 본격적으로 추첨하기 전에 진행자가 스타벅스 5만원 상품권을 뿌렸다. 그 과정에서 제일 신기했던게 카톡친구 1800명.. 회사 임원인가 싶었다.
그리고 본격적인 추첨이 시작되었다. 상품이 어마어마 했다. 1등부터 5등까지 2명씩 뽑았는데, 3등 애플워치, 2등 VR기기, 1등이 아이패드 프로였다. 추첨숫자 뽑을 때 제곱수인 144가 눈에 띄어서 골랐는데, 바로 경품에 당첨되어 버렸다. 여기서 본선참가 본전뽑기 성공해버렸다.
시상식은 참가 귀빈들의 소개 이후 시작되었다. 이 대회는 국방부X과기부 콜라보로 진행되어 관련 고위 정부인사부터 군장성, AI분야 기업 대표도 많이 참석하셨는데, 이 분들이 수고스럽게도 모든 수상팀마다 따로따로 수상해주셨다. 상을 탄 팀들이 너무 부러웠다.
대회 소감
첫 ai 해커톤을 참여하다보니 부족한 점이 많고, 퍼포먼스도 충분히 발휘되지 못했다고 생각한다.
1. pytorch를 배우자 - 그동안 내가 배운 과정에서 tensorflow를 주로 사용해왔는데, 실제로 문제와 관련된 논문을 찾고 이 모델 아키텍쳐의 github 소스코드는 pytorch로 구현된 경우가 많았다. 결국 gpt를 사용해서 수정했는데, 기본적인 것들도 gpt로 찾아야하는것이 너무 비효율적이고, gpt 답이 맞는 것인지 판별을 못하다 보니 최종코드로 학습을 진행하는데 메모리 누수가 나서 주피터 커널이 계속 터졌다.
논문 github 소스코드도 버전이 안맞는다거나 설명과 실제 구현된 코드가 다른 경우가 너무 많아서(인간 할루시네이션) 가져와서 쓰기가 너무 힘들었다. 특히 유명하지 않은 학회에 제출된 것들은 신뢰도가 더 낮은 것 같다. 그래서 차라리 트랜스포머 같은 유명한 아키텍쳐들은 라이브러리로 편리하게 제공하니 논문만 읽고 pytorch로 그 아키텍쳐를 직접 모방해 구현하는게 훨씬 효율적이라는 생각이 들었다.
여담으로 AI 서비스를 제공할 때는 tensorflow가 편하고, 논문처럼 AI를 개발하고 개량할 때는 pytorch가 편하다는 것을 추후에 알았다.
2. 주어진 개발환경을 이해하자 - 사실 대회 측에서 서버측 자원은 한 개만 제공하는 것으로 공지되어 팀당 한명만 엘리스 주피터에 접근가능할 줄 알았는데, 실제로는 한명 당 별도로 모두 A100을 쓸 수 있었다. 잘하는 팀들은 모두 개별로 서버에서 작업하고 있는 것 같았다. 그래서 문제를 풀기 전에 정확히 어떤 자원들이 주어졌는지 확인하는게 필요할 것 같다.
3. 당황하지 말자 - 첫날에는 당장 문제를 풀기하려보다 관련 풀이전략 및 작업 파이프라인들을 구축하는게 훨씬 도움이 된다고 느낀다. 사실 스터디하면서도 이러한 얘기들이 있었는데, 막상 대회가 시작하니 모두 우왕좌왕해서 하나도 지켜지지 않았다. 결과적으로 시간이 부족해졌고, EDA에서 얻은 인사이트는 발표용 PPT에만 반영되는 등의 참사들이 일어났다.
* AI 대회에서 느낀 점 총 정리
1) 데이터 상시 저장 및 효율화 - 데이터셋을 .npy등의 효율적인 형태로 재처리하고, 학습을 하면서 얻은 가중치들도 꼼꼼히 저장한다. 대회를 진행하면서 모델이 학습을 위해 동영상을 cv2 라이브러리로 가공하는 과정이 있었는데, 여기에 걸리는 속도도 꽤 있었다. 그리고 중간 중간 커널이 종료되어 모델의 가중치가 날라가는 것을 막기 위해 학습 중간 중간마다 가중치 저장을 해두는 게 귀찮지만 꼭 필요하다.
2) SOTA 모델 집착금지 - paperswithcode(https://paperswithcode.com/)에 기록된 것이 전부는 아니다. 컨펌된 논문들에 기록된 다른 모델과의 성능비교가 진짜다. 그리고 그들이 제공한 github 소스코드는 사실 의미 없을 수도 있다. (심지어 구라도 친다) 그리고 대회에서 제공하는 학습 데이터셋은 공개된 SOTA 모델이 사용한 것과 다르기 때문에 오히려 모델을 적당히 고르고 학습데이터 증강 및 스케쥴러, 앙상블 구성을 잘 조정하는 것이 성능이 더 좋을 수도 있다. 때문에 이러한 실험 파이프라인 구축을 위해 SOTA 모델을 당장 쓰려고 하려고 하는 것보다 쉬운 모델로 구축을 먼저 해두고 추후에 모델을 SOTA 모델로 갈아끼우는거나 하는 식의 접근이 나은 것 같다.
3) Wandb 사용(https://wandb.ai/site) : AI를 일종의 버전관리 해주는 시스템인데, 딥러닝 계의 AutoML이라고 볼 수 있다.
다양한 하이퍼파라미터 사용했을 때에 대한 자동 실험 및 성능 및 기록, 시각화를 쉽게 할 수 있다. 이를 통해 자동으로 다양한 파라미터에 대한 실험을 진행할 수 도 있고, 실험결과를 보고 다른 사람과 작업이 겹치는 것을 피하고, 인사이트를 얻을 수 있다.
4) 과정에는 근거가 있어야 한다. - 내가 무엇을 하고 있는 것인지 항상 인지하고 왜 그래야하는지 이해하는 것이 필요하다.
* EDA 과정에서 학습 데이터셋에서 딥페이크로 분류된 영상길이가 원본으로 분류된 영상보다 평균적으로 두배 길다는 사실을 발견했다. 심지어 특정 길이를 넘어가는 동영상은 모두 딥페이크였다. 그런데 이 정보가 실제로 딥페이크 여부를 구분하는 기준이 될 수 있을까?
* 딥페이크 영상판별 모델에 가우시안 블러(흐릿한 처리)를 사용해 학습 데이터셋 증강을 하면 모델의 성능 향상에 도움을 줄까? 증강을 한다고 항상 모델 성능 향상에 도움이 되는 것은 아니다. 왜?
사실 데이콘에서 머신러닝 대회만 참여해보다가 처음으로 딥러닝을 사용하는 대회를 참여하면서 AI에 대해 더 많은 인사이트를 얻을 수 있었다. 특히 지인들로 팀을 꾸려 참여하는 것보다 진짜 잘하는 사람들을 만나서 새로운 인맥도 쌓고 관련 지식을 얻는 것이 대회를 좀 더 알차게 활용하는 방법일 수도 있다. (버스기사님의 운전실력으로 인한 편안한 승차감)
내가 얻은 것 : AI 인사이트, 인맥, 간식, 후리스, 애플워치