[인공지능 프로그래밍 수업] Object Segmentation

이은비·2023년 12월 15일

13) Object Segmentation
———————————preview———————————
높은 해상도가 필요로 하는 Object Segmentation은 Object Detection과 다릅니다. 그리고 이번 주제는 졸업작품에서 맡은부분이기도 해서 더 집중적으로 알면 좋겠다고 생각들었습니다.
이미지 내에서 사물을 인식하는 방법은 다양한데 Object detection은 다수의 사물이 존재하는 상황에서 각 사물의 위치와 클래스를 찾는 작업입니다.그에 비해 object segmentation은 이미지의 모든 픽셀과 레이블 또는 카테고리를 연결하는 세그먼트 맵을 생성하는 것입니다. object의 경계를 간략하게 설명하여 object가 무엇인지, 어디에 있는지, 개별 object detection을 감지하여 이미지의 다양한 영역에 개별적으로 라벨을 지정하는 방법을 알아냅니다.

Object segmentation은 sementic segmentation과 instance segmentation으로 나뉘며 sementic segmentation은 모든 픽셀의 레이블을 예측하는 dense prediction 이라고도 불립니다. 그리고 이와 달리 instance segmentation은 좀 더 엄격한 기준이 추가되는데 class의 instance를 구별하지 않는 반면에 instance segmentation은 class의 각 instance를 구별해주는 것을 알 수 있습니다.

Yolo v2 Network Architecture
속도 측면에서 YOLO는 객체 인식 분야에서 최고의 모델 중 하나이며 소규모 네트워크에서 최대 150FPS 의 속도로 객체를 인식하고 프레임을 처리할 수 있습니다 . 그러나 정확도 mAP 측면에서 YOLO는 최첨단 모델은 아니지만 PASCAL VOC2007 및 PASCAL VOC 2012로 학습했을 때 평균 평균 정밀도 (mAP)가 63% 로 상당히 좋은 모델이었습니다 . 그러나 상태였던 Fast R-CNN은 당시 예술품의 mAP는 71% 였습니다 .

YOLO v2 및 YOLO 9000은 J. Redmon과 A. Farhadi가 2016년 YOLO 9000: Better, Faster, Stronger 라는 제목의 논문에서 제안했습니다 . 67FPS 에서 YOLOv2는 76.8%의 mAP를 제공하고 67FPS 에서는 VOC 2007 데이터 세트에서 78.6% 의 mAP를 제공하여 Faster R-CNN 및 SSD 와 같은 모델보다 우수합니다 . YOLO 9000은 YOLO v2 아키텍처를 사용했지만 9000개 이상의 클래스를 감지할 수 있었습니다. 그러나 YOLO 9000의 mAP는 19.7% 입니다 .
SSD Network Architecture
U-Net
U-Net은 'U-Net: Convolutional Networks for Biomedical Image Segmentation' 이라는 논문에서 제안한 구조로서 매우 적은 수의 학습 데이터로도 정확한 이미지 세그멘테이션 성능을 보여주었으며 ISBI 세포 추적 챌린지 2015에서 큰 점수 차이로 우승했다고 합니다.
U-Net은 오토인코더(autoencoder)와 같은 인코더-디코더(encoder-decoder) 기반 모델에 속합니다.
보통 인코딩 단계에서는 입력 이미지의 특징을 포착할 수 있도록 채널의 수를 늘리면서 차원을 축소해 나가며, 디코딩 단계에서는 저차원으로 인코딩된 정보만 이용하여 채널의 수를 줄이고 차원을 늘려서 고차원의 이미지를 복원합니다.
하지만 인코딩 단계에서 차원 축소를 거치면서 이미지 객체에 대한 자세한 위치 정보를 잃게 되고, 디코딩 단계에서도 저차원의 정보만을 이용하기 때문에 위치 정보 손실을 회복하지 못하게 됩니다. U-Net의 기본 아이디어는 저차원 뿐만 아니라 고차원 정보도 이용하여 이미지의 특징을 추출함과 동시에 정확한 위치 파악도 가능하게 하자는 것입니다. 이를 위해서 인코딩 단계의 각 레이어에서 얻은 특징을 디코딩 단계의 각 레이어에 합치는(concatenation) 방법을 사용합니다. 인코더 레이어와 디코더 레이어의 직접 연결을 스킵 연결(skip connection)이라고 합니다.

