Image Classification

윈도우즈10 아나콘다 YoLoV3 초간단 설치

coding art 2022. 1. 24. 11:08
728x90

YoLoV3  는 80종의 객체로 구성된 COCO dataset 을 사용하여 학습되었다.

'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis','snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'

 

우선적으로 머신러닝 코드 개발을 위한 tensorflow 가상환경을 하나 만들도록 하자. 그 방법은 Anaconda Navigator의 Environments를 클릭하여 열고 들어 간 후에 하단의 Create 버튼을 눌러 팝업 창이 뜨면 가상환경 명 즉 예를 들자면 "tensorflow"를 입력하고 python 버전을 선택하면 된다. 아울러 가상환경 명칭 버튼 끝 부분의 세모 버튼을 눌러 나타나는 메뉴에서 Open Terminal 을 선택하여 연 후에 시간이 좀 걸릴 수 있는 tensorflow 를 설치하도록 하자. 현재 tensorflow 버전은 2.7 이다.

pip install tensorflow

그 다음은 python과 연동하여 OpenCV를 설치한다. tensorflow 와 OpencV는 yolo 버전3을 실행시키는데 깊은 연관이 있는 것으로 보인다.

pip install opencv-python

추가로 머신러닝 코드 작성에  필수적인 라이브러리 7가지를 한방에 설치하자. 물론 이들이 다 yolo 버전3을 실행시키는데 필요한 것은 아니다. tensorflow 와는 달리 설치 시간이 그다지 걸리지 않는다.

pip install numpy matplotlib pandas scipy scikit-learn cython keras

numpy는 수치계산, matplotlib 는 그래프 작성, pandas는 csv 데이터 입출력, scipy는 과학기술, scikit-learn은 머신러닝, cython은 C와 python연계, keras는 tensorflow 를 지원한다.

이로서 tensorflow yolov3(yolo version3.0)를 설치하기 위한 준비가 되었다. 사실 이런한 준비는 굳이 yolov3 를 설치하지 않더라도 머신러닝 코드 작성을 위한 가상환경 설정의 일환으로 빈번히 해야 하는 작업일 것이다.

 

현재 필자가 사용하는 PC 시스템 규격을 참조하자.

 

yolov3 를 설치과정은 다음과 같이 8단계로 간단하게 요약 하자. 4단계까지가 설치이며 나머지는 실행 확인 과정이다.

1. 다운로드:1    Github에서 압축된 darknet-ㅡmaster 을 다운로드 받아 압축 해제한다.-> 아래 첨부된 zip파일이 바로 Github에서 다운 받은 것이므로 여기서 다운로드해도 된다. 설치 장소는 C: 나 D:  사용자가 원하는 곳에 설치하고 경로를 꼭 기억해 두자.

darknet-master.zip
3.50MB

