본문 바로가기

엔지니어

[공유] 영상처리 엔지니어 면접 질문 모음

  • feature란
    • 영상의 특징값(feature)이란 점(point), 엣지(edge, 경계선, 외곽선), 코너(corner, 모서리), 질감(texture), 색상(color)처럼 다른 부분과 구분되어 두드러지는 성질을 의미
    • 특징 벡터(feature vectors) : high-level 영상 인식에 사용될 의미있는/정제된 정량적 특징 정보
  • Convolution
    • 정의: 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자
    • 시스템에 메모리가 있는 경우 한 시스템의 출력이 현재 입력에 의해서만 결정되는 것이 아닌 이진입력에 의해서도 영향을 받기 때문에, 그에 대한 출력을 나타내기 위해 하는 연산.
    • Convolution이 나오게 된 이유는, 신호들 간의 관계를 파악하고 싶어서이다. 그 LTI System을 잘 표현하기 위한 방법이 바로 Convolution이다. 시간에 따라 신호간의 비슷한 정도를 나타내는 것.
    • (CNN에서)Convolution 연산의 수학적인 의미는 신호를 커널을 이용하여 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것이다.
    • 특히, CNN에서 사용하는 연산은 사실 convolution이 아니고 cross-correlation이다.
    • 딥러닝에서 쓰이는 용어로 convolution을 보자면, convolution은 element wise matrix multiplication + sum 입니다. Convolution의 과정은 다음과 같이 나타낼 수도 있습니다.
      1. 두 행렬을 element wise로 곱한다.
      2. sum(A)를 한다.
  • Convolution과 Correlation
    • Correlation은 대상 함수 혹은 시스템함수와 입력함수가 똑같이 일치하는 시점에 오면 진폭의 높이가 최대값을 갖습니다. 즉, 입력 함수와 대상 함수 혹은 시스템 함수가 얼마나 유사한지에 대해서 측정할 수 있는 도구가 Correlation이 됩니다.
    • Convolution은 LTI(선형시불변) 시스템에서 입력함수와 시스템 함수 H(x) 이 두가지를 이용하여 출력값을 계산하는 연산을 의미합니다. 이를 통해 나온 출력은 특정 신호가 입력 신호로 주어졌을 때, 특정한 시스템 함수를 갖는 시스템의 출력값은 입력 신호와 시스템 함수의 콘볼루션의 결과가 됩니다.
    • 즉, Convolution은 어떤 System function H(x)에 대해서 입력 input function을 주었을 때, 어떠한 output이 나오는가?를 연산해주는 연산자가 됩니다.
    • 합성곱 신경망의 입력값에 필터(가중치 혹은 커널)를 콘볼루션하려면 필터를 뒤집어서 적용해야 합니다. 그런데 어차피 필터의 값을 학습하려는 것이 목적이기 때문에 뒤집어서 콘볼루션을 하나 그냥 하나 동일합니다. 학습과 추론 시에 필터만 일정하면 됩니다. 그래서 딥러닝 프레임워크들은 합성곱이 아니고 그냥 교차상관으로 구현되어 있습니다. 하지만 관습상 합성곱이라고 부릅니다.
    • 두 표현식이 비슷하나,
      • Convolution은 연산작용, Correlation은 변환작용
      • Convolution은 다른 용도를 위한 수학적 도구 역할이 강조된 연산
      • Correlation은 함수 간에 유사성의 비교 척도로 즉각 활용되는 변환
    • Cross-correlation
      • CNN에서 사용하는 convolution 연산은 실제로 cross-correlation이라 부르고, 연산 행렬과 피연산 행렬의 같은 위치의 값들을 각각 곱한 후 모두 더한 값을 출력으로 낸다.
      • 수학에서 의미하는 convolution 연산은 조금 달리 연산 행렬의 가로행과 세로행을 바꾼 후 값들을 각각 곱하고 모두 더하는 연산을 한다.

    • batch normalization
      • 학습하는 과정 자체를 전체적으로 안정화하여 학습 속도를 가속 시킬 수 있는 근본적인 방법
      • 먼저 Input으로 사용된 미니배치의 평균과 분산을 계산을 한다. 그 다음 hidden layer의 활성화값/출력값에 대해서 평균이 0, 분산이 1이 되도록 정규화(Normalization)를 한다(=변환; transform). 그럼으로써 데이터 분포가 덜 치우치게 되고 배치 정규화 단계마다 확대scale와 이동shift 변환(transform)을 수행한다.
      • 배치 정규화 논문에서는 학습에서 불안정화가 일어나는 이유를 'Internal Covariance Shift' 라고 주장하고 있는데, 이는 네트워크의 각 레이어나 Activation 마다 입력값의 분산이 달라지는 현상을 뜻한다.
      • 배치 정규화는 평균과 분산을 조정하는 과정이 별도의 과정으로 떼어진 것이 아니라, 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정 역시 같이 조절된다는 점이 단순 Whitening 과는 구별
      • 배치 정규화는 간단히 말하자면 미니배치의 평균과 분산을 이용해서 정규화 한 뒤에, scale 및 shift 를 감마(γ) 값, 베타(β) 값을 통해 실행한다. 이 때 감마와 베타 값은 학습 가능한 변수이다. 즉, Backpropagation을 통해서 학습이 된다.
      • 배치 정규화는 단순하게 평균과 분산을 구하는 것이 아니라 감마(Scale), 베타(Shift) 를 통한 변환을 통해 비선형 성질을 유지 하면서 학습 될 수 있게 해줌 
      • 배치 정규화가 신경망 레이어의 중간 중간에 위치하게 되어 학습을 통해 감마, 베타를 구할 수 있음 
      • Internal Covariate Shift 문제로 인해 신경망이 깊어질 경우 학습이 어려웠던 문제점을 해결
      • gradient 의 스케일이나 초기 값에 대한 dependency 가 줄어들어 Large Learning Rate 를 설정할 수 있기 떄문에 결과적으로 빠른 학습 가능함, 즉, 기존 방법에서 learning rate 를 높게 잡을 경우 gradient 가 vanish/explode 하거나 local minima 에 빠지는 경향이 있었는데 이는 scale 때문이었으며, 배치 정규화를 사용할 경우 propagation 시 파라미터의 scale 에 영향을 받지 않게 되기 때문에 learning rate 를 높게 설정할 수 있는 것
      • regularization 효과가 있기 때문에 dropout 등의 기법을 사용하지 않아도 됨 (효과가 같기 때문)
      • 학습 시 Deterministic 하지 않은 결과 생성 
      • Learning Rate Decay 를 더 느리게 설정 가능
      • 입력의 범위가 고정되기 때문에 saturating 한 함수를 활성화 함수로 써도 saturation 문제가 일어나지 않음, 여기서 saturation 문제란 가중치의 업데이트가 없어지는 현상임

  • Regularization(가중치 규제)
    • 복잡한 모델이 간단한 모델보다 과적합될 가능성이 높습니다. 그리고 간단한 모델은 적은 수의 매개변수를 가진 모델을 말합니다. 복잡한 모델을 좀 더 간단하게 하는 방법으로 가중치 규제(Regularizaiton)가 있습니다.
      • L1 규제 : 가중치 w들의 절대값 합계를 비용 함수에 추가합니다. L1 노름이라고도 합니다.
      • L2 규제 : 모든 가중치 w들의 제곱합을 비용 함수에 추가합니다. L2 노름이라고도 합니다.
  • l1 l2 regularization
    • 모델을 학습시킨다는건 결국 모델의 Weight matrix를 좋은 방향으로 업데이트해나가는 겁니다. 그런데 이 Weight 중 일부가 학습과정 중 과도하게 커져버린다면, 몇몇개의 인풋에 극단적으로 의존하는 상황이 벌어지고, 이 경우 모델의 일반화 성능은 감소할 것입니다. (첨언으로 모델의 Weight matrix size가 너무 작다면, 이런일이 발생할 수 있습니다. 때문에 NN를 설계할 때에는, 충분히 Sparse할 수 있게끔 구축해야합니다.) 때문에 특정 Weight가 과도하게 커지지 않게끔 락(Lock)을 걸어주는 역할을 L1, L2 Regularization이 해줍니다. 
    • L1 Norm 은 벡터 p, q 의 각 원소들의 차이의 절대값의 합입니다.
    • L2 Norm 은 벡터 p, q 의 유클리디안 거리(직선 거리) 입니다.
    • 실제 값과 예측치 사이의 차이(오차) 값의 절대값을 구하고 그 오차들의 합을 L1 Loss 라고 합니다.
    • L2 Loss 는 오차의 제곱의 합으로 정의됩니다. 이를 Least squares error(LSE) 라고 부릅니다.
    • L2 Loss 는 직관적으로 오차의 제곱을 더하기 때문에 Outlier 에 더 큰 영향을 받습니다. "L1 Loss 가 L2 Loss 에 비해 Outlier 에 대하여 더 Robust(덜 민감 혹은 둔감) 하다." 라고 표현 할 수 있습니다.
    • 기존의 cost function 에 가중치의 크기가 포함되면서 가중치가 너무 크지 않은 방향으로 학습 되도록 합니다. 이때 λ 는 learning rate(학습률) 같은 상수로 0에 가까울 수록 정규화의 효과는 없어집니다.
    • 먼저 Regularization 의 의미를 다시 한번 생각해보면, 가중치 w 가 작아지도록 학습한 다는 것은 결국 Local noise 에 영향을 덜 받도록 하겠다는 것이며 이는 Outlier 의 영향을 더 적게 받도록 하겠다는 것입니다.
    • L1 Norm 은 Feature selection 이 가능하고 이런 특징이 L1 Regularization 에 동일하게 적용 될 수 있는 것입니다. 이러한 특징 때문에 L1 은 Sparse model(coding) 에 적합합니다. L1 Norm 의 이러한 특징 때문에 convex optimization 에 유용하게 쓰인다고 합니다.

              • PCA
                • 차원의 저주 : 기계 학습 모델의 정확도를 높이기 위해 더 많은 정보를 사용하고 싶지만 더 많은 기능을 추가할수록 차원 수 (n)가 증가합니다. 특징 공간의 차원이 증가함에 따라 구성의 수가 기하 급수적으로 증가하고 결과적으로 관찰 대상 구성의 수가 감소합니다.
                • 주성분 분석 또는 더 일반적으로 PCA 라고하는 것은 중요한 정보의 대부분을 유지하면서 변수 수를 줄이는 방법입니다. 상관 관계가있을 수있는 여러 변수를 주성분 이라고하는 더 적은 수의 상관되지 않은 변수로 변환합니다. 주성분은 특정 직교 차원에서 분산 (또는 고유 값)에 의해 가중치가 부여 된 원래 변수의 선형 조합입니다. PCA의 주요 목표는 모델 기능을 더 적은 수의 구성 요소로 단순화하여 데이터의 패턴을 시각화하고 모델이 더 빠르게 실행되도록 돕는 것입니다. PCA를 사용하면 상관 관계가 높은 기능을 제거하여 모델 과적 합 가능성도 줄일 수 있습니다.
                • 주성분 분석 (PCA)의 개념은 가능한 많은 데이터 분산을 유지하면서 많은 수의 관련 변수로 구성된 데이터 세트의 차원을 줄이는 것입니다.
                • PCA는 데이터 하나 하나에 대한 성분을 분석하는 것이 아니라, 여러 데이터들이 모여 하나의 분포를 이룰 때 이 분포의 주 성분을 분석해 주는 방법이다.
                • 여기서 주성분이라 함은 그 방향으로 데이터들의 분산이 가장 큰 방향벡터를 의미한다.
              • svm
                • 서포트 벡터 머신(이하 SVM)결정 경계(Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델이다. 그래서 분류되지 않은 새로운 점이 나타나면 경계의 어느 쪽에 속하는지 확인해서 분류 과제를 수행할 수 있게 된다.
                • 이제 결정 경계는 데이터 군으로부터 최대한 멀리 떨어지는 게 좋다는 걸 알았다. 실제로 서포트 벡터 머신(Support Vector Machine)이라는 이름에서 Support Vectors는 결정 경계와 가까이 있는 데이터 포인트들을 의미한다. 이 데이터들이 경계를 정의하는 결정적인 역할을 하는 셈이다.
                • 점선으로부터 결정 경계까지의 거리가 바로 ‘마진(margin)’이다. 최적의 결정 경계는 마진을 최대화한다.
                • 파라미터 C는 허용되는 오류 양을 조절한다. C 값이 클수록 오류를 덜 허용하며 이를 하드 마진(hard margin)이라 부른다. 반대로 C 값이 작을수록 오류를 더 많이 허용해서 소프트 마진(soft margin)을 만든다.
                • SVM에서는 선형으로 분리할 수 없는 점들을 분류하기 위해 커널(kernel)을 사용한다.
                • 커널(kernel)은 원래 가지고 있는 데이터를 더 높은 차원의 데이터로 변환한다. 2차원의 점으로 나타낼 수 있는 데이터를 다항식(polynomial) 커널은 3차원으로, RBF 커널은 점을 무한한 차원으로 변환한다.
                • RBF 커널에는 파라미터 감마(gamma)가 있다. 감마가 너무 크면 학습 데이터에 너무 의존해서 오버피팅이 발생할 수 있다.
              • edge 검출 알고리즘
                • 영상에서의 edge란 영상의 밝기가 낮은 값에서 높은 값으로, 또는 이와 반대로 변하는 지점에 존재하는 부분을 가리킨다.
                • 결국 edge는 영상안에 있는 객체의 경계(boundary)를 가리키는 것으로서, 모양(shape), 방향성(direction)을 탐지할 수 있는 등 여러 정보가 담겨있다.
                • 영상에서의 기울기는 gradient라고 하면, 이 gradient를 구하면 edge를 얻을 수 있다.
                • edge를 얻기 위한 마스크의 기본 조건
                  • 마스크의 크기의 가로/세로가 같고, 홀수여야 함
                  • 중심 계수를 기본으로 상하좌우가 대칭
                  • 중심 계수의 값은 항상 0을 포함한 양수
                  • 중심 계수 이외의 값은 음수
                  • 모든 계수 내의 합은 0
                • 1차 미분 방식은 수평, 수직, 대각선 방향에 놓여진 에지에서 민감한 반응을 보인다. 너무 많은 윤곽선을 추출하면 오히려 원하는 결과가 달라질 수 있다. 이를 보완하는 방법 이 바로 2차 미분이다.
                • 2차 미분 알고리즘은 라플라시안, Log(Laplacian of Gaussian), DoG(Difference of Gaussian)이 있다.
                • 라플라시안 마스크는 주변 밝기와의 차이값을 이용하여 에지를 축출하기 때문에, 잡음에 약하고, 에지보다는 영상 내의 가는 선이나 고립점에 강하게 반응한다. 캐니 에지 검출은 이제까지 논의된 에지 검출기들 보다 우월하다.(명확하게 검출된다) 윤곽을 가장 잘 찾아내면서도 원래 영상의 회색물질과 관련된 모든 에지들을 제거할 수 있는 유일한 방법이기도 하다.
                  • 1. 블러링을 통한 노이즈 제거(Gaussian filter)
                  • 2. 마스크를 이용한 엣지 검출(Sobel mask)
                  • 3. Non-Maximum Value 제거
                  • 4. Double Threshold 로 크기 구분
                  • 5. 엣지 연결
      • HOG Algorithm은 일반적으로 보행자 검출이나 사람의 형태에 대한 검출 즉, Object Tracking에 많이 사용되는 Feature 중 하나이다. Image의 지역적인 Gradient를 해당 영상의 특징으로 사용하는 방법이다. 
        • 가장 중요한 특징은 Edge의 양과 방향을 구분하는 특성을 가지고 있다. 또한, Overlap을 이용하여 계산하기 때문에 어느 정도 Shift에도 적응할 수 있는 능력이 있다. 마치 Haar-like가 영역으로 특징을 구하기 때문에 잡음에 둔감한 것과 같이 HOG의 Overlap의 이유는 어느정도의 변화를 받아 들일 수 있다는 것이다
    •  
          •  
    •  
  •  
  • bias & variance가 overfitting 미치는 영향
    • Bias는 데이터 내에 있는 모든 정보를 고려하지 않음으로 인해, 지속적으로 잘못된 것들을 학습하는 경향을 말한다. underfitting 이라고도 한다.
    • 반대로 Variance는 데이터 내에 있는 에러나 노이즈까지 잘 잡아내는 highly flexible models 에 데이터를 fitting시킴으로써, 실제 현상과 관계 없는 random한 것들까지 학습하는 알고리즘의 경향을 의미한다. 이는 overfitting과 관계되어 있다.
    • Bias와 Variance는 이러한 경향을 의미할 뿐 아니라, 실제로 이 정도를 '측정'하기 위해서도 사용된다.
      • 'Bias'는 트레이닝 데이터를 바꿈에 따라서 알고리즘의 평균 정확도가 얼마나 많이 변하는지를 보여주고,
      • 'Variance'는 특정 입력 데이터에 대해 알고리즘이 얼마나 민감한지를 나타낸다.

  • overfitting 방지법
    • 보통 번역은 '정규화' 라고 하지만 '일반화' 라고 하는 것이 이해에는 더 도움이 될 수도 있습니다. 모델 복잡도에 대한 패널티로 정규화는 Overfitting 을 예방하고 Generalization(일반화) 성능을 높이는데 도움을 줍니다. Regularization 방법으로는 L1 Regularization, L2 Regularization, Dropout, Early stopping 등이 있습니다.
    • Data augmentation, Ensemble model, Dropout, Dropconnect, BatchNormalization, Early stopping, Weight decay, Multi-Task learning
  • receptive field
    • 합성곱층의 뉴런은 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 합성곱층 뉴런의 수용영역(receptive field)안에 있는 픽셀에만 연결이 되기 때문에, 앞의 합성곱층에서는 저수준 특성에 집중하고, 그 다음 합성곱층에서는 고수준 특성으로 조합해 나가도록 해준다.
  • knn
    • 어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류하는 방식입니다.
    • K의 default 값은 5입니다. 가장 가까운 주변 5개 데이터를 기반으로 분류한다는 것입니다. 일반적으로 K는 홀수를 사용합니다. 짝수일 경우 동점이 되어 하나의 결과를 도출할 수 없기 때문입니다.
    • KNN의 특징은 훈련이 따로 필요 없다는 것입니다. 모델을 별도로 구축하지 않는다는 뜻으로 게으른 모델 (Lazy model)이라고 부릅니다. 그렇기 때문에 SVM이나 선형 회귀보다 빠릅니다.
    • 단점으로는 모델을 생성하지 않기 때문에 특징과 클래스 간 관계를 이해하는 데 제한적입니다. 훈련 단계가 짧다는 장점과 반대로 예측 단계에서 상대적으로 느리다는 단점이 있습니다.
    • 데이터가 많아지면 분류 단계가 느리고, 명목 특징 및 누락 데이터를 위한 추가 처리가 필요합니다.

  • graph tree 차이점
    • 그래프와 트리는 다양한 복잡한 문제를 해결하는 데 사용되는 비선형 데이터 구조입니다. 그래프는 에지가 한 쌍의 꼭지점을 연결하는 정점과 가장자리 그룹으로, 트리는 연결되어 있어야하고 루프가 없어야하는 최소 연결 그래프로 간주됩니다.
    • Tree 구조란 Graph의 일종으로, 여러 노드가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 Graph를 Tree라고 부른다.
    • Graph는 일부 객체들의 쌍들이 서로 연관된 객체의 집합을 이루는 구조이다. 일련의 꼭짓점들과 그 사이를 잇는 변들로 구성된 조합론적 구조로 볼 수 있다.
    • 그래프
      • 2개 이상의 경로가 가능하다. 노드들 사이에 무방향/방향에서 양방향 경로를 가질 수 있다.
      • self-loop 뿐 아니라 loop/circuit 모두 가능하다.
      • 루트 노드라는 개념이 없다.
      • 부모-자식 관계라는 개념이 없다.
      • 그래프의 순회는 DFS나 BFS로 이루어진다.
      • 그래프는 Cyclic 혹은 Acyclic이다.
      • 그래프는 크게 방향 그래프와 무방향 그래프가 있다.
      • 간선의 유무는 그래프에 따라 다르다.
      • 그래프는 네트워크 모델이다.
    • 트리
      • 트리는 그래프의 특별한 케이스이며 "최소 연결 트리"라고도 불린다. 두 개의 정점 사이에 반드시 1개의 경로만을 가진다.
      • loop나 circuit이 없다. 당연히 self-loop도 없다.
      • 한 개의 루트 노드만이 존재하며 모든 자식노드는 한 개의 부모노드만을 가진다.
      • 부모-자식 관계이므로 흐름은 top-bottom 아니면 bottom-top으로 이루어진다.
      • 트리의 순회는 Pre-order, In-order 아니면 Post-order로 이루어진다. 이 3가지 모두 DFS/BFS안에 있다.
      • 트리는 DAG(Directed Acyclic Graphs)의 한 종류이다. DAG는 사이클이 없는 방향 그래프를 말한다.
      • 트리는 이진트리, 이진탐색트리, AVL 트리, 힙이 있다.
      • 간선은 항상 정점의개수-1 만큼을 가진다.
      • 트리는 계층 모델이다.
  • q sort 속도 nlogn
    • 퀵정렬은 분할 정복 (Divide and conquer)을 이용하여 정렬을 수행하는 알고리즘이다. 
    • 랜덤배열에서 빠른 정렬 속도를 보인다.
    • 피벗(pivot) 선정하는 방법에 따라 속도가 달라진다.
    • 순열이나 역순의 경우 매우 느린 속도를 보인다.
    • 재귀함수 기반으로 구현시 복잡하게 생각될 있다.
    • 평균 nlogn, 최악 n^2
  • hsv
    • HSV 모델은 Hue(색조), Saturation(채도), Value(명도)의 3가지 성분으로 색을 표현한다. Hue는 색조(예: 붉은색 계열인지 푸른색 계열인지, ...)를, Saturation은 그 색이 얼마나 선명한(순수한) 색인지를, Value는 밝기(intensity)를 나타낸다. HSV 모델은 우리가 색을 가장 직관적으로 표현할 수 있는 모델이며 또한 머리속에서 상상하는 색을 가장 쉽게 만들어낼 수 있는 모델이다.
  • probability / likelihood
    • probability : 주어진 확률분포가 있을 때, 관측값 혹은 관측 구간이 분포 안에서 얼마의 확률로 존재하는 가를 나타내는 값. 고정된 확률 분포에서 어떠한 관측 값이 나타나는지에 대한 확률.
    • likelihood: 어떤 값이 관측되었을 때, 이것이 어떤 확률 분포에서 왔을 지에 대한 확률. 고정된 관측 값이 어떠한 확률 분포에서 어느 정도의 확률로 나타나는지에 대한 확률.
    • maximum likelihood : 각 관측 값에 대한 총 가능도가 최대가 되게 하는 분포를 찾는 것.
  • confusion matrix(오차 행렬)
    • GT 값과 딥러닝 모델의 예측 값의 관계 matrix
    • Recall = TP / (TP + FN)
      • 모든 sample중, GT가 True인 것 중에 실제 True로 예측한 비율을 의미합니다. 이를 수식으로 나타내면 다음과 같습니다.
    • Precision = TP / (TP + FP)
      • 모든 sample중, 모델이 True라고 예측한 것들 중에 실제 GT가 True인 비율을 의미합니다.