특징 (Feature) 이란?
머신러닝에서 말하는 특징은 관찰된 현상에서 측정할 수 있는 속성 (property)이나 특성 (characteristic)을 말한다. 머신러닝 모델은 특징을 입력받아 예측 또는 분류 결과를 내놓는다. 예를 들어 주택 가격을 예측할 때, 면적, 방의 수, 욕실 등과 같은 속성을 입력하면 모델은 특징값을 기반으로 예측한 주택 가격을 출력한다. 대상을 잘 드러내는 좋은 특징을 선택해야 머신러닝 알고리즘의 정확도를 높일 수 있다
왜 특징을 사용할까?
입력 이미지에는 분류와 무관한 정보가 너무 많다. 그러므로 전처리 후 가장 먼저 해야할 일은 분류에 중요한 정보만 남겨 단순화 시키고 불필요한 정보는 빼는 것이다. 복잡하고 많은 양의 데이터를 이미지의 중요한 일부분이나 색상을 추출하는 방법으로 소소의 특징으로 간략화할 수 있다. 이렇게 특징을 기바느올 이미지를 분류하는 것이 휠씬 쉽고 빠르다.
다음과 같은 예제를 살펴보자, 모터사이클이 찍힌 1만 장의 이미지를 포함하는 데이터셋이 있다. 각 이미지의 크기는 1000x 1000 픽셀이다. 이미지 중에는 배경색이 단색인 것도 있지만, 불필요하게 복잡한 배경이 있는 이미지도 있다. 이 이미지를 특징 추출 알고리즘에 입력하면 이미지에 찍힌 사물이 모터사이클인지 확인하는데 불필요한 정보는 모두 사라지고 사물 인식에 유용한 정보만 분류기에 바로 입력할 수 있게 모아놓은 상태가 된다. 분류기에 원래 이미지를 1만 장이나 직접 일력하는 것보다 이렇게 하는 방법이 휠씬 간편한다
일반화 가능한 특징
특징의 가장 중요한 성질은 반복성 (repeatablility)이다. 특징은 모든 모터 사이클을 찾아낼 수 있는 성질이어야 한다. 따라서 실제 문제에서는 입력 이미지의 일부를 그대로 복사한 것을 특징으로 사용할 수 없다
좋은 특징이란 무엇일까?
머신러닝 모델의 성능은 특징에 의해 결정된다. 다시 말해 좋은 특징을 선택하는 일은 머신러닝 모델을 구축하는 일보다 절대 중요도가 떨어지는 일이 아니다. 하지만 어떤 특징이 좋은 특징일까? 어떤 기준으로 좋은 특징을 알 수 있을까?
예를 들어보면, 그레이하운드와 래브라도 리트리버 이렇게 두 종류의 개를 구분하는 분류기를 만들려고 한다. 먼저 키와 눈 색깔 두 가지 특징을 선택해서 이들의 특징을 평가한다.
먼저 키부터 살려보자. 키는 특징으로서 얼마나 유용할까? 보통 그레이하운드가 레브라도 리트리버보다 1~2인치 정도 크지만 항상 그렇지 는 않다. 개들도 개체 간의 차이가 있다. 견종별로 키의 분포를 살펴보면, 두 견조으이 키에 대한 분포를 간략한 히스토그램으로 보여준다.
히스토그램을 보면 20인치 이하의 개는 80% 확률로 레브라도 리트리버다. 반면 30인치 이상의 개는 거의 모두 그레이하드다. 그렇다면 중간 구간 (20~30인치)은 어떻까? 이 구간에서 두 견종의 확률이 거의 비슷한다. 지금까지의 과정을 정리하면 다음과 같다.
$$ 키가 20인치 이하라면 랩라도 리트리버일 가능성이 높다 $$
$$ 키가 30인치 이상이라면 그레이하운드일 가능성이 높다 $$
$$ 키가 20인치 초과, 30인치 미만이라면 다른 특징을 더 참고해야 한다 $$
두 견종을 구분하는데 있어 키가 상당히 유용한 특징이 있다. 키를 그대로 특징으로 이용해도 될것 같다. 하지만 키만으로는 모든 경우에 두 견종을 정확히 구별할 수 없다. 실제 머신러닝 프로젝트에서도 모든 대상을 제대로 분류하는 단일 특징은 대부분 존재하지 않는다. 거의 모든 경우 서로 달느 정보를 얻을 수 있도록 2개 이상의 특징이 필요하다. 한 가지 특징만으로 완벽하게 분류할 수 있다면 어렵게 부뉼기를 학습할 필요 없이 단순히 if~ else 문을 사용하면 된다.
어떤 특징을 채택해야 하는지 결정할 대는 이 특징을 가지고 사고 실험을 해보면 도움이 된다. 여러분이 분류기가 되어 그레이하운드와 래브라도 리트리버를 구분해야 한다면 털 길이, 채구, 색 등 어떤 정보가 유용한지 생각해 봐야 한다.
그리 유용하지 않는 특징의 예로 눈 색깔을 한번 살펴보자. 개의 눈 색깔이 파란색과 갈색 두가지 뿐이라고 가정하고, 다음과 같은 가사으이 히스토그램을 얻었다. 두 가지 눈 색깔에서 두 견종의 비율이 거의 비슷하게 나왔다. 이 특징을 통해 알 수 있는 정보는 실질적으로 없다고 해도 좋다. 눈 색깔은 견종과 관계가 없기 때문이다.
신경망은 유용한 특징과 유용하지 않은 특징을 어떻게 구별할까?
가장 유용한 특징만 골라서 사용하는 신경망이 신기하게 생각될 것이다. 하지만 꼭 그렇지만은 않다. 신경망은 가능한 한 모든 특징을 만들고 이들 모둥에 무작위로 결정된 가중치를 부여한다. 학습 과정에서 이들 가중치를 해당 특징의 실제 중요도에 맞춰 조정한다. 자주 나타나는 패턴은 높은 가중치가 부여되어 유용한 특징으로 평가되고 가중치가 낮은 특징은 출력에 영향을 미치지 못한다.
사람이 직접 주출한 특징을 사용하는 기존 머신러닝
머신러닝 알고리즘이 제대로 성능을 낼 수 있는 특징을 선택하려면 대상 분야에 대한 도메인 지식 (혹은 도메인 전문가와 협업)을 갖춰야 했다. 이렇게 사람이 선택한 특징을 서포트 벡터 머신 (Support Vector Machine, SVM) 또는 에이다 부스트 (AdaBoost)와 같은 분류기에서 입력해서 에측 결과를 얻었다
기울기 방향성 히스토그램(histogram of oriented gradients, HOG)
하르 캐스케이드 (Haar Cascades)
크기 불편 특징 변환(scale-invariant feature transform, SIFT)
고속 강인한 특징 추출 (Speeded-up robust feature, SURF)
컴퓨터 비전에서 사용되는 특징
컴퓨터 비전에서 사용되는 특징 (Feature)이란 이미지에서 특정 대상에만 해당하면 측정 가능한 데이터라고 할 수 있다. 선, 모서리, 이미지 조각 등 특이한 모양도 특징일 수 있고, 다른 것과 부분되는 생상도 특징이 될 수 있다. 좋은 특징은 대상을 다른 대상과 쉽게 구분 짓게 해주는 속성이다. 예를 들어 필자가 여러분에게 바퀴라는 속성을 알려주고 , 이 대상이 모터 사이클과 개중 무엇일지 물어보았다면 여러분은 아마 모터사이클이라고 답할 것이다. 여기서 바퀴는 개와 모터사이클을 분명하게 구분 지어주는 강력한 특징이다. 그러나 같은 특징 (바퀴)을 주고 이 대상이 모터 사이클과 자전거 중에 무엇이닞 묻는다면 선뜻 답하기 어려울 것이다. 확실하게 대답하려면 거울이나, 페달과 같은 특징이 더 필요하다. 머신러닝 모델은 원 데이터 (이미지)를 변환해 얻은 벡터를 입력 받아 대상의 특성을 학습한다.
먼저 모터사이클이 찍힌 원래 이미지를 특정 추출 알고리즘에 입력한다. 이 특징 알고리즘은 속을 알 수 없는 블랙박스와 같다. 이 알고리즘에 대해서는 나중에 다시 설명한다. 지금은 이 알고리즘이 여러 특징 갑싱 담긴 벡터를 출력한다는 것만 알면 된다. 특징 벡터는 대상의 본질을 잘 나타내는 1차원 배열이다.
사물 인식에서 유용한 특징의 특성
좋은 특징은 대상이 어떤 상태에 있더라도 이 대상을 다른 대상과 구별되게 해준다. 좋은 특징의 특성은 다음과 같다
- 다른것과 구별된다.
- 추적과 비교가 쉽다
- 배울, 밝기, 각도가 달라도 일관적이다
- 노이즈가 많은 이미지 또는 대상 일부만 찍힌 이미지도 관찰 가능하다
특징 추출하기 (자동 추출과 수동 추출 )
특징 추출은 특징 엔지니어링을 설명할 때 함께 다루는 주제다.
자동으로 추출된 특징을 사용하는 딥러닝
하지만 딥러닝에서는 사람이 직접 특징을 추출할 필요가 없다. 신경망이 자동으로 특징을 추출하고 뉴런 간의 연결에 부여된 가중치를 통해 출력에 미치는 각 특징의 중요도를 학습한다. 원래 이미지(미가공 이미지)를 신경망에 입력해서 각 층을 통과시키면 된다. 이미지에서 패턴을 식별하고 특징을 만드는 일은 신경망이 대신한다. 신경망은 특징 추출기와 분류기의 기능을 합친 것으로 불 수 있으며 특징 추출과 분류를 모두 학습할 수 있다. 이 점이 사람이 직접 추출한 특징을 필요로 한느 기존 머신러닝 모델과의 차이점이다
'Machine-Learning > CV (Computer Vision)' 카테고리의 다른 글
[CV] VGGNet (Simonyan and Zisserman, 2015) (0) | 2022.10.28 |
---|---|
[CV] ResNet (0) | 2022.10.11 |
[영상] Bilinear Interpolation (0) | 2022.10.06 |
[CV] albumentations (Image Augmentation) (0) | 2022.08.23 |
[CV] 합성곱 신경망 (Convolutional Neural Network, CNN) (0) | 2022.08.23 |
댓글