세그멘테이션 입문하기

세그멘테이션 입문하기

들어가며

머신러닝에서 데이터 라벨링은 엄청난 시간이 소요되지만 고도의 기술이 필요한 것은 또 아닌, 지루하고 번거로운 작업으로 유명합니다. 물론 의료영상같은 일부 경우에는 고도의 훈련을 받은 의료 전문가를 동원해야 하기 때문에 분야에 따라 다를 수는 있지만요. 하지만 컴퓨터 비전 구축 과정 중 가장 단순한 이 과정이 가장 중요하기도 하다는 사실은 부인할 수 없을 것입니다. 

라벨링이 정확하지 않으면 치명적인 결함이나 실수를 야기하는 모델만 구축할 수 있을 뿐 부드럽게 작동하는 모델을 완성하기는 어렵습니다. 그리고 진행하고자 하는 프로젝트의 세부사항에 따라 라벨링 방식도 달라져야 합니다. 어떤 머신러닝 모델은 라벨에 많은 디테일이 필요하지 않지만, 또 어떤 모델은 엄청나게 섬세하게 디테일을 잡아낼 수 있어야 합니다. 만약 후자라면 ML 엔지니어들은 이미지 내에서 객체의 위치를 파악할 때, 즉 이미지 로컬라이제이션에서 흔히 사용하는 단순한 바운딩 박스보다는 더 정밀한 라벨링이 필요할 것입니다. 이렇듯 섬세한 데이터셋 라벨링이 필요할 때 보통 채용하는 방식이 바로 이미지 세그멘테이션입니다. 

이미지 세그멘테이션이란?

데이터셋에는 보통 여러 객체가 담긴 이미지들이 포함되고, 컴퓨터 비전 프로젝트를 진행할 때는 이러한 객체들을 모두 라벨링해야 합니다. 각각의 클래스에 포함된 개별 객체들의 자세한 윤곽선을 따는 것을 이미지 세그멘테이션이라고 부릅니다. 이미지 세그멘테이션은 이미지 분류(classification)이미지 로컬라이제이션(localization)을 합해 이미지에 대한 더 정교한 지도를 만드는 과정입니다. 데이터셋의 디테일이 얼마나 자세해야 하느냐는 작업하는 프로젝트의 성격에 따라 다릅니다. 예를 들어, 만약 다양한 이미지에서 개와 고양이의 위치를 식별하는 정도라면 기본적인 이미지 로컬라이제이션에 사용되는 바운딩 박스로도 충분합니다. 하지만 의료영상 식별을 위한 모델을 학습시키고 싶다면 최상의 정확도와 정밀함이 요구됩니다. 

1단계: 이미지 어노테이션하기

컴퓨터 비전 모델의 근간이 되는 것은 바로 수 천장의 라벨링 된 이미지입니다. 어노테이션이란 로우 데이터(raw data)를 분석해 이미지를 이해하고 라벨을 부여하는 작업을 의미합니다. 이때 정확히 어떻게 데이터를 어노테이션할지는 프로젝트의 성격에 좌우됩니다. 어떤 어노테이션은 다른 어노테이션들보다 더 복잡할 수도 있기 때문에, 어노테이션이라는 말은 ML 엔지니어들이 데이터를 라벨링하고 정답 데이터(ground truth)를 구축할 때 사용하는 수많은 기법을 총칭하는 단어라고 보아야 합니다. 세그멘테이션에 대해 더 설명하기 전에, 더 복잡한 세그멘테이션 프로젝트를 진행하기 위해 미리 알아두어야 하는 어노테이션 기법을 몇 가지 먼저 소개하겠습니다.

폴리곤 어노테이션 

