Semantic Segmentation

 

  • 의미론적으로 분할하였다는 것. 의미를 갖는 분할 영역을 갖도록 이미지를 분할한다. 정확한 영역을 픽셀 단위로 구분하여 준다.
  • 채널별로 레이블을 나눈다. (ex) Person 채널엔 Person에 해당하는 영역만 1로 Plants/Grass 채널엔 Plants/Grass에 해당하는 영역만 1로..)
  • Pixel-wise loss를 사용한다.
  • 우리가 평소 아는 방식으로 Convolution 연산을 수행하면 연산량이 매우 많아진다. 이를 보완하기 위해서 다음과 같은 구조로 만들게 된다.
    http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf
    위 네트워크 구조는 정보를 압축하는 과정인 Encoding과 압축된 정보를 풀어내는 과정인 Decoding을 거치는 Network이기 때문에 Encoder-decoder network라고 한다.

FCN(Fully Convolutional Network)

 

  • Semantic Segmentation을 맨 처음 제안한 논문
  • 구조
    • https://arxiv.org/pdf/1411.4038.pdf
    • 위의 과정에서 사이즈가 굉장히 크게 줄어든 영상을 2D-Bilinear Interpolation(2차원 쌍선형 보간법) 이용하여 원래의 크기로 되돌려 놓는다.
      https://medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204
      위 과정을 거쳐 만들어낸 이미지는 해상도가 늘어났다고 하지는 않는다. 새로운 정보가 생기지 않았기 때문이다.(그저 사이즈만 키운 것이기 때문에) 그래서 세밀한 정보를 잃어버리는 정보 손실 문제가 발생하게 된다. 이는 하나의  scale만을 사용해 생긴 문제로, 이를 보완하기 위해서 Multiscale을 활용하게 된다.
      • Multi-scale Prediction
        • https://medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204
          3번째 풀링 단계에서 나왔던 Feature맵을 가져와서 1X1 Convolution을 거쳐 28x28 Feature map을 생성하고, 4번째 풀링 단계에서 나온 Feature맵을 가져와 1x1 Convolution을 거쳐 14x14 Feature map을 생성한다. 그리고 최종 Upsampling 과정 전 나온 Feature map을 우선 2배만큼 Upsampling하여 14x14 Feature map으로 만든 후 4번째 풀링 단계에서 나온 Feature map과 합 연산을 한다. 이를 2배만큼 UpSampling하여 3번재 풀링 단계에서 나온 Feature맵과 합 연산을 하고 여기서 나온 Feature 맵에 8배만큼 Upsampling을 한다. 이 때 나온 Feature map은 최종적으로 Upsampling된 Feature map보다 정보를 더 많이 갖고 있다. 그래서 이 둘의 정보를 결합해 Segmentation 품질을 개선하였다.

          위 Upsampling을 보면 노란색이 아닌 빨간 색으로 칠해져 있는 Upsampling이 있다. 이 Upsampling은 학습이 가능한(Trainable) Backwards convolution(=Strided convolution, Transpose convolution, deconvolution)을 사용하고 있다. 
          https://medium.com/apache-mxnet/transposed-convolutions-explained-with-ms-excel-52d13030c7e8
          제대로 Upsampling이 되도록 하는 Weight를 학습한다.

 

PSPNet

UNet

 

 

 

Mask-RCNN (Faster RCNN(Object Detection) + FCN(Object Segmentation))

 

https://developpaper.com/mask-r-cnn/

 

Faster RCNN과 유사하지만 마지막 부분에 mask를 씌우는 부분에 변화가 있다.

앞 부분(Faster RCNN부분)에서 인코딩된 영상이 Mask를 씌우는 부분에서 디코딩된다고 봐도 된다.

 

  • ROI Align
    • https://towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44
    • ROI Pooling을 진행하며 정보 손실이 일어나게 된다.(위 그림에선 맨 아랫줄 부분) 그래서 ROI Pooling이 아닌 ROI Align이라는 개념이 나오게 되었다.
    • https://erdem.pl/2020/02/understanding-region-of-interest-part-2-ro-i-align
    • 하나의 그리드 안에서 가로, 세로로 3등분으로 하여 4개의 좌표값을 얻어낸다. 
      4개의 좌표값 각각 4개의 좌표를 제외하고 알고 있는 좌표 중 좌표값에 가까운 좌표들의 Bilinear Interpolation equation을 구한다.
    • 그렇게 해서 나온 값 중에서 Max Pooling을 하게 된다. 이렇게 하면 Roi Pooling을 했을 때보다 정보 손실의 값이 적어진다고 한다.

