20 분 소요


[주간 정규 회의 및 팀별 활동 기록]

  • 정규 회의
    2024-03-28 (목) 11:00 ~ 22:00
    => 활동 시간: 11시간 00분
  • Calibration 팀 활동
    2024-03-25 (월) 13:30 ~ 16:30
    2024-03-26 (화) 18:00 ~ 22:00
    2024-03-27 (수) 11:00 ~ 13:30, 15:30 ~ 16:30
    => 활동 시간: 10시간 30분
  • Clustering 팀 활동
    2024-03-26 (화) 14:20 ~ 16:20, 18:00 ~ 22:00
    2024-03-27 (수) 15:00 ~ 16:30
    => 활동 시간: 7시간 30분



1. 주간 활동 정리

Calibration 팀 주간 계획 및 활동 성과 요약

  • 개발
  1. TCX 색계열 구분: Calibration 및 Clustering 알고리즘에 활용하기 위하여 색의 계열을 구분할 필요성이 있음. 이에 따라 TCX 팬톤 코드를 분석하여 색 계열을 구분한다. 이를 알고리즘에 활용할 뿐만 아니라 LINC 3.0 신청서 작성에도 예산 사용 근거로 제시한다.
  2. 보정 알고리즘 관련 논의: TCX 색계열 구분을 선행적으로 진행한 후, Calibration을 위한 알고리즘을 논의하여 먼저 시도할 방법을 확정한다.
  • 비개발
  1. 면담 확인/면담 진행: 패션산업학과 이현승 교수님 면담을 통해 TCX 확보 가능성 및 대체재를 확인한다.
  2. LINC3.0 신청서 작성: 추가로 작성 완료하여 예산(TCX) 확보 가능한지 제출 및 확인한다.
  3. H/W 제작을 위한 설계 논의 및 아크릴 주문: 높이는 실제 촬영본 확인 후에 확정하는 것으로 고려하여 아크릴의 수치를 확정하고 주문한다.


  • 요약

4주차 활동은 H/W 제작, 개발에 필요한 데이터/재료의 확보와 알고리즘 설계(색 계열 구분 및 보정 알고리즘 관련 논의)를 중점적으로 진행하기로 계획 했다. 먼저 패션산업학과 이현승 교수님과 면담을 통해 아이디어에 대한 인사이트를 제공받을 수 있었으며, TCX를 확보할 수 있는 추가적인 대안을 제공 받았다. TCX 확보가 어려울 경우, LINC3.0 신청을 통해 예산을 제공받아 Labeled Data로써 활용하고자 한다. 이에 따라 LINC3.0 신청서를 작성하고자 했으나, 색 계열에 대한 정확한 구분은 H/W가 완성된 후, 실질적 검증을 통해 가능할 것으로 보인다. 이에 따라 LINC3.0과 관련한 활동은 잠시 중단하고, H/W 제작을 우선적으로 진행했다.


Clustering 팀 주간 계획 및 활동 성과 요약

  1. 컬러톤별, 다색상별 최적의 DBSCAN 하이퍼 파라미터 찾기: 다양한 경우에 대응할 수 있는 최적의 파라미터를 찾는 과정을 조사하고 calibration 팀의 색계열 구분에 따라 구분된 색 계열 각각의 클러스터링 후 TCX RGB값과의 차이를 분석해서 색계열과 샘플 색상 수에 따른 최적의 DBSCAN 하이퍼 파라미터를 찾는다.
  2. DBSCAN 개선 + 대표색상 추출 알고리즘 설계: 클러스터링 알고리즘 적용 이후 각 클러스터에서 대표 색상을 추출할 때 단순하게 평균값 이외의 특성을 잘 반영할 수 있는 알고리즘 설계한다.


  • 요약

아직 H/W 환경이 완벽하게 구성되지 않았고 선행되어야 하는 과정들이 아직 존재하기 때문에 4주차는 환경 설정이 완료되었을때 수월하게 진행될 수 있도록 사전준비의 느낌으로 진행했다. 이를 통해 최적의 클러스터링 파라미터를 찾는 방법과 클러스터링 이후 대표색상을 추출하는 방법을 TPG 촬영 이후 바로 적용할 수 있도록 했다.



2. Calibration 팀 진행 사항

1) 패션산업학과 이현승 교수님 면담

시스템 제작을 위해 필요한 TCX 확보를 위해 인천대학교에서 가장 유사한 전공인 패션산업학과에 도움을 요청하기로 하였다. 어떤 교수님께 도움을 요청드려야 할지 정하기 위하여 교수님들의 담당 과목을 확인하였고, 패션색채 과목을 담당하고 계신 이현승 교수님께 인터뷰를 부탁드렸다.

인터뷰 내용

면담 시간: 2024.03.27 화요일 오후 12:30

면담 교수님: 패션산업학과 이현승 교수님


Q.1

특정 색상의 원단이 필요해서 공장에 원단 발주를 맡겨보신 경험이 있으십니까? 만약 있으시다면, 그 과정에서 겪으신 애로사항이 있으신지 질문드립니다.

A.1

RGB와 CMYK 차이에서 문제가 발생한다. RGB가 더 어둡다. 색공간이 다르기 때문에, 색공간이 비교적 작은 CMYK가 더 어둡게 찍힌다. RGB가 CMYK로 변환 될 때의 보정 시스템을 개발해도 좋을 것 같다.


Q.2

