Image Classification

윈도우즈10 아나콘다에 YoLoV3 를 설치하자.

coding art 2022. 1. 21. 20:05
728x90

yolov3 설치 블로그

https://machinelearningspace.com/yolov3-tensorflow-2-part-2/

 

The beginner’s guide to implementing YOLOv3 in TensorFlow 2.0 (part-2)

In part 1, we've discussed the YOLOv3 algorithm. Now, it's time to dive into the technical details of the Yolov3 implementation in Tensorflow 2.

machinelearningspace.com

2022년 초 최신 아나콘다에 YoLo 버전3.0을 설치해보자. 윈도우즈10 - 아나콘다 시스템에서 여타의 라이브러리 처럼  YoLo는 가상환경의 Open Terminal에서 "pip install yolov3"와 같은 간단한 command line 방식으로 설치가 되지 않기에 다소 까다롭다고 볼 수 있다. 

 

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'

 

수년 동안 image classification 코드를 다루면서 자주 등장하는 YoLo(You Look Only Once)가 자주 시선을 끌었던 것이 사실이지만 사실 그 설치 방법이 쉽지 않아 매번 설치하는 족족 실패했던 것이 사실이다. 하지만 image classification 머신러닝의 발전 흐름을 살펴보면 주방향이 FCN 이라든지 R-CNN이라든지 Semantic Segmentation 으로 흐르고 있기때문에 실행속도는 빠르긴 하지만 그 주된 흐름을  YoLo가 쫓아가지 못하지는 것으로 보이지만 그래도 R-CNN 알고리듬을 배우기에는 필수적으로 적합한 코드라는 생각이 들기도 한다. FCN 이나 R-CNN 알고리듬에 관해서는 별도로 블로그를 작성할 계획을 가지고 있다.

 

본 블로그에서는 위 url 주소의 내용대로 그대로 따라하기만 하면 되는 방식으로 아나콘다의 tensorflow 가상환경 하에서 yolo 버전 3를 설치하고자 한다. 해 본 결과 tensorflow 버전이 현재 2.7인 관계로 약간의 차이가 나긴하지만 그럭저럭 잘 실행이 된다는 점을 밝혀둔다.

 

우선 머신러닝 코드 개발을 위한 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  버전(2.9) YoLov3 를 설치하기 위한 준비가 되었다. 사실 이런한 준비는 굳이 YoLov3 를 설치하지 않더라도 머신러닝 코드 작성을 위한 가상환경 설정의 일환으로 빈번히 해야 하는 익숙한작업일 것이다.

 

이 다음부터 yolo버전 3.0 을 설치하는 작업은 다음 url 주소 블로그의 part2, part3,part4 를 그대로 따르도록한다.

https://machinelearningspace.com/yolov3-tensorflow-2-part-2/

 

part1에서는 yolo의 알고리듬 설명이 이루어진다. 이 부분은 읽어서 한 방에 다 내용을 소화할 수 있는 분량이 아니다. 즉 이미지의 ground truth 에서 시작하여 anchor box 기법의 이해와 아울러 maximum suppress 기법까지 모조리 다 이해해야 할 정도의 부담스러울 정도의 내용임에 유의하여 차 후에 여러날에 걸쳐 차분히 이해해 볼 것을 권장안다. 2015년~2020년 사이에 이루어진 image classification 분야의 중요 업적들이 포함되어 있다.

 