Stacked Hour Glass Model

 

https://arxiv.org/pdf/1603.06937.pdf

Pose Estimation 혹은 Face Mesh와 같은 곳에 이용되는 히트맵들을 결과로 내주는 모델이다.

 

Object Detection

 

  • 문제 정의
    • Classification
      • ex) 영상이 'car' 영상일 확률이 가장 높다.
    • Classfication + Localization
      • ex) 영상이 'car' 영상일 확률이 가장 높고, 그 'car'의 위치는 어디쯤에 있다.
      • 물체가 있는지 / 물체의 중심점의 x좌표 / 물체의 중심점의 y좌표 / 물체의 넓이 / 물체의 높이를 찾아낸다.
    • Object Detection
      • ex) 영상 안에 있는 모든 물체들과 그것들의 위치(영역)을 함께 찾는다.
      • 현재 예측치와 Ground Truth(참값)의 차이가 줄어들도록 CNN을 업데이트한다.
      • Object Detection에서는 box가 반드시 한 개인 것은 아니다. (여러 물체가 detect될 수 있다.) 따라서 object별로 벡터가 필요하다.
      • 어느 위치에 object가 있는지 찾고 + 영역 크기도 결정하고 + 어떤 object인지도 알려줘야 한다. 복잡한 문제이다.
      • Object Detection 요소 기술
        • Region Proposal : Object가 있을만한 영역을 다수 추천
        • Non-max Suppression : 겹치는 영역 제거
        • Classification : 영역 속 Object 분류
        • Bounding Box Regression : Object 영역 (Boundary) 미세조정

Faster RCNN

 

  • 기본 flow
    • https://medium.datadriveninvestor.com/review-on-fast-rcnn-202c9eadd23b
      pre-trained된 cnn 모델을 통과시키고 두 개의 Stage로 나눈다. 위 그림같은 경우는 위 stage가 region proposal stage가 된다.
      이후 region proposal가 추천해준 3개의 영역(위 그림의 경우)에 대해서만 classification과 bounding box regression을 수행하게 된다.
    • Region Proposal Architecture
      • https://tryolabs.com/blog/2017/11/15/our-odsc-talks-in-video/
        anchor의 값이 9면 2k objectness scores(물체가 없는가에 대한 점수)의 output channels는 2*9가 되어 18개가 된다.

IOU(Intersection over Union) measure

 

  • IOU = 교집합 / 합집합
    • Objectness의 기준
      • (Training시) 이 영역이 object 영역인지 아닌지 판단하는 방법 :
        Ground Truth object 영역과 IoU를 계산해 IoU가 Threshold(ex) 0.6 -> IoU가 0.6 이상부터 물체라 판단.)보다 크면 이 영역을 object 영역이라 판단. 
      • IoU로 판단하지 말고 Ground Truth Object영역과 교집합으로 판단하면 되는 문제 아닐까?
        but 그렇게 하면 Box Boundary Regressor가 할 일이 어려워진다.
      • RPN(Region Proposal Network)에서는 Ground Truth Object 영역과 IoU가 0.6이상 되는 후보 영역들을 찾아주는 것이 목적

Anchor Box

 

  • 정해진 크기와 비율을 가진 미리 정의된 후보 Box
    • 상단 그림의 오른쪽과 같이 미리 정의된 Anchor Box를 둔다. 각 Anchor Box를 Object가 있는 곳에 위치시켜 IoU가 0.6 이상이 되면 Object라고 Detect하도록 한다. 즉, 너무 작은 Anchor Box가 Object에 위치하게 되면 (물체의 아주 일부분만 보게 된다면) IoU가 0.6보다 작게 나올 테니 Object라고 판단하지 않는다. 이렇게 하면 딱 물체 크기에 적당히 알맞게 Boundary할 수 있게 된다.
      위 그림에선 오른쪽 아래의 Anchor Box가 가장 적절하고 큰 IoU가 나타나게 될 것이다. 즉, 왼쪽부터 Anchor Box 0번이라고 하면 0,1,2,3,4,5,6,7번 Anchor Box는 Object가 거짓이라는 값(아니라는 값)을 뱉어낼 것이고, 마지막 8번째 Anchor Box만이 Object가 맞다(참)고 정답을 줄 것이다. 이를 한 번에 모아서 정답 벡터를 만들어낸다. 이에 대한 모든 정답 벡터를 모아 하나의 정답 박스를 만들어내게 된다.
    • 상당히 많은 Boundary Box가 새겨지게 될텐데 이를 전부 이용해 연산을 하면 너무 많은 연산량으로 오랜 시간이 걸리게 될 것이다. 이를 보완해주는 것이 Non Max Suppression

