이전 포스팅에 이어서 욜로 사용과 Object Detection에 대해서 포스팅하겠습니다.
Object Detection은 Object의 위치와 종류를 동시에 파악하는 기술입니다. 먼저 Localization 단계에서 바운더리 박스안에 문체가 존재하는 알아내고 만약 존재한다면 Classification 단계에서 해당 박스의 물체가 무엇인지 알아내는 것입니다. 또한, Object Recognition이라고 있는데 원래는 Recognition이 박스안에 있는 물체의 클레스까지 맞추는 것인데 이제는 둘이 혼용되서 같은 의미로 사용됩니다.
Detection의 포문을 열었다고 말할 수 있습니다. YOLO v3을 다운 받고 detect.py이라는 파일 실행시켜 Pretrained 모델을 사용합니다.
사용방법을 알아보겠습니다.
▶git init
먼저 yolo-v3를 깃에서 가져오겠습니다.
!git clone https://github.com/ultralytics/yolov3.git
▶코랩 환경에 맞게 에러 고쳐주기
코랩에서 욜로를 사용할때 발생할 수 있는 에러를 아래 코드를 통해 방지해줍니다.
temp_str = 'setuptools<=64.0.2\n'
f = open('/content/yolov3/requirements.txt', 'r')
f_str = f.readlines()
f.close()
f2 = open('/content/yolov3/requirements.txt', 'w')
for idx, val in enumerate(f_str) :
if 'setuptools' in val :
idx_v = idx
f_str.remove(val)
f_str.insert(idx_v, temp_str)
for val in f_str :
f2.write(val)
f2.close()
▶폴더 이동후 내부 패키지 설정
욜로3 폴더로 이동 후 필요한 내부 패키지를 설치해 주겠습니다.
!cd yolov3
pip install -r /content/yolov3/requirements.txt
코랩 환경이라 git에 직접들어가서 보는 코드와는 조금 다릅니다
▶파일 다운
그리고 욜로를 통해 분석하고자 하는 그림파일을 하나 다운 받습니다.
!wget -O 다운받을코랩경로/다운로드받을파일명 파일URL
다운받을코랩경로/다운로드받을파일명 띄고 파일 url을 써주어 파일을 다운 받습니다.
▶pretrained weights파일 다운
!wget -O /content/yolov3/pretrained/yolov3-tiny.pt https://github.com/ultralytics/yolov3/releases/download/v9.6.0/yolov3-tiny.pt
해당 명령어를 통해 욜로 pretrained weights파일을 받아줍니다.
▶detect.py 실행
이제 마지막으로 욜로의 detect.py를 실행해줍니다.
!cd yolov3; python detect.py -h
위 코드로 실행해주고 아래 옵션들을 설정해줍니다.
!cd yolov3; python detect.py \
--weights '/content/yolov3/pretrained/yolov3-tiny.pt' \
--source '/content/yolov3/data/images/14th_street.jpg' \
--project '/content/yolov3/detected' \
--name 'images' \
--img 640 \
--conf-thres 0.5 \
--iou-thres 0.4 \
--line-thickness 2 \
--exist-ok
detect.py를 실행하는 코드는 python detect.py
입니다.
다음으로 옵션들을 자세히 살펴보겠습니다.
--weights
는 pre-trained된 weights 파일 경로를 지정합니다.
--source
는 검출 대상 이미지 경로를 지정합니다.
--project
는 검출 결과 파일을 저장할 디렉토리 경로를 지정합니다.
--name
은 검출 결과 파일의 이름을 지정합니다.
--img
는 이미지를 처리할 때 크기를 조정합니다. 이 경우 640x640 크기로 조정합니다.
--con-thres
는 object 검출을 위한 confidence threshold 값을 설정합니다.(이 값이 더 작을수록 많은 물체를 검출합니다.)
--iou-thres
는 이 값 이상의 iou 값을 가진 object는 하나로 merge됩니다.
--line-thickness
는 검출 결과를 시각화할 때 선의 두께를 지정합니다.
--exist-ok
는 이미 검출 결과 디렉토리가 존재하는 경우, 덮어쓰지 않고 그대로 유지합니다.
※해당 코드를 보면 (역슬래쉬)를 표시해준 것을 확인할 수 있는데 \는 줄바꿈의 표시이기 줄바꿈을 할 때 \를 표시해주지 않으면 에러가 발생합니다.
▶분석결과 확인하기
이제 마지막으로 분석결과에 대해서 확인하겠습니다.
▶패키지 설치
from IPython.display import Image
from google.colab import files
▶분석결과가 저장된 파일 불러오기
Image(filename='/content/yolov3/detected/images/14th_street.jpg', width=640)
분석결과가 저장된 이미지를 불러옵니다.
이제 이런 결과를 최종적으로 얻을 수 있습니다.
▶파일 저장
files.download(filename='/content/yolov3/detected/images/14th_street.jpg')
위 코드를 실행해주면 파일을 저장할 수 있습니다.
이번 포스팅에 Object Detection에 대해 포스팅했습니다. 굉장히 재밌었는데 생소한 코드가 많아서 당황했습니다. 요즘은 매일 당황하는 하루인 것 같습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.