이미지를 어노테이션할 때는 먼저 모델의 특성을 이해해야 합니다. 어떤 모델은 단순한 바운딩 박스보다 더 정교하고 섬세한 외곽선을 요구할 수도 있습니다. 이미지의 객체들은 보통 불규칙한 형태를 지니고 있기 때문에 라벨링 팀에서는 이 불규칙한 형태에 꼭 맞는 외곽선을 생성해주는 작업을 해야 합니다. 이때 아주 유용한 방법이 바로 폴리곤 어노테이션입니다. 폴리곤 어노테이션은 종이에 연필로 객체의 모양을 따라그리듯이 객체의 모서리들을 마킹해서 생성할 수 있습니다. 폴리곤 어노테이션은 데이터셋에 불규칙한 형태의 객체가 많이 포함되어 있는 경우에 흔히 사용되는 기법입니다. 실제로 현실의 대부분의 물체는 정사각형이나 직사각형과 같이 완벽한 형태를 지니지 않는 것이 보통이므로 상당히 현실적이고 유용한 기법이라고 할 수 있습니다. ML 엔지니어들은 이 기법을 통해 표지판이나 사람 등 이미지 내의 모든 객체를 예측할 수 있는 정확한 모델을 구축할 수 있습니다. 

데이터 라벨링 팀이 불규칙한 형태의 객체를 라벨링할 때 사용하는 기법이 폴리곤 어노테이션만 있는 건 아닙니다. 슈퍼브에이아이에서는 폴리라인 어노테이션, 키포인트 어노테이션, 폴리곤 어노테이션 및 기본적인 바운딩 박스까지 다양한 형태의 어노테이션을 제공하고 있습니다. 각각에 대해 조금 더 자세히 살펴보겠습니다. 

폴리라인 어노테이션 

폴리곤 어노테이션은 정확하고 일관된 형태를 가지지 않은 일상적인 객체도 쉽게 라벨링할 수 있는 아주 유용한 기법입니다. 그렇다면 더 선형에 가까운 객체를 라벨링하고 싶을 때는 어떻게 하면 좋을까요? 데이터 라벨러들은 이런 경우에는 폴리라인 어노테이션을 많이 사용합니다. 폴리라인 어노테이션은 여러 개의 선들을 그리고 꼭지점에서 이어 도형을 완성합니다. 폴리라인은 도로, 보도, 기찻길 등을 라벨링할 때 흔히 사용됩니다. 모두 비슷하게 일관된 형태이기 때문에 그에 맞는 도구로서 폴리라인을 사용하는 것입니다. 



키포인트 어노테이션 

키포인트는 폴리곤이나 폴리라인 어노테이션 기법과는 조금 다릅니다. 앞서 언급한 라벨링 기법들이 이미지 내의 다양한 형태의 외곽선을 그리는 데 그 목적이 있다면, 키포인트는 라벨링하고자 하는 대상의 골격을 표현하는 것이 목적입니다. 키포인트는 x, y 좌표를 따라 동일한 지점에서 동일한 순서로 연결됩니다. 키포인트는 이미지 내 객체들이 사람 몸이나 얼굴같이 동일한 구조를 가지고 있을 때 사용하면 가장 좋습니다. 단, 키포인트 어노테이션의 경우 라벨링 대상의 형태가 변형되는 엣지 케이스가 발생할 경우 기존과 동일하게 적용하기 어렵다는 단점이 있습니다. 키포인트는 대상이 움직이는 비디오 데이터셋을 라벨링할 때 흔히 사용됩니다. 예를 들자면, 가게에서 쇼핑을 하는 사람들, 움직이는 가축들, 또는 스포츠 분석 비디오 등을 라벨링할 때 유용합니다. 

어노테이션이 ML 엔지니어들이 라벨링을 위해 객체의 외곽선을 표시할 때 사용하는 기법이라면, 세그멘테이션은 모델이 데이터셋 내의 개별 객체들을 분리하고 구별하기 위해 사용하는 전략이라고 생각하면 됩니다. 각각의 데이터셋이 어떻게 세그멘테이션되어야 하는지는 팀에서 작업하는 프로젝트나 분야에 따라 크게 달라질 수 있습니다. 


💡
슈퍼브 라벨에서 폴리곤, 폴리라인 어노테이션을 직접 체험해보세요!
슈퍼브 라벨 체험 문의하기