RPN Training 수식화

 

출처 : https://www.slideshare.net/hpkim0512/tutorial-of-faster-rcnn?fbclid=lwAR2YDdJAWptDiMGuz4I2TSEbBRrCF51r2WEb27aKUB3bioo4cEI2OuZWF5Q

 

Tutorial on Object Detection (Faster R-CNN)

CSE WinterSchool 2018 Tutorial on Machine Learning 발표자료 https://2018winterschool.weebly.com/

www.slideshare.net

 

예측값은 두 가지이다.

Predicted probability of objectness : 오브젝트일 확률, 오브젝트가 아닐 확률로 총 두 개의 값을 반환하는 값이다.

proposal transformation : Bounding Box가 얼마만큼 변화되는가(실제 중심점과, 실제 너비, 높이와 얼만큼 차이가 나는가)

 

1x1 Convolution 정답 박스를 만들어 내는(anchor box/IoU를 이용하여) 수식이 바로 위의 수식이다.

Loss 함수로는 smooth_L1함수를 사용한다.


ROI Pooling

 

  • Bilinear interpolation(보간법) & Max pooling을 활용하여 크기를 정해진 크기로 맞추는 기법.
  • Fully Connected Layer를 쓰려면 입력값이 고정이 되어야 하기 때문에 사용한다.
  • 만약에 이 과정에서 Feature가 위 아래로 줄어들어 변형이 일어나게 된다면, Input Data에서 위 아래로 늘린 데이터를 Training 데이터에 포함을 시켜 Feature가 위 아래로 줄어도 심한 변형으로 나타나지 않게끔 학습을 시키는 방법을 사용하기도 한다.

Classifier & Regressor Traning

 

RPN을 통해 나온 파라미터를 활용하게 된다.

 

L_CR을 minimize하는 방향으로 update한다.

Visual Recognition

 

Visual Recognition이란? 카메라를 통해 취득되는 사진이나 동영상에서 정보를 취득하는 과정

 

  • 비선형 함수의 필요성
    • 딥러닝 모델에서는  각 레이어마다 벡터(텐서)간의 연산이 이뤄지게 된다. 이 때, 비선형 함수가 존재하지 않으면 벡터간 연산은 결국 또 다른 하나의 벡터라는 결과가 나오게 되기 때문에 사실상 여러 개의 레이어를 썼다고 표현할 수 없게 된다. 그렇기 때문에 출력에 대해 비선형적 연산이 사이에 들어가야 한다. (ex)Tanh, Sigmoid, ReLU, Max pooling 등)
  • CNN
    • 상대적 위치에 어떤 특징점이 있는지 알려준다 (ex) 좌측 상단에는 귀가 있고, 우측 하단에는 눈썹이 있고...)
    • layer가 올라갈수록 복합적 정보를 갖는 노드가 된다. 더 추상화된 정보를 갖고 있다고도 한다.
  • 설명 가능한 AI(XAI)
    • 기존 인공지능 동작 결과 : 이 그림은 95% 확률로 고양이다.
    • XAI 동작 결과 : 털, 수염이 존재하고, 유사한 귀의 모양을 가졌기 때문에 이 그림은 95%의 확률로 고양이이다.
  • Multi-channel Convolution 
    • Color Image -> RGB 3 channels(depth)
      • output channel의 개수 = 필터의 개수
    • Input : [batch(영상이 몇 개가 있는가), in_height, in_width, in_channels]
      filter : [filter_height, filter_width, in_channels, out_channels]
    • pooling의 효과 : invariance를 높인다. 불변성을 갖도록 한다. 작은 변화에 크게 반응하지 않도록 한다.
  • CNN Structure
    • Convolution-ReLU-Pooling - ... - Convolution-ReLU-Pooling - Fooly Connected