Adobe RGB 컬러코드가 패션 산업 업계에서 디지털 및 실물 분야 모두에서 스탠다드로 활용되는 지 질문드립니다. 추가로, 본 프로젝트의 배경인 클라이언트와 생산 공장 사이의 커뮤니케이션에서도 팬톤을 대체하여 어도비 RGB가 사용되는 것입니까?

A.2

디지털 및 실물 분야에서 사용되는 컬러 스탠다드는 다르다. 대단위 작업장은 팬톤을 사용하는데, 소규모는 어도비 컬러코드를 기준으로 한다. 현재 국내에서 대단위 작업장을 가진 기업은 많지 않고, 대부분이 소규모 작업장이라고 볼 수 있다. 그 중에서도 만들어진지 얼마 되지 않은 젊은 브랜드들은 대체로 RGB 코드를 원단 생산 공장에 제공하고, 이대로 원단 찍어달라고 하기도 한다.

당연하게도, 이렇게 하면 실제 색감에서는 차이가 존재할 수밖에 없다. 그 이유는 RGB와 CMYK의 색 공간 차이가 존재하기 때문이라고 할 수 있다. 소규모 작업장은 이러한 차이가 존재할 수밖에 없다는 것을 인지하고 있기 때문에, 그 차이를 감수하고 팬톤 레퍼런스를 사용하기 위해 들어가는 비용을 절감하는 것이다. (팬톤이 다소 고가이기 때문에 지속적으로 신뢰성 있는 레퍼런스를 유지하기가 어려움.)

정리하자면 대단위 작업장을 가진 과거의 기업들은 커뮤니케이션 과정에서 팬톤을 주로 사용하지만, 신생 기업들의 영향력이 커지면서 팬톤의 활용도는 점차 줄어들고 있다. 다만 이 것이 팬톤의 활용 가치가 없다는 것을 시사하는 것은 아니며, 팬톤은 여전히 색상 분야에서 권위를 갖는다고 할 수 있다.


Q.3

클라이언트와 원단 생산 공장 사이에서 발생하는 애로사항은 RGB와 CMYK의 색차에서 기인한다고 말씀해 주셨는데, 만약 클라이언트가 RGB로 만들어달라고 요청하면 공장은 CMYK로 염색해서 다른 색이 나오기 때문에 문제가 되는 것입니까?

A.3

그것이 문제가 맞다.

원단 업계는 다소 고리타분하고 주먹구구 식의 느낌이 있기 때문에, 여전히 예민하고 엄격한 사람들은 원단 샘플을 가져와서 그대로 제작해 달라고 요청하기도 한다. 이전에 언급한 것처럼 신생 기업들은 대체로 RGB 코드를 제공하고 이에 따라 발생하는 색차는 감안하는 추세이지만, 여전히 많은 Light(규모가 작은) 기업에서는 원본 원단원단 생산 공장에 제공하는 방식을 활용한다.

추가로, 대량 발주를 할 수 있는 대단위 작업장을 가진 대기업들은 대체로 자체적 QC(Quality Control) 과정이 있어서 색상에 대한 기준을 설정하지만, 소량 발주가 주가 되는 소규모 작업장에서는 QC가 보편화 되어 있지 않고, 상대적으로 주관적으로 이루어지고 있다. 따라서 본 시스템은 Light한 기업을 타겟으로 하면 좋을 것이다.


Q.4

외부 기관, 업체 등을 통해 팬톤 TCX(면 직물 레퍼런스)를 구할 수 있는 방안에 대해 알고 계신 사항이 있으신지 질문드립니다. 추가로, 팬톤을 제외하고 동일한 기능을 할 수 있는 다른 방안에 대해 제공받을 수 있는 아이디어가 있으신지 질문드립니다.

A.4

젊은 창업자들을 지원해주는 역할을 하는 섬유산업연합회에 문의해보면 팬톤 TCX를 대여할 수도 있을 것 같다. 우리나라 규격(COS)도 있긴 한데, 팬톤 따라한 건데 쓰는지는 잘 모른다. (COS 책을 제공 받았으며, 종강하고 반납해야 함.) 추가로 컬러리스트 시험 볼 때 쓰는 칩 하나 더 있는데 알아봐라. 마지막으로, 색채와 관련한 시스템을 만든다면 패션산업학과 보다는 시각디자인과 교수님을 뵈는게 더 도움이 될 것이다.


기타 말씀하신 내용

  • 체크무늬 등의 다색상 원단은 염색한 원단이 아니며, 이는 서로 다른 실들이 직조되는 것이므로 염색과는 얘기가 다르다. 그 외의 나염 과정을 거친 다색상 원단을 다루고자 한다면 프린팅 개념으로 접근해야 한다.
  • 대기업이 아닌 이상은, 우리가 조사한 것처럼 스와치 샘플을 주고 동일한 원단을 만들어달라고 하는 방식이다. 실질적인 예를 들자면, 어떤 클라이언트가 패션쇼에 가서 마음에 드는 의상을 구매했다고 하자. 그 의상의 색상을 그대로 사용하고자 한다면, 그 원단을 직접 오려서 원단 생산 공장에 가져가서 “이대로 만들어 달라.”라고 요청하는 방식이다.
  • 우리처럼 다색상 원단 유사성 판별을 취지로 하는 프로세스라면, 출판 인쇄 업계에 가는 것이 더 영감을 줄 것이다. 여기는 진짜 칼라북을 들고다니면서 “이대로 해!” 라고 하고, 인쇄소 QC (인쇄소 QC는 인쇄 과정에서의 품질 관리를 의미) 직원이 있다. 색을 계속 대조한다.
  • 본 시스템과 유사한 연구로 서울대에서 진행하고 있는 것이 있는데, 평면 스캐너를 활용해서 입체적으로 물체를 3D 스캔하여 조색 유사도를 검증하는 방식이다.


