강의 내용
피어세션
멘토링
경량화 목적
경량화, 최적화 종류
멘토님의 주간 피드백에서 모델링, 모델 컨버팅, 클라이언트 개발로 역할 분담을 하는 걸 추천하셨고 팀원들도 이견이 없어 이 중 하나의 역할을 맡기로 정하였고, 나는 모델 컨버팅 파트를 맡기로 했다. 모델링은 그래도 어느정도 해봤고 모델 컨버팅을 할 줄 아는게 큰 도움이 될 것 같아서 먼저 하고 싶다고 말했다.
현재 하고있는 데이터 EDA 및 label별 분류 작업이 끝나고 나서 어떤 걸 할지도 대략적으로 정하였다. 난 일단 ONNX나 최적화 기법들 관련해 공부하고, 임의의 모델로 실습해보면서 실제 학습된 모델이 생길 때까지 준비를 해야겠다.
이 정도 사항만 정하고, 모델 최적화 대회에 집중하기로 하였다. 강의도 있고 최종 프로젝트에 도움이 되는 사항도 많아서 열심히 하는 게 좋다고 판단하였다. 내일까지 코드를 읽고 분석해 얘기할 것 같다.
피어 세션 때 얘기하면서 팀원 모두가 확신이 없던 부분이 어떤 플랫폼이나 디바이스를 사용할 지에 대한 여부였다. On-device로 하는 방법이 가장 이상적이지만, 우리가 아직 모르는 문제로 인해 불가능해진다면 웹 서버에 모델을 구축해놓고 네트워크 통신을 통해 구현을 할 수도 있을 것 같고, 이 경우 어느 정도까지의 성능을 기대할 수 있는지 감이 오지 않아 질문드렸다.
이에 대해 멘토님께서 답변하시기를, 네트워크 통신 자체가 지연속도가 크게보면 100~200ms 또는 그 이상으로 존재하기 때문에, 이상적으로 5 fps정도의 속도를 갖게 되고, 이는 일반적으로 30 fps 이상이 기준인 real-time 처리에 한참 못 미치는 속도라고 하셨다. 만약 real-time을 포기한다면 서버도 사용할 수 있을 것이며, 이때도 최대한 속도를 올리기 위해서 모델의 경량화와 최적화가 잘 이루어져야 한다고 하셨다.
그 외에 ONNX나 TFLite 데모를 갖고 실습해보며 준비하기를 권장하셨고(ONNX를 추천하신 이유는 우리 팀이 Pytorch를 사용하기 때문이고, TFLite가 레퍼런스가 가장 많은 편이기 때문이라고 하셨다.), 모델 학습에 사용할 만한 트릭을 여러 가지 소개해주셨다. 예를 들어 속도 향상을 위해 image를 여러 개의 patch로 쪼개어 그 영역 안에서 segmentation을 진행하고, 나중에 이들을 합쳐 결과를 내는 식으로 하게되면, patch들의 조합으로 여러 이미지를 만들 수 있어 데이터 수의 향상, 작은 영역만 잘 segmentation하면 되므로 좀 더 원하는 대로 학습할 수 있고, GPU를 잘 사용할 수 있을 경우 patch로 나누는 게 병렬처리로 더 빠른 연산이 가능할 수 있다고 하셨다. 이 부분은 아직 생소해 좀 더 조사해보고 판단하면 좋을 것 같다.