세그멘테이션의 종류

이미지 세그멘테이션 전략은 머신러닝 이니셔티브마다 굉장히 달라보일 수 있지만, 모든 팀의 궁극적인 목표는 정확도 향상이라는 점은 변하지 않습니다. 다만 정확히 얼만큼 정확하기를 바라느냐는 다를 수 있죠. 어떤 경우에는 이미지의 객체를 적절하게 감싸는 바운딩 박스만으로도 “정확하다”고 간주할 수 있는 반면, 어떤 경우에는 개별 픽셀 단위까지도 정확하게 어노테이션해야 할 수도 있습니다. 프로젝트의 성격이나 특징이 매번 다르기 때문에 ML 엔지니어들도 인스턴스(instance), 판옵틱(panoptic), 시맨틱(semantic) 세그멘테이션 등 다양한 종류의 세그멘테이션 기법을 채용합니다. 

데이터셋을 라벨링할 때 요구되는 디테일의 수준은 프로젝트마다 다릅니다. 어떤 경우에는 서로 다른 종류의 자동차를 하나의 클래스로 묶을 수도 있습니다. 즉 모델에게 오토바이, 트럭, 승용차는 모두 동일하다고 가르치는 것이죠. 또 어떤 경우에는 모델이 각 차종을 서로 다르게 인식하고 데이터셋 뿐만 아니라 현실에서도 각 차종을 구분할 수 있어야 할 수도 있습니다. 


시맨틱 세그멘테이션 