인터뷰 결과 요약 및 방향성 제시

인터뷰 결과, 본래 목적이었던 팬톤 TCX를 제공받는 것은 불가능했지만, 본 시스템 개발에 있어서 필수적으로 알아두어야 할 다양한 인사이트를 얻을 수 있었다. 본 토픽에서는 인터뷰 결과에 대해서 간단하게 요약하고 앞으로의 방향성을 제시하고자 한다.


  • 팬톤 TCX 확보

패션산업학과에서는 팬톤 TCX를 확보하기 어려웠다. 워낙 고가의 물품이기 때문에 학교 측에서는 확보하기 어렵다고 한다. 이에 따라 이현승 교수님께서는 한국섬유산업연합회 측에 컨택해보는 것을 추천해 주셨다. 더 나아가서 색채 QC와 더 밀접한 연관이 있는 디자인학부에 반드시 컨택해보라고 조언해 주셨다.

  • 시스템의 가치

이전에도 확인한 내용이었지만, 교수님을 통해 본 시스템의 가치를 다시금 확인할 수 있었다. 최근 현업에서 신생 기업들은 RGB와 CMYK에서 발생하는 색차를 감수하고 원본 원단 대신 RGB 코드를 제공하는 방식을 사용하는 추세로 나아가고 있다고 한다. 하지만 모든 기업이 그러한 것은 아니며, 여전히 많은 기존 기업들이 실물 원단을 제공하고 커뮤니케이션을 통해 색상을 맞춰나가는 방식을 택한다고 한다. 따라서 이러한 Light 기업들을 타겟으로 설정한다면 충분히 가치가 있을 것이며, 다색상 원단에 대한 비교를 초점으로 맞춘다면 더욱 가치있을 것이다.

  • 피드백에 대한 인사이트

본 시스템의 개발에 있어서 더 많은 가치를 확보하기 위해서는 피드백까지 제공할 수 있는 것이 좋다. 교수님께 답변받은 내용에 따르면, 근본적으로 염색에서 발생하는 색차는 RGB와 CMYK 색 공간의 크기에서 비롯되며, 대체로 염색 후에 더 어둡게 나온다고 한다. 이러한 점에 집중하여 피드백을 제공할 수 있는 아이디어를 생각해보도록 하자. 만약 개발이 성공적으로 끝난다면, 실제 공장을 돌아다니면서 피드백을 제공하는 방법까지 확인해 볼 수 있을 것이다.


2) 팬톤 TCX 색 계열 구분

2626개의 색상을 갖는 팬톤 TCX에 대해서 색 계열을 구분하는 활동을 진행한다. 이 활동을 진행하는 이유는 크게 2개로 나뉘어진다.

첫째, 원단의 색 특성(Hue, Saturation, Value)에 의해서 동일한 조명을 받을 때 색상이 변하는 정도가 다를 수 있으므로, 이러한 차이에 대해서 파악할 필요가 있다. 색 특성에 따라 색이 변화하는 정도를 파악할 수 있어야 Calibration 알고리즘을 어떻게 설계하고 적용할 것인지 확정할 수 있기 때문에, 반드시 이 과정이 선행되어야 한다.

둘째, LINC3.0을 통해 TCX를 구매하기 위한 예산을 지원 받기 위해서는 해당 TCX를 구매해야 하는 이유를 제시해야 한다. TCX는 고가의 물품이기 때문에 근거도 없이 무작정 “이걸 사주세요.” 라고 한다면 LINC3.0 사업단 측에서 받아들이기 힘들 수도 있다. 따라서 색 계열을 구분하고 이에 따른 영향력을 실질적으로 확인하여야 우리에게 정말 필요한 TCX의 색상과 개수 등을 확정할 수 있다.

색상환(Color Wheel)을 기반으로 한 색 계열 구분

image-20240331145355638

일반적으로 디자인 분야에서는 색상환을 통해 색 계열을 구분한다. 색상환이란, 색의 계열을 색상, 채도, 명도 등을 기반으로 구분한 구조이다. 위의 이미지와 같이 12개의 Hue에 따라 색이 나뉘어지며, 채도/명도에 따른 세부적인 분류가 진행된다. 위 그림을 간략히 표현하면 아래와 같다.


image-20240331145539410

=> 12개의 대표색을 표현하는 색상환 이미지


적절한 Calibration 알고리즘을 설계하기 위하여 색 계열을 구분할 필요가 있는데, 가장 기초적이고 기본적인 방식으로는, 색상에 따라서 동일한 조명 하에서 색이 변하는 정도에 차이가 존재한다고 생각할 수 있다. 이에 따라 제시된 색상환을 기반으로 색 계열을 구분하고, 그 속에서 명도/채도에 따라 적절한 기준을 설정해 TCX 원단을 구매하는 방안을 고려해 볼 수 있다.


image-20240331145840198

