티스토리 뷰

저번 글에 이어서 이번에는 데이터 셋 확보 및 구성 방법에 대해 얘기해보려 합니다.

https://i0179.tistory.com/80

(본 시리즈 글은 실수한 부분부터 해결 과정까지 모두 내포하고 있음을 알려드립니다.)

 


 

2.1 데이터 셋 구성 방법

  먼저 본격적으로 들어가기 앞서 데이터셋이 어떻게 구성되는지부터 설명하고 들어가 보고자 한다.

 

  아래 사진은 본 프로젝트에서 양성/음성 데이터 셋을 확보하는 방법에 대해 나타내고 있다. 영상 A와 영상 A에 대한 질문이 쌍을 이루면 양성(positive) 데이터 셋이 만들어진다.

  반대로 영상 B와 영상 A에 대한 질문이 만난 것처럼 영상에 해당하지 않는 질문끼리 쌍을 이루면, 음성(negative) 데이터 셋이 만들어진다.

 

이 그림에는 나와있지 않지만, 영상 데이터 셋은 특징 추출 후 임베딩벡터화, 질문 데이터 셋은 언어 임베딩 모델을 활용한 임베딩 벡터화를 진행한 후 concat이 이뤄진다.

 

  이처럼 양성 데이터 셋과 음성 데이터 셋을 굳이 나누는 이유는 이진분류 학습을 하기 위함이다.

이를 위해선 사람 한 명이 담긴 영상과, 그 영상에 해당하는 질문을 확보해야 한다.

 

  여기서 한 가지 더 고려해야 할 사항은 해당 영상 속 사람에 대한 질문의 다양성 확보를 위해서는 영상 하나당 하나의 질문만 받는 것은 불충분하다. 위 사진 속 예시에서는 영상 A에 대한 질문은 "형광색 상의에 갈색 바지를 입은 사람"이라고 말했지만, 또 다른 누군가는 영상 A를 보고 "노란 반팔에 밤색 반바지를 입고, 흰색 운동화를 신은 사람"과 같이 답변할 수 있기 때문이다. 이처럼 사람마다 같은 영상을 보고도 다 다른 문장을 구사하기 때문에 영상 데이터 셋 하나당 그 영상을 설명하는 최소 2개 이상의 질문 데이터 셋을 확보할 필요가 있다. 이 내용은 뒤에서 한번 더 설명하겠다. 

 

  또한 본 작성자 혼자서 영상에 대한 질문을 작성하는 것은 "특정 인상착의에 대한 다양한 사람의 질문을 확보한다."라는 프로젝트의 목표에 위배한다. 따라서 최대한 다양한 성별과 연령대의 질문 데이터 셋을 골고루 확보할 필요가 있다.

 


 

2.2 영상 수집

  우선 본 프로젝트는 실내외의 CCTV를 기반으로, 인상착의로 사람을 검출하는 것이 목적이기에 이에 위배되지 않는 선에서 영상(Picture, Video) 데이터 셋을 수집했다. 따라서 식별이 어려운 원거리 영상은 배제하였고, 야간 gray 영상 역시 배제하였다. 추가적으로 영상이 촬영된 계절에 따라 등장하는 사람들의 인상착의가 달라지는 것을 고려하여 최대한 골고루 확보하고자 했다.

video 데이터 셋의 경우에는 12초당 한번씩 캡쳐를 통해 한장의 사진에 겹치는 사람이 없도록 picture 데이터 셋으로 가공하였다.

 

확보한 영상들의 출처는 아래에 링크로 기재해 두겠다.

 


 

2.3 YOLOv7을 활용한 person 객체 영상 데이터 셋 수집

  앞서 확보한 영상 속 인물에 대한 인상착의에 대한 질문을 확보하기 위해선 먼저 영상에서 person 객체를 따로 추출하는 과정이 필요하다. 이에 객체 검출 성능이 증명된 YOLOv7을 활용해 person 검출을 진행했다.

