인공신경망을 이용한 눈 검출
저번에 만든 눈 후보 추출 영상에 인공신경망으로 학습시켜서 눈 검출.
학습은 눈 후보에 장축의 2배만큼 영역을 확장시킨 눈 주변영역의 canny 에지 개수 비율과 1로 정규화시킨 명암값을 8개로 나눈 값을 이용하였다.
결론은... 21개 데이터만 가지고 해서 그런지 잘 검출되진 않았다..ㅠㅠ
제대로 검출하려면 최소 500개 이상은 가지고 해야할듯..;
눈 후보영역의 학습데이터(구혜선씨 사진을 이용하여 산출;;)
0.5877 0.3890 0.2947 0.3360 0.3442 0.2745 0.2055 0.4019
0.2680 0.2133 0.2531 0.1610 0.2311 0.2388 0.2955 0.1313
0.3563 0.0442 0.4272 0.1372 0.3228 0.1250 0.4280 0.1140
0.2008 0.0010 0.1405 0.0012 0.1697 0.0089 0.1193 0.0110
2.2637 0.5551 2.0775 0.7336 0.8956 0.2717 0.7738 0.3784
0.7779 0.3880 0.8959 0.2024 0.4948 0.2247 0.4817 0.1140
1.5499 0.1890 1.8583 0.1023 0.6329 0.0633 0.6725 0.0731
0.3076 0.1171 0.1648 0.0697 0.1864 0.0444 0.0823 0.0823
0.0000 0.3243 0.1207 0.4307 0.0000 0.4710 0.3406 0.4180
0.0000 0.0000 0.0400 0.0400 0.0000 0.0000 0.2083 0.2083
눈 후보영역이 아닌 값의 학습데이터
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0478 0.9869 0.0735 0.6990 0.0610 0.4569 0.1322 0.3731
0.6766 1.4848 0.8970 0.2083 0.4099 0.6940 0.4974 0.4127
1.2276 1.9432 0.3610 2.7283 0.3188 0.6667 0.2841 0.7528
2.3213 0.8442 1.8577 1.4630 0.6140 0.3399 0.7088 0.5275
0.0000 0.1764 0.2687 0.0189 0.0000 0.1224 0.2353 0.0392
0.4535 0.7231 1.1195 0.4289 0.1818 0.4906 0.6549 0.1651
2.1897 0.9134 2.7224 0.9925 0.8390 0.3969 0.9826 0.5737
0.7962 0.5298 0.3416 1.1453 0.5433 0.2909 0.2614 0.5921
0.8907 1.3741 1.1923 0.8494 0.6231 0.5803 0.6099 0.4670
0.2732 0.7186 0.9161 0.0471 0.2213 0.2520 0.4942 0.0510
인공신경망의 MAX RMS Error는 0.1 Hidden Node는 20을 적용하였으며,
Input Node는 8, Output Node는 1개로, 0~1사이의 실수를 출력한다.
후보를 인공신경망에 적용하였을 때 Output이 0.85, 즉 85% 이상 유사하면 눈인 것으로 간주하였다.
아래는 실험 결과 영상.
레이싱걸 이가나씨 얼굴을 실험영상으로 쓴것에 대해 이가나씨와 팬 분들께 사죄드립니다...ㅡ.ㅡ;;;
빨간색으로 칠해진 부분이 눈 영역으로 최종 검출된 영역이다.
뭐... 눈 두개중에 하나씩이라도 찾으니 다행.; 학습데이터가 21개인데 이정도면 뭐 양호한거지;;;
노이즈가 좀 많이 끼는데 장축과 단축의 비율, 밀도, 크기 등으로 리덕션 할 수 있지만, 귀찮은 관계로 패스하였다.ㅡ.ㅡ;
첨부파일로 매트랩으로 짠 본 소스를 첨부하였다.
img = imread('111.jpg') 뭐 이런식으로 영상을 변수에 저장한 후,
run(img)로 실행하면 된다.
추가적으로 말하자면 막코딩의 폐해로 인해 좀 많이 그지같음.