안녕하세요! 저는 GDSC Konkuk AI/ML Core Member로 활동하고 있는 학생 겸 ML Engineer 인턴입니다 ! 😊
GDSC 멤버 4명과 함께 2024 Google Solution Challenge에 참가하였고, 운이 좋게도 Top 100에 선정되어 멘토링을 받은 후 Resubmission을 진행하였습니다.
솔챌을 진행하며 느낀 점을 전달하고자 합니다.
0. 들어가며
ML Engineer로 솔챌을 참가하기에 막막한 점이 많았습니다. 자신이 어떤 주제로 이러한 부분에서 AI를 사용하면 좋을 것 같다고 어필하지 않는 한, AI를 사용하지 않고도 충분히 서비스를 만들 수 있기 때문에 팀 빌딩이 어려울 것이라고 생각했습니다.
그래서 저는 한달 전부터 주제를 생각해 왔고, 이전 솔챌 Top10 팀들을 분석하였습니다. 어떤 부분에서 AI를 사용해야 구글의 마음을 끌 수 있을지 생각을 많이 하였고, 결론적으로 시각장애인을 위한 어플을 만들어보고 싶다는 생각을 했습니다. 마침 iOS 개발자분과 마음이 맞아, 둘이서 같이 주제를 구체화한 후 공식적인 팀원 모집을 했습니다.
저희는 백엔드 1-2분을 모시고자 하였고, GDSC 멤버들 앞에서 PT 발표를 진행하였습니다. 당시 많은 질문들을 받았는데, 제대로 답한 부분이 없었습니다. 🥲
왜냐하면 처음에 주제를 '시각장애인분들이 길을 걸을 때, 카메라로 물체를 인식(Vision AI)하여 음성으로 안내해 주는 어플'로 잡았기 때문입니다. 따라서 ML-서버-클라이언트의 실시간 처리가 매우 중요한 영역이었지만, 당시 저는 백엔드를 잘 몰랐기 때문에 구체화한 부분이 없었습니다.. 😅
우여곡절 끝에 백엔드 한분 영입을 성공했고, 디자이너 한분까지 추가로 모집하여 총 4명이 되었습니다. 저희 팀은 방학 동안 일주일에 2번씩, 3시간 대면 만남을 가졌습니다.
이해를 위해 소개 영상 먼저 시청해주시면 감사하겠습니다.
https://www.youtube.com/watch?v=7HeddwSCQK8&t=1s
1. 주제 선정
저희가 시장조사를 했을 당시, 시각장애인분들에게 음성으로 길 안내를 해주는 어플도 있었고, 이미지를 찍으면 OCR을 해주는 어플이 있었습니다. 하지만 두 가지를 합친 어플은 존재하지 않았고, 결론적으로 시각장애인 분들에게 길을 음성으로 안내하며 + Vision을 이용하여 실시간으로 위험 물체 탐지를 주제로 선정하였습니다.
저희의 타겟 SDGs는 Good Health and Well-being(SDG3)과 Reduced Inequalities(SDG10) 두 가지입니다.
협업 및 문서 작성 툴은 Notion & Jira를 사용하였습니다. 스프린트 하위에 오른쪽처럼 이슈를 만들어서 관리하였습니다.
2. 개발 과정
개발하며 어려웠던 부분 세가지를 공유하고자 합니다. 내용은 ML에 초점이 맞추어져 있습니다.
1) 라벨링 데이터 부족
이 문제는 ML 프로젝트를 진행해보신 분이라면 모두가 겪어본 문제입니다,,, 기본적인 데이터는 AI hub 베리어프리존 주행영상을 사용하였고, 여기에 존재하지 않는 데이터는 '직접 수집 후 라벨링'을 진행하였습니다.
시각장애인분들이 신호등 앞에서 많은 어려움을 겪을 것이라고 판단하여, 보행자 신호등 초록불/빨간불 인식하는 모델을 너무나도 만들고 싶었습니다. 차량용 신호등 이미지 데이터는 있었지만, 보행자 신호등 이미지 데이터는 아무리 검색해도 못 찾았습니다. 몇 없는 저의 친구들을 동원해서 길을 걷다가 신호등 사진 30-40장씩 찍어달라고 부탁했습니다. 그리고 수집된 데이터를 제가 전부 라벨링 하였습니다. 라벨링 툴은 LabelBox를 사용하였고, 다시는 하지 않을것입니다... ^^..
2) 실시간 처리
[ML Model 관점]
시각장애인분들은 비장애인에 비해 느리게 걸을 것이라고 생각하고, 초기에 추론 속도보다 정확도를 우선시하는 무거운 모델을 선택했었습니다. 하지만, 유저 테스트를 하고 시각장애인 어플을 개발하신 분과 얘기를 나누며 그렇지 않다는 사실을 알게 되었고, 더 빠른 추론 속도를 가진 가벼운 모델로 변경하였습니다.
또한, Google 측에서 GCP Credit을 지원해줬지만 여러 모델을 학습하고 비교해 보기에는 턱없이 부족한 크레딧이었습니다. 그래서 많은 모델을 실험할 순 없었고, yolov5s, yolov8n, yolov8s 세 가지를 실험하였습니다.
최종적으로 빠른 추론 속도와 높은 정확성 모두 충족시킬 수 있는 YOLOv8s 모델을 선정하였습니다.
[ML과 서버 통신 관점]
실시간 데이터 처리를 위해 ML과 서버 간 통신 방식을 http에서 Socket으로 변경하였습니다. 계속해서 연결을 유지하기 때문에 데이터 전송 속도를 향상시켰습니다. 그러나 소켓은 데이터 스트림을 전송하기 때문에 이미지와 같은 큰 데이터를 전송할 시 클라이언트가 어디까지가 이미지 데이터인지 구분하기 어려운 또다른 문제가 발생하였습니다.
이에 대한 해결책으로, 서버와 ML모델이 안정적으로 이미지 송수신을 위해서 먼저 이미지 사이즈를 통신합니다. ML은 이미지를 base64로 인코딩한 스트림 사이즈를 저장 후 확인 메시지(일종의 ‘ACK’)를 서버에 전송합니다. 그다음 서버는 이미지 전송을 시작합니다. ML 모델은 처음에 받았던 스트림 사이즈만큼 바이트를 읽고, 이미지를 성공적으로 수신했다면 모델 추론 후 서버로 추론 결과를 전송합니다.
3) 사용자로부터 멀리 있는 객체까지 인지하여 전달하는 이슈
해당 이슈는 개발 막바지에 발견하였습니다. 사용자가 핸드폰을 들고 길을 걸을 때, ML 모델은 이미지의 객체를 인식하여 '초록불'이라는 음성을 전달하게 되는데, 전달 받은 음성을 듣고 과연 오른쪽, 왼쪽, 전방 어디에 객체가 존재하는지 사용자는 판단할 수 없었습니다.
이에 대한 해결책으로, 이미지를 좌측, 중앙, 우측 3가지로 나누어서 객체의 위치에 따라 예를 들어 '좌측에 초록불 감지' 라는 음성을 전달하였습니다.
YOLO 객체탐지 결과로 bounding box의 좌측, 우측 좌표를 받은 후 평균을 낸 결과가 30 이하면 좌측, 30 이상 60 이하면 중앙, 60 이상이면 우측에 객체가 있다고 판단하였습니다.
3. 문서 작업/영상 작업
다들 아시다시피, 솔챌은 문서와 서비스 소개 영상(2분이하)을 제출해야 합니다.
저희는 중간에 학교에서 진행하는 창업대회에도 지원하면서 문서화 & 브랜딩을 나름 틈틈이 해왔다고 생각했습니다.
하지만 제출 전날 새벽까지 카페에서 문서작업과 영상작업을 병행하게 되었습니다....
(2025에 참여하실 분들은 꼭 꼭 2주 전에 개발 마무리 후 작업하십쇼,,, 😂)
1) 문서 작업
문서작업에서 어려웠던 점은, 100% 영어로 저희의 서비스 소개를 해야한다는 점이었습니다. 저는 영어를 너무 못해서 우선 한국어로 작성 후, 번역을 돌렸습니다. 그리고 영어를 잘하는 PM분이 표현이 어색한 부분이 없는지 최종 검토를 해주었습니다. (감사합니다 🥹)
문항은 총 9문항이었고, 각 문항 당 1500자를 넘기면 안됐습니다. 저희는 모든 문항을 1400-1500자로 맞추었습니다.
저희가 가장 적기 어려웠던 문항은, 8번과 9번이었습니다. 저희는 이런 식으로 풀어나갔습니다.
(해당 부분은 제출 문서 중 일부를 발췌하였습니다.)
8번 - 현재 저희 앱은 한국에 초점이 맞춰져 있지만, 추후 글로벌 확장 가능성을 열어두고 다양한 언어와 문화적 배경을 가진 사용자들이 모국어로 PathPal을 사용할 수 있도록 확장할 것입니다.
Google의 지역별 데이터를 기반으로 나라별 맞춤 네비게이션을 제공하고, 국가별 차이를 고려한 맞춤형 이미지 데이터 학습을 통해 각 국가의 특성을 반영한 서비스 제공할 것입니다. 예를 들어, 한국은 도로에 무분별하게 세워져 있는 전동킥보드가 보행 중 대표 위험요소입니다.
현재 Vision모델은 사고를 유발할 수 있는 약 30개의 물체를 탐지합니다. 보행 중 위험 물체를 인식하는 기능 외에도, 시각장애인 사용자들이 일상 생활에서 필요로 하는 화장실, 공원 등의 편의시설 정보를 제공하는 서비스를 보강할 것입니다.
9번 - 글로벌 시장 진출과 대규모 사용자 수용을 위해, Google Route API와 Google Place API를 활용하여 전 세계 어느 곳에서든 사용자에게 도보 경로 정보와 장소 검색 정보를 제공합니다.
앱 사용자 수의 증가에 대비하여 두 가지 관점에서 기술적 요소를 조정할 수 있습니다.
첫째, ML모델의 추론 과정에서 사용자 증가로 인해 발생할 수 있는 처리 속도 저하를 방지하기 위해, 배치 처리 방식을 도입합니다. 여러 이미지를 배치 단위로 그룹화하여 한 번에 처리함으로써, 효율성을 크게 향상시키고 GPU 메모리 사용을 최적화합니다.
둘째, 사용자 수의 급증에 대비해, 로드 밸런서를 활용해 메인 서버로부터 여러 AI 서버로 요청을 분산시키는 구조를 구현하여 서버 간 부하를 균등하게 분배합니다.
혹시나 2025 Google Solution Challenge를 목표로 하시는 분들 중, 문서를 어떤 방향으로 작성해야 할 지 어려움을 겪으신다면 댓글 남겨주시거나 연락 주시면 최대한 도움드리고 싶습니다! ☺️
2) 영상 작업
우선 영상 2분내로 모든 것을 전달하기에 정말 짧습니다. 어필하고 싶은 부분은 길게! 나머지는 간단히!
1. 주제 선정 이유/개요
- 왼쪽에는 주제 선정 이유를 적었습니다.
- 오른쪽에는 시각장애인분들이 불편함을 겪고 있는 모습을 재연하여 영상으로 담았습니다.
2. 앱 소개 Overview
- 간단하게 5초내로 담았습니다.
3. 앱 시연 장면
- 유저가 길을 찾기 위해 앱을 실행했을 때부터, 출발지와 목적지를 입력하는 과정을 왼쪽에 영상으로 담았습니다.
- 오른쪽은 이에 대한 설명입니다.
4. 실제 거리에서 사용한 앱 시연 장면
- 길 안내 과정 중에서 발생하는 위험 물체를 탐지하여 음성/진동으로 안내해 주는 과정을 담았습니다.
- 이 부분이 가장 영상에서 비중을 많이 차지합니다.
5. 인식할 수 있는 모든 객체 나열하며 보여주기
6. 아키텍쳐 소개 2초
- 영상 길이 제한으로 마지막에 급하게 넣었습니다. 설명은 하지 않았고 'Here is our Architecture'라고만 하고 끝냈습니다.
4. Top 100 팁
1) 구글의 기술 사용은 다다익선
아키텍처를 보면 아시다시피, 저희가 사용한 구글 기술은 Google Map SDK, Google STT, TTS, GCP 뿐입니다.
구글꺼를 많이 사용할수록 좋다는 얘기는 많이 들었기 때문에, 사실 결과 발표까지 조마조마했습니다. (끝까지 파이토치 말고 텐서플로 쓸걸 후회하던 저의 모습..) 주변 Top100 분들을 보면 많이 쓸수록 좋은 것 같습니다.
2) 문서 작업 하며 개발하기
최종 제출이 2월 말이었는데, 1월 중순 쯤에 제출 폼이 열렸던 것으로 기억합니다. 이러한 개발 방식은 좋지 않지만, '시간을 많이 쓸 수 없다면' 문서에 어떤 내용을 쓰면 좋을지 생각 후, 개발도 이에 맞추어 진행하는 방식도 공모전, 대회에서 수상을 위해 괜찮다고 생각합니다. (개인적인 생각입니다.)
3) 영상에는 서비스 시연 장면을 많이 넣자
저희가 뽑힐 수 있었던 이유 중 가장 큰 부분인 것 같습니다. 아키텍쳐나 기술적인 내용보다는 실제로 해당 상황에서 발생할 수 있는 상황을 재연하여 영상을 만들면 더 좋을 것 같습니다. 저희는 시각장애인분이 길을 걷는 상황을 재연하면서 어플의 화면을 동시에 보여주었습니다.
4) Github repo README 작성 잊지 않기
저희의 레포는 이정도로만 꾸며놨고, 커밋 기록과 코드의 작동 여부 등은 사실 확인하지 않는 것 같습니다.
왜냐하면 저희가 PathPal Organization을 만들어서 iOS, Server, ML 각각 다른 레포에서 작업 중이었는데, 최종 제출 양식에는 하나의 레포만 넣도록 되어있습니다. 그래서 급하게 새로운 레포 파서 코드 이전을 한 기억이 있습니다. 그래서 제출한 레포에는 커밋 기록이 별로 없었습니다.
제출 팀이 엄청 많으니 하나하나 다 볼 순 없지 않을까요..? 😂
여담) Top 100 티셔츠
안녕 내 잠옷..?
읽어주셔서 감사합니다!
개인적인 의견이 많이 포함되어 있으며, 아직 학부생으로서 틀린 내용이 있을 수 있습니다. 궁금한 점은 댓글로 남겨주세요 😊
'대외활동' 카테고리의 다른 글
[동아리] 빅데이터 연합동아리 보아즈/투빅스 서류,면접 후기 (0) | 2022.12.24 |
---|