컴퓨터 비전 분야에서 의미적 분할(Semantic segmentation)은 디지털 이미지를 여러 개의 픽셀 집합으로 나누는 과정으로, 분할을 통해 이미지의 표현을 해석하기 쉬운 것으로 단순화하여 변환하는 것 입니다. 의미적 분할(Semantic segmentation)은 객체 인식(Object detection)과 함께 컴퓨터 비전 분야에서 가장 많이 활용되고 있습니다.
객체 인식이 이미지 내 특정 영역에 대한 분류 결과를 보여준다면, 의미적 분할은 이미지 내 모든 픽셀에 대한 분류 결과를 보여줍니다. 따라서 위 예시 그림에서 색깔로 나타낸 것처럼, 이미지의 각 부분이 어떤 의미(사람, 길, 벽, 나무, 강, 잔디, 하늘 등)를 가지고 있는지 구분할 수 있게 됩니다.
의미적 분할 기술을 주로 활용하는 분야 중 하나는 바로 자율주행 분야입니다. 인공지능을 활용한 자율주행의 대표주자인 테슬라는 의미적 분할(semantic segmentation), 객체 인식(object detection), 단안 카메라 깊이 예측(monocular depth estimation) 기술을 통해 실시간으로 영상을 분석한다고 합니다.
특히 영상 내에서 차와 사람뿐만 아니라 도로와 도로가 아닌 곳, 중앙선, 횡단보도 등이 어디에 있는지 정확히 구분하려면 의미적 분할이 테슬라의 자율주행에서 아주 중요한 역할을 하고 있겠죠?
지금까지 아무렇지 않게 이야기했지만, 사실 의미적 분할을 자율주행과 같이 미션 크리티컬[1](Mission Critical)한 영역에 사용할 수 있게 된 것은 불과 몇 년 전입니다. 그전까지 컴퓨터 프로그래밍을 통해 다양한 상황에 대응하여 높은 정확도의 의미적 분할을 한다는 것은 불가능에 가까웠고, 몇 년 만에 사람과 유사한 수준의 의미적 분할이 가능해진 것은 컴퓨터 비전 분야에서 역사적인 발전이라고 할 수 있습니다.
그리고 이를 가능하게 한 것이 바로 최근 인공지능을 대표하는 딥 러닝 기술입니다. 컴퓨터 비전 분야에 딥 러닝이 접목되면서, 컨볼루션 신경망(Convolution neural network)과 같이 이미지를 해석하는 기술이 발전하고 높은 정확도의 분석이 가능해졌습니다.
많이 알려진 것처럼 딥 러닝을 통해 인공지능은 굉장히 똑똑해질 수 있지만 그러기 위해서는 많은 데이터를 통한 학습이 이루어져야 합니다. 그렇다면 의미적 분할을 하기 위해서 인공지능은 어떤 데이터를 학습하는지 살펴볼까요?
학습용 데이터는 정의하기에 따라 다양한 형태가 될 수 있지만, 의미적 분할을 위한 학습 데이터를 만드는 과정은 다음과 같습니다.
- 의미적 분할의 클래스(의미 종류) 설정
- 원본 이미지를 미리 정의해둔 클래스에 따라 픽셀 단위로 구분
- 클래스에 따라 픽셀의 RGB 값이 변경된 가공 이미지 생성
- 클래스와 RGB 값의 매핑 정보 생성
의미적 분할을 위한 인공지능을 학습시키기 위해서는, 먼저 어떤 클래스(의미 종류)로 이미지를 분할할지 정해야 합니다. 클래스는 인공지능이 인식하길 원하는 것들로 설정하면 됩니다. 위의 이미지에서 예를 들면 배경(back ground), 사람, 나무, 화분, 의자, 가방 등이 될 수 있습니다.
그 다음은 원본 이미지를 미리 정의해둔 클래스에 따라 구분해야 합니다. 이 부분은 인공지능에게 정답을 알려주는 과정으로, 사람이 직접 이미지에 정답을 표시해야 하기 때문에 이런 작업을 할 수 있는 도구의 도움이 필요합니다.
도구를 통해 이미지를 의미 단위로 구분하면, 구분된 정보를 통해 각 픽셀의 RGB 값이 변경된 이미지를 생성할 수 있습니다. 도구에서 보이는 구분은 작업의 편의성을 위해 다양한 색깔이 존재하지만, 인공지능 학습을 위한 데이터는 조금 더 단순하게 만들 수 있습니다. [그림 4]의 가공 이미지와 같은 형태는 배경을 (0,0,0), 각 클래스에 따라 픽셀의 RGB 값을 (1,1,1) (2,2,2) (3,3,3) … 과 같이 변경한 이미지입니다.
마지막으로 클래스와 RGB 값의 매핑 정보를 통해 가공 이미지의 RGB 값이 어떤 클래스를 나타내는지 정의합니다. 단순화한 가공 이미지라면 각 클래스에 숫자 ID를 붙이고 이 ID에 따라 RGB 값을 변경하는 방법을 생각할 수 있습니다. 예를 들어 1번 클래스인 ‘사람’의 RGB 값은 (1,1,1), 2번 클래스인 ‘자동차’의 RGB 값은 (2,2,2)와 같은 방식입니다.
이렇게 학습 데이터가 준비되면, 인공지능은 원본 이미지를 입력으로 받아 분석하고, 픽셀 단위로 의미적 분할을 하며, 그 결과를 가공 이미지의 정답과 비교하는 과정을 통해 학습할 수 있습니다.
학습이 잘 끝나면, 카메라를 통해 얻는 이미지의 의미적 분할을 하며 자율주행과 같은 분야에서 활약할 수 있는 인공지능이 됩니다. 아래의 그림은 인공지능이 카메라 영상에 대해 의미적 분할한 것을, 다시 클래스 별로 색깔을 입혀 더 잘 보이게 만든 예시입니다.
차, 사람, 트럭, 표지판, 도로, 인도, 식물, 나무, 건물, 하늘 등을 잘 구분하는 것처럼 보이나요?
이런 의미적 분할 기술은 다른 여러 기술들과 융합하여 자율주행뿐만 아니라 무인로봇, 보안, 이상 상황 감지, 공장 자동화, 의료 등 다양한 분야에 활용되고 있습니다.
딥 러닝과 함께 엄청나게 발전하고 있는 인공지능, 앞으로도 더 많은 활약을 기대해 볼 수 있을 것 같습니다.
[1] 작은 실수만으로도 치명적인 결과를 초래하는 분야
김범진
주임 연구원, AI 연구 개발팀
건국대학교 경영정보 학사
다양한 기술을 통해 많은 사람들에게 편리함을 제공하는 것을 목표로, 테스트웍스에서 다양한 경험을 통해 소프트웨어 엔지니어로 성장하고 있다. 현재 AI 연구 개발팀에서 딥러닝 모델 및 인공지능 서비스 개발을 담당하고 있다.