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 계산이 단순화됨

문서 분류(Text Classification)

 

  • 문서 분류란?
    • 텍스트를 입력으로 받아, 텍스트가 어떤 종류 범주에 속하는지 구분하는 작업
    • Input 
      • a document - d
      • a fixed set of classes - C={c_1, c_2, ..., c_J}
    • Output
      • a predicted class - c ∈ C
  • 다양한 문서 분류 문제들 예시
    • 문서 범주
    • 주제 분류 (ex) 논문 주제 분류 - 컴퓨터(AI, 데이터베이스, 그래픽, 암호학, etc...))
    • 이메일 스팸 분류
    • 감성 분류 (ex) 영화 리뷰, 제품 리뷰, 정치 리뷰, 예측(선거 결과))
      • 여러 측면이 있을 수 있지만 간단한 작업에 집중
        • 감정적, 태도적, 성격적 측면
        • 주어진 텍스트가 긍정적 태도를 보이고 있는지, 부정적 태도를 보이고 있는지.
    • 언어 분류 (영어? 한국어? 프랑스어?)
  • 문서 분류 방법
    • 규칙 기반 모델
      • 단어들 조합을 사용한 규칙들 사용
        • ex) spam : black-list-address OR ("dollars" AND "you have been selected")
      • Precision(정확도)은 높지만 recall(예외적 상황 커버 힘듦)이 낮음
      • Snorkel (규칙 기반 모델 + 머신러닝 모델)
        • 각각 규칙을 'labeling function'으로 간주
        • Graphical model 일종인 factor graph를 사용해 확률적 목표값을 생성하는 generative model
        • 프로젝트 초기 labeled data가 부족하거나 클래스 정의 자체가 애매한 경우(하지만 규칙을 생성하는 것은 쉽다 가정)에 매우 유용한 방법
        • 확률적 목표값이 생성된 후 딥모델 등 다양한 모델 사용 가능
    • 지도학습
      • Input
        • a document - d
        • a fixed set of classes - C={c_1, c_2, ..., c_J}
        • A trasining set of m hand-labeled documents - (d_1, c_1), ...., (d_m, c_m)
      • Output
        • a learned classifier - γ : d -> c
      • 다양한 모델 사용 가능
        • Naive Bayes
          • Naive Bayes 가정과 Bag of Words 표현에 기반한 간단한 모델
          • Bag of Words - 가방 안에 단어를 담고 섞는다!
            • 순서를 고려하지 않은 단어들의 집합 (단어의 빈도수만 고려)
          • Naive Bayes 분류기
            • 수식화
              • P(c|d) = P(d|c)P(c) / P(d)
              • 분모는 최적의 클래스를 찾는데 상관이 없는 부분이라 빼도 된다.
              • 위 문제를 해결하기 위하여 다음과 같은 2가지 가정을 사용한다.
                • Bag of Words 가정 : 위치는 확률에 영향을 주지 않는다.
                • 조건부 독립(Conditional independence) 가정 : 클래스가 주어지면 속성들은 독립적이다.
              • 가정들을 적용시킨 후의 수식
                Naive Bayes 분류기는 입력값에 관한 선형 모델이다.

            • 학습
              • MLE (Maximum Likelihood Estimation)
                • N_doc = 학습 데이터에 들어 있는 모든 문서의 수
                • Zero 확률문제(단어가 한 번도 나오지 않았을 시 나타나는 문제)를 개선하기 위한 Leplacel(add-1) smoothing
                  • 모든 단어들의 최소 빈도를 1로 설정하는 굉장히 간단한 방법.
              • 알고리즘
                • function TRAIN NAIVE BAYES(D, C) return log P(c) and log P(w|c)
                  for each class c∈C #Calculate P(c) terms
                      N_doc = number of documents in D
                      N_c = number of documents from D in class c
                      logprior[c] <- log(N_c / N_doc)
                      V <- vocabulary of D
                      bigdoc[c] <- append(d) for d∈D with class c
                      for each word w in V # Calculate P(w|c) terms
                          count(w,c) <- of occurrences of w in bigdoc[c]
                          loglikelihood[w, c] <- log(count(w, c) + 1 / sigma_w'(count(w',c)+1))
                  return logprior, loglikelihood, V
                      
                  function TEST NAIVE BAYES(testdoc, logprior, loglikelihood, C, V) return best c
                  for each class c∈C
                      sum[c] <- logprior[c]
                      for each position i in testdoc
                          word <- testdoc[i]
                          if word ∈ V
                              sum[c] <- sum[c]+loglikelihood[word, c]
                  return logprior, loglikelihood, V
        • Logistic regression
        • Neural networks
        • k-Nearest Neighbors
        • ...

+ Recent posts