전이학습(Transfer Learning)

 

  • 일부 기업외엔 막대한 데이터를 지니기 어려움
  • 양질의 데이터, 신뢰할 수 있는 데이터가 필요
  • 학습할 수 있는 컴퓨팅 파워엔 한계가 있다.
    • 기존 학습된 모델을 이용할 수 있으면 도움이 됨
  • 전이학습 유형
    • 첫 번째 단계 : 피쳐 추출기(Feature Extractor)와 분류기(classifier) 전부 학습 시킨 모델을 사용한다.
          -> 모델 파라미터를 변형하지 않고 사용 - 문제가 거의 같을 때 사용
              ex) ImageNet 데이터로 학습된 모델을 개와 고양이 분류하는 문제에 사용
      두 번째 단계 : 피쳐 추출기를 그대로 활용하고(weight copy), 분류기만 현재 자신이 갖고 있는 문제에 맞게 재학습시킨다.
          -> 문제가 비슷할 때 사용
              ex) ImageNet 데이터로 학습된 모델을 어벤져스 캐릭터 분류 문제에 사용
      세 번째 단계 : 피쳐 추출기에서 부분적으로 다시 학습을 시키고, 분류기를 자신이 갖고 있는 문제에 맞게 학습시킨다.
          -> 문제가 약간 다를 때 사용
              ex) ImageNet 데이터로 학습된 모델을 얼굴인식 문제에 사용
      네 번째 단계 : 피쳐 추출기와 분류기 전체를 재학습 혹은 미세 조정해야 한다.
          -> 문제가 많이 다를 때 사용
              ex) ImageNet 데이터로 학습된 모델을 의료영상 문제에 사용

