open cv 프로젝트 - 자동차 인식

김찬울·2021년 8월 31일
0

간만에 하는 프로젝트다. 이번 프로젝트는 자동차의 특성 데이터가 아닌 이미지 데이터를 가지고

특성을 추출해서 sklearn의 SVM(서포트 벡터 머신)모델로 학습을 진행할 것이다.

이미지에서 특성을 추출을 한다는 것은 쉽지만 쉽지 않다.

hog

일단 최근에 배운 hog()는 외곽선 검출로 엣지영역이 어느 부분에서 존재하는 지 즉 gredient의 방향을 특성으로 둘 것이다.

raw image

그리고 일반 이미지 그대로 특성으로 사용해도 된다. resize를 통해서 64 x 64 크기의 이미지를 32 x 32로 줄여서 데이터를 줄인후 b g r 값을 flatten으로 이어붙이면 특성이다.

histogram

우리 주변의 자연에서 느끼고 우리가 흔히 하는 말중에 자연스러움 이라는 말이 있듯 생태계, 특히 인간이 조성하지 않는 객체는 자연스럽다. 자연에는 다양한 색이 있지만 빨간색과 파란색처럼 보색대비가 크지 않고 또한 색 바뀜이 자연스럽다.

하지만, 인간이 많든 물체란 디자인적인 요소가 가미되어서 자연스러움을 위한 부자연스러움이 가미된다.

이로 인해 우리는 전에 구한 hog도 그렇고 이런 histogram을 통해서 부자연스러움을 인지할 수 있는 것이다.

자동차에서 고정된 색상이라하면 타이어의 검정색이다. 이 검정색과 다른 색이 존재하는 경우 자동차라고 1차로 판별하기 쉽다. 이런 느낌으로 histogram을 이용할 수 있다.

학습

일단 flatten된 1차원의 자료를 특성으로 둬야하기에 대부분의 것들에 flatten을 적용한다.

적용된 1차원 벡터는 그 자체로 특성이 된다. 그리고 대부분 우리가 cv2에서 grayscale을 이용하던 것에서 r, g, b를 grayscale처럼 2차원으로 써서 이어 붙이면 1000개의 컬러 사진이 3000개의 흑백사진으로 3배나 데이터가 늘어나는 이득을 취할 수 있다.

이런 다양한 특성으로 인해 SVM을 돌리면 낮은 값이 나오는 문제가 있는데

hog만을 특성으로 해서 SVM을 돌리면 가장 좋은 결과값인 0.97... 이 나왔다. 내일 더 고쳐봐야지!

profile
코린코린이

0개의 댓글