티스토리 뷰

반응형

임시로 적어놓는 글이다.

 

우리 프로젝트에 모델은 총 2가지가 필요하다.

 

하나는 음성을 인식하여 STT로 만드는 것.

두번째는 사람 및 위험물을 인식하여 표시해주는 object detection 모델이다.

 

2024년 6월 기준 현재 STT의 3대장은 ETRI, Google Speech, Open AI Whisper이다.

 

ETRI API가 하루에 천건이지만, 수행하기에도 쉽고 한국어 최적화 및 속도가 빠르기에 이걸 쓰는 게 좋을 거 같다. 

 

object detection 모델은 django를 백엔드로 하여 api 형태로 통신하는 것으로 만들 것이다.

모듈화도 편하고, 쓰기도 편하기 때문.

 

API 만들기

모델은 yolo를 쓴다고 하지만, api 형식으로 만들 것이기에 추론에 대한 속도도 고려해야 한다.

또한 서버에서 GPU를 쓰기엔 가격도 그렇고 너무 부족하다. 그래서 개인적으로 가지고 있는 1050ti를 서버 컴퓨터로 만들어 추론 하게 만들기로 했다.

 

아래 과정은 그를 수행하기 위해 했던 삽질이다.

 

1. api 서버 환경을 깃허브에 세팅 및 서버 컴퓨터에 다운로드

2. 라이브러리 설치 및 호환성

3. settings.py에서 다음과 같이 연결을 허용

SERVER = os.getenv('SERVER', default='127.0.0.1')
ALLOWED_HOSTS = ['localhost','localhost:5085',SERVER,'외부 ip','내부 ip']

 

3. 방화벽에서 인바운드 규칙 설정 - tcp 포트로 8000

4. windows 보안 - 들어오는 연결 차단을 체크해제

5. kt 공유기든 어떤 공유기를 거쳐서 사용한다면, 해당 공유기의 포트포워딩이 필요하다.

django의 경우, 포트는 8000이기에 외부 8000, 내부 8000으로 해서 그냥 통일시켜주었고,

외부 ip를 치면 내부 ip로 통하도록 내부 ip를 적어주었다.

 

6. python manage.py runserver 0.0.0.0:8000

 

이런 식으로 해서 외부의 ip:8000으로 접속하면 response를 받을 수 있음을 확인하였다.

 

굉장히 쉬워보이지만 스택 오버플로우 등에서 많이 찾아봐서 얻은 결과이다.

 

모델링 시행착오

모델링 시행착오에서는 데이터에 대한 난관에 봉착했다.

학습 시키는 데이터의 가중치가 사전학습 모델에 포함되어 있다고 장담할 수 없었기 때문.

 

real time object detection의 경우, annotating이 굉장히 중요하고, 데이터도 굉장히 많아야 한다.

괜히 11만장이나 되는 coco 데이터셋으로 학습시키는 게 아니다.

 

처음부터 학습시키게 되면, 해당하는 class에 대한 가중치는 확실하지만, 데이터가 부족할 경우 오히려 사전학습보다 성능이 떨어진다.

 

그러나 사전학습에서 파인튜닝하게 될 경우, 이미 학습된 모델 안에 우리가 학습하려 하는 데이터셋의 특징이 없다면  오히려 방해가 될 가능성도 있다.

 

우리가 학습하려고 하는 데이터는 열화상 데이터였고, 이는 coco 데이터셋에 당연히 없다.

한마디로 외통수.

데이터의 중요성이 매우 크게 체감되어 왔다.

 

이 방안을 해결하고 어떻게든 프로젝트를 진행하려면 결국 2가지로 귀결된다.

1. 엄청나게 방대한 양의 열화상 이미지 데이터를 annotating해서 처음부터 학습

2. 일반적인 사전학습 모델에서 이미 있는 특징을 극대화시키기 위해서 추가적인 학습

 

일단 데이터셋을 구하는 것부터 시작해야겠다.

 

coco 데이터셋을 열화상 이미지화하는 것도 나쁘지 않을지도

아니면 반대로 추론할 때만 이미지를 복구하는 것도 나쁘지 않을 거 같다.

 

아니면 모델의 문제일 수도 있다는 의견이다.

기본적으로 벤치마킹을 coco 데이터셋으로 하기 때문에, rgb 데이터셋이 아닌 열화상에 적합하지 않다.

그러면 백본은 cnn기반으로 놔두고, 결국 넥이랑 헤드를 고쳐야 한다는건데..

 

할 수 있을지 모르겠다. 최대한 다양한 모델을 써보고 결론 내리는 수밖에.

 

VIT Det 사용

정확도가 높으면 좋을 거 같아 VIT도 사용해봤다.

 

mmcv 모듈을 사용한 mmdetection 모듈을 사용하며, 다운 및 사용할 때는 python 3.9에서만 호환이 되므로 사용할거라면 참고하시길.

GPU로 1050ti를 사용했는데도 추론 속도가 너무 느리다.

 

정확도는 진짜 높은게 맞다.

따지고 보면 yolov8x와 거의 비슷하긴 하다.

 

해당 api는 github에 올려두었다.

mmdetection은 직접적으로 다운받아야 한다.

 

https://github.com/bellkjtt/vit_api

반응형