2. 다운로드:2    cfg폴더와 data폴더가 들어 있는곳에 weights 라는 명칭으로 폴더를 새로 만든 후 yolo3.weights 를 다운받아 넣는다. 다음 url 주소에서 Cntr키를 눌러 홀드한 상태에서 클릭하면 다운로드가 이루어지므로 이 파일을 weights 폴더에 옮겨넣자. (https://pjreddie.com/media/files/yolov3.weights)

 

3. 다운로드:3    5개의 핵심 python 파일 즉 convert_weights.py, image.py, utils.py, video.py, yolov3.py을 압축한 Fivefiles.zip 을 다운 받아 압축 해제 후 darknet-master에 넣도록 하자.

Fivefiles.zip
0.01MB

1.번, 2.번과 3번. 작업을 완료하면 darknet-master 폴더는 다음과 같다. yolo3.weights 를 포함한 weights 폴더와 5개의 핵심 파일을 볼 수 있다. 남은 작업은 5개 핵심 파일들을 순차적으로 실행하기만 하면 된다.

4. 이로서 이미 설치가 끝난 상태이다. 이후부터는 순차적으로 5개 핵심 파일들을 열어서 실행만 시키면 되는 것이다. 순차적으로 실행하는 이유는 앞에서 실행된 파일에 포함된 method(예: def ... ) 들을 뒤 실행 파일들이 읽어서 사용하기 때문이다.

한편 아나콘다 가상환경인 tensorflow 에서 편집기 spyder 를 열어 5개 핵심 파일 중 첫째로 yolov3.py를 열어서 실행하자. 아무런 에러 없이 다음과 같은 메세지가 뜨면 성공이다. 이로서 yolov3.py가 성공적으로 설치 되었다. 

5. 5개 핵심 파일 중 둘째로 convert_weights.py를 열어서 실행시키도록 하자. 성공적으로 실행되면 다음과 같은 결과를 관찰할 수 있을 것이다.

한편 darknet-master -> weights 폴더에 다음과 같이 추가된 내용물이 들어 있을 것이다. 이 파일들 앞의 prefix에 tf.이 들어 있는 것으로 보아 weights 들이 tensorflow 양식으로 변환된 듯하다. 하지만 원 저자의 블로그 결과(푸른색 박스)와 다소 차이가 있음을 지적해 둔다.

6. 5개 핵심 파일 중 세번째로 utils.py를 열어 성공적으로 실행 시키면  다음과 같이 출력된다.

7. image.py는 data 폴더에서 그림 파일을 읽어 들여 yolov3를 실행하는 코드이다. 따라서 data 폴더에 이미 들어 있는 "test.jpg"로 저장이미지를 열어 사용하자. 

 

현재 사용한 image.py는 사용자 PC에 고가의 GPU 보드가 없다고 가정하여  이 GPU 부분에 해당하는 코드를 삭제하거나 #로 밀어 버린 상태임에 유의하자

이미지에 포함된 엄청난 차량의 수에 비례하여 제법 많은 양의 컨볼루션 처리가 잠시 이루어짐을 확인할 수 있다.

yolov3의 처리 결과를 보면 가까운 부분은 거의 완벽하게 푸른색 박스로 object detection을 수행했으나 필자가 흰 박스 친 먼 거리의 차량들 일부는  object detection에 실패했음을 알 수 있다. 이 정도면 대단히 만족스러운 수준이다.

 

8. video.py는 OpenCV에서 보통 분당 30 fps(frames/초) 로 이미지를 카메라를 사용하여 처리할 때 yolov3 가 처리하는 루틴이다. 일반 사용자 PC에 웹캠이 설치되어 있으며 pip install opencv-python 설치가 되어 있으며 아울러 GPU 부분 코드 3줄을 #로 밀어버리면 역시 실행에 아무런 문제가 없을 것이다.

PC에 설치된 웹캠은 def main(): 의 cap = cv2.VideoCapture(0) 명령에서 처리한다. cv2.VideoCapture(0) 명령의 0은 사용자 PC에 설치된 하나의 웹캠 디바이스 번호에 해당한다. 

파라메터 값을 동영상으로 처리하고 싶다면 0 대신 폴더에 저장한 영상 파일을 확장자까지 입력해 주면 된다. 만약 영상명이 video1.avi 라면 이 파일을 data 폴더에 위치 시킨 후 실행시키면 된다. 이미 예제 동영상 video1.avi 를 넣어두고 경로도 이미 수정되어 있으므로 확인정도 해본 후 그냥 실행하기만 하면 된다.

cap = cv2.VideoCapture('data/video1.avi')

잘 동작이 되는데, 동영상 화면을 끄려면 커서를 동영상 화면 내 위치 시킨 후 'q'를 자판에서 입력하면 된다.

일단 yolov3가 성공적으로 실행된다는 점만 보여주기 위한 예이다.

 

video1.avi
2.41MB

바로 위 video1.avi 파일을 다운받아 yolov3 video.py 파일을 실행해 보세요.

 

이와같이 YoLoV3 설치가 성공적으로 완료되었으면 아나콘다를 OFF 했다가 새로이 YoLoV3 를 실행하려면 image.py 또는 video.py 만 오픈하여 실행하면 convert_weights.py, utils.py, yolov3.py 는 자동적으로 불려와 실행 됨에 유의하자.

 

도전과제: YoLoV3 설치 후 자율주행 레벨 2 이상으로 적용 가능하도록 비젼 코드를 추가로 편집해 넣어 주행차선을 추적하고 차량을 탐지해 보자. 

https://blog.daum.net/ejleep1/1386