이번 포스팅에서는 mmdetection 설치와 pretrained 모델을 이용하여 inference 하는 법에 대해 알아보겠습니다.
1. 라이브러리 설치
1) mmcv 설치
mmdetection을 설치하기 전 mmcv설치가 선행되어야 합니다.
설치방법은 매번 업데이트 되니 기존 방법이 deprecated 될 수 있습니다.
문제가 발생시 공식문서 설치방법을 확인하시길 바랍니다.
1. github
openmim 을 먼서 설치합니다.
완료 후 mim install 을 사용할 수 있는데요. mim install 을 통해 mmcv-full 패키지 를 설치해줍니다.
2) mmdetection 파일 설치
mmdetection github 코드를 clone 해서 가져옵니다.
기존 mmdetection 파일을 다운로드한 적이 있다면 깔끔하게 정리하는 차원에서 !rm -rf 명령어를 통해 기존 파일을 삭제합니다.(선택 사항임으로 안해줘도 됨)
mmdection github 코드를 클론 하는 명령어를 입력합니다.
설치하고 나면 아래와 같은 파일들이 생성된 걸 볼 수 있을 텐데요.
이 중에서 setup.py 파일을 실행하면 필요한 모듈들을 편하게 설치할 수 있습니다.
현재 경로가 /content 니까
mmdetection 폴더 경로로 한번 들어간 후 setup.py 을 실행하는 명령어를 적어줍니다.
2. pretrained 모델 / config 파일 세팅
1) pretrained 모델 링크 주소 확인
기본 세팅을 마쳤으니 이미 학습된 모델을 가져오는 법에 대해 알아보겠습니다.
github 페이지에서 configs 폴더에 들어갑니다.
configs 폴더 안에는 알고리즘 별 다양한 config 파일이 있는데요.
우리 예제에서는 faster-rcnn을 기준으로 진행하겠습니다.
faster_rcnn 폴더에 들어가서 조금 내려가 보면 model 파일을 다운받을 수 있습니다.
이중 원하는 버전을 다운로드하면 됩니다.
예제에서는 R-50-FPN 을 사용하겠습니다.
model 클릭하면 파일 형태로 다운받을 수도 있지만 링크 주소를 통해 코랩 서버로 다운받는 식으로 진행하겠습니다.
2) config 파일 확인
다운받은 model 좌측에 위치해 있는 config 파일을 선택해줍니다.
config 파일은 해당 모델이 어떻게 동작할지 할지 알려주는 정보라고 보면 되는데요.
여기서 중요한 건 config 파일 이름과 경로를 잘 기억해둬야 합니다.
추후 해당 경로를 써야 하니까요.
3) model 파일 코랩에서 다운로드
먼저 model 파일을 저장할 폴더 하나를 생성하겠습니다.
mmdetection 폴더 안에 생성할 것임으로 cd mmdetection 후 mkdir checkpoints 합니다.
output:
!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경로는 앞서 제가 잘 기억해 두라고 말했었죠? 그 경로를 적어주시면 됩니다.
3. 모델 inference 방법
1) 모델 초기화
아래 코드는 앞서 지정한 경로를 바탕으로 모델을 초기화하는 작업입니다.
device에는 cpu를 사용한다면 cpu 를적어주면 되고 만약 gpu가 사용 가능하다면 cuda:0 을 적어줍니다.
2) 모델 데모 inference
mmdetection에서는 테스트용으로 데모 이미지를 제공하고 있는데요.
아래 경로에 가서 demo.jpg 파일을 확인합니다.
이미지와 앞서 초기화한 모델을 인자로 inference_detector 함수를 실행시켜줍니다.
다음으로 show_result_pyplot 함수 인자로 model, 이미지(img), 앞서 전달받은 result값을 넣어주면 모델이 inference 한 결과를 시각적으로 확인 가능합니다.
* score_thr 는 threshold를 의미합니다. 모델이 확신하는 정도가 0.3 이하는 바운딩 박스를 그리지 말라고 알려주는 것입니다.
output:
+ 추가
result값은 뭘 의미할까?
개수로는 80개, type으로는 리스트로 구성되어 있는 값입니다.
'여기서 80은 해당 이미지에서 detect 한 객체 개수인가?'라고 오해할 수 있지만 cocodata 라벨(클래스)을 의미합니다.
(cocodataset 라벨은 80개입니다.)
더 자세히 파고들어 볼까요?
result값을 출력해보면 아래와 같습니다.
리스트 안에 넘파이 array가 들어가 있네요.
여기서 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를 통해 구현하는 법은 다음 포스팅에서 다루도록 하겠습니다.
'머신러닝,딥러닝 > computer vision' 카테고리의 다른 글
mmdetection 커스텀/모델 학습 완벽정리 (1) | 2023.01.17 |
---|---|
mmdetection config 이해하기 (0) | 2023.01.12 |
ultralytics yolov5 사용법 완벽 정리 (1) | 2022.11.28 |
yolo 무료 이미지 라벨링 툴 labelimg 사용법 (0) | 2022.11.23 |
Iou(intersection over Union) 개념 | 밑바닥 코딩 (0) | 2022.08.31 |
댓글