U-Net 은 인코더 또는 축소경로(contracting path)와 디코더 또는 확장경로(expending path)로 구성되며 두 구조는 서로 대칭적인것을 알수있습니다. 인코더와 디코더를 연결하는 부분을 브릿지(bridge)라고 합니다. 인코더와 디코더에서는 모두 3x3 컨볼루션을 사용합니다. 인코더의 자세한 구조는 다음 그림과 같다. 맨 아래의 블록은 브릿지인데 그림에서 세로 방향 숫자는 맵(map)의 차원을 표시하고 가로 방향 숫자는 채널 수를 표시합니다. 예를 들면 세로 방향 숫자 256x256 과 가로 방향 숫자 128 은 해당 레이어의 이미지가 256x256x128 임을 의미합니다. 입력 이미지는 512x512x3 이므로 RGB 3개 채널을 갖고 크기가 512x512 인 이미지를 나타냅니다.

Class Imbalance
data class imbalance는 어떤 데이터에서 각 클래스가 갖고 있는 데이터의 양에 차이가 큰 경우를 말합니다.
그렇다면 데이터의 클래스를 왜 균형있게 만들어줘야 할까? 하는 것에는 정확도가 클 수 잇는 소수의 클래스의 내용을 참고하기 위해서 입니다, 그렇다면 이러한 class imbalance를 맞추기 위한 방법으로는 2가지가 있는데 1.Weight balancing, 2.Oversampling & Undersampling의 방법이 있으며
Weight balancing은 Train 데이터에서 각 loss를 계산할 때 특정 클래스에 대해서는 더 큰 loss를 계산해주는 것입니다. 클래스의 비율에 대해 가중치를 두는 방법을 ㅜ치하여 Focal loss와 같은 Weight balancing방법 중 하나를 사용하여서 현재까지 클래스별 정확도를 고려하여 가중치를 주는 방법을 취합니다. 한번의 epoch가 시행된 후 분류성능이 높은 클래스에 대해서는 Down-weighting을 하여서 분류가 힘든 클래스를 더욱 더 훈련시키는 효과가 있습니다.
Oversampling & Undersampling의 방법에는 양이 많은 상태의 데이터를 상대적으로 양이 적은 데이터와 맞춰주는 것입니다 이떄 양을 줄여버린 데이터들은 양이 많았던 데이터의 대표성을 잘 지니고 있어야 하며 Oversampling은 양이 적은 데이터를 양이 많은 데이터에 맞춰주는 방법으로 복사의 개념이므로 양이 늘어난 주황색 데이터는 양이 적었던 주황색 원본 데이터의 성질과 동일합니다.
Data Augmentation
데이터 증강은 기존 데이터를 사용하여 데이터 세트의 수정된 복사본을 생성하여 훈련 세트를 인위적으로 늘리는 기술입니다. 여기에는 데이터 세트를 약간 변경하거나 딥 러닝을 사용하여 새로운 데이터 포인트를 생성하는 것이 포함됩니다.
증강 데이터는 원본 데이터에서 약간의 변경 사항을 적용한 것입니다. 이미지 확대의 경우 훈련 세트의 크기와 다양성을 높이기 위해 기하학적 및 색상 공간 변환(뒤집기, 크기 조정, 자르기, 밝기, 대비)을 수행합니다.
합성 데이터는 원본 데이터 세트를 사용하지 않고 인위적으로 생성됩니다. 합성 데이터를 생성하기 위해 DNN(Deep Neural Networks)과 GAN(Generative Adversarial Networks)을 사용하는 경우가 많습니다.
참고 : 증강 기술은 이미지, 오디오, 비디오, 텍스트 및 기타 유형의 데이터도 늘릴 수 있습니다.
그렇다면 언제 데이터 증강을 사용해야 하는지 보면
1.모델의 과적합을 방지하기 위해서 사용합니다.
2.초기 훈련 세트가 너무 작을때 사용합니다.
3.모델 정확도를 향상시키기 위해 사용합니다.
4.원시 데이터 세트에 라벨을 지정하고 정리하는 데 드는 운영 비용을 줄이기 위해 사용합니다.
Transfer Learning
전이학습에 대해 위키 백과에서는 한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식으로 정의하고 있습니다.

