본문 바로가기
취준 생활/프로젝트

하루종일 mask on

by Limm_jk 2021. 2. 6.

1월 4일부터 2월 5일까지 Flagly에서 주최한 5주 간의 Silicon Valley Online Internship을 마쳤다. 이름만 인턴십일 뿐, 사실 부트캠프의 느낌이었다.

이 프로그램은 학교에서 겨울 퍼듀대학 파견 대신 제안해준 프로그램인데, 이 프로그램만의 좋은 점을 꼽아보자면 매일 실리콘밸리에서 활약하고 계신 연사분들의 강의를 들을 수 있다는 점이었다.

 

이외에는 부트캠프와 같이 팀을 짜서 5주간 프로젝트를 할 수 있었는데, 정말 이런저런 일 많았지만 결국 재미있게 프로젝트를 완성했고 많이 배워 간 것 같다 :)

 

우리 팀의 아이디어는 매장의 카메라를 통해서 마스크 쓴 인원을 탐지하고 그 데이터를 웹서비스로 시각화시켜주는 프로젝트를 진행하였다. 여기서 카메라는 라즈베리파이의 파이카메라로 대체하였고, 라즈베리파이에서 트레이닝된 모델을 기반으로 이미지의 마스크 쓴 인원을 탐지해주는 방식으로 진행하였다. 팀명은 Mask On! Shout out 래원~

이번 글을 작성하면서, 5주간의 강의 세션과 프로젝트를 돌아보려 한다.

 

세션

정말 기억에 남는 세션들이 많았지만, 이 세션들 중 두 가지 정도만 꼽아보자면 채00 연사님의 리액트 세션, 그리고 이00 박사님의 바이오 AI 세션이었다. 

(수정 21.02.12 - 이름 가림)

 

먼저 채00 연사님의 리액트 세션은 프로젝트를 진행하는 5주간 매주 진행을 하면서 리액트의 현업에서의 경향과 리액트의 공식문서를 통한 리액트 이론을 강의하셨다.

개인적으로 리액트에 대한 기반 지식도, 그에 대한 관심도 많지 않았기에 이해하기 힘들었던 것이 사실이었다. 하지만, 5주간의 세션과 지속적으로 질의응답 시간도 따로 마련해주셔서 이 시간 정도로 '리액트를 이해했다!' 할 수는 없겠지만, 협업하는 클라이언트 개발자가 이런 거 안된다고 했을 때 '어떤 느낌으로 안된다고 하는 것이구나'라는 생각을 할 수 있게 되었다(?)

 

이00 박사님의 바이오 AI 세션은 1주는 기본적인 바이오 & 단백질 구조에 대하여 이야기해주셨고, 두 번째 세션은 알파폴드와 같은 바이오 분야와 AI를 접목한 분야를 설명해주셨다.

BioInformatics에는 기존에 관심이 조금 있었지만, 어디서부터 손대야 할지 고민이었는데 이런 부분을 어느 정도 해결할 수 있었다. 특히, 이전의 신약개발 기록은 최단이 4년 정도가 걸렸는데 COVID-19가 어떻게 진행되어서 11개월 만에 임상까지 완료하고 배포할 수 있었는지에 대하여 설명해주신 점이 인상 깊었다.

 

이외에 다양한 세션을 들을 수 있었고, 이런 세션들을 통해서 프로젝트에 다양한 기술을 도입할 수 있는 것도 있었고, 다양한 도메인으로 시야를 넓힐 수 있는 기회도 되었다.

 

프로젝트

프로젝트는 Team E의 팀장으로 활동하며, 팀원들이 잔뜩 바뀌기도 하고 지정주제를 받았다가 뒤집어지기도 하는 등 정신이 없었던 초반을 보냈다.

그리고 정신없던 초반을 극복하기 위하여 남은 4주는 어떤 팀보다 열심히, 그리고 효율적으로 논의하며 진행을 했던 것 같다. 그렇게 짧은 시간 집중한 만큼 더 많은 것을 배웠으리라 생각한다. :)

 

이 프로젝트에서 나의 메인 역할을 ML엔지니어로서 사진에 마스크를 쓴 사람 안 쓴 사람을 판별하는 모델을 제작하는 것이었다.

그리고 모델 학습이 끝난 이후에는 Dockerize, Deploy 등등 경험해보고 싶은 분야들을 자처해서 맡아 수행하였고, 처음 해보는 분야라 고생은 좀 했지만, 지적 욕구를 채울 수 있던 즐거운 시간이었다. 😀

 

각각 분야를 간단히 돌아보고, 삽질을 잔뜩 했던 배포 쪽은 또 다른 글에서 삽질기를 정리해보는 것으로 진행하려 한다.

Object Detection 모델링

학습은 YOLO v5를 채택해서 사용하였다.

이유는 Raspberry Pi에서 실시간 서비스를 진행하는 만큼 모델의 가벼움과 검증 시간의 단축이 필요하였고, mAP가 더욱 괜찮다고 알려진 Efficient Det과 같은 것도 검토를 해보았으나, mAP를 얻는 것보다 부족한 리소스에서 잘 돌아갈 수 있는 모델이 필요하다고 판단해서 YOLO를 채택했고, 생각보다 괜찮은 퍼포먼스를 보여주었다.

