본문 바로가기
  • 우당탕탕속의 잔잔함
Technology/Products, Tools

[Dataset] Custom Face Landmark Dataset 생성 방법

by zpstls 2023. 1. 4.
반응형

 

 

Deep Learning관련 프로젝트를 진행하다 보면 필연적으로 Dataset과 관련된 이슈들이 발생하게 됩니다.

이번 포스트에서는 Landmark Dataset을 구성하는 방법에 대해 다뤄보고자 합니다.

 

우선, Landmark Dataset은 보통 Landmark Detection에 사용됩니다. 이에 대해 간략하게 설명해보고자 합니다.

Landmark Detection이란, Keypoints Detection이라고도 하며 이는 어떠한 Object의 구체적인 부위의 Position을 Detection 하는 것으로 흔히, Facial Landmark, Pose Estimation 등에 많이 사용됩니다.

Landmark Data

위 이미지와 같이 어떠한 구간, 위치를 정확히 알려줌으로서 자세를 특징하거나 Object의 정확한 윤곽을 추정하거나 할 수 있습니다. 이러한 Landmark는 Image와 함께 X, Y Pixel Position Data를 제공함으로써 Dataset으로 사용될 수 있습니다.

 

즉, Landmark Detection을 위해 Landmark Dataset을 구성해야 하는데 이러한 Landmark Dataset은 어떻게 만들 수 있을까요?

 

Landmark를 검출하기위한 Dataset을 구성하는 기본적인 방법은 Image 1장과 해당 Image에서 검출하고자 하는 Landmark의 X, Y, Pixel Position들을 XML, CSV 파일 등으로 함께 구성하는 것입니다.

위와 같은 작업을 하기위해 Dataset 구성 프로그램을 직접 만들어 사용하는 방법이 있고, 시중에 Open 되어 있는 프로그램들을 사용해 구성하는 방법이 있습니다.

직접 만들어보는 것도 좋긴 하겠지만, 굳이 시간과 노력을 드릴 필요가 없다면 이미 출시되어 있는 프로그램을 사용하는 것도 좋은 방법이겠죠?

 

우선, 다음은 널리 사용되는 Dataset 구성 프로그램들에 대한 표입니다.

Title Info URL
FLAT Facial Keypoint Annotations https://github.com/luigivieira/Facial-Landmarks-Annotation-Tool
Image Annotation Tool Point and Bounding Box https://github.com/alexklaeser/imgAnnotation
ImageLab Point And Bounding Box, Shape https://github.com/NaturalIntelligence/imglab
Annotation Tools COCO Keypoints Annotation https://github.com/visipedia/annotation_tools
Labelme Polygon Annotation https://github.com/wkentaro/labelme

Bounding Box, Polygon 그리고 Keypoints에 대한 Dataset 구성 Tool들이며 Image Segmentation 및 Object Detection, Keypoint Detection에 사용됩니다.

 

 

 

 

 

이번 포스트에서는 위 List들중에서 ImgLab이라는 Tool을 사용해볼 것입니다.

 

본격적으로 ImgLab Tool을 사용하여 Keypoints Detection에 사용할 Dataset을 구성하는 방법에 대해 설명해보고자 합니다.

우선 imgLab은 Web기반의 Tool로서 Windows에서는 **https://imglab.in/**에 접속하면 바로 프로그램을 사용할 수 있습니다. 위 URL에 접속하면 다음과 같은 화면을 볼 수 있습니다.

ImgLab - 1

Donation은 안할 것이므로, "UMM, MAYBE NEXT TIME" Button을 클릭합니다.

 

Dataset을 구성할 Image들을 Load 하기 위해서 하단의 버튼을 클릭한 후, File 또는 Directory를 선택하면 Image들이 Load 되고 하단에 List들이 표시됩니다. 해당 List에서 Image를 클릭하게 되면 Main 화면에 선택한 Image가 표시되고 해당 Space에서 작업을 진행하면 됩니다.

ImgLab - 2

우선, Landmark Detection의 경우는 검출하고자 하는 Object를 검출한 후, 해당 Object안에서 Keypoint를 검출하는 방식으로 수행됩니다. 따라서 Dataset을 구성할 경우에는 검출하고자 하는 Object의 전체 영역을 Bounding Box로 선택하고 해당 Bounding Box내에 Points를 표시해주어야 합니다.

ImgLab - 3

왼쪽 메뉴 부분에서 "Rectangle"을 선택한 후, Object의 전체 영역을 선택합니다. 선택된 Bounding Box를 Click하면 오른쪽에 Category Name, Label Name 등을 표시하는 메뉴가 뜨게 되고 Label Name 부분에 Object 명을 입력합니다.

Bounding Box를 표사 한 후에는, 왼쪽 메뉴에서 "Point"를 눌러 Landmark로 사용할 부분에 표시합니다. 이때 표시 순서는 모두 같아야 합니다.

참고로, 위 이미지에서는 LeftEye → RightEye → Nose → Left → Right → Bottom → Top의 순서로 이미지에 표시했습니다.

Image에서 표시한 부분을 Click하게 되면 오른쪽에 하늘색으로 표시됩니다. 위와 같은 과정을 모두 마친 후 다음과 같은 과정을 통해 File을 저장합니다.

ImgLab - 4

Dlib XML Format으로 저장하면 다음과 같은 XML 파일을 얻을 수 있습니다.

Stored Data (XML)

Image의 갯수만큼에 해당하는 Data들이 추가되어 구성될 것이며 이로서 Landmark Detection에 사용될 Dataset을 구성할 수 있게 되었습니다.

이제 Image들과 XML File을 ML Model에 Input 하여 학습을 시킬 수 있을 것입니다.

 

Open 된 Tools을 이용하여 간단하게 Custom Dataset을 구성해 보았습니다. 물론 쉽게 사용할 수는 있지만, 이러한 과정을 몇 만 번 반복해야 하니 힘들긴 하겠죠.

실무에서는 데이터셋 수집 업체나 기관에 맡겨 구성하겠지만 쓸만한 공개 데이터셋이 없다면, Toy 프로젝트를 수행할 때는 힘들지만 이렇게 만드는 수밖에는 없을 것입니다.

 

이로써 포스트를 마치도록 하겠습니다!

 

 

반응형

댓글