0. 이 페이지의 목적
우선 이 페이지에 담긴 내용의 목적을 명확히 하고자 합니다.
나 자신을 소개하는 글, (취업을 고려한다면) 내 경력과 경험을 어필하는 글, 후배들에게 영감이 될 수 있는 나의 소개… 이 모든 목적들이 혼합이 되어 포트폴리오도 아니고, 경력설명서도 아니고, 일기도 아닌 이도저도 아닌 글이던 시간이 꽤 길었습니다. 자기소개는 이렇게 해야 한다더라, 경력은 저렇게 어필해야 한다더라를 접할 때마다 자잘하게 수정하다 보니 누더기가 된 것입니다. 이제 이 글은 제가 어떤 업을 어떤 생각으로 했는지, 무엇을 배웠는지 담담하게 돌아보고, 서로 어떻게 영향을 주었는지에 대한 담담히 설명하는 역할만을 도맡습니다. 여기서 업이란 일, 프로젝트, 참여했던 단체, 출판물 등 이 사회에서 1인분을 하며 살아가기 위한 흔적이라면 그 무엇이든 될 수 있습니다.
방문자들이 제 블로그에서 가장 오래 체류하는 페이지이긴 하지만, 이 페이지의 제1독자는 저 자신임도 명확히 합니다. 종종 심신이 지칠 때면 조바심이 발동해 내가 걸어온 길을 부정적으로 바라보곤 합니다. 그런데 ‘Connecting the dots’ 라는 말이 시사하듯, 내가 업을 찾기 위해 걸어온 길이 절대 아무런 연관성이 없지 않음을 발견할 때 다시 조금이나마 힘을 얻곤 하는 것 같습니다. 제 이야기가 길게 펼쳐진 이 페이지의 내용을 읽으시는 제2독자 여러분도 ‘아 이 사람은 이때 이런 고민을 했고, 그래서 이런 일을 했구나! 이런 일로부터 영감을 받았구나!’를 이해할 수 있다면 이 글은 포트폴리오, 경력설명서, 일기 그 무엇도 아니더라도 제 할일을 과분히 다했다고 생각합니다.
1. 일
이곳이 내 집이다
AI 개발팀 / 공군 IT개발관리병
24.11~26.08
작성 후보
IT로 문제를 해결하는 유튜브 채널
느슨한 연대 공동체 CREW
24.02~
작성 후보
개인이 모여 시너지를 내는 조직
느슨한 연대 공동체 CREW
23.07~24.12
작성 후보
네이버는 어떤 사람들이 모여 어떻게 일할까
연구개발인턴 / 네이버 클라우드
24.01~24.07
작성 후보
자율주행 공유킥보드 만들기
로보틱스 엔지니어
100만 회원 공유킥보드서비스 스타트업 ‘디어코퍼레이션’
20.07~22.04
•
엎드려뻗친 친구 피규어로 만들어버리기 프로젝트를 하는 계기가 됨
•
설거지 돕고 물절약 돕는 MLOps 싱크대 프로젝트를 하는 계기가 됨
문제:
공유킥보드는 사회적으로 부정적인 영향을 많이 미쳤습니다. 공유킥보드 서비스를 제공하는 디어는 불법주차 문제, 수요공급 불균형 문제 등의 문제를 가장 똑똑하게 해결하는 방법은 자율주행이라고 생각했습니다. 이외에도 왜 자율주행을 개발하고자 했는지 더 궁금하면 글 “
공유 킥보드 회사에서 자율주행을 개발하고 자빠진 이유” 을 살펴보세요.
성과:
디어 자율주행팀은 사람 도움 없이 약 1km 를 주행할 수 있는 자율주행 킥보드 시스템을 만들었습니다. 기술적으로 시스템은 Jetson Xaiver AGX이라는 소형 GPU 컴퓨터와 ROS라는 로봇 운영체제를 기반으로 동작했습니다. 저는 인지(Perception) 시스템을 맡았습니다. 당시 자율주행 문제의 커다란 골조는 정밀지도 기반 vs 실시간 인지 기반이었습니다. 저는 정밀지도 기반의 주행이 아니라 실시간 영상처리 기반의 주행으로 방향성을 잡았는데, 큰길을 다니는 자율주행차와 달리 라스트 마일 주행을 도맡는 킥보드 특성상 가림(Occlusion) 같은 변수가 많고 정밀지도의 변화가 빈번하기 때문입니다.
기술적으로 재미있는 기여 중 하나는 점자블록을 활용하는 아이디어였습니다. 로봇의 측위는 일반적으로 가속도계, 바퀴의 회전수, 우리가 흔히 말하는 GPS 신호라는 것을 통해 이루어집니다. 문제는 킥보드가 지도의 목적지로 향하고자 하는 방향에 비해 핸들이 얼마나 회전해 있는지를 측정할 방법이 가속도계밖에 없다는 점이었습니다. 가속도계에는 미세한 오차가 있는데 그 오차는 정말 눈덩이처럼 불어나 몇 분만 지나도 절대적인 핸들 회전량을 확인하기 어려워집니다. 그래서 가속도계의 정보를 보정할 시각 신호가 필요했습니다. 저는 점자블록이 도로의 방향을 잘 나타내는 강력한 힌트임을 발견했고, 간단한 사영기하를 적용하여 킥보드의 회전 방향을 지도와 비교하여 목적지를 찾아낼 수 있었습니다.
기술적 기여를 넘어 가장 잘했다고 생각하는 일 중 하나는 단순히 자율주행을 만들어 문제를 해결하고자 하는 팀 방향성을 되짚었다는 점입니다. 잘 생각해 보면, 꼭 앞서 언급한 공유킥보드 시장의 문제들을 자율주행이라는 기술로 풀어야 할 필요가 없습니다. 가령 원격제어 기술만으로도 킥보드 재배치 문제는 충분히 해결할 수 있습니다. 한편 자율주행 기술이든 원격제어 기술이든, 성공적으로 개발을 마치더라도 이미 배치가 완료된 킥보드에는 기술을 적용하기 어렵기 때문에, 비즈니스 가치가 만들어지는 순간은 원격제어 기능이 탑재된 새로운 킥보드들이 배치된 이후라는 점도 고려해야 합니다.
저는 기술이 만드는 가치가 얼마나 큰지 정량적으로 가늠할 수 있는 모델을 제안하고, 우리가 직접 기술을 개발하여 잠재적으로 만들 수 있는 가치가 초기 손실을 회복하는 데 얼마의 시간이 걸릴지 가늠할 수 있도록 추상적인 틀을 제공했습니다. 자율주행 킥보드를 만들기 위해서는 한국의 그 어떤 로보틱스 기업들보다 압도적으로 라스트 마일을 오가는 기기(Fleet)가 많다는 강점을 살려, 원격제어 기능을 탑재한 킥보드를 배포하여 도시를 배회하며 동영상을 수집할 수 있도록 해야 하며, 이 동영상들로 4D 가상 공간을 모델링하고, 이를 기반으로 자율주행 모델 학습을 위한 데이터를 수집해야 한다는 방향성을 제시했습니다.
배움:
기술적으로는 TensorFlow 모델을 가성비 좋은 TPU에서 학습시켜볼 수 있었습니다. 데이터-실험-모델-배포 전 과정은 너무 복잡했기 때문에 MLOps에 대한 이해의 필요성을 느꼈습니다. 앞서 설명한 ‘원격제어 → 데이터수집 → 자율주행 구축’은 작은 기업이 어떻게 Autonomy 2.0를 구현할 수 있을까에 대한 고민의 결과이기도 했습니다. 자율주행 구현은 이미지 한장한장 받아 처리하는 2D비전 기술만으로는 부족하고 시간축을 결합하거나 공간을 생성하는 일이 필요하다고 느꼈습니다. 한편으로는 한방에 갈 수 있는 길과 갈 수 없는 길을 판단해 버리는 인간과 달리, AI 모델을 학습시키기 위해 이렇게 많은 데이터가 필요한 이유가 무엇일까 하는 의구심을 가지게 되었습니다. 어쨌든 현재 딥러닝 기반의 자율주행 시스템 구축을 위해서는 머신러닝 파이프라인에 대한 고도의 이해가 필요함을 느꼈고, MLOps에 대해 관심갖는 계기가 되었습니다. 더불어 기술을 이용한 문제해결 역량뿐 아니라, 올바르게 문제를 정의하고 타당성을 따져 보는 작업의 중요성에 대해서 뼈에 새길 수 있는 시간이었습니다.
칵테일로 소주 치기
Co-Founder, PO
스타트업 ‘헬로콕’
20.05~21.11
•
IT로 문제를 해결하는 유튜브 채널에서 마케팅 첫 번째 퍼널인 유튜브에 뛰어든 이유가 됨
•
•
IT로 문제를 해결하는 유튜브 채널이 내가 잘 아는 도메인의 문제해결에 집중하는 계기가 됨
문제:
헬로콕은 소주 대신 칵테일을 먹는 문화를 전파하는 것을 비전으로 한 스타트업입니다. 어디서든 칵테일을 말아먹을 수 있는 키트를 판매했습니다. 우리 팀은 아무것도 몰랐습니다. 모든 팀원이 칵테일이라는 음료가 무엇인지도 잘 몰랐고, 음료 상품의 라이프사이클도 몰랐고, F&B 관련 법과 생태계도 몰랐기 때문입니다. 재미있는 예를 들면, 와인앤모어(소매장)에서 구입한 술을 나의 칵테일바(소매장)에서 팔면 유통구조 위반으로 불법입니다. 이외에도 수입주류는 법적으로 온라인 광고 및 판매가 어렵다는 것, 주류 배달의 경우에도 배달주문가격의 50%가 넘지 않는 선에서만 가능하다는 것도 몰랐습니다. 예비창업패키지를 받고 MVP까지 만들고서야 하나씩 발견되는 도메인 문제를 극복해 보고자, 칵테일 키트를 한강공원에 들고 가 사람들에게 팔아 보며 반응을 살피고, 보험 영업팀에 선물용품으로 납품도 시도해 보고, 창고를 쇼룸으로 사용하여 칵테일 바를 만들어 제품을 알리려는 등 오프라인 채널을 통한 홍보를 시도하기도 했습니다.
보험영업팀에 제품을 넘겼을 때의 해프닝이 떠오릅니다. 여름철 직접 음료를 소분하여 보험 영업팀에 판매한 칵테일 키트들이 하루만에 전량 산패되며 가스가 발생해 음료를 담은 공병이 모두 터져 버렸고, 보험 영업팀에 찾아가 이것들을 직접 리콜하는 아찔한 사태가 일어났습니다. 알고보니 음료 소분 작업은 굉장히 난이도가 높은 작업이었습니다. 소분 중 공기와 접촉하면 굉장히 빠르게 음료가 산패되는데, 이 문제가 바로 위생법의 등장 배경이었던 것입니다. 그렇다고 딱 맞는 용량의 완제품을 사용할수도 없었습니다. 완제품은 미관상 미울뿐더러 ml당 단가가 많게는 5배 이상 비싸기 때문입니다.
이 소분 및 음료 산패 문제를 해결한다고 하더라도, 주류는 온라인 홍보와 택배배송이 불가능하기 때문에 한강에 키트를 싣고 가 사람들에게 키트를 팔아보며 좋은 반응을 얻어 보려고 했던 것입니다. 하지만 탁 트인 공간에서 이 돗자리 저 돗자리 배회하며 사람들에게 싸늘히 거절당하는 경험은 3일 이상 지속하기 어려운 경험이었습니다. 쇼룸도 마찬가지였습니다. 생각보다 반응이 좋았던 쇼룸에 오픈 후 5개 팀이 다녀갔지만 칵테일 키트는 단 한개도 판매되지 않았습니다.
보험팀 실패, 한강공원 실패, 쇼룸을 통한 판매 실패로 팀의 분위기는 우울했고, 사무실에서는 항상 ‘잠재고객들이 우리 제품을 구매하지 않는다’를 불평했습니다. 벌써 예비창업패키지를 통과하고 사업기간의 절반이 흘렀는데, 무언가를 열심히 하긴 하지만 칵테일 키트가 팔리지 않는 지옥에 빠졌습니다. 하지만 우리는 꽤 오랫동안 그 문제의 원인을 통쾌히 진단하지 못한 채 방황하는 시간이 길었습니다.
성과와 배움:
판매부진을 극복하는 가장 큰 매출 변화를 가져왔던 순간은 마케팅 퍼널에 대한 인식이었습니다. 잘 생각해 보면 한강공원과 쇼룸 도합해봐야 총 80명도 안 되는 사람들에게 우리 제품을 보여주었을 뿐입니다. 그나마 첫 반응이 좋았던 보험 영업팀 60명에게 보여준 모습은 산패돼 엉망이 된 칵테일 키트고, 한강 공원의 사람들은 애초에 음료를 준비해온 사람들이기 때문에 지불용의가 없을뿐더러, 칵테일 키트를 보여주며 효과적으로 어필할 시간도 부족했습니다. 좋은 제품도 100명에게 노출시켰을 때 4명이 살까 말까라는데, 적절하지도 않은 50명에게 키트를 보여줘 놓고 반응이 없다고 서운해했던 것입니다.
우리는 지불용의가 있는 고객들에게 제품을 충분히 많이 노출하는 것이 중요할지도 모르겠다는 생각이 들었습니다. ‘충분히 많은 잠재고객들에게 우리 제품을 보여주지 못했다’ 로 문제를 다시 정의하는 순간이었습니다.
팀은 알콜 칵테일키트를 포기하고 논알콜 키트로 피벗합니다. 소분이나 온라인 홍보 문제로부터 자유로워져 세일즈 퍼널을 파기 위함이었습니다. 이때부터 개발자는 퍼포먼스 마케팅 자체에 집중했고, 디자이너는 또다른 노출 전략인 컨텐츠 제작에 집중했고, 저와 대표는 영업을 멈추고, 논알콜 상품을 개발하고 스마트스토어 노출 최적화에 집중했습니다. 적은 시드로 3개월간 상품과 컨텐츠를 50만회 노출시키고, 수백개의 칵테일 키트가 판매됐습니다. 형편없던 전환율이 조금씩 높아질 때, 수십개의 키트를 벌크로 주문하며 익일 도착을 부탁했던 고객을 위해 쏘카에 키트를 가득 싣고 인천에 새벽배송을 떠날 때의 설렘이 아직 생생합니다.
논알콜 키트로의 피벗과 세일즈 퍼널을 수치로 추적하는 퍼포먼스 마케팅은 앞서 나타난 문제를 한번에 해결하는 액션이었습니다. 우리는 평소 문제해결을 잘 해야 한다고만 교육받습니다. 하지만 문제를 잘못 정의하고 문제를 풀면, 풀어도 전혀 쓸모없는 문제가 풀려 버립니다. 문제를 어떻게 풀지 고민하는 단계 이전에, 문제를 올바르게 정의해야만 하는 압박감 속에서야 비로소 진짜 공부가 이루어진다는 것을 느꼈습니다. 올바르게 문제를 정의해보려는 과정에서 사람은 미친듯이 배우려고 하는 것 같습니다.
‘충분히 많은 잠재고객에게 제품을 효과적으로 보여주지 못했다’는 모호한 문제를 조금 더 구체적으로 정의하려고 할 때 세일즈 퍼널이라는 개념을 주의깊게 들여다보고 배울 수 있었습니다. 이외에도 팀에는 ‘팀원 간 소통’이라는 모호한 문제도 있었습니다. 왜 이런 문제가 발생할까, 정확히 정의하려고 할 때 《규칙 없음》이나 《OKR》같은 경영서를 읽었고, 필요에 의한 학습으로부터 많은 것을 빠르게 배워 적용하는 감각을 배울 수 있었습니다.
팀을 구성할 때, 개인과 팀의 지속가능성이 정말 중요하다는 생각이 들기도 했습니다. 1주일에 30~50개 남짓의 키트가 팔리는 상태에서 추가적인 성장이 없고 정체 구간을 마주했습니다. 매일매일 실험으로 너덜너덜해지는 2주를 보냈지만 시장반응은 도통 오지 않았습니다. 정체기라기에 2주는 정말 짧은 시간입니다. 하지만 당시 대표는 졸업과 입대를 앞두고 있어 4학년 넘어서까지 프로젝트를 끌고가는 리스크를 짊어지고 싶지 않아했고, 개발자와 디자이너는 커리어에 보다 도움이 되는 일을 하고 싶어했습니다. 저도 마음속으로는 이 지치고 한치 앞 보이지 않는 일을 해야만 하는 이유가 무엇인지에 대해 확신을 잃은 상태였습니다. 그렇게 팀은 해체되었고 헬로콕이라는 프로덕트는 사라졌습니다. 팀에 힘든 시기와 정체기는 반드시 옵니다. 이것을 버텨낼 수 있는 힘은 개인의 역량뿐 아니라 지속가능성이기도 합니다.
감사:
헬로콕의 알콜 칵테일 키트
쇼룸에서 고객에게 발송하기 위해 포장한 칵테일 키트들
2. 프로젝트
설거지 돕고 물절약 돕는 MLOps 싱크대
2023.08~2024.07
엎드려뻗친 친구 피규어로 만들어버리기
배경:
디어에서 자율주행 문제를 풀며 3D 공간에서 RGB 카메라로부터 취득된 데이터를 레이블링하면 효율적일 수 있겠다고 생각했습니다. 그래서 3D 기술을 공부할 팀을 결성합니다. 파이널 프로젝트 주제는 2021 테슬라 AI Day에서 안드레 카파시가 2초간 언급한 NeRF라는 기술이었습니다. 하지만 3D에 대한 지식이 전무하여 NeRF 의 I/O가 무엇이고, NeRF 결과물과 3D 프린트 혹은 3D 오브젝트 사이의 관계, NeRF에 얼마나 많은 데이터가 요구되는지 등을 모르는 상황이었습니다.
성과:
스터디는 본질적으로 지향점과 구심점이 모호하여 쉽게 와해됩니다. 게다가 모르는 것을 공부하고자 사람들끼리 모였기 때문에, 해당 분야의 많은 부분이 unknown-unknown(무엇을 모르는지도 잘 모르는 일)이라는 문제가 있습니다. 이 프로젝트는 이런 스터디의 본질적인 한계를 벗어나, 적절한 난이도의 프로젝트 마일스톤을 잡고, 작지만 명확한 결과를 빠르게 얻어냈다는 점에서 유의미합니다. 팀은 2달간 엎드려뻗친 친구를 3D 프린터로 뽑아내는 마일스톤, 이 과정을 github에 공유하고 외부에 발표를 하자는 명확한 마일스톤을 깔끔하게 달성했습니다.
NeRF는 정적 피사체를 동시에 촬영한 이미지 집합으로 3D 공간을 생성하는 기술입니다. 프로젝트팀은 RGB 카메라 이미지 세트만을 이용해 3D 프린트 출력물을 얻어내는 데 성공했습니다. 이 결과물을 ‘데이터야놀자 2022’ 행사에서 발표했습니다. 책임감 있게 문서를 만들어 사람들이 따라해볼 수 있도록 만들자고 주도했고, 최근까지도 메일로 지원문의가 들어오는 등 저희가 만든 튜토리얼을 따라해 보는 사람들이 있습니다. 과거에 작성해 두었던 문서를 따라가며 문의에 대응하고 있습니다. 대중에게 공개될 문서를 잘 작성하지 않거나 소스코드를 책임감 있게 작성하지 않으면 이후에 지원이 어렵겠다고 느꼈습니다.
배움:
기술적으로는 머신러닝 실험 관리 도구의 강력함을 톡톡히 확인했습니다. wandb 를 통해 300개가 넘는 실험을 모두 모아 관리했습니다. 실험 관리 도구의 비교 분석 덕분에 일부 프레임에 촬영자의 팔이 피사체를 가리는 등 작은 노이즈가 NeRF 결과물에 중대한 영향을 미친다는 것을 알 수 있었습니다.
NeRF와 오픈소스 구현체 자체를 깊이 뜯어보는 시간이기도 했습니다. 각각의 파라미터가 하는 역할을 알기 위해 소스코드를 많이 들여다보았는데, Ray와 같은 개념이 TensorFlow에서 어떻게 표현될 수 있는지를 알 수 있었습니다.
이 unknown-unknown을 뚫고 가는 힘은 우리가 모르는 것이 무엇인지 정확히 정의하려는 노력으로부터 온 것 같습니다. 일례로 문제를 데이터 측면, 모델 측면, 파이프라인 측면으로 MECE하게 나누었을 때의 쾌감을 잊을 수가 없습니다. 이렇게 분해된 문제를 각 팀원에게 할당했고(R&R), 각 팀원들의 실험 결과는 실험 관리 도구에 쌓았습니다. 잘 분해된 문제 덕분에 모든 실험 기록이 단 하나도 빠짐없이 값진 데이터가 될 수 있었습니다.
OCR 오픈소스에 좋은 기능 추가
2022.11
문제:
mmocr은 객체 탐지 라이브러리 mmdetection을 유지관리하는 것으로 유명한 open-mmlab의 딥러닝 기반 OCR 라이브러리입니다. 한글이 포함된 이미지의 OCR결과물을 시각화하기 위해서는 한글을 지원하는 글꼴을 사용해야 하는데, 기본 서체를 적용하는 경우 한글이 모조리 깨져 버린다는 문제가 있었습니다. mmocr 사용을 시도하는 한글 사용자의 경우 이리저리 해결책을 찾다가 그냥 포기해 버릴 가능성이 매우 높은 상황이었습니다.
해결:
변인을 통제한 다양한 실험을 통해 한글 깨짐 현상이 글꼴 문제임을 확인했습니다. 라이브러리를 분해해서 글꼴을 받을 수 있는 부분을 파악한 뒤, 사용자와 상호작용하는 가장 높은 추상화 수준의 파일에서 글꼴을 제어할 수 있도록 연결했습니다. 기술적인 이야기는
MMOCR 프레임워크에서 한글 사용하기 에서 확인할 수 있습니다.
성과:
케라스 영어 예제 한글 번역하기
오픈소스 기여
2021.09
문제:
케라스의 공식 예제들은 제가 딥러닝을 처음 공부할 때 많은 도움이 되었습니다. 처음에는 MNIST 수준의 예제밖에 없었지만, 다양한 분야의 예제들이 빠른 속도로 추가되었습니다. 이에 비해 번역 속도는 예제의 출시속도를 따라가지 못했습니다. 번역 작업을 위해 사람들이 모였습니다. 하지만 번역 후보 노트북 목록에 있는 많은 주제들 중에서 대조학습을 번역하시려는 분들은 많이 없었습니다. 어려운 주제라고 해서 영어로 공부해야만 할 필요는 없습니다.
해결:
대조학습은 저도 익숙하지 않은 분야였습니다. 하지만 자율주행 문제를 풀면서 데이터가 없는 문제를 지속적으로 겪으며 대조학습이 미래에 이 문제를 경감시켜줄 수 있는지 확인해보고 싶은 마음 겸사겸사 대조학습 예제 번역을 나서게 되었습니다. 예제 3개에 원어보다 훨씬 더 충분한 설명을 덧붙여 한글번역했습니다. 비록 아직 반영되지는 않았으나 다른 튜토리얼을 번역한 동료에게 설명이 이해하는 데 도움이 많이 된다는 피드백을 받을 수 있었습니다.
좌: 번역과 추가적인 설명이 첨가된 노트북, 우: 원본 노트북
노트북 원본
노트북 번역본
운좋게 텐서플로 실수 발견
오픈소스 기여
2021.06
문제:
프레임워크 TensorFlow 에는 ONNX 없이 내장 API 콜 한번만으로도 딥러닝 모델을 최적화할 수 있는 기능이 포함되어 있습니다. 이 기능은 TensorRT를 기반으로 동작하기 때문에, TF-TRT 라고 부릅니다. 분명히 명세대로 TF-TRT API 를 호출했으나, 원하는 동작이 일어나지 않아 시간이 많이 허비되었습니다. 혹시나 하는 마음에 마지막으로 소스를 들추어보았을 때, 코드에 사소한 문제가 있다는 사실을 발견했습니다.
해결:
자율주행 킥보드의 비전 시스템을 만들 때, TensorFlow를 메인 프레임워크로 채택한 이유는 pytorch 에 비해 엣지 디바이스까지 신경써 주는 API 들이 다수 존재하기 때문이었습니다. 문제가 발견된 부분은 선현 개발자의 작은 실수입니다. 하지만 이 API 를 사용하는 사람들은 전세계에 수십명, 수백명일 것입니다. 이 문제에 봉착한 그들의 소중한 리소스가 낭비되고 있을지도 모른다는 생각이 들었습니다. 비록 부실한 코드일지라도, 내 힘으로 문제해결에 기여하여 오픈소스 정신에 첫 기여를 해보고 싶다는 생각이 들었습니다.
성과:
배움:
정말 간단한 버그를 고쳐내는 일이었지만 코드를 함부로 붙이기 굉장히 조심스러웠습니다. 프로젝트는 무려 세계 최고의 오픈소스였습니다. 어떻게 짜더라도 전체 코드와 잘 어우러지는 것 같지 않았습니다. 내가 python 을 자유자재로 다루고 있지 못하다는 사실을 객관적으로 인지했습니다. 더 멋진 python 코드를 작성하는 일에 대한 공부로 이어질 수 있었습니다.
헬멧 안쓰면 잔소리 하는 킥보드 만들기
20.07~20.09
요약:
퍼스널모빌리티 탑승자의 헬멧 착용을 확인하는 엣지 디바이스 프로토타입을 만들었습니다.
제작에 이어 데모비디오 촬영, 튜토리얼 작성, 제품 발표까지 … 쉽게 경시되곤 하는 프로덕트 제작 이후 뒷 단계까지 잘 마무리했기에 더 의미깊습니다.
배움:
결과물이 완벽하지 못하더라도 프로토타입 결과물 시연, 데모 비디오, 소스코드 공개, 발표 등 제품을 만드는 것 이상으로 해야 할 일들이 있으며 이것들을 정확히 마무리하는 일까지 마치는 것이 프로젝트를 잘 마무리하는 것임을 배웠습니다.
저는 과거의 에지 포팅 경험을 팀원들에게 조금이라도 더 잘 전달하기 위해 공을 들였습니다. 개인 소유 킥보드도 프로젝트를 위해 기증했습니다. 한 팀원은 프로젝트 목표에 맞게 카메라와 컴퓨팅 장치들을 킥보드에 잘 고정해줄 수 있는 거치대를 만들기 위해 3D 모델링에 힘썼고, 또다른 팀원은 기술을 잘 모름에도 불구하고 힘써 기술을 습득하여 데모를 기획하고 발표를 준비하는 등 본인의 경험을 바탕으로 할 수 있는 부분에 기여했습디다. 그 어떤 사람이나 부품이 빠졌더라도 마무리가 되지 않았을 것이라는 점에서 팀워크를 배울 수 있었습니다.
킥보드용 사람 탐지 AI, 그런데 창의적인 학습법
문제:
자전거도로에서 이용할 수 있는 PM ADAS(도로경계검출 및 자동가감속)을 만들기 위해 엣지 딥러닝 시스템을 구성하는 것을 자율 프로젝트의 주제로 잡았습니다.
이 프로젝트가 해결해야 하는 문제는 두 가지였습니다. 첫째, PM용 ADAS 모델은 학습시키기 어렵습니다. 차도에서 촬영된 보행자 검출용 학습 데이터셋은 많이 공개되어 있지만, 자전거 탑승자 혹은 킥보드 탑승자를 검출하기 위한 학습 데이터는 존재하지 않았기 때문입니다. 개인형이동장치는 자전거도로를 이용하기 때문에, 주요장애물인 자전거 탑승자 혹은 킥보드 탑승자를 검출할 수 있어야 합니다. 둘째, 애써 모델을 만들어도 라즈베리파이라는 하드웨어는 딥러닝 추론 연산을 수행하기에 부족하다는 한계가 있습니다.
해결:
객체 검출 데이터가 없다는 문제를 해결하기 위해서 Class Activatioin Map (CVPR2016, 일명 CAM)에서 제안한 localization 아이디어를 이용했습니다. 구글에서 ‘pedestrian' 과 ‘byciclist' 의 이미지검색 결과들을 모두 모아 분류모델을 학습시킨 뒤 CAM으로부터 localization 힌트를 얻도록 만들었습니다. 이를 통해 객체 검출 데이터문제를 부분적으로 극복했습니다.
컴퓨팅 리소스 문제를 해결하기 위해서는 경량 모델을 선택하고, 이것을 한번 더 양자화한 뒤, Google CORAL Edge TPU라는 USB형 하드웨어 가속기를 사용했습니다. 당시에는 양자화 API 및 CORAL의 자료가 풍부하지 않아 공식 메뉴얼을 전부 읽으며 시스템을 구성해야만 했습니다.
배움:
CAM을 통해 localization 힌트를 얻을 수 있도록 학습시킬 수 있는 데이터를 얻는 과정이 정말 쉬울 줄 알았지만 전혀 아니었습니다. 구글 검색으로부터 얻은 ‘pedestrian’ 과 ‘byciclist’ 이미지 데이터에는 불필요한 결과가 많이 포함되어 있었습니다. 결국 CAM 을 쓰더라도, 사람의 손을 거쳐서 적절한 데이터를 골라내는 과정이 수반되어야만 했습니다.
심지어 골라낸 이미지들도 카메라 각도와 조명상태 등 편향이 매우 커서 모델이 학습할 수 있는 적절한 데이터 세트를 구성하는 데 많은 시간을 들여야 했습니다. 많은 시간을 들였음에도 클래스별로 각각 수십장의 사진을 얻어내는 데 그쳤습니다.
최종발표자료 발췌
최종 발표자료 발췌
Class Activation Map 발표자료 발췌
학교 라운지에 자리 있는지 알려주기
요약:
선착순 착석 기반의 공용 사용공간 ‘라운지’에 분석용 카메라를 부착하여, 실시간 잉여 좌석 및 혼잡도를 스마트폰 앱으로 스트리밍하고 시간대별 수요를 예측 및 분석해서 시각화해주는 어플리케이션 아이디어를 제작하고 데모를 만들었습니다.
문제와 해결 아이디어:
라운지에 자리가 없어서 발걸음을 돌리는 학생들이 많았습니다. YOLOv3 기반의 객체 탐지 모델로 사람 및 가방을 탐지하여 좌석이 점유되었는지 아닌지를 파악하도록 했습니다. 과거 유저들의 사용 기록 및 현재 라운지의 상황을 반영하여, 미래의 라운지 혼잡도를 예측하도록 만들었습니다.
배움:
당시 저는 아는 것이 없었던 것 같습니다. 모든 기술이 생소했습니다. 저는 아이디어 기획과 이용량예측 부분을 담당했는데, 분석 방법도 지금 다시 생각해볼 때 터무니없었고 애플리케이션을 만들 줄도 몰랐습니다. 다만 기술에 매몰되지 않고, 내가 배운 기술이 어떤 가치를 만들 수 있는가를 고민하는 것이 매우 중요하다는 사실 또한 배울 수 있었습니다.
가령 “YOLO 모델 그걸로 가방도 찾을 수 있어요?” 라던가, “가방들을 서로 구분할 수 있어요?”, “가방이 똑같다는 것은 어떻게 알 수 있어요?” 라는 질문들을 많이 했던 기억이 납니다. 적극적인 아이디어 탐색과 배우고자 하는 의지가 그 기술을 잘 알고 있었던 팀원들의 지식과 시너지가 나서 팀이 좋은 결과를 얻은 것 같습니다. 저보다 많은 것을 알고 함께했던 팀원들께 감사드립니다.
3. 단체
이렇게 누추한 곳에 세운 인공지능 동아리
동아리 창립
19.01~
요약:
세종대학교 중앙인공지능 학술동아리 ‘Sejong AI’를 설립하고 교내에서 가장 큰 규모의 학술동아리로 성장시켰습니다.
문제:
2018년 당시 세종대학교는 학생이 AI를 배우기 척박한 환경이었습니다. 4학년 선배에게 “형 저 AI를 배우고 싶어요” 라고 털어놀았을 때, “그런 건 SKY애들이 하게 둬. 우리는 우리가 더 잘할 수 있는 일을 해야 해. 우리는 거기서 경쟁해서 이길 수 없을 가능성이 높아.”라는 이야기를 듣곤 했습니다.
반골 기질이 가득했던 저는 사람 가득한 지하철에서 ‘모두의 딥러닝' 을 보며 혼자서 공부를 시작했습니다. 이런 시간을 후배에게 물려주고 싶지 않았고 용기를 주고 싶었습니다. 책 《탤런트 코드》에는 박세리 선수 우승 이후 세계 골프대회 결승에 한국인 선수가 쏟아지는 현상을 일컬어 ‘점화’라고 이름붙입니다. 모든 분들께 이 동아리가 좋은 점화의 계기로 작용하기를 바랐습니다.
성과:
배움:
학부생 2학년이 뭘 안다고 AI 동아리를 만들까요. 지금 생각해보면 아무것도 모른 채 동아리를 만들겠다고 까불었던 제 자신이 부끄럽곤 합니다. 동아리를 만들고 사람들을 모아두는 것은 생각보다 리소스가 많이 드는 일이란 것을 뒤늦게 깨닫고 다 내려놓고 던져 버리고 싶었던 순간도 많았습니다.
하지만 내가 부족하다는 이유로 문제를 개선하려고 하지 않았다면 아무것도 달라지지 않았을 뿐 아니라 리더, 단체, 존속하는 시스템의 역할에 대해서 고민해볼 기회도 없지 않았을까 싶어 ‘그래도 잘 했다’하는 생각이 듭니다. 자리가 사람을 만든다고, 사람들 앞에서 떳떳하고 싶어서 열심히 공부를 하게 된다는 부수효과도 누렸습니다. 이 글을 혹시나 읽고 계실 우리 동아리 후배님들 모두 반갑습니다. 운영진들께 언제나 감사드립니다.
개발행사를 1학년 턱밑에 들이미는 커뮤니티
커뮤니티 창립
19.03~Now
문제:
우물 안 개구리가 되는 것에 대한 막연한 불안이 있었습니다. FOMO 증후군이라고 많이 부르는 듯 합니다. 이 강박에서 벗어나는 데 다양한 개발자 컨퍼런스, 전시회, 강연 등 행사들이 많은 도움이 되었습니다.
하지만 이들 정보들은 저학년 학부생 입장에서 너무 멀리 존재하는 것처럼 느껴졌습니다. 고등학교 공부만 하다가 대학교에 들어왔고, 뭔가 배우고는 싶은데 이런 정보는 어디에서 얻어야 하나요? 나뿐아니라 학교의 다른 친구들도 많은 기회를 놓치고 있을 것이라는 생각을 하게 되었습니다.
해결과 성과:
이런 문제를 해결하고자 하는 시도는 많았습니다. ‘공모전 모아두는 홈페이지’는 툭하면 나오는 해커톤 주제였습니다. 하지만 아무리 양질의 정보가 어디엔가 잘 정리되어 쌓여 있어도 정보가 내 근처에 주기적으로 도착하지 못하면, 내가 실제로 갈 수 있는 행사라는 생각이 들지 않으면 잘 정리된 정보라는 것은 의미가 없다고 생각했습니다.
대학생이 스마트폰으로 가장 많이 이용하는 플랫폼은 카카오톡입니다. 오픈 채팅을 만들고 신입생이 들어오는 시기 매년 교내 커뮤니티에 홍보하니 금방 사람들이 모이기 시작했습니다. 몇몇 선배들도 기꺼이 공유에 발벗고 나섰고, 저학년에 들어온 사람들이 다시 고학년이 되어 후배들을 돕는 구조가 만들어졌습니다. 초기 사람들을 묶어두기 위해서는 제가 행사들을 더 많이 찾아다녀야 했습니다. 그렇게 내가 먼저 애써 정보를 공유하니, 큰 홍보를 하지 않았음에도 사람들이 조금씩 몰렸습니다. 22년 3월 기준 500명 가량의 사람들이 이제 서로 먼저 정보를 공유하여 세종대학교 학생 전체가 우물 안 개구리에서 한발 벗어나게 되었습니다.
세종대학교에서 SW 관련 정보가 가장 잘 흐르는 커뮤니티를 만들었습니다.
배움:
커뮤니티 성공은 은연중에 다른 문제를 푼 덕분이라고 생각합니다. 이 커뮤니티는 ‘정보가 없다'는 문제를 해결하는 것이 아니라, ‘정보가 나를 깨우지 않는다’는 문제를 해결했고, 그것이 실제 사람들의 문제에 더 잘 들어맞았나봅니다.
이런 플랫폼의 존재는 저 자신에게 가장 필요하기도 했지만 제 동급생들에게 필요하기도 했습니다. 내가 타인의 문제해결을 돕는 제품이 직접 되어보는 일인 ’컨시어지 MVP’가 꽤나 강력하다는 것도 느꼈습니다.
한편, 카카오톡이라는 플랫폼의 커뮤니티 관리 기능과 지식관리체계에는 분명 한계가 존재합니다. 카카오톡을 통해 버려지는 지식들을 어떻게 잘 저장할 수 있을까에 대한 고민하는 계기가 되었습니다.
4. 출판
나름 전문서 『MLOps 실전 가이드』 번역
문제:
난이도가 참 모호한 책이었습니다. 초급자들에게는 불친절하고 중상급자들에게는 너무 깊이가 얕게 느껴질 수 있는 책이었습니다. 원문의 응집성이 많이 떨어지는 것을 느낄 수 있었습니다. 아마존의 책 리뷰에는 해당 내용이 여실히 나타나 있습니다.
해결:
응집성이 부족하거나 설명이 부족해 기술의 효용을 잘 설명하지 못하는 글을 한국 독자를 위해 크게 수정하고 역자 노트를 추가했습니다. 자칫 번역자의 DRI를 초과하는 행위로 여겨질 수 있음에도 편집자님과 공동역자님들께서 “결국 번역서는 한국 독자들이 읽는 것”이라며 이러한 생각을 지지해 주셨습니다.
저자의 글을 번역한다는 마음가짐이 아니라, 한국 독자가 이해하지 못하면 온전히 내 책임이라는 모토 하에 모르는 부분은 빠르게 습득하여 채워넣고, 책임감 있는 글을 쓰기 위해 노력했습니다.
주석
역자노트
성과:
한 리뷰어분께서 ‘번역을 예술 작업하듯 해 주셨다’라는 후기를 남겨 주기도 하셨습니다. 그렇게 느껴주는 분이 계신다니 보람차고 뿌듯합니다. 책은 yes24/교보/네이버 주간베스트셀러, 일부 서점에서 IT섹션 TOP100에 선정되었습니다.
배움:
책 출판이라는 프로세스를 경험한 것 자체가 큰 배움이었습니다. 어떻게 돌아가는지를 알 수 있는 계기가 되었습니다. 하지만 책 출판에 대한 이해도가 높지 않은 채로 높은 수준을 추구하다 보니 시간이 많이 지연되었던 것은 분명 큰 패착입니다. 다음 참여 시에는 충분히 높은 품질을 유지하면서도 기한 내에 완료하는 책을 만들 수 있을 것이라고 생각합니다.
5. 그 외
교육
교육
Search
활동
대외활동
Search
포상
수상, 장학, 지원
Search
DB