이를 image classificatoin 문제를 해결하는데 적용하면 네트워크(DNN;Deep Neural Network)를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미합니다.전이학습을 수행하지 않은 모델들보다 비교적 빠르고 정확한 정확도를 달성할 수 있는 것이죠. 이것들이 가능한 이유는 네트워크가 다양한 이미지의 보편적인 특징 혹은 피처(Feature)들을 학습했기 때문입니다. 일반적으로 네트워크가 깊어질수록 서로 다른 종류의 피처들을 학습한다고 알려져 있는데요 낮은 층에서 학습되는 피처를 low-level features, 깊은 층에서 학습되는 피처들은 high level features라고 부릅니다.
low-level feature의 예로는 이미지의 색이나 경계(edge) 등을 말할 수 있고 high level features는 이보다 더 심화된 객체의 패턴이나 형태를 의미합니다. 그림을 통해 각 계층별로 서로 다른 형태를 띄는 것을 알 수 있습니다.

low-level feature의 필터의 경우 색의 변화나 경계의 방향 등을 추출한다고 유추할 수 있고 더 올라가서 high-level feature는 동그라미가 반복되는 패턴이나 새의 부리 등의 이미지를 분류하는데 있어서 주요한 특징들을 학습한다고 말할 수 있겠습니다.
그런데, 네트워크가 이러한 특징을 학습하기 위해서는 대량의 데이터셋이 필요한데 가장 대표적으로 ImageNet을 들 수 있습니다. ImageNet은 2010년~2017년까지 매해 열린 대회 ImageNet Large-Scale Visual Recognition (ILSVRC)을 위한 데이터셋으로 자동차나 고양이를 포함한 1000개의 클래스, 총 1400만개의 이미지로 구성되어 있습니다. 해당 데이터셋을 가지고 이미지 분류를 수행한 모델들은 매년 뛰어난 성능을 보여주고 있는데 2015년 이후에는 사람보다 뛰어난 정확도를 가진 모델이 등장하였습니다.
2012년 AlexNet 이후에 VGG, GoogleNet, ResNet 등 주요 CNN 구조들은 전이 학습을 수행하는데 네트워크의 기저(base 또는 backbone)으로 사용되고 있습니다.
그렇다면 전이학습은 실제로 어떻게 이루어지는지 보면 다음과 같습니다.

전이학습을 위해서는 ImageNet과 같은 대량의 데이터셋으로 이미 학습이 되어있는 모델을 사용합니다. 즉 pretrained model을 사용합니다.

몇가지 경우에 대해서 pretrained 모델 외에 학습시키는 레이어의 양이 달라질 수 있습니다.

만약 ImageNet과 비슷하지만 소량의 데이터셋을 가지고 있다면 ImageNet으로 학습시킨 CNN을 구조를 그대로 두고 뒷단에 분류를 위해 새로운 완전연결레이어(FC;Fully Connected Layer)를 붙여서 학습시키면 됩니다.
만약 ImageNet과 비슷하지만 더 많은 데이터셋을 가지고 있다면 뒷단에 여러 FC레이어를 묶어서 학습시켜도 좋습니다.
만약 내가 가진 데이터셋이 ImageNet과 다른 경우에는 어떨까요? 데이터가 많은 경우에 뒷단의 여러 FC 레이어를 묶어서 학습시키는 것이 충분할 것입니다.
하지만 데이터가 적은 경우엔 pre-training이 효과적이지 않을 수 있습니다. 데이터 증강으로 데이터의 양을 늘려서 전체 네트워크를 학습시키는 등 다른 방법을 생각해야합니다.

전이학습은 동일한 조건에서 바닥부터 훈련시키는 것(train from the scratch)이 사전 학습된 모델을 사용하는 것보다 2~3배의 시간이 더 걸린다는 것을 보여주고 있습니다. 그림 4에서 랜덤으로 모델을 초기화를 시키는 것보다 사전 학습된 모델의 초기값을 사용하였을 때 더 빠르게 높은 정확도에 도달한다는 것을 보여주고 있습니다.

———————————————————————————
참고
https://pasus.tistory.com/204
https://dacon.io/en/forum/405988
https://www.datacamp.com/tutorial/complete-guide-data-augmentation

profile
cs/ce 전공 재학생입니다.

0개의 댓글