무효 클릭 IP 추적 중...
머신러닝,딥러닝/computer vision

mmdetection 사용법(설치 및 기본 세팅) | inference 방법

꼬예 2022. 12. 1.

 

이번 포스팅에서는 mmdetection 설치와 pretrained 모델을 이용하여 inference 하는 법에 대해 알아보겠습니다.

 

1. 라이브러리 설치

1) mmcv 설치

mmdetection을 설치하기 전 mmcv설치가 선행되어야 합니다.

 

설치방법은 매번 업데이트 되니 기존 방법이 deprecated 될 수 있습니다.

문제가 발생시 공식문서 설치방법을 확인하시길 바랍니다.

 

1. github

2. documentation

 

* 예제는 코랩(colab)을 기준으로 작성되었습니다.
 

mmcv 설치

 

 openmim 을 먼서 설치합니다.

완료 후  mim install 을 사용할 수 있는데요.  mim install 을 통해  mmcv-full 패키지 를 설치해줍니다.

 

2) mmdetection 파일 설치 

mmdetection github 코드를 clone 해서 가져옵니다.

 

기존 mmdetection 파일을 다운로드한 적이 있다면 깔끔하게 정리하는 차원에서  !rm -rf 명령어를 통해 기존 파일을 삭제합니다.(선택 사항임으로 안해줘도 됨)

 

기존 디렉토리 삭제후 클론

 

mmdection github 코드를 클론 하는 명령어를 입력합니다.

mmdetectino github clone

 

설치하고 나면 아래와 같은 파일들이 생성된 걸 볼 수 있을 텐데요. 

파일들 생성

 

이 중에서  setup.py  파일을 실행하면 필요한 모듈들을 편하게 설치할 수 있습니다.

 

현재 경로가  /content 니까

현재 경로 확인

 

mmdetection 폴더 경로로 한번 들어간 후  setup.py 을 실행하는 명령어를 적어줍니다.

라이브러리 설치

 

2. pretrained 모델 / config 파일 세팅

1) pretrained 모델 링크 주소 확인

기본 세팅을 마쳤으니 이미 학습된 모델을 가져오는 법에 대해 알아보겠습니다.

github 페이지에서  configs 폴더에 들어갑니다.

github페이지 configs폴더 확인

 

 configs 폴더 안에는 알고리즘 별 다양한 config 파일이 있는데요.

알고리즘별 다양한 config파일 확인

 

우리 예제에서는 faster-rcnn을 기준으로 진행하겠습니다.

faster-rcnn

 

 faster_rcnn 폴더에 들어가서 조금 내려가 보면 model 파일을 다운받을 수 있습니다.

 

pretrained 모델 다운로드

 

이중 원하는 버전을 다운로드하면 됩니다.

예제에서는  R-50-FPN 을 사용하겠습니다.

 

r0-50-fpn 선택

 

model 클릭하면 파일 형태로 다운받을 수도 있지만 링크 주소를 통해 코랩 서버로 다운받는 식으로 진행하겠습니다.

 

링크주소복사

 

2) config 파일 확인

다운받은 model 좌측에 위치해 있는  config 파일을 선택해줍니다.

 

 config 파일은 해당 모델이 어떻게 동작할지 할지 알려주는 정보라고 보면 되는데요.

config파일

 

여기서 중요한 건  config 파일 이름과 경로를 잘 기억해둬야 합니다.

추후 해당 경로를 써야 하니까요.

 

3) model 파일 코랩에서 다운로드

먼저 model 파일을 저장할 폴더 하나를 생성하겠습니다.

 

checkpoints 폴더생성

 

mmdetection 폴더 안에 생성할 것임으로  cd mmdetection  mkdir checkpoints 합니다.

 

output:

checkpoints 생성

 !wget 명령어를 통해 모델을 다운로드합니다.

!wget -c https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth \
      -O checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth

 -c 에 넣을 값이 앞서 복사한 링크 주소이고  -O 는 어느 경로에 어떤 이름으로 파일을 저장할지 적어준 것입니다.

 

다운 완료 후에는  config 파일과 다운로드한  .pth 파일 경로를 각 변수에 저장해줍니다.

 

config_file, checkpoint_file 경로 저장

 

config_file경로는 앞서 제가 잘 기억해 두라고 말했었죠? 그 경로를 적어주시면 됩니다.

 

 

3. 모델 inference 방법

1) 모델 초기화

아래 코드는 앞서 지정한 경로를 바탕으로 모델을 초기화하는 작업입니다.

모델 초기화

 

혹시 mmdete module not found 에러가 발생한다면 커널을 Restart하고 다시 실행하면 됩니다.

 

device에는 cpu를 사용한다면  cpu 를적어주면 되고 만약 gpu가 사용 가능하다면  cuda:0 을 적어줍니다.

 

gpu 사용여부 확인

 

2) 모델 데모 inference

mmdetection에서는 테스트용으로 데모 이미지를 제공하고 있는데요.

아래 경로에 가서  demo.jpg 파일을 확인합니다.

 

demo 파일 확인

 

이미지와 앞서 초기화한 모델을 인자로  inference_detector 함수를 실행시켜줍니다.

이미지 읽기

다음으로  show_result_pyplot 함수 인자로 model, 이미지(img),  앞서 전달받은 result값을 넣어주면 모델이 inference 한 결과를 시각적으로 확인 가능합니다.

show_result_pyplot 실행

 

*  score_thr 는 threshold를 의미합니다. 모델이 확신하는 정도가 0.3 이하는 바운딩 박스를 그리지 말라고 알려주는 것입니다.

 

output:

출력결과

 

+ 추가 

result값은 뭘 의미할까?

 

result 정체

 

개수로는 80개, type으로는 리스트로 구성되어 있는 값입니다.

 

'여기서 80은 해당 이미지에서 detect 한 객체 개수인가?'라고 오해할 수 있지만 cocodata 라벨(클래스)을 의미합니다.

(cocodataset 라벨은 80개입니다.)

 

더 자세히 파고들어 볼까요?

 

result값을 출력해보면 아래와 같습니다.

result출력값

리스트 안에 넘파이 array가 들어가 있네요.

 

여기서 0번째 인덱스만 출력해보겠습니다.

result 0번째 인덱스값 출력

 3x5 행렬입니다.

이게 의미하는 바를 설명해볼게요.

 

우선 result에서 0번째 인덱스를 선택했다는 것은 80 클래스 중 0번째 클래스 값을 의미합니다.

 

model.__dict__를 기입하면. 현재 모델에서 사용되고 있는 클래스 값들을 확인할 수 있습니다.

이중 0번째는 PERSON입니다.

클래스값 확인

즉 result[0]은 person을 이미지에서 찾아내는 바운딩 박스 정보를 의미합니다.

 

다시 돌아가서 3x5 에서 3은 이미지에서 person이라고 판단한 것이 3개 발견했다는 겁니다.

그리고 각 person 위치를 나타내는 바운딩 박스 정보가 5에 해당합니다.

 

5개의 array는 array([좌상단x값, 좌상단 y값, 우하단x값, 우하단y값, confidence스코어])로 구성되어 있습니다.

 

지금까지는 mmcv에서 기본 제공하는  show_result_pyplot() 을 이용하여 바운딩 박스를 그려보았는데요.

제공받아서 쓰는 거다 보니 커스텀에 한계가 있습니다.

 

해당 기능을 opencv를 통해 구현하는 법은 다음 포스팅에서 다루도록 하겠습니다.

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글