단어 임베딩

 

  • 단어의 의미를 어떻게 나타낼 것인가?
    • 글자의 나열?
    • One-hot encoding?
    • 좋은 표현 방식 : 단어 간 관계를 잘 표현할 수 있어야 한다.
  • 단어의 의미
    • 어근(lemma)(ex)명사, 동사, 형용사...), 의미(sense)
  • 동의어(Synonyms)
    • 문맥상 같은 의미를 갖는 단어들
    • 동의어라 해서 항상 그 단어로 대체할 수 있는 것은 아니다. ex) big / large
  • 유사성(Similarity)
    • 유사한 의미를 가진 단어들 (동의어는 아님)
  • 연관성(Relatedness)
    • 단어들은 의미 유사성 외 다양한 방식으로 연관될 수 있다.
    • Semantic filed
      • 특정한 주제(topic)이나 영역(domain)을 공유하는 단어들
        • ex)
          hospitals (surgeon, scalpel, nurse, anaesthetic, hospital
          restaurants (waiter, menu, plate, food, menu, chef)
          houses (door, roof, kitchen, family, bed)
    • Semantic frame
      • 특정 행위에 참여하는 주체들의 역할에 관한 단어들
        • ex)
          상거래라는 행위에 참여하는 주체들 : buy, sell, pay 등
  • 벡터로 의미 표현하기
    • The meaning of a word is its use in the language - Ludwig Wittgenstein
    • 단어들은 주변 환경(주변 단어들 분포)에 의해 의미가 결정됨 -> 두 단어의 주변 단어들 분포가 동일하다면 그 두 단어는 유사어라 할 수 있음
    • 따라서 단어 의미를 분포적 유사성(distributional similarity)을 사용해 표현하고자 한다.
      • 벡터를 사용해 분포적 유사성 표현
    • 벡터공간 내 비슷한 단어들은 가까이 있다.
    • 이렇게 벡터로 표현된 단어를 임베딩(embedding)이라고 부른다. 보통 밀집벡터인 경우를 임베딩이라 부른다.
    • 최근 NLP 방법들은 모두 임베딩을 사용해 단어 의미 표현
      • 임베딩을 사용하지 않는 경우
        • 각 속성은 한 단어 존재 유무
        • 학습데이터와 테스트 데이터에 동일 단어가 나타나지 않으면 예측 결과가 안 좋음
      • 임베딩을 사용하는 경우
        • 각 속성은 단어 임베딩 벡터
        • 테스트 데이터에 새로운 단어가 나타나도 학습데이터 내 존재하는 유사 데이터를 통해 학습한 내용이 유효함
  • 임베딩 종류
    • 단어 빈도수를 활용한 벡터 
      • Team-document 행렬
        • 각 문서는 단어들 벡터로 표현됨(vector space model)
      • word-word 행렬 (term-context 행렬)
        • 주변 단어들 빈도를 벡터로 표현
        • Cosine을 사용해 벡터 유사도를 계산할 수 있다.
          벡터 유사도 계산 예시
      • 이의 문제점
        • 자주 나타나는 단어들(ex) the, it, they)은 의미 구별에 도움이 되지 않음. 이런 단어들의 부작용을 최소화하기 위해 나타난 것이 바로 TF-IDF
    • 희소 벡터(sparse vector)
      • tf-idf
        • 문서 d내의 단어 t의 새로운 가중치 값 계산
        • Team Frequency (tf)
          • tf_(t,d) = count(t, d)
          • tf_(t,d) = log_10(count(t,d)+1) (smoothing)
            • count(t,d)가 0인 경우 음의 무한대가 나올 수 있기 때문에 이를 방지하기 위하여 1을 더한다.
        • Document Frequency (df)
          • df_t : 단어 t를 포함하는 문서들 개수
          • Inverse document frequency (idf)
            • idf_t = log_10(N/df_t)
            • N은 전체 문서 개수
        • tf-idf vector 특징
          • 길다 (|V| = 20,000 ~ 50,000) - 모든 단어를 다 커버해야 하기 때문에
          • 희소성 (sparse, 대부분 원소가 0)
          • k개만큼의 output을 낼 때 O(k|V|)개만큼의 학습 파라미터 필요 - 굉장히 많은 파라미터가 필요하다.
      • Vector propagation (검색 엔진을 위한 질의어, 문서 표현)
    • 밀집 벡터(dense vector)
      •  특징
        • 짧다 (50 ~ 1,000)
        • 밀집성 (dense, 대부분 원소가 0이 아님)
        • 더 적은 개수 학습 파라미터를 수반 - O(kd)
        • 더 나은 일반화 능력
          • 일반화 능력을 너무 강조하게 되면 Over generalization 문제가 생길 수 있음. 단어 사이 조금 있는 차이를 너무 무시하게 될 수도 있음.
        • 동의어, 유사어 더 잘 표현
      • Word2vec
        • 단어 w가 주어졌을 때 단어 c가 주변에 나타날 확률을 학습
        • 우리 관심은 이 예측 모델 최종 예측값이 아닌 이 모델 내 단어 w의 가중치 벡터.
        • self-supervision
          • 이 모델을 학습하기 위한 목표값은 이미 데이터내 존재함.
          • 사람이 수동으로 레이블을 생성할 필요가 없음
        • CBOW 모델과 Skip-gram 모델이 있다.
        • Skip-gram
          • 한 단어가 주어졌을 때 그 주변 단어를 예측할 확률을 최대화하는 것이 목표
          • 파라미터를 명시화해 우도함수로 표현하면 다음과 같음
          • 파라미터 Θ={W, C}는 두개 임베딩 행렬 W와 C를 포함한다. W를 목표(또는 입력) 임베딩 행렬, C를 상황(또는 출력) 임베딩 행렬이라 부름. 
            • 둘의 shape은 똑같음. 
              • 단어 개수가 50,000개라면 50,000개의 d차원 벡터가 있는 것이다.
            • 하나의 목표 단어 w와 상황 단어 c가 주어졌을 때 다음과 같은 확률모델을 가정한다.
              w에 해당하는 임베딩 벡터를 v_w, c에 해당하는 임베딩 벡터를 u_c라고 한다.
            • x_w를 단어 w에 대한 one-hot 벡터라 하면 v_w와 u_c는 다음과 같이 정의 됨.
          • 이 모델 문제점은 확률모델의 분모 계산량이 많다. (|V|d와 비례)
            • 해결책
              • Noise-contrastive estimation(Nce) : Normalization constant(위 식 분모)를 하나의 파라미터로 학습한다. 이진 분류 문제에 해당하는 새로운 목표함수를 최적화시킨다. 이렇게 해서 얻어지는 파라미터들이 원래 likelihood 최적해를 근사한다는 것이 증명된다.
              • 이를 좀 더 단순화시키면 negative sampling이 된다.
              • Word2vec은 negative sampling을 사용. 
                •  
      • Glove

Noise-Contrastive Estimation

 

  • 참고 논문
    • Noise-Contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics (JMLR)
    • A fast and simple algorithm for training neural probabilistic language models (ICML)
  • context h -> 다음 단어 w 예측
  • 핵심 아이디어
    • 고차원 multi-class classification -> binary classfication으로 전환
    • P^h_Θ(w) 분모를 파라미터화, 데이터로부터 학습
  • 두 가지 분포
    • P^h_d(w) : h가 주어졌을 때 w의 확률 분포 (주변 단어가 나타날 확률)
      • 이 확률을 근사시키는 모델을 만드는 것이 궁극적 목표
      • 1개의 샘플 추출 -> POS(positive set) -> C_1(class 1)
    • P_n(w) : context h와 상관없는 단어들 확률 분포 (n은 noise)
      • k개 샘플 추출 -> NEG(negative set) -> C_2(class 2)

Negative Sampling

 

  • 목표함수
    • 신경망 구조는 그대로임
    • Normalization constant 계산할 필요 없음
    • Gradient 계산이 단순화됨

+ Recent posts