[컴퓨터 비전] 이미지 피쳐 추출 (Feature Extraction) - Resnet50

Flash·2022년 7월 2일
3

수행한 프로젝트의 구조는 아래와 같다.

나는 여기서 이미지 피쳐 추출 및 클러스터링 기술 부분을 맡아 수행했다.

Feature ?

Feature는 어떤 데이터에서 의미있는 필요한 정보

Feature extraction은 feature selection과 유사하지만 차이가 있다.

Feature selection

Feature selection은 해당 데이터의 특징 집합에서 일부를 제거하거나 선택하여 간결해진 특징 집합을 뽑아내는 것이다.
이 경우에 특징의 중요도를 따져서 필요한 특징을 선택한다.

Feature extraction

반면에 Feature Extraction은 기존의 특징 집합에서 조합을 통해서 새로운 특징을 생성하는데 고차원의 Feature를 저차원의 feature로 매핑한다.
Feature extraction과 Dimensionality reduction은 유사한 용어로 볼 수 있다.

차원 축소를 하는 방법으로 PCA(Principal component analysis)와 LDA(Linear Discriminant Analysis)의 두 가지를 볼 수 있다.

차원 축소 방식에 대해서는 따로 다루도록 하겠다.

프로젝트를 진행하는 동안 메타버스 아바타 이미지의 feature extraction 작업을 수행하게 되었다.

딥러닝 모델의 최상단 FC layer를 제거하고 나머지를 feature extractor로 사용할 계획이었다. 그 이유는 기존의 머신러닝 방식과 다르게 딥러닝 방식은 feature extraction을 사람이 직접하지 않고 학습을 통해 수행하기 때문에 분류를 수행할 수 있는 좋은 feature를 뽑아내기 때문이다.

하지만 메타버스 아바타 이미지 셋이 학습을 수행할 만큼 충분히 확보하기 어려웠고 따라서 아바타와 유사한 사람의 이미지를 통해 모델을 학습하기로 했다.

이때 사용한 것이 Market1501 데이터 셋이고 딥러닝 모델은 Resnet50을 사용했다. Market1501을 사용하여 Resnet50을 학습시키고 이를 pytorch의 save를 이용하여 모델을 저장했다. 모델을 저장한 것은 사전 학습된 모델을 서버에서 사용하기 위함이다.

이 부분에 한계가 존재하는데 Market1501은 인간의 전신 사진을 모은 데이터 셋이고 입은 옷의 색상이 큰 특징이 되도록 학습이 된다. 따라서 아바타의 전신이 나오지 않거나 비슷한 의상을 입은 경우에 비슷한 피처가 추출되게 된다.

인자로 resnet50 모델을 받아오는 클래스를 생성했다. 아래 forward가 사용하게 될 추출기 인데 self.pool을 이용해서 피처의 차원을 원하는 차원으로 축소하여 사용했다.

이렇게 추출한 이미지 피처는 n차원 공간에 펼쳐지고 이 피쳐들은 군집화 기술을 통해서 각 군집에 배치되어 아바타를 구분했다.

Clustering

군집화 기술로는 K-means clustering을 사용했는 데 정확도가 높은 대신 아바타 종류의 수를 알아야 하는 한계점이 존재한다.

군집화 결과를 살펴보면 서로 다른 남녀가 동일 군집에 배치되었는 데 공통점으로 둘 다 체크 패턴의 티셔츠를 입었다는 것이다. Market1501로 학습을 한 경우에 명확한 한계점을 확인했다.

여러 다른 방안으로 추출기의 성능을 향상 시켜야 군집화 결과가 더 높은 정확도를 보일 것으로 예상되는 데 일단 메타버스가 더욱 활성화되어서 추출기 학습에 사용할 메타버스 아바타 이미지 셋이 대용량으로 생기는 것이 필요할 것 같다.

아바타 이미지로 추출기를 학습하는 것만으로도 군집화 성능이 큰 향상을 이룰것으로 기대된다.

프로젝트에 사용한 최종 코드는 아래 링크에 있다.
프로젝트 최종 코드

profile
Whiplash We Flash

0개의 댓글