가장 popular 한 Boosting algorithm으로 단순하고 효율적이라는 Adaboost 알고리즘을 이용한 xml만들기 이다. 빠른 속도와 단순성 및 프로그램의 용이성과 적용할 라운드의 수를 제외하고 튜닝할 인자가 없기때문에 매우 간편하다.
1 . 샘플 이미지들을 준비
샘플 이미지는 훈련 시킬 이미지와 훈련시킬 이미지가 아닌 다른 이미지들을 모두 통틀어서 말한다. 만일 얼굴 사진을 훈련 시킬려면 얼굴 사진만 잔뜩, 손 이미지는 손사진만 잔뜩, 그리고 이와 반대되는 이미지 잔뜩 있으면 된다.
1-1 Positive와 Negative라는 폴더에 이미지를 각각 넣는다. 여기서 Positive는 역시 정답인 이미지를 넣고, Negative는 Positive와는 반대되는 정답이 아닌 이미지를 넣는것이다.
여기서 중요한건 두 Image Set, 즉, Positive : Negative의 비율은 1 : 3이 좋다고 한다.
나는 손을 양손을 다 Detection하기 위하여 오른손 100장 왼손 100장 으로 총 200장, 그리고 얼굴이 겹쳐있거나 노이즈가 심한사진 600장을 준비하였다.
각각의 폴더에 Image들을 넣고 Text 파일을 하나씩 생성한다.
이름이야 어떻게 하든 상관없지만 나는 Positive에 있는 textfile 을 train.txt , Negative에 있는 파일은 exception.txt라고 하였다.
우선 train.txt 에는...
img1.jpg 1 0 0 50 60
img2.jpg 1 0 0 50 60
img3.jpg 1 0 0 50 60
img4.jpg 1 0 0 50 60
img5.jpg 1 0 0 50 60
img6.jpg 1 0 0 50 60
img7.jpg 1 0 0 50 60
img8.jpg 1 0 0 50 60
img9.jpg 1 0 0 50 60
.
.
.
.
라고 적는다.
의미는 img1.jpg는 이미지 이름이다.
1은 그 이미지에서 훈련시킬 부분의 개수이다. (손이 하나이기 때문에 1로 한다. 만일 Image에 양손이 다 있다면 2로 하면된다.) 난 손을 각각따로 캡쳐 하였기 때문에 1로 하였다.
0 0 50 60 은 좌표가 된다.
각각의 좌표는 LeftTop 과 bottomRright 인 왼쪽위와 오른쪽 아래를 뜻한다.
Negative 폴더의 exception.txt에는
img1.jpg
img2.jpg
img3.jpg
img4.jpg
img5.jpg
.
.
.
라고만 하면된다.
2. createsamples를 이용하여 vec파일 만들기
여기가 중요하다 이 부분은 opencv의 createsamples를 사용하여 vec파일을 생성하는 부분이다.
명령 프롬프트를 연다
그리고 c:\program files\opencv\bin 폴더로 경로를 이동한다.
creastesamples를 치면 명령어 사용방법이 나오는데 -_- 아직 이해하지 못함...
명령어를 다음과 같이 친다.
createsamples -info c:\Train\positive\train.txt -vec c:\Traing\vec\myobject.vec - num 200 -w 24 -h 24
-info 는 train.txt가 있는 폴더를 말하고 -vec은 생성될 vec파일이 들어갈 폴더의 경로를 쓰면된다.
num은 Image의 개수 즉, train.txt.의 라인수가 된다(나는 200개 Positive Image이기 때문에 20)그리고 w와 h 는 무조건 24로 셋팅한다.
오류가 난다면? 무조건 오타다....아니면 경로 설정이 올바르지 않은거다.
3. haartraining을 이용하여 classifier생성
2번과 유사하다. 이건 생각보다 오래 걸린다. (시스템에 따라 차이를 보인다. )
haartraining -data c:\Traing\final -vec c:\Traing\vec\myobject.vec -bg c:\Traing\negative\exception.txt -npos 200 -nneg 600 -nstage 14 -nsplits 1 -mem 1400 -w 24 -h 24
-data : vec을 이용하여 텍스트 파일들이 생성될 폴더를 가리킴.
-vec : 2번의 vec파일경로
-bg : Negative 파일들이 있는 폴더이다. exception이 존재하는 곳이다.
-npos : Positive Image의 개수
-nneg : Negative Image의 개수
마지막들은 모두 디폴트 값이니 동일하여야 한다.
4.haarconv를 이용하여 최종적인 xml생성
위 과정을 무사히 마치면 final이란 폴더에 0 부터 몇까지 암튼 몇개의 폴더가 생기며, 그안에 텍스트 파일이 하나씩 있다.
이 텍스트 파일을 하나의 xml로 합쳐야 하는데 이때 쓰이는게 haarconv파일이다. (첨부하였음)
이 파일을 Traing폴더에 넣고 압축을 푼다.
실행시키면 haarconv.exe라는게 생기는데
명령 프롬프트에서 haarconv.exe를 실행시킨다.
haarconv fianl test.xml 50 60
포스팅을 보면서 따라한 방식이다. 50과 60은 이미지 사이즈를 말한다고 한다. [출처] Adaboost로 Xml만드는 방법입니다.|작성자 꿈꾸는중
마지막은 확실치 않다고 하는군요.ㅎㅎㅎㅎㅎ