위에 제시된 12개의 색 계열 중, YELLOW, GREEN, BLUE, VIOLET, RED, ORANGE를 제외하면 나머지는 양 옆에 존재하는 색상을 섞은 색상이라는 것을 알 수 있다. 따라서 가장 큰 대표성을 띄는 것은 YELLOW, GREEN, BLUE, VIOLET, RED, ORANGE라고 볼 수 있으며, 해당 색상 내에서 명도/채도에 따라 다음과 같이 구분을 지어 볼 수 있다.


  • RED

    • 색상 0(360)˚, 명도 100%, 채도 100%

    • 색상 0˚, 명도 50%, 채도 100%

    • 색상 0˚, 명도 100%, 채도 50%

  • ORANGE

    • 색상 30˚, 명도 100%, 채도 100%

    • 색상 30˚, 명도 50%, 채도 100%

    • 색상 30˚, 명도 100%, 채도 50%

  • YELLOW

    • 색상 60˚, 명도 100%, 채도 100%
    • 색상 60˚, 명도 50%, 채도 100%
    • 색상 60˚, 명도 100%, 채도 50%
  • GREEN

    • 색상 120˚, 명도 100%, 채도 100%
    • 색상 120˚, 명도 50%, 채도 100%
    • 색상 120˚, 명도 100%, 채도 50%
  • BLUE

    • 색상 240˚, 명도 100%, 채도 100%
    • 색상 240˚, 명도 50%, 채도 100%
    • 색상 240˚, 명도 100%, 채도 50%
  • VIOLET

    • 색상 280˚, 명도 100%, 채도 100%
    • 색상 280˚, 명도 50%, 채도 100%
    • 색상 280˚, 명도 100%, 채도 50%

=> 여기에서 색상에 의해 구분되지 않는 WHITE, BLACK은 예외적으로 추가한다.

  • WHITE
    • 색상 0˚, 명도 100%, 채도 0%
  • BLACK
    • 색상 0˚, 명도 0%, 채도 0%

=> 정리: 팬톤 TCX 총 20장


팬톤 TCX 코드를 바탕으로 한 색 계열 구분

이전에는 이론적인 방향으로 색 계열을 구분하고 대표 색상을 추출하고자 하였다. 이번에는 실질적인 데이터로 활용하고자 하는 팬톤 TCX 코드를 기반으로 코드가 갖는 의미를 파악하고, 어떠한 코드를 선택하는 것이 가장 합리적인지 확인하고자 한다.


  • 과정: 팬톤 색상 2626개 코드를 분석하고 해당 RGB 값을 바탕으로 시각화를 진행하여 내재된 의미를 파악한다. 이를 통해 대표 색상 코드를 추출하는 기준을 마련한다.


  • 팬톤 코드 분석

팬톤 코드는 세 개의 값으로 이루어지며, 다음과 같은 형식이다. (ex) 17-1664) 각 값의 의미는 다음과 같다.

  1. 밝기(Lightness, ex. 17)
    흰색과 검은색 사이의 모든 값을 신속하게 확인 가능함. (11~19)
  2. 색조(Hue, ex. 16)
    노랑, 빨강, 파랑, 초록 등의 색상 구분을 의미함. (0~16)
  3. 채도(Chroma, ex. 64)
    색의 선명도, 또는 탁한 정도인 채도 수준을 나타내며, 검정과 흰색, 또는 회색과 같은 무채색에 가까울수록
    채도가 낮다고 표현한다. (0~64)
  • TPG(TCX) 특성 별 최대/최솟값 정리 및 R, G, B 최대/최솟값 정리

image-20240331150551256

=> 실제로 존재하는 TCX 코드를 기반으로 분석한 결과이다.
특이하게 G의 경우 10이 최솟값인 것을 확인할 수 있다.


  • HSV 순으로 모든 코드의 색상을 오름차순 정렬한 이미지

tcx_analyiss


위 이미지는 Python을 이용해, H-S-V 순으로 모든 TCX 코드를 정렬한 것을 시각화한 이미지이다. H를 우선으로 정렬했기 때문에 색에 따라서 구분이 이루어짐을 알 수 있다. 이후에는 S(Saturation), V(Value)에 의해서 정렬되는데, 이는 채도가 같은 것들이 먼저 나오고, 그 안에서 명도가 다른 것들이 정렬되는 형태라고 할 수 있다. 이와 같이 구분하였을 때, 각 색조 별로 적절한 간격(interval)을 정하거나, Random Selection을 하는 형태로 구매할 코드를 결정하는 것이 바람직할 것으로 보인다.

다만, 위와 같이 정렬하는 것은 한 색상(Hue) 내에서 색상이 다소 뒤죽박죽 섞여 있다는 느낌이 들기 때문에 HVS 순으로 정렬을 진행해보고,
또 다른 방식으로도 정렬해보며 시각적인 인사이트를 얻어볼 필요성이 있다.


색 계열 구분 향후 진행 계획

이전에 색상환을 바탕으로 선택할 TCX의 특성을 정하고, 실제 팬톤 TCX 코드를 정렬하여 시각화 해봄으로써 적용 가능한 대략적인 범위를 확인할 수 있었다. 그러나 한 가지 의문이 제기되었는데, 바로 ‘실질적으로 색상의 변화에 영향을 주는 것은 색조가 아닌, 명도가 아닐까?’ 라는 의견이다.

이러한 의문은 이전에 임시 H/W를 제작하고 TPG 데이터셋을 촬영할 때, 그리고 이번에 H/W를 제작하는 과정에서 이미지를 촬영해보고 얻어낸 이미지를 분석하며 얻어낸 통찰이라고 할 수 있다.

H/W 제작에 관한 자세한 내용은 대주제 4. 공통 작업에서,
소주제H/W 제작에서 더욱 자세히 설명하도록 한다.

또한, 아래에서 제시된 데이터 촬영 결과는 대주제 4. 공통 작업에서,
소주제인 임시 H/W를 활용한 TPG 데이터 촬영에 제시한다.