(Raspberry Pi 위에서 사진 하나에 20초)

 

채용한 모델의 Precision이 좀 낮게 나왔는데, 이는 객체가 많은 사진에서 중복 인식되는 현상이 일어나서 많이 깎아먹는 것으로 확인되었다. Accuracy가 낮은 편이라 Threshold를 낮추면 충분히 해결될 문제였으나, 저러한 예시가 일어나는 만큼 객체가 100명가량 있는 경우는 없으리라 생각했기에, 그냥 모델을 채용했다. 약간 토이 프로젝트니까~라는 생각도 있었던 것 같다.

 

사실 YOLO를 그냥 가져다 쓴 수준이라 ML을 했다고 말하기도 좀 그렇지만, 열심히 배웠던 ML을 처음으로 직접 도입하여 프로젝트를 진행할 수 있어서 즐거웠다. 다음에는 직접 모델링도 하고싶다,,,!

Dockerize

우리 팀은 각자 작업을 하면서 각자 Docker-compose를 통하여 각각의 파트가 돌아가는지 테스트를 하면서 진행을 하였다. 그래서 프로젝트의 후반으로 진행되면서 Client / Web Server / WAS / DB / Monitoring 등등 각자 따로 진행이 되고 있었고, 이를 하나의 compose파일로 합쳐주는 작업이 필요했다.

 

합치는 작업 자체는 물론 크게 어려운 작업이 아니었다. 하지만, Docker의 migrate문제나, Dockerize과정에서 Client를 직접 올리는 것이 아닌 build file을 이용해서 Nginx에 올려서 쓰는 방향으로 바뀌면서 Nginx도 배워서 붙이고, Django에도 Gunicon을 이용하는 형식으로 변경하는 등 사용해보지 않았던 것들을 직접적으로 배워서 하는 과정이 좀 난해한 시간이었던 것 같다. 

 

돌아보았을 때, Docker는 역시 훌륭한 기술이었다. 하지만, 겉만 배워서 사용했던 Nginx / Gunicon등등은 제대로 사용했다는 생각이 들지 않는다.

빠른 시일 내에 다시 한번 공부해서 겉핥기로 배운 지식들을 다시 다지고, 같은 프로젝트에 다시 적용시켜봐야겠다.

 

Deploy

프로젝트 마지막 주차쯤부터는 AWS를 통한 배포를 진행했는데, 이전까지는 배포의 경험이 전혀 없었기 때문에 이 또한 처음부터 공부하면서 했던 것 같다. AWS서비스 너무 많아요ㅜㅠ

 

이것 저것 찾아보면서 이건 이게 좋다더라 저건 저게 좋다더라 하다가 결국 그냥 EC2를 사용했다 ㅎㅎㅎ

 

배포하면서 신경썼던 점은 Deploy Branch를 따로 분기해서 Deploy에 필요한 정적파일만 남기고 최대한 Docker image로 사용하려 노력했던 점이다. image로 사용하면 환경에 따른 변화가 적으리라고 막연하게 생각했던 것 같다.

 

Route 53을 이용해서 도메인도 할당받고, 로드밸런서와 ACM을 이용해서 SSL인증도 받았는데, 이것도 많은 노가다를 통해,,,,,

 

예상 외였던 점은 프리티어로 제공되는 무료서버를 사용해서 메모리 자체도 부족했고, 몇 명만 들어와도 터지리라 예측했지만 프로젝트 마감 직전 ab를 걸어서 트래픽을 많이 줘봤는데 생각보다 잘 버텨서 '역시 AWS인가,,,'하고 감탄했던 기억도 있다.

사족을 덧붙이면 이 스토리는 바로 플래그회수를 하게 되는데, 프로젝트 발표회 때 누군가가 ab를 죽어라 걸어서 서버가 죽었다 살았다했던 웃픈 스토리가 있다,,,, ㅎ,,,,,,

 

마무리

이것저것 많이 적었지만, 이 프로젝트를 하면서 가장 크게 얻은 것은 함께 프로젝트를 완성해 낸 조원들이 아닌가 싶다. 이렇게 대등하고 깔끔하게 프로젝트를 진행한 경험이 없었는데, 처음 접하는 툴을 다양하게 사용함에도 불구하고 너무 매끄럽게 진행되어서 너무 감사했고, 재밌었던 프로젝트였다.

 

해보고 싶었던 기술을 배워볼 수 있었고, 문서화의 중요함을 알 수 있었고, DB의 Relation은 사용 안하는 방향으로 짜야하며, 역시 도커는 훌륭했고,,, 너무 많은 것을 배울 수 있던 시간이었다.

 

진행하면서 멘토님들께서 정말 많은 기술들을 제안해주셨고, 그 중 일부만 사용할 수 있었는데 언젠가 이번에 성공하지 못한 기술(특히 ELK...)도 프로젝트에 적용하는 것이 앞으로의 목표다.

 

그리고 이렇게 못해본 기술들을 이번에 함께했던 팀원들과 다른 해커톤 / 프로젝트에서 진행했으면 좋겠다.

댓글