Introduction
필자도 딥러닝을 잘 알지는 못합니다. 근데 팀에서 딥러닝을 이용한 Object Detection을 도입하려고 했고 그때 겪었던 트러블슈팅, 지식들을 공유하고 특히 아무 지식이 없는 상태에서 도입을 하기 위해 어떤 지식들이 필요할지 생각해보고 쓸만한 내용들을 담아 글을 작성합니다.
주의사항 : 틀린 지식이 들어있을 수 있습니다. 우리 같이 성장하는 거니까 틀린 건 같이 검색하면서 댓글로 달아봅시다
미리 말하는 결론 : 이 글을 읽는 여러분은 저와 같이 성장하는겁니다.
0. 그래서 딥러닝을 도대체 뭐라고 설명해야 할까요
일단 딥러닝을 잘 모르는 상태에서 이렇게 생각할 거예요. "퉁 하고 하면 뭐든 알려주고 맞추는 요술 망치", "인공지능", "똑똑한 컴퓨터" 등등..
실은 제 생각은 인공지능이라는 문장 빼고 다 틀렸습니다. 왜냐하면 잘못 사용하면 데이터로 집어넣은 것도 못 맞추는 바보니까요.
쉽게 설명하려면 데이터셋에 있는 데이터들의 평균을 토대로 분류해주는 도구라고 하면 편할 것 같습니다.
Object Detection 관련해서 찾을 때 CNN이라는 단어가 보이면 이미지를 분류, 찾기 위해 사용되는 딥러닝 모듈이구나라고 생각하시면 편합니다. (틀린 말이긴 하지만 이렇게 생각하면 편합니다.)
1. 일단 뭐부터 해야 해요
기본적으로 딥러닝은 데이터를 수집하고 컴퓨터에게 훈련시켜서 그 결과물을 사용합니다. 최근에 나온 ViT를 제외하고 CNN을 기본적으로 사용합니다.
그렇다면 우선적으로 데이터를 수집하기 위해 뭘 검출할지 정의를 해야 합니다. 내가 얼굴을 찾을지, 지갑을 찾을지, 사람을 찾을지 정확한 대상(클래스)을 정의해야 합니다.
2. 정의가 되었으면 이제 어떤 모델을 사용할지 정해봅시다.
??? : 아니 labeling 안 해요?
쉽게 말하면 tensor flow object detection API에서 사용하는 labeling(어노테이션)과 yolo에서 사용하는 labeling은 포맷이 다릅니다. 변환해주는 툴이 있긴 한데 처음부터 잘 하면 이걸 안해도 되니까 일단 모델을 먼저 골라보아요. 앞서 클래스 정의를 먼저 한 이유는 각 모델마다 특성이 있기 때문입니다.
자 일단 뭐든 해봐야겠죠.
tensorflow object detection api를 사용하셔도 되고 yolo를 사용하셔도 되고 뭐든 일단 검색을 시작합시다.
여기서 예시는 tensorflow2 object detection api를 잡고 설명하겠습니다.
여기에 가면 tensorflow2 object detection api를 통해 사용할 수 있는 모델들의 리스트가 있습니다. Model Name, Speed, COCO mAP, Outputs로 되어있는데요 하나씩 읽어봅시다.
Model name : 말 그대로 모델의 이름입니다.
Speed(ms) : 응답속도입니다. 속도가 낮을수록 빨리 검출합니다.
COCO mAP : COCO라는 데이터셋이 있는데 해당 데이터 셋 기준으로 얼마나 찾았는지 평가 지수입니다. 높을수록 좋습니다.
Outputs : 검출된 결과의 형태입니다. 우리가 흔히 알고 있는 사각형 box가 아니라 polygon을 이룰 수 있는 keypoint로 나올 수도 있습니다.
문제는 저기에 나와있는 성능을 그대로 믿어서는 안 됩니다. 내가 사용하고자 하는 곳에 적합하지 않은 모델일 수 도 있고 EfficentDet 같은 경우는 실제 내가 가져다 쓰는 경우 그만큼 성능이 안 나온다고 합니다.
뭔가 괜찮아 보이면 그 모델에 대해 검색을 해봅니다.
SSD MobileNet V2 FPNLite 640x640이라는 게 뭔가 좋아 보여서 검색을 해보도록 하겠습니다.
위에 나온 이름은 분리를 할 수 있습니다.
SSD : 실제 모델 이름
MobileNet : 모바일 환경에서 사용할 수 있게 경량화된
v2 : 2 버전
FPNLite : FPNLite를 곁들인
640x640 : 640 사이즈로 리사이즈해서 사용하는
그럼 결국 SSD MobileNet만 검색해봐도 됩니다.
이렇게 내용을 봐가면서 좀 쓸만하다 싶으면 냅다 레이블링 작업을 하도록 합시다.
3. labeling
가장 시간이 많이 들어가는 작업입니다. labelimg 툴 사용해서 작업을 하도록 합시다.
https://github.com/tzutalin/labelImg
각 모델마다 요구하는 포맷이 다릅니다. 잘 확인해보고 설정한 후 작업하도록 합시다.
다음 글에서는 어떻게 사용되고 왜 검출이 잘 안 되는지, 기본 용어들 등에 대해 설명하도록 하겠습니다.
'Python > 딥러닝 (Deep-Learning)' 카테고리의 다른 글
Product에 Object Detection을 도입하고 싶은데 딥러닝은 하나도 모를때 읽으면 괜찮을만한 글(2) (0) | 2022.05.07 |
---|---|
LeNet-5 Pytorch 코드 구현(이라 쓰고 질문이라고 읽는다.) (6) | 2021.08.28 |
우리 EasyOCR로 한번 가자(2) (6) | 2021.04.18 |
우리 EasyOCR로 한번 가자(1) (2) | 2021.04.13 |
Tensorlfow Object Detection API 사용 중 발생한 에러 정리 (0) | 2021.03.25 |