우리는 지난 테스트 과정을 거치며, 어떠한 데이터(원단)를 촬영할 때, 원단의 실제 색상과 촬영된 색이 다르다는 것을 손쉽게 알 수 있었다. 다양한 색조의 데이터를 촬영해보면서 촬영된 이미지의 색이 원본에 대비하여 변화하는 정도가 일관되지 않고 항상 다르다는 것을 확인했는데, 이는 분명히 색의 특성에서 인과를 찾을 수 있을 것이다.

그런데, 실증적으로 확인해본 결과 대체로 밝은 원단은 색이 비교적 많이 변했고, 어두운 원단은 색이 더욱 많이 변했다. 이는 원단의 색 변화에 영향을 미치는 가장 큰 요소가 색조가 아닌 밝기일 수도 있다는 점을 시사한다고 보인다.

추가적으로, 일반적으로는 어두울 수록 색이 많이 변할 것이라고 생각되지만 촬영한 이미지에서는 밝을 수록 색이 많이 변한 것을 확인했다. 이는 일반적 가설과는 다른 결과가 도출된 것이며, 다른 색조와 다양한 밝기/채도에 대해서 촬영하며 인과관계를 파악해야 할 것으로 보인다.

이에 따라 우리는 우선적으로 H/W를 완성한 후, 가지고 있는 데이터셋을 빠르게 촬영하고자 한다.
이를 바탕으로 색 특성과 변화율의 상관 관계 분석 및 Calibration 알고리즘 설계에 돌입하고자 한다.
이 과정이 완료되고 나면 TCX 구매에 대한 근거를 제시하여 LINC3.0 신청서를 추가로 작성하도록 한다.



3. Clustering 팀 진행 사항

1) DBSCAN 최적의 파라미터 도출

최대한 다양한 경우의 수에 대응할 수 있도록 최적의 하이퍼 파라미터를 찾는다.

3월 22일에 진행한 TPG샘플 테스트를 통해 파란색 계열에서의 좋은 결과를 얻었지만 파란색 계열의 6가지 색상 이미지에서만 적용되는 결과일 수 있기 때문에 3차원 RGB공간상에서 색 계열에 따른 데이터 포인트 분포 특성을 고려해야 한다.

이를 위한 방법으로는 범용적인 하이퍼 파라미터를 찾는 방법과 각 경우마다 각기 다른 하이퍼 파라미터를 사용하여 변수를 줄이는 방법이 있다.


접근 1. 범용적인 하이퍼 파라미터를 찾는 방법

K-means 군집 분석의 경우 입력 모수로부터 군집 개수 K를 결정하는 것이 어려움이라면, DBSCAN은 입력 모수로서 ‘(a)점으로부터의 반경 Eps(Epsilon)와 ‘(b) Eps 내 최소 점의 개수인 MinPts’를 결정하는 것이 중요하고도 어려운 문제이다.

그렇지만 연립 방정식 풀듯이 이론적으로 증명된 DBSCAN의 입력 모수 MinPtsEps 를 구할 수 있는 공식 같은 것, 객관적인 통계량 같은 것은 없다. 다만 MinPtsEps를 결정하는데 도움을 받을 수 있는 주관적인 Heuristic method가 있다.

따라서 첫번째로는 Eps, MinPts 를 결정하는 Heuristic 방법(Determining the Parameters Eps and MinPts)을 사용하여 따라 범용적인 하이퍼 파라미터를 찾아보고자 한다.


  • DBSCAN에서 MinPts를 결정하는 Heuristic 방법 : ln(n)

    MinPts가 만약 너무 작은 수이면 잡음(Noise)으로 구분되어야 할 점들 마저도 코어 점(core points)나 또는 경계점(border points)로 잘못 구분이 되어 원래 데이터 셋 내의 군집 개수보다 더 많은 수의 군집이 형성될 수 있다.

    MinPts를 결정할 때는 데이터 특성과 구조에 대해서 잘 알고 있는 전문가(domain expert)의 의견을 반영할 필요가 있다고 하지만 현실에서는 데이터 분석을 할 때 업 전문가가 없을 수도 있고, 있더라도 MinPts를 잘 결정할 수 없을 수도 있으므로 Heuristic 방법을 알아 둘 필요가 있다.

    DBSCAN의 원 논문에서는 2차원 데이터에 대해 실험을 해보니 MinPts가 4개와 5개 이상 간의 k-dist plot의 큰 변동이 없는 반면에 MinPts가 점점 커질수록 연산량이 상당히 커지므로 2차원 데이터에서는 MinPts = 4개로 하는 것을 권장하고 있다.

    2차원보다 많은 변수를 가지고 있는 데이터셋의 경우 MinPts = 2 * dim을 추천하는 논문도 있으며, 데이터셋별로 데이터의 구조나 객체의 개수 n이 서로 다를 수 있으므로, 데이터셋별 객체 개수 n 특성을 감안해서 MinPts를 결정하는 Heuristic 방법으로 ln(n)을 사용할 수 있다. 여기서 n은 데이터 개수(number of points in database)를 말한다.


  • DBSCAN에서 Eps 결정하는 Heuristic 방법: Elbow(Knee) method using sorted k-dist plot

    image-20240331161209461

    DBSCAN의 원 논문에서는 sorted k-dist graph를 그린 후 Elbow method를 사용해서 첫번째 계곡(first “valley”) 지점의 점이 구분 기준점(threshold point)이 되고, 이 기준점의 왼쪽은 잡음(noise), 기준점의 오른쪽은 군집으로 구분하고, 꺽이는 부분의 k-distEps로 결정하는 Heuristic 방법을 소개한다.

    sorted k-dist graph를 그리는 방법은, 먼저 MinPts를 k개라고 했을 때, 하나의 점으로부터 k개의 가장 가까운 점들 간의 거리, 즉 k_NN (k-Nearest Neighbor)의 거리를 오름차순으로 나열해서 그리면 된다. 실제 데이터에는 군집의 개수를 사전에 알 수 없는 경우가 대부분이므로, MinPts를 결정할 때는 이런 k-dist 그래프를 그려서 Elbow method를 사용해서 eps 값을 결정하면 된다.


