Computer Vision 그리고 Linux #0 - 회고(?)

Chan Kim·2024년 6월 14일
0

회고(?)

대학원 졸업 전에 미리 회사에 입사하게 되었고, 벌써 1년이 조금 더 지났다. (입사 후 1~2달 뒤 졸업했다.)
1년동안 회사에서 진행했던 CV 관련 프로젝트는 3개.
실무 경험이 많았다면 바쁘지 않았을 텐데, 내 능력 부족으로 입사 후 반년은 자책을 많이 했던 것 같다.

지금은 프로젝트를 2개만 하고 있는 상황이라, 조금 여유가 있을 때 지금까지 공부하고 경험했던 모든 것들을 블로그에 써보려고 한다.
다른 분야(FrontEnd, BackEnd, Client 등)에서 도움이 될지는 모르겠으나,
내가 있는 Computer Vision 분야에서 신입분들이나 현직자분들에게 여러 Model들을 빠르게 사용 및 테스트를 해야하는 경우 도움이 됐으면 한다.

그리고 서버에서 많이 작업 해야하는 특성이 있어서 대부분의 환경은 Linux, docker에서 진행될 것이다.
Windows환경에서 진행해도 사실 큰 문제는 없으나, 예외로 Darknet(YOLOv4)의 경우 Windows에서 Build하려면 Dependences가 한 두개가 아니라 ㅎㅎ..

근데 요즘 객체인식 모델들이 정말 빠르게 업데이트가 되고 있어서, 구 모델들을 블로그에 공유하는게 의미가 있을까 싶기도 하다.. (이미 너무 많은 분들이 자세히 분석해서)
그래서 나는 블로그에 글을 쓸 때, 아래와 같은 제한을 두려고 한다.


0. 모델의 특징 설명

그래도 이 모델을 왜 쓰는지, 어떤 장점이 있는지, 단점이 있다면 뭐가 있는지는 알고 써야하지 않겠는가..
너무 길게 설명하면 루즈하니, 핵심적인 부분만 요약해서 간단하게 특징을 설명할 것이다.

1. 환경 세팅 방법

Framework마다 필요한 환경이 달라서, ex) CUDA Version or Python Package등..
내 Local환경에 매번 다 설치를 하게되면 나중에 돌이킬 수 없는 큰 문제가 생긴다.
그래서, Conda 또는 Docker로 환경을 분리하여 테스트할 수 있도록 작성할 것이다.

2. 학습 데이터 셋 형식

대부분 이미 만들어진 모델(Pretrained Model)만을 가지고 인식 테스트만 진행해보고 싶은게 아닐거다.
자신만의 데이터(Custom Datasets)를 가지고 학습도 해보고 싶을텐데, 모델마다 학습에 지원되는 데이터셋 포맷이 다르다. (COCO, YOLO, VOC..)
물론 Framework안에 있는 DataLoader를 뜯어고쳐서 내가 원하는대로 바꾸는 것도 방법인데,
그냥 내가 가지고있는 데이터를 Framework에 지원되는 Dataset Format으로 바꿔주는게 더 빠르다. 그래서 이 또한 가능하도록 작성할 것이다.

3. 학습(Training) 방법

  • 어떻게 학습을 할 수 있는지? (최대한 간단한 방법)
  • 학습이 실제로 돌아가는 부분이 어디인지? (Code Level)

첫 번째 어떻게 학습을 할 수 있는지?의 경우는, 모델 분석이고 뭐고 필요없고,
당장 HyperParameter만 변경해서 학습 돌리고 테스트 해야하는 사람들이 있을 거라서 작성 하는 부분이다.

두 번째 학습이 실제로 돌아가는 부분이 어디인지?의 경우는, Framework 내부를 까서, 자신이 원하는대로 사용할 수 있도록 작성할 것이다.
예시로, API를 받아서 학습을 돌릴 수 있는 프로그램을 개발해야 한다던지?

4. 추론(Classification, Detection, Segmentation) 방법

  • 어떻게 추론을 할 수 있는지? (최대한 간단한 방법)
  • 인식이 실제로 돌아가는 부분이 어디인지? (Code Level)

학습과 마찬가지로, 빠르게 내가 가지고 있는 데이터를 추론 해봐야 하는 사람과,
내가 원하는대로 쓰고싶은 사람 두 분류로 나누어서 작성할 것이다.
되도록이면 Classification, Detection, Segmentation 모든 종류를 다루려고 한다.

5. TIP

이 부분은 없을 수도 있지만, 아마 대부분의 글에 들어갈 것 같다.
Computer Vision에 관련된 내용들은 아니고, 알아두면 좋은 Linux 명령어나, docker Option들?
아니면 간단하게 쓰기 편한 Algorithm이나, Package들?

이 시리즈에서 다룰 모델들은 아래와 같다.
CNN 계열(YOLO): YOLOv8, YOLOv9, YOLOv10,
Transformer 계열: ViT, Co-DETR, RT-DETR, DINOv2

profile
배울수록 반성하는 개발자

0개의 댓글