시맨틱 세그멘테이션 예시. 목표는 이미지 내 각 픽셀에 해당하는 클래스의 라벨을 예측하는 것이다. (출처: https://www.jeremyjordan.me/semantic-segmentation/)

시맨틱 세그멘테이션의 경우 모델은 이미지 내 각 객체를 클래스별로 구분하지만 그 이상의 작업까지 하지는 않습니다. 예를 들어, 스마트폰의 경우 인물 사진 모드와 같이 일상적으로 사용하는 카메라 기능에는 시맨틱 세그멘테이션이 적용됩니다. 스마트폰 카메라 렌즈가 시맨틱 세그멘테이션을 통해 전경과 배경을 구분하기 때문에 많은 사람들이 좋아하는 블러 효과가 적용될 수 있는 것입니다. SNS 필터도 인물에게 강아지 귀나 가짜 속눈썹을 붙이기 전에 시맨틱 세그멘테이션을 통해 얼굴을 인식합니다. 기본적으로 시맨틱 세그멘테이션은 모델이 기본적인 수준의 디테일만 이해하면 됩니다. 



인스턴스 세그멘테이션 

인스턴스 세그멘테이션 예시. (출처: https://analyticsindiamag.com/semantic-vs-instance-vs-panoptic-which-image-segmentation-technique-to-choose/)

반대로 인스턴스 세그멘테이션은 데이터셋을 조금 더 자세하게 분류합니다. 시맨틱 세그멘테이션은 전체적인 그룹을 보는 반면, 인스턴스 세그멘테이션은 개별적인 객체를 분류합니다. 인스턴스 세그멘테이션은 자율주행 자동차 데이터셋이나 의료영상과 같이 디테일이 중요한 경우에 많이 사용됩니다. 하지만 이렇게 상당히 구체적인 분류가 필요한 만큼 높은 모델 정확도를 확보하기 위해 투자해야 하는 시간도 엄청납니다. 또 각 이미지마다 인스턴스가 몇 개나 될지 미리 예측할 수 없기 때문에 모델이 스스로 라벨링 프로세스 전반에 걸쳐 자체적인 조정을 지속해주어야 합니다. 


판옵틱 세그멘테이션 

판옵틱 세그멘테이션 예시. (출처: https://kharshit.github.io/blog/2019/10/18/introduction-to-panoptic-segmentation-tutorial)

지금까지 서로 다른 프로젝트에 어떤 이미지 세그멘테이션 방식이 적용될 수 있는지 배웠고, 또 각 데이터셋에 필요한 디테일의 수준은 모델의 니즈에 따라 달라질 수 있다는 것도 알았습니다. 시맨틱 세그멘테이션은 최소한 디테일만으로 데이터셋을 분석하는 한편, 인스턴스 세그멘테이션은 데이터셋의 특수한 부분들을 더 깊게 파고 듭니다. 이보다도 더 큰 정밀성을 요구하는 머신러닝 모델이 있을까 싶지만, 만약 필요하다면 판옵틱 세그멘테이션을 통해 앞서 언급한 방법들보다도 더 많은 디테일이 담긴 어노테이션을 생산할 수 있습니다. 

판옵틱 세그멘테이션에 대해 더 알아보기 전에 먼저 이미지 세그멘테이션의 두 측면에 대해 이해해야 합니다. 바로 Stuff(물체)과 Things(물건)인데요. 둘 다 아주 애매한 용어이지만 머신러닝에서는 공식 어휘로 통용되고 있습니다. “Things”란 이미지 내에서 갯수를 셀 수 있는 모든 것을 의미하며, 개, 자동차, 램프 등이 해당됩니다. 반면 “Stuff”는 이미지를 채우는 디테일로, 배경, 하늘, 길 등이 해당됩니다. 판옵틱 세그멘테이션에서는 이미지를 구성하는 “Things”와 “Stuff” 모두에 주목하기 때문에 이미지 세그멘테이션 중 가장 복잡한 타입이라고 할 수 있습니다. 

판옵틱 세그멘테이션은 상당히 디테일한 만큼 인스턴스 세그멘테이션과 비슷한 경우에 사용됩니다. 의료영상이나 자율주행 자동차 회사들이 판옵틱 세그멘테이션을 자주 사용하는데, 구체적인 객체와 애매한 배경이 모두 중요하기 때문입니다. 실제로 판옵틱 세그멘테이션은 단순히 객체가 아닌 장면을 묘사하는 이미지에 가장 적합한 전략인데, 각각의 아이템과 배경을 세그멘테이션 마스크를 통해 어노테이션할 수 있기 때문입니다. 단순히 이미지 내의 몇 가지 항목들이 아니라 모든 디테일을 어노테이션하기 때문에 모델이 객체와 배경 모두를 인식해야 할 때 유용합니다. 예를 들어 자율주행 자동차에 모델을 적용할 경우, 모델이 배경이라는 개념을 이해하고 있으면 자동차가 단순히 다가오는 차량 뿐 아니라 주변 상황을 정확히 인식하도록 만들 수 있습니다. 

마치며 

데이터 어노테이션과 세그멘테이션을 통해 정확하고 쓸만한 데이터셋을 만들려면 많은 노동력, 시간, 자본이 필요합니다. 특히 모델이 로봇 수술, 물품 수송 선박, 자율주행 자동차 등과 같이 픽셀 단위의 정확한 디테일을 필요로 하는 분야에 적용된다면 더더욱 그렇습니다. ML 엔지니어들은 수십만 장의 이미지를 어노테이션하고 이를 디테일한 라벨로 세그멘테이션하는 작업은 엄청난 노력과 고통이 수반된다는 사실을 뼈저리게 느끼고 있습니다. 슈퍼브에이아이는 ML 엔지니어들이 겪는 이런 어려움에 크게 공감해 이미지 어노테이션 및 세그멘테이션 워크플로우를 효율화할 수 있는 최선의 솔루션을 개발했습니다. 이제 더 적은 이미지로 더 빠르게 정답 데이터를 구축하고, 불확실성 추정 도구를 통해 순식간에 데이터셋 정확도를  검증하세요. 

이제 복잡한 데이터 라벨링의 시대는 끝났습니다. 슈퍼브에이아이와 함께 압도적인 속도로 정확한 데이터셋을 구축하세요. 지금 바로 데모를 신청하실 수 있습니다.