접근 2. 가변 하이퍼 파라미터를 사용하여 변수를 줄이는 방법

실루엣 지표는 군집화 모델의 성능을 평가하기 위한 지표로, 데이터 포인트가 같은 군집 내의 다른 데이터들과 얼마나 가깝게 군집화되어 있고, 다른 군집에 있는 데이터들과는 얼마나 멀리 분리되어 있는지를 나타낸다. 이를 통해 군집화가 얼마나 효과적으로 이루어졌는지를 알 수 있다.

실루엣 지표는 개별 데이터 포인트마다 계산되며, 각 데이터 포인트의 실루엣 계수를 구하기 위해 해당 데이터 포인트가 속한 군집 내의 평균 거리(a(i))와 가장 가까운 다른 군집 내의 평균 거리(b(i))를 계산한다. 이 두 값을 이용하여 실루엣 계수는 다음과 같이 정의된다.

image-20240331161228579

=> 이 값은 -1에서 1까지의 범위를 가지며, 다음과 같은 의미를 갖는다.


  • 1에 가까운 값: 근처의 군집과의 거리가 멀다는 의미
  • 0에 가까운 값: 근처의 군집과의 거리가 가깝다는 의미
  • 음수인 값: 해당 데이터 포인트가 다른 군집에 더 잘 속한다는 의미

실루엣 지표를 계산하기 위해 Scikit-learn에서는 silhouette_samplessilhouette_score 함수를 제공한다. silhouette_samples는 각 데이터 포인트의 실루엣 계수를 반환하고, silhouette_score는 전체 데이터의 평균 실루엣 계수를 반환한다.

그러나 실루엣 계수가 높다고 해서 군집화가 항상 잘 수행되는 것은 아니다. 항상 실루엣 계수를 확인한 후에도 군집화된 데이터를 시각화하여 확인하는 것이 중요하다. 만약 데이터가 잘 구분되지 않았다면 실루엣 점수가 높더라도 좋은 클러스터링을 보장할 수 없다.

image-20240331161338074

image-20240331161358885

상당히 유용한 지표인것은 맞지만 앞서 설명된 내용처럼 실루엣 계수를 확인한 후에도 데이터를 시각화하여 재확인 하는것이 필요하다.


2) 대표값 추출 알고리즘 개선

클러스터링 이후 각 클러스터에서 대표값을 추출해야 하는데 촬영한 이미지의 색상을 잘 반영할 수 있는 대표값을 구하도록 알고리즘을 개선한다.

  • 대표적으로 대표값을 추출하는 방법은 다음과 같다.
  1. 중심점(centroid) 계산: 각 클러스터의 모든 포인트의 평균을 계산하여 중심점을 찾을 수 있다. 이 방법은 클러스터의 모양이 원형에 가까운 경우에 유효하다. 그렇기 때문에 클러스터가 비규칙한 형태를 갖는 경우에는 적절하지 않을 수 있다.
  2. 가장 밀도가 높은 포인트 선택: 각 클러스터 내에서 밀도가 가장 높은 포인트를 대표값으로 선택하는 방법이다. 이 방법은 클러스터의 밀집도가 중요한 경우에 유용하다.
  3. Median point(중앙점) 계산: 클러스터 내에서 모든 포인트의 중앙값을 계산하여 대표값으로 선택한다. 이 방법은 이상치에 민감하지 않고 비교적 안정적인 결과를 제공할 수 있다.
  4. PCA(Principal Component Analysis)를 이용한 주성분 계산: 주성분 분석을 사용하여 클러스터 내 데이터의 주축을 찾고, 해당 주성분들의 평균을 클러스터의 대표값으로 선택한다.
  5. K-Medoids 알고리즘 적용: K-Medoids 알고리즘을 사용하여 각 클러스터 내에서 가장 중심에 가까운 포인트를 대표값으로 선택한다. 이 방법은 이상치에 대해 더 견고하며, 클러스터의 형태에 상관없이 잘 동작할 수 있다.


  • 1번 단순 평균값 계산

image-20240331161459253

일반적으로 클러스터링을 진행하면 위 이미지와 같이 되는데 클러스터로 정상적으로 잘 묶인 0번과 1번을 보아도 3차원 공간상에서의 모습이 원형이 아닌것을 확인 할 수 있다. 그렇기 때문에 평균값을 이용해서 대표값을 추출하는것은 적절하지 않다.


  • 2번 밀도가 높은 포인트 계산

밀도를 통한 대표값 추출을 위해 예전에 사용했던 테스트 이미지를 재활용해 실험을 해보았다.

image-20240331161541148


밀도를 계산하는 코드는 다음과 같다.

# 핵심 포인트의 인덱스와 레이블 가져오기
core_indices = dbscan.core_sample_indices_
labels = dbscan.labels_