YOLOv7 성능 / https://github.com/WongKinYiu/yolov7

 

  YOLO 검출결과 가로, 세로가 각각 190픽셀이 넘어가지 않는 경우는 옷의 종류를 육안으로 식별이 불가능하기에 영상 데이터 셋에서 제외했다. 그 결과 아래와 같이 person 검출된 영상 데이터 셋 499장을 확보하였다.

 

가로, 세로 모두 190픽셀을 넘는 경우에만 영상 데이터 셋으로 활용했다.


 

2.4 질문 데이터 셋 수집

  질문 데이터 셋 수집은 부모님이 근무하시는 지역아동센터와 에브리타임, 친구, 교회 동생들을 총동원, 영끌하여 확보했다. 물론 치킨하고 커피 쿠폰을 줘가며 꼬드겼다ㅎㅎ;;.

  영상에 대한 질문 확보는 아래 사진과 같다. 해당하는 영상 속 인물에 대한 설명을 종이 설문지에 작성하는 방식으로 이뤄졌다. 최대한 고화질의 컬러 프린터기를 활용해 실제 인상착의와 동일한 색상을 구현하고자 했다.

종이 설문지마다 A~Z, ㄱ~ㅎ, ㅏ~ㅣ처럼 구별할 수 있는 이니셜을 새겨두어 사람마다 서로 다른 설문지를 받도록 했다.

 

앞서 말한 것처럼 다양한 연령대가 골고루 질문을 작성할 수 있도록 진행하였다. 연령별 질문 개수는 아래 표와 같다. 추가적으로, 동일 인물은 최대 3번까지만 종이 설문지 작성을 허용함으로써 최대한 다양한 사람들의 질문을 확보하고자 했다.

 

모든 종이 설문지에 이름을 작성하는 방법으로 성별과 연령 정보를 확보하였다. 표시된 수치는 질문 데이터 셋을 기준으로 한다.

 

종이 설문지로 작성한 질문은 CSV 파일로 정리하여 진행했다. 실제로 진행하다 보면, 장난으로 적은 사람도 꽤 있었기에 그런 질문은 CSV 파일로 옮기는 과정에서 전부 걸러냈다.

 

say1은 해당 영상에 대한 첫번째 질문을 뜻하고, say2는 동일한 영상에 대한 다른 사람의 두번째 질문을 뜻한다. 되도록이면 영상 하나당 2개의 질문을 받고자 했다.

 

  이러한 과정을 통해 확보한 데이터 셋은 양성 데이터 셋이 900개, 음성 데이터 셋이 900개로 총 1800개를 확보했다. 또한, train, val, test는 8:1:1 비율로 분배하여 진행했다. 

 

val 데이터 셋 부족을 우려해 7:2:1 비율로도 학습을 진행해 보았으나, 결과적으로 8:1:1의 성능이 더 좋았다.

 

 


 

전체적인 시스템 구성도와 진행 현황

  사실 이 데이터 셋 수집 및 가공 과정에만 3주 가까이 걸렸다. 먼저 영상 데이터 셋의 경우 생각보다 사람의 전신이 나오는 CCTV 영상이 부족했던 것뿐만 아니라, 육안으로 식별 불가능한 데이터 셋을 걸러내고 나면 전체의 60%는 날아가는 수준이었기에 더욱 수집에 오랜 시간이 걸렸다.

  

질문 데이터 셋의 경우에는 종이 설문지가 양면 총 12 질문임을 감안했을 때 한 번에 3장씩 들이 밀면, 너무 송구스런 일이었기에 3주에 걸쳐 여러 번 받아내느라 시간이 꽤나 걸렸다.

 

  다음 장에서는 이번에 확보한 질문 데이터 셋을 한국어 임베딩 모델인 koELECTRA로 임베딩 벡터화 하고, 영상 데이터 셋을 임베딩 벡터화 하는 과정에 대해 적어보려한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함