part2로 넘어와 설치(install)요령이 기술된다. part 에 하이퍼링크로 표시된 Github Repo (https://github.com/RahmadSadli/Deep-Learning/tree/master/YOLOv3_TF2) 를 다운로드 하도록 하자.

 

Github 내용을 살펴보면 다음과 같다.

cfg, data, weights 폴더와 convert_weights.py, image.py, utils.py, video.py, yolov3.py 의 5개 핵심 파일을 포함한다.

cfg 즉  configuration 에서는 학습(train) 및 테스트에서 필요한 파라메터 값들 설정이 이루어진다. 

convert-weight 에서는 cfg 파일과 weight 값을 로딩하고 모델을 설정 후 yolov3.py 에 포함되어 있는 YOLOv3NET 클라스 명령을 부른다.

utils.py  는 image.py 또는 video.py에 필요한 여러 함수들을 불러낸다.

즉 이미지 분석 시행을 위해서 image.py 나 video.py 를 실행하면 알아서 필요한 루틴들을 불러다 쓴다.

 

Github 에서 다운받기위해서는 아래 그림에서 처럼 Deep-Learning 버튼을 클릭하여 나타나는 팝업창에서 Code 버튼을 클릭하도록 하자. 다운받은 후  유의해야 할 점이 있는데 압축해제 후 폴더에 weights 폴더와 5개 핵심 파일이 없다는 점이다. weights 폴더는 yolov3 의 사전학습(pretrained) 내용을 포함하며 yolov3에서도 메모리 비중이 큰 부분으로서 별도록 다운받아 체우면 된다. 이 부분은 part2 의 내용전개에 따라 사용자가 처리해야 하는 부분이다. 다운받는 주소는 사용자가 임의로 정하되 경로만 정확히 알고 있으면 된다. 필자는 yolov3 처리 후 그냥 지워버릴 계획으로 다운로드 폴더에서 압축해제하여 그 위치에서 작업을 했다.

 

 

다운 받은 후 압축해제 하여 darknet-master->darknet-master에서 보면 아래와 같이 weights 폴더와 5개 핵심 파일이 없음을 알 수 있다. 이 부분은 part2, part3, part4 블로그를 따라서 처리하면 된다. 아래에 처리 방법만 설명하고 알고리듬 설명은 따로 하지 않기로 한다.

 

 

step 1. 3개의 파일을 다운 받아서 cfg폴더, data폴더, weights 폴더에 넣도록 되어 있는데 다운 받은 내용을 체크해 보면 yolov3.cfg와 coco.names 는 이미 들어 있다는 점에 유의하자. 단지 yolov3.weights 만 빠져 있으므로 이 파일만 별도로 다운 받은 후 별도로 폴더를 만들어 저장하면 된다.

 

 

yolov3.weights 를 다운로드하기 위해서 part2 블로그의 다음 부분에서 yolov3.weights 를 클릭하자. 다운로드 시간이 10분 이상 꽤 걸림에 유의하자. 한번 클릭하였음에도 동일한 파일이 동시에 2개가 다운되는데 폴더에서 크기를 확인해 보아 동일하면 하나만 취하면 된다.

 

step 2. cfg, dat 폴더가 들어 있는 darknet-master  폴내 안에 weights 명의 폴더를 새로 만들어 앞서 다운 받은 yolov3.weights 를 압축해제한 내용물들을 넣도록 한다. 폴더에 다음과 같은 내용물이 들어 있을 것이다.

 

step 3. 폴더 준비가 끝났으므로  convert_weights.py, image.py, utils.py, video.py, yolov3.py 의 5개 핵심 파일 중 yolov3.py 를 준비하도록 하자. par2 의 내용을 읽어 내려가 보면 단락별로 끓어서 알고리듬을 설명하고 있는데 이 부분을 모조리 건너 뛰면 블로그 거의 끝 부분에 제법 긴 전체 코드가 나타나니 이 부분을 전체 copy 하자.

한편 아나콘다 가상환경인 tensorflow 에서 편집기 spyder 를 열어 신규파일(New File) 을 열어 yolov3.py를 생성한 후 copy한 내용을 paste 하고 저장 후 실행하자. 

아무런 에러 없이 다음과 같은 메세지가 뜨면 성공이다. 이로서 yolov3.py  설치가 성공적으로 끝났으며 darknet-master 폴더에서 확인이 가능할 것이다.

 

step 4. part 3으로 넘어가서 convert_weights.py를 설치하도록 하자. 요령은 step 3과 동일하다. 블로그 후반의 전체 코드를 copy하여 역시 아나콘다 tensorflow 가상환경에서 신규파일을 열어 convert_weights.py 로 명명 후 paste 하고 저장 후 한 번 실행시키도록 하자. 다음과 같은 결과를 관찰할 수 있을 것이다.

 

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

 

step 6. 블로그 part 4로 넘어가서 나머지 핵심 파일들을 아나콘다 가상환경 tensorflow에서 copy & paste 하여 준비하도록 하자. 그 요령은 step 5에서와 거의 동일하다.

utils.py 는 R-CNN 에서 나오는 non maximum suppression  알고리듬 구현에 필요한 알고리듬을 담고 있다. 실핼해 보면 다음과 같이 출력된다.

 

step 7. image.py는 data 폴더에서 그림 파일을 읽어 들여 yolov3를 실행하는 코드이다. 따라서 part4 의 차량으로 빼빽히 들어찬 이미지를 다운로드하여 data 폴더에 "test.jpg"로 저장하도록 하자.

 

PC화면에서 우측 상단의 크롬 맞춤 및 설정제어 탭 버튼을 눌러 메뉴가 나타나면 다운로드를 클릭하자.

 

 

다시 추가설정 버튼을 누르면 "다운로드 폴더 열기" 버튼을 볼 수 있다. 클릭 후 data 폴더를 찾아서" test.jpg" 로 저장하자.

 

image.py 를 copy & paste 하여 실행 시키면 다음과같이 GPU 에러 메세지가 발생한다. 가상환경 tensorflow 설치 시에 pip install tensorflow 명령을 실행시켰음을 기억하자. 물론 필자의 PC 에 고가의 GPU 는 없는 상황이며 필요 시 구글 Colab 을 사용하는 실정이다. 이 단계에서 심쿵할 수도 있는데 방안을 강구하도록 하자.  따라서 이 GPU 부분에 해당하는 코드를 삭제하거나 #로 밀어 버리도록 하자.

image.py 에서 다음과 같이 간단히 수정하여 저장하도록 하자.

 

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

 

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

 

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

 

 

PC에 설치된 웹캠은 def main(): 의 cap = cv2.VideoCapture(0) 명령에서 처리한다. 파라메터 값을 동영상으로 처리하고 싶다면 0 대신 폴더에 저장한 영상 파일을 확장자까지 입력해 주면 된다. 만약 영상명이 video1.avi 라면 이 파일을 현재 video.py 파일이 위치하고 있는 폴더에 가져다 놓은 후 다음과 같이 경로를 수정하여 실행시키면 된다.

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

 

아래그림과 같이 잘 동작이 되는데, 동영상 화면을 끌려면 커서를 동영상 화면 내 위치 시킨 후 'q'를 자판에서 입력하면 된다. 이 AVI 동영상 파일은 아래 url 주소에서 다운 받아 사용하기 바란다.

(참조: OpenCV  차량인식 파이선 코드 및 영상 데이터 파일   http://blog.daum.net/ejleep1/27)

 

 

이번 블로그 올리는데 3일 가량 소요되었는데 개인적으로도 만족도가 상당히 높다. 독자 여러분도 성공적으로 설치하기를 바랍니다.

 

image classification 알고리듬 중 상당히 중요한 부분들이 yolov3에 포함되어 있음을 지적하였다. 별도의 블로그에서 anchor box 라든지 non maximum suppression 알고리듬을 다루어 볼 계획이다. image classification 분야가 다소 복잡해서 퍼즐을 맞춰가는 양상이지만 앞서 언급한 알고리듬들이 R-CNN 과 밀접한 관련이 있다. R은 Region Proposals 를 뜻하며 이는 하나의 이미지 속에 포함된 여러 작은 이미지들을 anchor box 기준으로 찾아낸 후에 이들 각각에 대해서 학습을 시키려는 알고리듬이라 컴퓨팅 부담이 상당하다. 이런 지점에서 semantic segmentation 분야에서는 문제 해결을 위해 구글의 경우 dilatation 알고리듬을 채용한 DeepLabV3 알고리듬을 소개하였다.

 

 

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

 

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

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

 

캡스톤 코딩 디자인: YoLoV3에 Vision 코드를 추가하여 ADAS 를 코딩하자.

시작하기 전에 일단 결과 영상을 감상 후 코드 작업을 진행하자. https://youtu.be/YhB2_sbIWUc 2022년 9월 중순 어느새 자율주행차량 시법운행이 폭발적으로 늘어나고 있다. 이미 샌프란시스코에는 GM 차

blog.daum.net