69 lines
6.2 KiB
Markdown
69 lines
6.2 KiB
Markdown
# 세분화
|
|
|
|
우리는 이전에 물체 탐지(Object Detection)에 대해 배웠습니다. 이는 이미지에서 물체를 *바운딩 박스*를 예측하여 위치를 찾는 방법입니다. 그러나 일부 작업에서는 바운딩 박스뿐만 아니라 더 정밀한 물체 위치 지정이 필요합니다. 이 작업을 **세분화(Segmentation)**라고 합니다.
|
|
|
|
## [강의 전 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112)
|
|
|
|
세분화는 **픽셀 분류**로 볼 수 있으며, 이미지의 **각** 픽셀에 대해 해당 클래스(*배경*이 클래스 중 하나)에 대한 예측을 해야 합니다. 세분화 알고리즘에는 두 가지 주요 유형이 있습니다:
|
|
|
|
* **의미론적 세분화(Semantic segmentation)**는 픽셀 클래스만 알려주며, 동일 클래스의 서로 다른 물체를 구분하지 않습니다.
|
|
* **인스턴스 세분화(Instance segmentation)**는 클래스를 서로 다른 인스턴스로 나눕니다.
|
|
|
|
예를 들어 인스턴스 세분화에서는 이 양들이 서로 다른 물체이지만, 의미론적 세분화에서는 모든 양이 하나의 클래스로 표현됩니다.
|
|
|
|
<img src="images/instance_vs_semantic.jpeg" width="50%">
|
|
|
|
> 이미지 출처: [이 블로그 포스트](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)
|
|
|
|
세분화를 위한 다양한 신경망 아키텍처가 있지만, 모두 동일한 구조를 가지고 있습니다. 어떤 면에서는 이전에 배운 오토인코더(autoencoder)와 비슷하지만, 원본 이미지를 분해하는 대신 **마스크**를 분해하는 것이 목표입니다. 따라서 세분화 네트워크는 다음과 같은 구성 요소로 이루어져 있습니다:
|
|
|
|
* **인코더(Encoder)**는 입력 이미지에서 특징을 추출합니다.
|
|
* **디코더(Decoder)**는 이러한 특징을 **마스크 이미지**로 변환하며, 클래스 수에 해당하는 채널 수와 동일한 크기를 가집니다.
|
|
|
|
<img src="images/segm.png" width="80%">
|
|
|
|
> 이미지 출처: [이 출판물](https://arxiv.org/pdf/2001.05566.pdf)
|
|
|
|
세분화에 사용되는 손실 함수에 대해서도 특히 언급해야 합니다. 전통적인 오토인코더를 사용할 때는 두 이미지 간의 유사성을 측정해야 하며, 이를 위해 평균 제곱 오차(MSE)를 사용할 수 있습니다. 세분화에서는 목표 마스크 이미지의 각 픽셀이 클래스 번호(세 번째 차원에서 원-핫 인코딩됨)를 나타내므로, 분류에 특화된 손실 함수 - 모든 픽셀에 대해 평균화된 교차 엔트로피 손실(cross-entropy loss)을 사용해야 합니다. 마스크가 이진인 경우에는 **이진 교차 엔트로피 손실**(BCE)이 사용됩니다.
|
|
|
|
> ✅ 원-핫 인코딩은 클래스 레이블을 클래스 수와 동일한 길이의 벡터로 인코딩하는 방법입니다. 이 기술에 대한 [이 기사](https://datagy.io/sklearn-one-hot-encode/)를 참고해 보세요.
|
|
|
|
## 의료 이미징을 위한 세분화
|
|
|
|
이번 수업에서는 네트워크를 훈련시켜 의료 이미지에서 인간의 신경(모반)을 인식하는 세분화의 실제 사례를 살펴보겠습니다. 우리는 <a href="https://www.fc.up.pt/addi/ph2%20database.html">PH<sup>2</sup> 데이터베이스</a>의 피부 촬영 이미지를 이미지 소스로 사용할 것입니다. 이 데이터셋에는 전형적인 신경, 비전형적인 신경 및 흑색종의 세 가지 클래스에 대한 200개의 이미지가 포함되어 있습니다. 모든 이미지에는 신경을 윤곽선으로 표시하는 해당 **마스크**도 포함되어 있습니다.
|
|
|
|
> ✅ 이 기술은 이러한 유형의 의료 이미징에 특히 적합하지만, 어떤 다른 실제 응용 프로그램을 상상할 수 있을까요?
|
|
|
|
<img alt="navi" src="images/navi.png"/>
|
|
|
|
> 이미지 출처: PH<sup>2</sup> 데이터베이스
|
|
|
|
우리는 배경에서 신경을 세분화하는 모델을 훈련할 것입니다.
|
|
|
|
## ✍️ 연습: 의미론적 세분화
|
|
|
|
아래의 노트북을 열어 다양한 의미론적 세분화 아키텍처에 대해 더 배우고, 그것들을 다루는 연습을 하며, 실제로 어떻게 작동하는지 확인해 보세요.
|
|
|
|
* [의미론적 세분화 Pytorch](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationPytorch.ipynb)
|
|
* [의미론적 세분화 TensorFlow](../../../../../lessons/4-ComputerVision/12-Segmentation/SemanticSegmentationTF.ipynb)
|
|
|
|
## [강의 후 퀴즈](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212)
|
|
|
|
## 결론
|
|
|
|
세분화는 이미지 분류를 위한 매우 강력한 기술로, 바운딩 박스를 넘어 픽셀 수준의 분류로 나아갑니다. 이는 의료 이미징을 포함한 여러 응용 프로그램에서 사용되는 기술입니다.
|
|
|
|
## 🚀 도전
|
|
|
|
신체 세분화는 사람의 이미지를 가지고 수행할 수 있는 일반적인 작업 중 하나일 뿐입니다. 또 다른 중요한 작업으로는 **골격 감지**와 **포즈 감지**가 있습니다. 포즈 감지가 어떻게 사용될 수 있는지 확인하려면 [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) 라이브러리를 사용해 보세요.
|
|
|
|
## 복습 및 자기 학습
|
|
|
|
이 [위키피디아 기사](https://wikipedia.org/wiki/Image_segmentation)는 이 기술의 다양한 응용 프로그램에 대한 좋은 개요를 제공합니다. 이 분야의 인스턴스 세분화 및 파놉틱 세분화의 하위 도메인에 대해 더 알아보세요.
|
|
|
|
## [과제](lab/README.md)
|
|
|
|
이 실습에서는 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset)에서 **인간 신체 세분화**를 시도해 보세요.
|
|
|
|
**면책 조항**:
|
|
이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있음을 유의하시기 바랍니다. 원본 문서는 원어로 된 권위 있는 출처로 간주되어야 합니다. 중요한 정보에 대해서는 전문 인간 번역을 권장합니다. 이 번역을 사용함으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다. |