본문 바로가기

도로결함탐지 및 피드백 시스템

YOLO

저희는 포트홀 이미지를 욜로를 통해 학습하였습니다.

Ubuntu

YOLO를 설치하기 전에 Opencv를 선행으로 설치를 해주어야 합니다.

 

Opencv3.2설치

1. g++, cmake 설치

2. Opencv설치를 위한 필요 패키지 설치

3. Opencv Download

4. Opencv build

5. 설치확인

위 이미지와 같이 3.2.0 version으로 Opencv가 성공적으로 설치가 된 것을 확인할 수 있습니다.

 

Opencv를 설치하였으니, YOLO를 설치해보도록 하겠습니다.

YOLO 설치

1. Darknet의 YOLO Download

2. CUDA 또는 Opencv가 설치되어 있다면 사용하기 위해 Makefile을 엽니다.

CUDA를 사용한다면 GPU=1로

opencv를 사용한다면 OPENCV=1로 변경해준다. 

앞서 Opencv를 설치하였으니 1로 바꿔 줍니다. Opencv를 사용함으로써

이미지나 영상 내에서 Bounding Box로 물체를 인식할 수 있습니다.

3. Make 하기

이제 YOLO의 설치는 마무리가 되었습니다. 이제는 사용을 해보겠습니다.

 

4. YOLO에서 제공하는 학습된 가중치 파일(Weight) 설치

YOLO Darknet에서 제공하는 학습 파일을 받았으므로 이제 여러 예제들을 실행해 볼 수 있습니다. 첫 번째로 이미지 실행 두 번째 동영상 실행 세 번째로는 Webcam으로 돌려 보겠습니다.

 

5. 이미지 파일 예제 실행하기

다음과 같이 강아지, 자전거, 자동차가 잘 인식되는 것을 확인할 수 있습니다.

TIP으로는 -thresh를 주어 정확도에 따른 인식을 다르게 할 수 있습니다. 예를 들어

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0.9

다음과 같이 0.9를 주었다면 인식률이 90% 이상이었을 경우에만 Bounding BOX로 인식을 하게 됩니다. 0.6이면 인식률이 60% 이상만 된다면 Bounding Box로 표시합니다.

 

YOLO_MARK github - YOLO_MARK의 github로 Mark의 사용법을 알 수 있습니다.

 

Darknet github - 데이터 학습에 관한 정보를 참고할 수 있습니다.

 

YOLO_MARK 설치

YOLO를 학습시키기 위해서는 YOLO_MARK가 필요합니다.

YOLO-MARK는 이미지 파일들에 직접 본인이 Bounding Box를 그려줌으로써 Box의 좌표를 지정해줄 수 있습니다. YOLO_MARK를 설치해 보겠습니다.

설치를 했다면 yolo-mark디렉터리가 생성되었을 겁니다. 그렇다면 yolo_mark 디렉터리로 이동 후 make 하고 yolo_mark를 실행해 보겠습니다.

YOLO_MARK가 실행된 것을 확인할 수 있습니다. 위에 보면

image num은 0번째 이미지인가 1번째 이미지인가를 알려줍니다.

object id는 Class분류라고 생각하면 되는데 object id로 몇개의 분류를 하고 있는가도 확인해볼 수 있습니다.

 

YOLO_MARK Labeling

경로안에 기존에 있던 이미지파일들을 삭제합니다.

그리고 그안에 본인들이 하고싶은 이미지파일을 넣어주시면 됩니다.

저 같은경우에는 위에서 말한대로 고라니333장 멧돼지222장 강아지222장의

JPG 이미지파일을 넣었습니다.

obj.data를 열게되면 위와같은 정보가 나옵니다. 여기서 맨위에 classes= 2로 되어 있는데 이는 몇개로 분류할 것인가를 설정해주는 곳 입니다. 현재 2개로 분류되어 있는걸 알 수 있습니다. 본인은 포트홀 하나만 분류를 해야하기 때문에 1로 변경했습니다.

obj.names는 말그대로 분류할 class에 이름을 붙여주는 겁니다. 하여 본인은 포트홀 1개의 분류를 할 것이기 때문에 dmg 하나만 했습니다.

그럼다시 yolo_mark 디렉토리로 이동해 줍시다.

yolo_mark를 실행합니다. 

그리고 Bounding Box를 직접 그려넣어 Labeling을 합니다.

 

직접 마우스로 Bounding Box를 직접 그려넣어주면, jpg파일 옆에 txt파일이 생성된 것을 확인할 수 있습니다.

이 txt파일 안에는 우리가 그려넣어준 Box의 좌표값이 들어있습니다.

 

데이터 학습하기

  • convolutional layer 설치 - darknet디렉토리안에 받아 줍니다.

http://pjreddie.com/media/files/darknet19_448.conv.23

  • yolo-obj.cfg파일도 darknet 디렉토리로 이동해 줍니다.

  • yolo_mark/x64/Release/data 경로안에 있는 image 디렉토리와 obj.names , obj.data , train.txt를 darknet/data 경로로 이동해 줍니다.

자 그럼 이제 진짜 데이터학습을 해보도록 하겠습니다.

cd darknet

./darknet detector train data/obj.data yolo-obj.cfg darknet19_448.conv.23

 

학습을 진행하고 맨 아래보면 1이 보입니다. 

이제 학습을 1번했다는 것 입니다. 724.731750 avg는 loss 즉, 손실율의 평균인데

가장 낮아질때까지 학습을 계속 진행하면 됩니다.

 

 

출처 : https://pgmrlsh.tistory.com/

 

개발자 이상현

Instagram:sh_lee77 머신비전, YOLO, 영상처리, Deep Learning, 딥러닝

pgmrlsh.tistory.com

 

'도로결함탐지 및 피드백 시스템' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2019.12.23
Android 어플리케이션  (1) 2019.12.23
이미지 증가  (0) 2019.12.20
도커  (0) 2019.12.20
도로 결함 탐지 및 피드백 시스템이란? / 개발배경  (0) 2019.12.20