[Trend Color Matching Project] 2. K-Means 클러스터링을 이용한 상하의 색상 추출
[공지사항] [YOLOv5를 활용하여 남성 상하의를 감지하고, Kmeans와 KNN을 활용하여 트렌드에 맞는 패션 컬러를 자동으로 예측하는 개인 프로젝트입니다.] 👉🏻깃허브 바로가기
트렌드 기반 패션 컬러 매칭 프로젝트 2편
트렌드 기반 패션 컬러 매칭 프로젝트
- 2 . KMeans 클러스터링을 이용한 상하의 색상 추출
- 👉🏻코드 바로가기
트렌드 기반 패션 컬러 매칭 프로젝트 1편에서 설계했던 파이프라인에서 2. 색상 추출 알고리즘 을 할 차례이다.
데이터 불러오기
1편과 동일 하게 로보플로우에서 바운딩 좌표와 이미지를 불러온다.
객체 검출 모델 학습때와 동일하게 바운딩 좌표의 클래스를 분류해준다.
이제부터는 나에게 익숙한 jupyter notebook 환경에서 진행하게 때문에 일부 코드를 수정했다. 가상 환경 설정 바로가기
일부분 수정한 바운딩 좌표의 클래스를 분류 해주는 코드는 다음과 같다.
색상 추출
학습에 쓰일 색상 데이터를 만들기 위하여 색상 추출의 방식에 대해 많은 시도를 했다.
바운딩 좌표를 활용하여 해당 부분의 색상을 검출 하기 위하여 평균 색상을 통한 추출 방식 히스토그램으로 색상을 추출 방식을 해봤지만 모두 실패하고 말았다.
특히 여러 색상이 섞여 있거나 문양이나 마크가 있는 경우 전체적인 주요 색상을 추출하는데 어려움을 겪었다.
하지만 수많은 시도 끝에 KMeans 클러스터링 으로 주요 색상 추출을 성공하였다.
K-Means 클러스터링이란?
- K-Means 클러스터링은 주어진 데이터를 K개의 클러스터로 그룹화하는 비지도 학습 알고리즘 중 하나이다.
- 각 클러스터의 중심은 해당 클러스터에 속한 모든 데이터 포인트의 평균으로 계산된다.
- 각 픽셀을 하나의 데이터 포인트로 간주하고, 클러스터링을 통해 주요한 색상을 찾아낸다.
- K-Means는 데이터를 여러 그룹으로 나누기 때문에, 각 그룹의 중심(대표 색상)을 효과적으로 찾아낼 수 있었다.
이제 코드를 살펴보자.
색상 추출을 위해 여러 함수들의 알고리즘을 만들었다.
- convert_normalized_coordinates 함수
- 정규화되어 있는 바운딩 박스의 정보(class_label, x_center, y_center, width, height)를 실제 좌표로 변환한다.
- kmeans_find_major_color 함수
- 픽셀을 1차원 배열로 변환하고, K-Means 클러스터링을 사용하여 주요 색상을 찾는다. 찾은 주요 색상은 RGB 값으로 반환된다.
- save_to_csv 함수:
- 색상 추출을 한 주요 색상 RGB 데이터를 CSV 파일로 저장한다.
-
extract_major_colors 함수
- 위의 3가지 함수를 사용하며, 바운딩 박스가 표시된 이미지 객체를 시각화한다.
테스트 결과
이 알고리즘이 잘 작동하는지 확인해보자.
먼저, 정규화 되어 있는 좌표를 실제 좌표로 잘 변환이 되었는지 초록색 바운딩 박스를 통해 확인했다.
색상 코드 변환기 바로가기 링크를 들어가서 RGB 코드(210, 86, 16)를 입력하면 사진과 동일하게 주황색을 추출 할 수 있었다.
다른 이미지에 대해서도 테스트 했고 결과는 성공적이였다.
DateFrame 생성
이제 해동 코드를 전체 파일에 대해서 실행하여 파이프라인 3.하의 색상 예측 모델의 학습을 위한 데이터 프레임을 만든다.
코드는 다음과 같다.
로보 플로우를 통해서 불러온 바운딩 좌표와 이미지를 통해 3가지 csv파일을 생성해냈다.
👉🏻전체 코드 바로가기 전체 코드는 깃허브에서 참고 하면 된다.
댓글남기기