1. MakeFolder.m
하는 일
: 폴더를 만든다.
변경 할 것
: 이 파일에서 StageIndex를 변경한다. [‘01’, 02’, ‘03’, ‘04’, ‘05’ …]
2. CollectSamplesForNextStage.m
하는 일
: 다음 stage를 위해서 sample을 구한다. 처음 step인 step1에선 Original Data에서 가져온다. 즉 Positive Sample은 2000개를 가져오고, Negative Sample은 20000개 중에서 nSamps(현재는 2000개)를 가져온다. 그 뒤로부턴, step2에서부터는 (n-1)step의 ImagePatchesTP에서 Positive Samples를 가져오고, ImagePatchesFP에서 Negative Samples를 가져온다.
l TP는 True Positive로 눈인데 눈으로 판단한 경우이다. 이것을 다음 번 step의 Positive Sample로 사용한다. 이와 마찬가지로 FP, 즉 False Positive: 눈이 아닌데 눈이라고 판단한 것을 다음 번 step의 Negative Sample로 사용한다.
변경 할 것
: 이 파일에서 StageIndexIn와 StageIndexOut를 변경한다. [‘00’ ‘01’, ‘01’ ‘02’, ‘02’ ‘03’ …]
3. MakeDataFileOfTrainSamps.m
하는 일
: 현재 step의 Positive Sample과 Negative Sample을 data 파일로 만든다. 이렇게 하는 이유는 C 프로그램에서 data을 읽어서 연산을 하게 하기 위해서이다.
변경할 것
: StageIndex를 변경한다. [‘01’, ‘02’, ‘03’, ‘04’, ‘05’];
4. RunningAdaboost.cpp
하는 일
: 앞에서 만들어진 data 파일로 Adaboost를 수행한다. 콘솔 창에 결과가 나오는데 이 때 ensemble threshold를 적어야 한다. 예를 들어 50개의 feature를 구했을 때 30번 째 feature에서 가장 높은 detection rate이 나왔다면, 30번까지의 weak classifier를 사용하고, 이 때의 ensemble threshold를 저장한다.
변경할 것
StageStr: 현재 몇 번째 stage를 선택한다. [‘01’, ‘02’, ‘03’, ‘04’, ‘05’]
nSampPos : Training할 때 Positive Sample의 수를 정한다. 이 값은 이전 stage의 True Positive 결과물의 총 수 이다. (처음에 2000개로 시작했고, 그 뒤로 99% 이상으로 detection 하도록 하므로 그 수가 많이 줄지 않는다. 2000~1960개 정도이다. )
nSampNeg : Training할 때 Negative Sample의 수를 정한다. 이 값은 이전 stage의 False Positive(눈이 아닌데 눈이라고 한 것) 결과물의 총 수이다.
MAX_SEL_HAARFEATS : Training할 때 최대로 고를 weak classifier의 수이다. (처음엔 5개, 나중엔 50개)
TARGET_DETECTRATES : Training할 때 이루고자 하는 Detection Rate이다. 눈인 것을 눈이라고 판단할 확률을 뜻한다. 높을수록 좋다. (99~99.9로한다. 99.9는 이뤄지지 않는다.)
TARGET_FASPOSRATES : Training할 때 이루고자 하는 False Positive Rate이다. 눈이 아닌 것을 눈이라고 판단할 확률을 뜻한다. 이 값은 낮을수록 좋다. 하지만 Detection Rate가 더 중요하므로 처음에 50으로 하고, 40, 40, 30, 30으로 한다.
5. Adaboost 결과로 나온 detection rate중에 제일 큰 것을 고르고, 이 때까지의 weak classifier들을 이용한다. (Ensemble threshold)
6. ClassificationImgPatches.m
하는 일
: Original Data (2000개의 positive sample과 20000개의 negative sample)을 이용해서 지금까지 구해진 cascade classifier로 그 성능을 확인한다. 이 때 ImagePatchesFP에 False Positive(눈이 아는데 눈이 이라고 판단한 것들)를 넣고, ImagePatchesTP에 True Positive(눈인데 눈이라고 판단한 것들)를 넣는다.
변경할 것
nStages: Cascade classifier의 stage 수 (ex: 5 )
nHaarFeats: 각 stage의 Feat 수 (ex: [ 2 2 18 46 32 ] )
EnTheta: 앙상블 Threshold 이다. (ex: [ 1.972628 1.429138 5.95318 13.031949 15.263914 ] )
7. ClassificationTestImgPatches.m
하는 일
: 6번 과 같지만 이 경우에는
불러오는 파일이 TestImage이다. 출력 역시 각 stage 별로 다르게 출력한다.
< 최종 결과 >
1. 최종 Cascade Classifier Stage의 정보
stage의 수: 5
각 stage의 weak classifier의 수: [2 2 18 46 32]
앙상블 Theta: [1.972628 1.429138 5.95318 13.031949 15.263914]
2. 각 stage의 weak classifier의 정보
3. 각 stage별 테스트 결과
0. stage를 거치기 전의 수
Test Negative Sample의 수: 3502 개
Test Positive Sample의 수: 260 개
1. stage1에서 false positive patch의 수와 true positive patch의 수
False positive patch의 수: 2032 개
True positive patch의 수: 253 개
2. stage2에서 false positive patch의 수와 true positive patch의 수
False positive patch의 수: 385 개
True positive patch의 수: 178 개
3. stage3에서 false positive patch의 수와 true positive patch의 수
False positive patch의 수: 215 개
True positive patch의 수: 157 개
4. stage4에서 false positive patch의 수와 true positive patch의 수
False positive patch의 수: 90 개
True positive patch의 수: 129개
5. stage5에서 false positive patch의 수와 true positive patch의 수
False positive patch의 수: 89 개
True positive patch의 수: 129 개
'Enginius > Projects' 카테고리의 다른 글
MFC - Two-wheel Robot Simulator version 2.1 (0) | 2011.12.31 |
---|---|
MATLAB - Kalman Filter / Extended Kalman Filter (0) | 2011.12.05 |
MATLAB - Handwritten OCR (1) | 2011.11.28 |
MFC - 서울대학교 길찾기 시뮬레이션 (0) | 2011.11.13 |
Android - Peterpan Project (1) | 2011.10.22 |