의미론적으로 분할하였다는 것. 의미를 갖는 분할 영역을 갖도록 이미지를 분할한다. 정확한 영역을 픽셀 단위로 구분하여 준다.
채널별로 레이블을 나눈다. (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를 학습한다.
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
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를 높인다. 불변성을 갖도록 한다. 작은 변화에 크게 반응하지 않도록 한다.
첫 번째 단계 : 피쳐 추출기(Feature Extractor)와 분류기(classifier) 전부 학습 시킨 모델을 사용한다. -> 모델 파라미터를 변형하지 않고 사용 - 문제가 거의 같을 때 사용 ex) ImageNet 데이터로 학습된 모델을 개와 고양이 분류하는 문제에 사용 두 번째 단계 : 피쳐 추출기를 그대로 활용하고(weight copy), 분류기만 현재 자신이 갖고 있는 문제에 맞게 재학습시킨다. -> 문제가 비슷할 때 사용 ex) ImageNet 데이터로 학습된 모델을 어벤져스 캐릭터 분류 문제에 사용 세 번째 단계 : 피쳐 추출기에서 부분적으로 다시 학습을 시키고, 분류기를 자신이 갖고 있는 문제에 맞게 학습시킨다. -> 문제가 약간 다를 때 사용 ex) ImageNet 데이터로 학습된 모델을 얼굴인식 문제에 사용 네 번째 단계 : 피쳐 추출기와 분류기 전체를 재학습 혹은 미세 조정해야 한다. -> 문제가 많이 다를 때 사용 ex) ImageNet 데이터로 학습된 모델을 의료영상 문제에 사용
하나의 목표 단어 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으로 전환