작년 군대에서 뭐라도 해보자! 하고 시작했던 작년 Data Creator Camp 2022 대회에서부터 이어져온 Computer Vision과의 인연이 드디어 성과를 내었다.
성격상 결과가 없으면 그 과정을 무시하는 성향이 강한 결과중심적(극T) 성격이고, 군 생활동안 이룬 이렇다할 결과와 경력이 없었기 때문에 군인으로써 마지막 대회였던 이번 대회에 더욱 노력을 쏟았다.
그렇게 해서 참여하게 된 대회는 제 5회 2023 공군 창의∙혁신 아이디어 공모 해커톤이었다.
이 대회는 대한민국 공군, IBK 기업은행, KT, 대전창조경제혁신센터, 한국청년기업가정신재한 주최/주관이고 ETRI(한국전자통신연구원), 소프트웨어교육혁신센터, 전자신문, KSCI(한국컴퓨터정보학회), 중소기업기술정보진흥원에서 후원한 대회이다. 공군 내 대회 치고는 아주 큰 대회이다.
사실 작년 2022년에 제 4회 대회도 참가했었는데 과거 4회차 동안의 대회는 아이디어 공모전의 성격이 컸다. 팀별로 공군의 스마트비행단 구축에 도움이 될만한 주제를 선정하고 이를 기획하고 구체화하는 대회였다. (공군을 위한 아이디어 기획 공모전이라고 생각하면 된다)
하지만, 이번 5회 해커톤 대회는 몇 가지 변경점이 있었다. 먼저, 두 가지 부문이 추가되었다.
첫 번째로, 지정된 주제 중 1가지를 택하여 아이디어를 개발하고 구체화하는 "지정공모".
두 번째로, 인공지능 공모전인 "AI프로그램"이 올해 새롭게 추가되었다. (자유공모, 지정공모, AI프로그램까지 총 3종)
AI프로그램은 일반적인 인공지능 공모전(캐글, 데이콘에서 진행되는 대회들)과 거의 비슷한 대회 방식을 따른다.
작년부터 Computer Vision 분야로 여러 대회를 참가했던 나는 팀원을 모아 참가를 결정했다. AI프로그램 이외의 지정공모와 자유공모의 경우 누구나 참가가 가능하지만 AI프로그램은 공군에 복무중인 군장병만 지원이 가능했다.
매 대회가 그랬듯 처음 대회에 참가를 결심한 목적은 당연하게도 수상은 아니었고(그 정도 실력도 없었기에 기대도 안했다), 인공지능에 대해 더 공부하고 싶었던 마음이 컸다. 경험상 혼자 공부하는 것보다 대회나 프로젝트에 참가하며 데드라인과 동기부여가 제공된 상태로 배우는 것이 더 효과적으로 학습할 수 있었기 때문이다.
(사실 전역이 약 6개월 정도 남은 시점에서 군 생활동안 아무 성과 없이 마무리하기는 싫었던 마음 영향이 가장 컸던 것 같다)
대회 일정
AI프로그램의 대회 일정은 다음과 같다. (공지된 일정에서 몇몇 일정은 변경이 있었음)
- 대회 접수 : 4/3(월) ~ 4/14(금) 12:00
- 사전 평가 : 4/26(수) ~ 4/27(목)
- 사전 평가 결과 공개 : 4/28(금) 12:00
- 사전 교육 : 5/9(화) 13:30 ~ 14:30
- 예선 경연 1차 : 5/15(월) 09:00 ~ 5/19(금) 12:00
- 예선 경연 2차 : 5/22(월) 09:00 ~ 5/26(금) 12:00
- 예선 경연 리더보드(결과) 공개 : 5/31(수)
- 예선 발표자료 제출 마감일 : 6/2(금) 12:00
- 예선 발표 평가 : 6/8(목) 10:00 ~ 16:00
- 본선 경연 : 7/3(월) 09:00 ~ 7/28(금) 12:00
- 본선 발표자료 제출 마감일 : 7/10(목) 12:00
- 본선 발표 평가 : 8/17(목) 10:00 ~ 16:00
- 최종 결과 공개 : 8/22(화) 17:00
- 시상식 : 10월 ~ 11월 중 (예정)
대회 접수
기존 대회의 경우 인터넷을 통해 공모전 접수를 진행하였지만, AI프로그램의 경우 공군 장병만 참가가 가능하기 때문에 공군 내부망(인트라넷) 이메일 또는 문서로 접수를 하였다.
부서 간부님들을 통해 공군 해커톤에 AI부문이 신설되었다는 소식을 듣고 참가를 고민하고 있었다. 이미 작년에 인공지능 공모전을 2회 참가했었고 크게 데였기에(두 대회 모두 예선 탈락했다...) 참가가 많이 꺼려졌다.
하지만, 위에서 서술하였듯 마지막으로 한 번만 더 해보자는 마음으로 참가를 결심했고, 고등학교 동창 친구(835기)와 후임(837기), 부서 후임(845기)와 함께 참가를 결정했다. (대회 접수 마감 10분전에 결정해서 메일을 급하게 보냈다) 참고로 필자는 공군 병 834기이다.
잘 모르시는 대부분의 독자들을 위해 후술하자면, 공군은 2022년부터 1년에 10기수를 선발하며, 필자는 2022년 1월 군번이었다. 따라서, 835기는 22년 2월, 37기는 22년 4월 군번이다.
군대 대회 답게 최선임기수인 필자가 자연스럽게 팀장이 되었다. (접수 시 따로 팀장을 적는 부분이 없는 것으로 보아 대회측에서 최선임자를 팀장으로 임명하는 듯 하다)
공군 해커톤의 경우 기존 1팀 4명만 참가가 가능했지만, 올해부터 1팀당 1명 ~ 4명까지 참가가 가능하다고 한다. 아마 내년 대회도 여기서 크게 달라지지는 않을 것으로 생각한다.
사전 평가
작년에 참가했던 국방AI경진대회와 같이 예선 참가팀을 선발하기 위해 사전 평가를 진행했다. 사전 평가는 기본 코딩과 알고리즘 실력을 기반으로 한 코딩테스트로 진행되었다. 사실 AI공모전 대회에서 코딩테스트를 통한 참가자 선발은 거의 없다고 알고 있지만 군에서 진행하는 대회이고, 참가자를 대상으로 GPU 서버를 제공해주기 때문에 한정된 자원과 군의 특수한 환경으로 사전 평가를 통한 예선 진출팀 선발 과정은 필요했다고 생각한다.
사전 평가 참가팀은 대략 60몇팀이라고 듣긴 했으나 정확하지는 않다. 이 팀들 중 사전 평가인 코딩테스트 점수로 예선 참가팀 24팀을 선발한다.
사전 평가는 오프라인으로 공군 7전대에서 진행되었다. 4월 26일과 27일 양일간 오전, 오후로 나누어 진행되었다. 기억하기론 한 타임당 약 열 몇 팀 정도 진행했던 것으로 기억한다.
필자가 복무하였던 공군 7전대의 경우 작년 국방부 AI 사업의 일환으로 진행되었던, 기업과의 자매결연 중 공군에서는 유일하게 공군 7전대가 선정되어 AI교육 시범부대로 선정되어 운영되고 있었기 때문이다.
위 사업으로 작년, 우리 부대에 약 60명이 동시에 교육이 가능한 수준의 AI교육장 2곳이 신설되었다. 군대에서 접하기 힘든 스터디카페처럼 생긴 공간에 자유롭게 사용이 가능한 60대의 노트북과 전용 인터넷 네트워크가 구축되었다. (시설 좋은 사이버지식정보방이라고 생각하면 된다) 병사들은 일과 시간 내 자유롭게 교육장을 이용해 AI 공부를 할 수 있다.
여튼, 우리 부대 AI교육장에서 오프라인으로 코딩테스트를 진행하게 되었다. 참가팀들을 대상으로 희망 날짜와 시간(오전, 오후)를 받고 배정을 해주었다. 우리 팀은 26일 수요일 오전에 시험을 보게 되었다.
시험은 교육장 내에 1팀당 노트북 1대를 주고, A4용지와 볼펜을 지급해주었다. 코딩 테스트는 프로그래머스 사이트를 이용하여 진행이 되었는데 따로 별도의 IDE를 사용하거나 검색은 불가능하였다. 문제는 총 2문제로 1시간 내에 풀어 제출해야 했다.
a. 첫 번째 문제
첫 번째 문제는 조합(Combination)과 관련된 문제로, 조합에 대한 수식만 알면 정말 간단히 풀 수 있는 문제였다. 백준 기준 브론즈 I ~ 실버 V 정도 문제였다. 우리 팀에 서울대 후임이 있었기에 10초만에 문제를 풀고 넘어갈 수 있었다. (솔직히 말하자면 필자 혼자였다면 수식이 기억이 안나서 푸는데 시간이 조금 더 걸렸을 수도 있었을 것 같다)
b. 두 번째 문제
두 번째 문제는 구현 + Greedy + 수학 + DP 정도로 분류할 수 있는 백준 기준 골드 V~IV 정도로 분류할 수 있는 문제였다. 아마 코딩을 많이 해보지 않았거나 백준 문제를 접한 적이 없다면 풀기 어려운 정도. 구현쪽 문제를 몇 번 풀어봤고 알고리즘에 익숙하다면 어느정도는 풀만 했던 문제이다. 조건이 복잡해보이지만 차근차근 따라가며 구현하면 금방 구현이 가능했고, 예외 처리도 복잡하지는 않았다.
문제는 정확히 기억이 나지는 않지만, 마트에 가격이 매겨진 여러 물건이 있고 매장별로 가격이 다르다. 이때, 가격이 최저가가 아니라면 최저가 보상제를 통해 차액을 보상해준다. 이를 이용해서 물건을 어떠한 순서대로 구매하고, 보상을 받아가며 돈을 모은다. 이때, 정해진 예산과 횟수를 통해 조합해 최종적으로 구매할 수 있는 가장 비싼 물건을 도출하는 문제였다.
예를 들어, 보유 금액이 5,000원이고 살 수 있는 물건이 두 가지라고 하면
- 1번 물건 가격 2,000원, 차액 1,000원
- 2번 물건 가격 4,000원, 차액 1,500원
과 같다고 하자.
1번 물건을 구매한다면 5,000 - 2,000 + 1,000 = 4,000원이 잔고가 되고
2번 물건을 구매한다면 5,000 - 4,000 + 1,500 = 2,500원이 잔고가 된다. 딱 보아도 어떤 물건을 구매해야 할지 눈에 보이지 않는가?
이러한 간단한 규칙을 파악한다면 구현을 통해 쉽게 풀 수 있는 문제였다.
하지만 그 때의 필자는 알고리즘 공부를 그만둔지 오래되었던 터라 문제를 푸는데 꽤나 오래걸렸다. 문제의 조건이 꽤나 복잡해 이해하는데 시간을 쓰기도 했고, 팀원이 4명이었다보니 토의하며 시간을 조금 낭비했다. 마음을 가다듬고 천천히 단계를 따라가며 최종적으로 문제를 solve는 했으나 시간복잡도 부분에서 조금 아쉬운 부분이 몇 가지 있었다. 예외 처리를 통해 시간 복잡도를 소폭 줄일 수 있었을 테지만 워낙 시간이 촉박했기에 문제를 solve했다는 것만으로도 만족했다. 문제는 위에서 간단히 설명했듯 구현과 Greedy 알고리즘을 통해서 풀었다.
사전 평가가 종료되고 강당에 모여 총괄하시는 분께서 난이도를 물어보셨는데 (필자 팀이 참가한 파트가 첫 날 오전 시간대로, 첫 번째 파트였다) 대부분의 참가자가 쉽다고 하였다. 아마 2문제 중 1.5솔 이상은 해야 예선에 합격할 수 있는 것으로 추정한다. (1번 문제는 수식만 알면 너무 쉽게 풀 수 있던 문제고, 코딩과 알고리즘 문제를 조금 풀어봤다면 2번째 문제도 대부분의 케이스는 맞을 수 있을 것으로 생각한다)
다음날 예선 참가팀 명단이 공개되었고, 합격하여 본격적으로 참가하게 되었다. 예선에 참가할 24팀을 대상으로 5/9 오후에 사전 교육을 진행하였다. 전반적인 대회 진행 방식과 부정행위, 코드 제출 방법 등에 대하여 간략히 설명을 들었다.
대회 진행 방식
경연 이야기를 시작하기 전에 간략히 공군 해커톤 대회 진행 방식에 대해서 설명하겠다. 아래 진행 방식을 염두하고 글을 읽으신다면 더 이해가 잘 될 것이니 참고 바란다.
공군 해커톤도 Kaggle이나 Dacon에서 진행되는 여느 인공지능 경진대회와 거의 비슷하게 진행되었다. 문제와 데이터셋을 제공해주고, 평가 metric으로 채점을 해서 가장 높은 점수를 제출하는 팀이 우승하는 방식이다. 이때, 모두에게 공개된 리더보드가 존재하는데 Public Score와 Private Score로 분류되어 있고 제출은 1시간마다 1회 가능하다. Public Score는 제출 시마다 업데이트되고 실시간으로 상대팀의 점수를 확인할 수 있다. Private Score는 경연이 종료된 뒤에 최종적으로 제출된 모델에 대하여 공개된다. 최종 순위는 Public Score 40% + Private Score 60%로 합산하여 산출된다.
예선과 본선 경연의 문제가 완전히 달랐기 때문에 세부적인 차이점과 방식에 대해서는 아래에서 따로 언급하도록 하고, 전반적인 대회의 특징과 일반적인 대회와의 차이점을 설명하겠다.
a. 군내부망에서 대회 진행
먼저, 가장 큰 차이점은 군 내부망(인트라넷)에서 대회가 진행된다는 점이다. 별거 아니라고 생각할 수도 있겠지만, 군내망은 보안이 매우 철저해서 어떤 자료를 반입할 때도 전부 승인을 거쳐 반입해야 한다. 반대로 자료 반출은 보안담당자의 결재를 받아야 하기에 거의 불가능하다고 보면 된다.
위 특성으로 인하여 대회 진행 간 제한사항이 많았다. 먼저, 필요한 Python 패키지와 라이브러리를 자유롭게 다운로드 받을 수 없었다. (인터넷이라면 PyPI를 사용하여 순식간에 다운로드가 가능했겠지만...) 대회 시작 후 며칠간 요청을 받아서 기존 환경과의 의존성(dependency)을 검토한 후에 한 번에 반입을 해주었다. 따라서, 대회 초반에 문제를 분석하고 모델을 선정한 다음 빠르게 라이브러리 반입 신청을 하는 것도 하나의 중요한 포인트였다. 또한, 같은 사유로 모델 코드 반입도 불가하여 제공된 모델을 사용해야 했다. 오히려 모델 선택권이 줄어들어 모델 선정 이외의 포인트에 더 집중해야 했다.
b. 학습 환경 제공
다음으론 학습 환경(Environment) 제공이다. 대회측에서 GPU와 함께 구축된 환경을 제공해주었는데 그 환경을 그대로 사용해야 했다. 이 점은 어떻게 보면 장점도, 단점도 될 수 있는데 처음부터 환경을 구축하지 않고도 바로 학습을 시작할 수 있는 상태라 짧은 대회 기간이었음에도 모델 선정과 학습에 더욱 집중할 수 있었다. (인공지능 공모전 경험 상 환경 구축 또한 아주 큰 걸림돌이라고 생각하기에, 개인적으로 큰 장점이라고 생각한다) 또한, 이러한 상황 때문에 모든 팀에게 동일한 환경을 제공한 것 같다. 만약 어느 팀에서 구축된 환경의 패키지 의존성(Dependency)가 깨지게 된다면 환경 복원 빼고는 답이 없기 때문에... 라이브러리 반입 또한 점검을 통해 제공해준게 아닌가 생각한다.
c. GPU 지원
대회 기간 중 대회 측에서 GPU를 지원해주었다. 공군에서 보유하고 있는 인공지능 학습용 GPU 서버가 군내부망용이므로 대회가 군내부망에서 진행된 것 같다. 예선, 본선 기간 중 1팀당 TESLA A100 GPU(VRAM 80GB)의 1/8을 할당해주었다. 즉, 1팀당 VRAM 10GB를 사용할 수 있었다. 대회가 Computer Vision과 이미지 처리가 주제였기 때문에 데이터가 이미지이고, 따라서 학습용 데이터 용량이 매우 컸다. 10GB로는 부족하기는 했지만 (Batch Size를 1에서 커봤자 4 정도가 최대였다) GPU를 제공해주고 모든 팀이 동등한 상황이라서 큰 불만은 없었다. 인공지능 대회에서 각 팀에서 사용하는 GPU의 성능과 개수에 따라 편차가 매우 크게 나타나는데, 모든 팀이 공평한 상황에서 경쟁할 수 있는 것은 어떻게 보면 좋은 특성이라고 생각한다.
(필자는 학부연구생으로 참여중인 연구실에서 RTX3070, GTX1080과 같은 GPU 서버 여러 대를 사용할 수 있기는 했다)
이외의 RAM, CPU 등의 스펙은 잘 기억이 나지 않는다.
d. 군 대회 특성
마지막으로, 이 대회에 참가하지 않았다면 알기 어려운 특징이다. 아마 군필자들이라면 공감할 것이다.
이 대회는 군내에서 진행하는 대회인만큼 어쩔 수 없이 불편한 점도 조금 있었다. 몇 가지를 뽑아보자면 대회 참가 여건 보장, 한정된 시간과 소통 오류로 뽑을 수 있겠다.
먼저, 대회 참가 여건 보장에 대한 이야기인데 군대는 사실 국방의 의무가 최우선인 곳이고 군인은 그 국방의 의무를 다해야 한다. 즉, 대회에 100% 시간과 노력을 투자할 수는 없다. 학생의 경우 시험 기간이 아니거나 방학때 하루종일 대회에 투자할 수 있는 반면 군인은 불가능하다. 아무리 상부에서 대회 참가 여건을 보장해주라고 하여도 군인마다, 부서마다 본연의 업무가 분명히 존재하고, 특히 병사의 입장에서는 업무를 제치고 대회에 올인하기는 힘들다. (이는 간부도 마찬가지라고 생각한다) 그래서 팀원 중 한 명은 부대 내 작업과 훈련 준비 등으로 인해 거의 대회 참가가 불가능하였다. 공군은 부대/부서마다 업무 강도와 시간이 천차만별이다. 어떤 부서는 (조금 과장하자면) 출근하자마자 일을 5분만에 끝내고 일과 내내 노는 부서가 있는 반면, 계속해서 작업과 업무가 주어져 일과 시간 중 자유시간이 거의 없는 부서도 있다. 또한, 교대근무 혹은 조리병의 경우 시간이 불규칙하다는 단점도 있다. 따라서, 관점에 따라 상당히 불공정한 상황이라고 생각이 들기도 하였다.
또한, 군내부망에서 진행되기에 1인당 PC 1대(IP)를 지정하였는데, 따라서 지정된 PC에서만 대회 진행이 가능하였다.(서버에 접속할 수 있는 관리 사이트에 허용된 IP만 접근이 가능하다)
병사의 경우 일과시간인 08:30 ~ 21:30까지만 사무실에 있을 수 있다. (원칙 상 일과 후에 사무실에 병사가 혼자 있는 것도 안된다) 따라서 밤에서부터 새벽 시간을 사용하기가 어려웠다. 필자는 3조 2교대를 도는 교대근무였기 때문에 사무실에 간부님께서 항상 상주하고 계셨고, 3일마다 하루씩 야간근무에 들어갔기에 다른 팀보다 시간을 조금 더 활용할 수가 있었다.
병사로써 대회에 참가하기 위해서 원칙적으로 불가능한 상황들이 많아 타 팀이나 타 부대에서는 더욱 시간을 활용하기가 어렵지 않을까 생각한다.
특히, 병사는 일과 중 휴대폰을 소지할 수 없다. (공군의 경우 18:00 ~ 21:30까지 휴대폰을 사용할 수 있다) 하지만, 대회를 운영하는 주최 간부들은 08:30 ~ 17:30까지 근무를 하기에 대부분의 공지와 질의응답, 소통 등은 일과 시간 중에 이루어졌다는 점이다. 필자는 교대근무자였기에 근무가 없는 날은 휴대폰을 12:00부터 사용할 수 있었음에도 사소한 불편함을 많이 느꼈는데, 다른 병사들은 더욱 답답했을 것이다.
하지만, 필자가 근무했던 사무실과 소속 부서 간부님들께서는 불편을 감수하고서라도 최선을 다해서 대회 여건을 보장해주려고 노력해주셨다. 물론, 필자도 무리하게 업무를 제쳐가며 대회를 하지 않았지만 돌이켜보면 직업 군인인 간부 입장에서 불편하다고 느낀 점이 다소 있었을 수도 있겠다는 생각이 들었다. 이 자리를 빌려 필자를 응원해주고 도와주고, 참여 여건을 마련해주고, 마치 내 일처럼 기뻐해주신 간부님들께 진심으로 감사하다는 말씀을 올린다.
필자는 이제 전역해 공군을 떠났지만, 아마 내년 그리고 내후년에도 이 대회는 계속 이어져나갈 것이다. 물론, 공무원 특성 상 매년 대회를 담당하고 주최하는 담당자들은 바뀌겠지만, 그래도 매년 아쉬웠던 점과 불편했던 점 등을 계속해서 고쳐나가며 발전해가는 공군 해커톤 대회가 되기를 바란다.
정리하자면, 공군에서 보유중인 GPU서버를 대회에서 사용하고, 이로 인해 군내부망에서 대회를 진행하였다. 이에 따라 인터넷을 사용할 수 없는 상황이라 자유롭게 Python 패키지와 기타 모델들을 사용하기가 어려웠던 상황이었다.
글이 너무 길어졌기에 예선 경연 및 발표, 본선 경연 및 발표는 다음 글에 이어서 작성하도록 하겠다.
긴 글을 읽어주신 모든 분들께 감사의 인사를 전한다.