# 각 클러스터에서 가장 밀도가 높은 포인트 선택
cluster_centers = {}
for label in set(dbscan.labels_):
    if label == -1:
        continue  # 노이즈 클러스터 제외
    
    # 해당 클러스터의 포인트 추출
    cluster_points = dataset_array[dbscan.labels_ == label]
    
    # 해당 클러스터의 핵심 포인트 추출
    core_indices = dbscan.core_sample_indices_
    core_points = dataset_array[core_indices[dbscan.labels_[core_indices] == label]]
    
    # 핵심 포인트 중에서 주변 포인트가 가장 많은 포인트 찾기
    max_neighbors = -1
    max_density_point = None
    for core_point in core_points:
        # 주변 이웃 찾기
        neighbors = dataset_array[np.linalg.norm(dataset_array - core_point, axis=1) < eps]
        num_neighbors = len(neighbors)
        if num_neighbors > max_neighbors:
            max_neighbors = num_neighbors
            max_density_point = core_point
    
    cluster_centers[label] = max_density_point

# 각 클러스터에서 가장 밀도가 높은 포인트 출력
for label, center_point in cluster_centers.items():
    print(f"Cluster {label}의 가장 밀도가 높은 포인트: {center_point}")

실행결과:

Cluster 0의 가장 밀도가 높은 포인트: [189 190 174]
Cluster 1의 가장 밀도가 높은 포인트: [ 76 115 184]

=> 해당 결과를 1번 방법인 평균값으로 구한 대표값과 비교해보았다.


  • 클러스터 0

    image-20240331161635752

    평균값으로 구한 대표값 [193,194,179]

    밀도로 구한 대표값 [189,190,174]

  • 클러스터 1

image-20240331161653064

평균값으로 구한 대표값 [77,115,185]

밀도로 구한 대표값 [76,115,184]


평균 대표값과 밀도기반 대표값이 큰 차이가 없는것을 확인 할 수 있었고, 여전히 실제 색상 레이블보다는 전체적 밝기가 낮은것을 확인 할 수 있었다.

=> 색상 레이블값보다 밝기가 낮은 문제를 극복하기 위해 추가 방법을 고안


2-a 클러스터 내 가장 밝은 포인트 추종

클러스터 내에서 가장 밝은 포인트를 추출하면 색상 레이블에
비교적 가까워질 것이라는 추측에 따른 방법이다.

가장 밝은 포인트를 찾는 코드는 다음과 같다.

# 핵심 포인트의 인덱스와 레이블 가져오기
core_indices = dbscan.core_sample_indices_
labels = dbscan.labels_

# 각 클러스터에서 가장 크고 작은 포인트 선택
cluster_centers_max = {}
cluster_centers_min = {}
for label in set(dbscan.labels_):
    if label == -1:
        continue  # 노이즈 클러스터 제외
    
    # 해당 클러스터의 포인트 추출
    cluster_points = dataset_array[dbscan.labels_ == label]
    
    # 해당 클러스터의 핵심 포인트 추출
    core_indices = dbscan.core_sample_indices_
    core_points = dataset_array[core_indices[dbscan.labels_[core_indices] == label]]
    
    # 핵심 포인트 중에서 밝기를 구하기 위해 RGB를 평균화
    avg_values = np.mean(core_points, axis=0)

    # 평균이 가장 크고 작은 포인트 찾기
    max_avg_index = np.argmax(avg_values)
    min_avg_index = np.argmin(avg_values)
    max_avg_point = core_points[np.argmax(core_points[:, max_avg_index])]
    min_avg_point = core_points[np.argmin(core_points[:, min_avg_index])]
    
    cluster_centers_max[label] = max_avg_point
    cluster_centers_min[label] = min_avg_point

# 각 클러스터에서 가장 크고 작은 포인트 출력
for label, center_point in cluster_centers_max.items():
    print(f"Cluster {label}의 가장 평균이 큰 포인트: {center_point}")
    
for label, center_point in cluster_centers_min.items():
    print(f"Cluster {label}의 가장 평균이 작은 포인트: {center_point}")

경향성을 파악하기 위해 가장 어두운 포인트도 구해보았다.

=> 가장 밝은 포인트를 찾은 결과를 앞선 결과들과 비교하면 다음과 같다.

  • 클러스터 0

    평균값으로 구한 대표값 [193,194,179]

    밀도로 구한 대표값 [189,190,174]

    가장 밝은 대표값 [215,216,200]

  • 클러스터 1

평균값으로 구한 대표값 [77,115,185]

밀도로 구한 대표값 [76,115,184]

가장 밝은 대표값 [108,145,215]

확실히 가장 밝은 대표값을 사용하여 추출해보니, 레이블된 색상값에 가까워지는것을 확인했다.
하지만 이러한 방법들 모두 클러스터링이 적절한 하이퍼 파라미터로 되었다는 가정 아래서 신뢰할 수 있기 때문에
최적의 하이퍼 파라미터를 먼저 찾고 대표값 추출 방법을 마저 실험한 뒤 알고리즘을 정하도록 한다.



4. 공통 작업

1) H/W 제작

주문했던 H/W가 도착하여 실제 시스템 H/W 제작에 돌입했다. 이전에 많은 S/W 작업이 진행되지 못했던 가장 큰 이유가 실제 환경과 가정은 차이가 있기 때문이라는 한계 때문이므로, 빠르게 H/W를 제작한 후 실제 데이터셋을 촬영하여 알고리즘을 설계해야만 한다.


image-20240331153443676

=> 흰색 불투명 아크릴을 절단한 후, 설계에 따라 접착하는 과정


image-20240331153548102

=> 실제 H/W 예상 모습 확인을 위한 테스트 (촬영 테스트를 위해 천장이 실제로 부착되지는 않았음.)


image-20240331153759840

