라즈베리파이에서 Picamera 이용 실시간 도로위 자동차 검출용 XML파일 만들기

메카 2017-05-12 (금) 17:34 1년전 1480  

9. haar cascade를 위한 XML파일 만들기

    이번 장은 지난 8장에서 다루었던 내용중 빠져있던 xml파일 생성에 대해 다룬다. 기본적으로 Haar-like 특징을 이용하는 것이며, 강한 분류를 만들기위해 cascade형식을 이용하였다. Haar-like 분류를 생성하는 훈련과정은 크게 아래와 같다

    ● Positive 영상과 Negative영상 수집

    ● Positive 영상에서 실제 object(얼굴, 보행자, 자동차, 휴대폰, 등의 대상 물체)의 위치 등록

    ●위치 등록된 영상으로부터 벡터 파일 생성

    ●훈련 및 xml 파일 생성

(주: 이 장은 OpenCV를 잘 다룬다는 가정하에서 만들어진 것임)

 

Step 1: 데이터베이스 수집

    훈련을 하기위해 positive 영상(대상 물체가 포함되어 있는 영상)negative 영상(대상 물체가 포함되어있지 않는 영상)을 수집한다.

 

Step 2: Negative 영상 목록 작성

    ".../negative" 폴더에 negative 영상(배경영상 이라고도 함)을 넣는다. "bg.txt"파일에 파일 이름을 세로로 넣는다.

          bgimg0001.jpg

          bgimg0002.jpg

          bgimg0003.jpg

          ---

 

 

Step 3: Positive 영상 위치 추출 및 저장

    Positive영상의 vector 파일을 만드는 작업이다. Positive영상으로부터 순수한 대상 object(자동차, 얼굴, 사람, 등의 대상 물체) 영역의 좌표를 "info.txt"에 저장한다. Objectmaker 파일이나 Imageclipper파일을 이용하면 된다. 추출 결과는 아래 그림과 같다.

 

84236af6aa9b0aa8dc76e05b57485428_149457784236af6aa9b0aa8dc76e05b57485428_1494577 

                                                        (a)                                                                                                  (b)

 

그림 1. Positive 영상으로부터 대상 영역 추출 및 저장. (a) 마우스를 이용하여 대상 영역 설정. (b) 스페이스 바와 엔터키를 이용하여 선택된 영상의 좌표 표기

 

그림 1 (a) 영상에서 object가 포함된 영역을 선택한 후 스페이스 바를 누르면 그림 1 (b)의 화면에 좌표가 나타난다. 2개가 나타난 것은 하나의 영상안에서 두 번 영역을 추출했기 때문이다. 내용 설명은 아래와 같다.

     a1.bmp

          1. rect x=86 y=80 width=61 height=51

     a2.bmp

          1. rect x=88 y=81 width=58 height=52

          2. rect x=140 y=91 width=36 height=26

 

"*.bmp"는 파일 이름이며, rect 는 사각을 취하겠다는 의미이다. 그리고 xy는 영상에서 사각의 시작위치를 나타낸다. witdthx부터의 폭이며, heighty로부터의 높이를 의미한다.

최종으로 ".info.txt"파일에는 아래와 같이 생성된다. 파일 이름 뒤의 숫자는 추출 횟수를 의미한다.

 

 

84236af6aa9b0aa8dc76e05b57485428_1494577

 

 

Step 4: Positive 영상의 벡터 파일 생성

    createsamples.exe 파일을 이용하여 벡터 파일을 생성한다. 옵션은 아래와 같다.

             createsamples.exe -info positive/info.txt -vec vector/carvector.vec -num 200 -w 64 -h 48

 

파라미터 설명:

    -info ositive/info.txt           positive info 파일의 경로

    -vec vector/carvector.vec   출력 벡터파일의 경로

    -num 200                        벡터 파일내의 positive파일 개수

    -w 64                             object의 폭

    -h 48                             object의 높이

 

최종적으로 carvector.vec파일이 "..\vector" 폴더에 위치할 것이다.

 

Step 5: Haar-Training

    "..\training"폴더에서 haartraining.exe을 실행하면 훈련결과 파일이 생성된다. 옵션은 아래와 같다.

                 haartraining.exe -data cascades -vec vector/vector.vec -bg negative/bg.txt

                 -npos 200 -nneg 200 -nstages 15 -mem 1024 -mode ALL -w 24 -h 24 nonsym

 

    -data cascades classifierscascade를 저장하기위한 경로

    -vec data/vector.vec               벡터 파일의 위치 경로

    -bg negative/bg.txt bg.txt        파일의 위치 경로

    -npos 200                              positive 샘플 개수

    -nneg 200                              negative 샘플 개수

    -nstages 15                            training을 위한 stage

    -mem 1024                            MB에 있는 메모리 용량

    -mode ALL                            문헌참조

    -w 64 -h 48                           샘플 크기

    -nonsym                               object가 수평에 대해 대칭이 아닐 경우 사용

 

Training이 진행되면 아래와 같은 화면이 나타나며, nstage15이므로 15단계까지 수행한다.

 

84236af6aa9b0aa8dc76e05b57485428_1494577 

 

 

수행이 완료되면 각 stage별로 분류화를 시킨 결과가 각각의 폴더에 저장된다.

 

Step 6: XML 파일 생성

     Step 5의 마지막 그림처럼 training이 완료되면 ../training/cascades/ 폴더에 각 stage별로 결과가 저장 된 것을 볼 수 있다. 이 파일들을 ../cascade2xml/data/ 폴더에 복사한다. 그리고 haarconv.exe파일을 이용하여 최종XML파일을 생성한다. 옵션은 아래와 같다.

haarconv.exe data cardetection.xml 64 48

 

최종적으로 cardetection.xml 파일이 생성된다.

 


xcoda 2017-09-27 (수) 22:17 9개월전
positive/negative 영상이나 결과 xml 파일을 첨부해 주시면 고맙겠습니다.
주소
모바일 버전으로 보기