=> 동작 테스트를 위해 기존에 임시 H/W로 제작했던 보드롱을 부착한 이미지

현재 사용된 3T 아크릴은 두께가 너무 얇아서 외부 빛의 영향을 받는다는 한계가 존재했음.
이에 따라 외부에 추가적인 스티커 등을 부착하거나 페인트 등을 도포해야 할 것으로 보임.
현재는 흑색 보드롱을 부착하여 외부 빛을 차단하는 방식으로 대처했고, 이를 통해 임시적으로 테스트하였음.


2) 임시 H/W를 활용한 TPG 데이터 촬영

image-20240331154320038

위에서 제작된 H/W를 바탕으로, IMX477 이미지 센서망원 렌즈를 활용하여 TPG 데이터를 촬영한 이미지이다. 위에 촬영된 세 개의 색상은, 3주차에 스마트폰으로 촬영한 이미지를 통해 분석했던 색상이다. 해당 이미지에서 얻어낸 결과를 그림판 색차계 기능을 통해 간단하게 분석해보았다.


TCX Code: (중앙 RGB), (가장자리 RGB), (사이 지점 RGB) => (원본 색)

  • 18-4250: (0,60, 177), (0, 64, 182), (1, 63, 182) ⇒ (0, 108, 169),
  • 17-4245: (0, 84, 190), (0, 85, 191), (0, 88, 196) ⇒ (0, 124, 184),
  • 19-4038: (24, 44, 79), (26, 46, 81), (19, 43, 79) ⇒ (19, 57, 81),

촬영한 결과, R, B의 경우 대체로 원본 색과 큰 차이를 보이지 않았다. 하지만 G는 실제 색상과 큰 차이를 보였는데, 이는 밝은 색상으로 갈수록 두드러지는 것으로 보인다. 이를 통해 밝기에 의해서 색상이 변하는 정도가 차이가 있음을 대략적으로 확인할 수 있었다.

그러나 이것은 파란색 계열의 색상에만 진행해 본 실험이므로, 다른 색조에 대해서도 확인이 필요하며, 전체 데이터셋에 대해서 실험을 진행하면서 일반적인 추론 결과를 도출해야 한다.

이러한 실험을 진행하기 위해서는 H/W 위치를 정밀하게 설정하여 제작하고,
원단을 완벽하게 촬영할 수 있는 환경을 조성해야 한다.
따라서 5주차에서는 H/W 설계를 최우선으로 진행하도록 한다.


3) 시스템 동작 구조 및 디스플레이 방식에 대한 논의

시스템 동작 구조

image-20240331155647734

H/W 제작이 진행되고 있으므로, 시스템의 동작을 자동화하기 위해서 전반적인 S/W 아키텍처를 구상해야만 한다. 본 과정에서 토의한 내용은 다음과 같다.

  1. Code
    • 이미지 촬영을 자동화 할 수 있는 코드를 작성해야 한다.
    • 해당 코드를 모듈화 하도록 하여, 이미지 촬영을 빠르게 진행할 수 있도록 한다.
    • 이후에는 해당 모듈을 기반으로 전체 아키텍처를 구성하도록 한다.
  2. Interrupt를 활용한 설계
    • Polling을 이용한 설계는 사용자 입력에 유연한 대처가 불가능하다.
    • 따라서 Interrupt를 이용한 설계가 가능한지 확인하도록 한다.
  3. H/W 재료 구비, 설계 및 포트 설정
    • 동작을 자동화 하기 위해 필요한 H/W 재료를 확보해야 한다. (대표적으로 드릴, 볼트, 너트, 와이어 등)
    • 또한 라즈베리파이에 연결할 포트 등은 어떻게 할 것인지 결정해야 한다.
  4. 동작 테스트
    • 위의 과정을 거쳐 설계된 자동화 모듈을 사용해 실제 동작을 테스트해야 한다.
    • 이를 통해 분석에 활용할 데이터셋을 마련한다.
    • 또한 실제 동작 시, 촬영 과정에서 이미지 데이터를 저장하도록 해야 한다.
  5. 프로젝트 전체 디렉터리 구조 설계
    • 라즈베리파이 내부에서 프로젝트로 활용할 디렉터리 구조를 설계해야 한다.
  6. 이미지 파일 Naming Rule
    • 이미지 파일을 저장할 때 이름을 어떻게 저장할 것인지 정해야 한다.
  7. 사용자가 진행도를 알 수 있는 Display 필요
    • 분석이 진행되는 동안 사용자가 알 수 있도록 안내해 줄 Display가 필요하다.
    • LCD 모니터를 활용하는 것이 가장 바람직할 것으로 보인다. LCD를 이용할 경우 라즈베리파이의 화면을 그대로 띄울 수 있으므로, 자체적으로 간단한 UI를 제작하여 분석 진행도 및 다양한 그래프와 결과를 시각적으로 제시할 수 있을 것이다.
    • LCD는 LINC3.0을 통해 주문하도록 한다.

image-20240331155611336

=> 임시 H/W에 LCD를 부착하는 모습을 예상하기 위해 촬영한 이미지. 촬영된 스마트폰과 비슷한 크기이다.



5. 향후 계획

Calibration 팀 계획

  • 디자인학부 교수님 면담 진행
  • 한국섬유산업연합회 컨택
  • TPG 데이터 분석


Clustering 팀 계획

  • TPG 데이터 촬영 환경 구성 및 촬영
  • TPG 데이터 기반 클러스터링 알고리즘, 대표값 추출 알고리즘 테스트


공통 계획

  • H/W 제작 완료