약 1주일 전에 최종 신체검사 후에 합격 후에 최종 합격 통보를 받았다.자세한 내용은 보안으로 걸릴 수 있으니 분위기 위주로 작성할 예정이다.

 

지원공고 확인

지원 공고 확인은 에브리 타임에서 광고하는 것을 보고 지원하게 되었다.

채용공고
채용 프로세스

지원 가능한 대학 3곳을 1순위, 2순위, 3순위로 나눠서 쓰는 것이 가능했다.(대부분 최종 합격 시 1지망으로 보내는 것 같다)
분야는 원래부터 관심이 있던 그래픽스 및 컴퓨터 비전을 선택했다.

 

설명회

개인적으로 나는 학과 설명회를 안 들어갔다. 원래 들어가려고 생각을 하였으나, 그날에 까먹고 못 들어가 버렸다.
나중에 최종 합격을 하고 알게 된 사실인데 대략적인 인적성 면접에 대한 일정, 형식 등은 설명회에서 이야기해 주었다고 한다. 나는 이를 모르고 인적성 3일 전, 면접 1~2일 전에 급하게 준비한 것 같다. 나 같은 실수는 하지 않았으면 한다.

 

지원서 작성

지원서 항목은 무난 무난한 느낌이었다.(지원 동기, 지원 직무 협업경험, 지원 직무 대표적인 연구 및 프로젝트, 보유한 skill)  대체적으로 500자 제한이라, 나를 어필할 수 있는 내용을 최대한 압축하는 것이 좋은 것 같다. 지원 항목을 보면 느끼는 점이 AI와 관련된 경험이 없거나 비전공자인 경우에는 쓰기 어려운 것 같다는 느낌이 들었다. 직무관련된 경험을 쓰는 항목이 3개나 되고, 나는 각각의 항목마다 총 3개의 프로젝트를 정리해서 작성했다.
개인적으로 서류에서 합/불을 가릴 것 같다는 느낌은 들지 않았다. 실제로 대부분의 회사에서도 코딩 테스트와 인적성은 다 보게 해주는 느낌이기 때문이다. 

 

대략적으로 서류 합격 소식은 10일 정도 걸린 것 같다. 사실 학과 설명회를 들어가서 미리 일정을 알았다면 인적성과 코딩 테스트를 준비하겠지만, 나는 서류 합격 메일을 보고 준비해서 3일 정도밖에 시간이 없었다.

 

인적성/ 코딩 테스트

SD에듀

인적성은 SD 적성검사연구소에서 나온 것을 알라딘 E북으로 구매하였다. 나의 실수로 3일밖에 시간이 없어 최신 기출 유형을 하루 만에 다 풀고, 하루에 한 개씩 모의고사를 풀었다. 그리고 최대한 눈으로 푸는 연습을 했다. 온라인 인적성이니 필기구를 못쓰는 문제가 있기 때문이다.
개인적으로 나는 인적성을 정말 못 풀었다. 실제 시험에서 반타작을 한 것 같다. 그래서 당연히 떨어질 거라 생각했는데, 붙여주는 거 보니 KT도 절대평가 느낌으로 엄청 낮은 점수가 아니면 다 PASS를 주는 것 같다.

 

코딩 테스트는 프로그래머스 플랫폼을 이용했다. 기존에 나는 삼성전자 문제도 많이 풀었고, 백준에서 골드 1 정도 티어를 가지고 있어서 프로그래머스 플랫폼에 적응하는 훈련만을 했다. 근데 문제가 너무너무 쉽게 나와서(실버 5~3 정도 느낌) 3문제를 해결하는 데 약 20분 정도 걸린 것 같다. 남은 1시간 40분 동안에 검토만 했다.
기존에 연습할 때처럼 문제만 빠르게 풀고 코드를 이쁘게 정리 안 했는데, 시간 남으면 정리하는 것이 좋은 것 같다.

대충 합격 소식은 시험을 보고 1주일도 안 돼서 나왔다.

 

실무면접

실무면접은 현직에서 일하시는 분들과 진행하는 면접이다.
다대일로 온라인으로 진행했고, 줌으로 하다 보니 시선처리가 엄청 어려웠다.(시선처리가 가장 중요한 듯)
그리고 내가 바보같이 설명회에 안 들어가고, 인적성이 망해서 당연히 떨어질 줄 알고 준비를 안 했다.
그래서 면접 준비를 하루밖에 못했다.(정확히 8시간 정도, 정장도 없었다. ^^)
면접 내용은 보안이므로 자세히 말을 하지는 못하지만, 자기소개서에 작성한 내용 위주로 진행한 프로젝트에 대해서 질문하셨다.
분위기는 엄청 편안했고, 어려운 질문도 많이 하지 않으셨다.
나는 발음도 좋지 않고, 말도 못 하는 편이라 면접을 걱정했지만 다행히 그런 요소들보다 나의 실무능력 위주로 평가하는 느낌이 강했다.

실무면접도 1주일도 안되서 결과가 나왔다.

임원면접

임원면접은 실무면접보다 불편한 분위기? 였다.

다대일로 이또한 온라인으로 진행했고, 줌으로 하다 보니 시선처리가 어려운것을 당연했다.

그리고 실무는 테이블 배치도 엄청 편하게 되어있었지만, 임원면접은 말그대로 드라마에서 보던 대기업 회의장느낌..이였다. (아무래도 임원분들이다보니 그런것 같다.)

그래도 임원분들이 굉장히 친절하셨다. 긴장을 풀어줄려는 노력이 엄청 보였다..(감사하다)

면접 내용은 자소서 내용이 진짜인지 판단하는 느낌이 강했고, 다른 임원면접처럼 나의 성향을 파악하려는 노력을 많이 하셨다. 중간에 번아웃이 있다고 말실수를 했지만, 다행히 임기응변으로 잘 해결한 것도 있다.

그리고 인성질문이 강한 느낌이였다.
꼬리 질문이 상당히 많았고, 하나하나 캐치해서 질문하는 것이 조금 날카로웠지만 원만하게 잘 해결한 것 같다.
임원면접도 1주일도 안 돼서 결과가 나왔다.
결과가 나오면서 학교를 배치해 주고, 학업계획서를 작성해야 한다. 나는 1지망으로 작성한 한양대학교로 배정되었다.

대학원면접

사실 대학원 면접까지 오면 무조건 붙는다는 주변의 반응이 있어서 준비를 하루밖에 안 했다.
실제로 대학원 면접에 가서 느낀 점은 '무조건 붙는다'였다.
한양대학교 전체 면접날이었고, 대기할 때 KT와 LG 계약학과 인원들과 같이 봤다.
다대1면접으로 교수님들이 많이 바쁜 느낌이 강했다.
들어가서 자기소개 후에 성적 증명서만 보고 이 과목이 A+인데 기억나는 것이 있냐고 물어보셨다.
그렇게 질문 하나하나 하고 끝이었다. 대략 5분 정도?
아무래도 앞에서 힘들게 면접을 봐서 배려를 해준 느낌 같기도 했다.

이렇게 프로세스를 진행하고, 대학원 면접 합격을 받았다.
채용검진은 .. 그냥 떨어지면 병원에 가서 입원해야 하는 느낌이 강할 정도로 단조로웠다.
최종 합격하고 나서 느낀 것이지만, 솔직하게 대답하고 나의 역량을 어필하는 것이 중요한 것 같다.
그리고 나처럼 바보같이 채용설명회를 무시하지 말고 정보를 확보하는 것이 좋은 것 같다.

 

앞으로 2년간 열심히 노력해야겠다. ㅇㅅㅇ..

https://arxiv.org/abs/1409.1556

 

Very Deep Convolutional Networks for Large-Scale Image Recognition

In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3x

arxiv.org

논문 링크 입니다.

역대 우승자

VGG-16은 ILSVRC에서 2014년에 TOP-5 error rate가 7.3%가 나온 아주 우수한 model로 대표적인 연구 입니다.

ABSTRACT

이 논문에서는 Convolution netwokr 의 Depth가 Large-Scale image recognition 설정에서 미치는 영향을 조사 합니다.
그리고 이 논문에서는 3*3 convolution filter를 가진 netwrok architecture을 이용하여 depth를 증가시켜 평가합니다.

그리고 network의 깊이를 16-19 weight layer로 하면서 이전의 기술보다 더 좋아졌습니다.
ImageNet Challange 2014에 출품 하였는데, localisation and classification tracks에서 각각 1위와 2위를 하였습니다.
그리고 컴퓨터 비전에 추가 연구에 용이하게 하기 위해 두가지 ConvNet 모델을 공개 하였습니다.

INTRODUCTION

ConvNets은 최근 large-scale and video recognition에서 큰 성공을 거두고 있습니다.
이는 2009년 ImageNet과 대규모 공공 이미지 덕분에 가능해 졌고, GPU와 large-scale distribute cluster같은 것들이 있어서 성공적으로 가능 하였습니다.
그리고 deep visual recognition architectures의 발전에 중요한 역활은 ILSVRC에 의해서 수행이 되었습니다.
이미지 분류 시스템의 Testbed 같은 곳 입니다.

ConvNets는 컴퓨터 비전 분야에서 더욱 상품화 됨에 따라 AlexNet의 연구를 더욱 개선 할려고 하였습니다.
그 결과 13년에 우승한 작품은 AlexNet에서 조금만 변경 하였습니다.(파라미터나 층 구조)
또 다른 쪽에서는 전체 이미지와 Multiple scales의 걸쳐 network를 조밀하게 훈련하고 테스트 하였습니다.
이 논문에서는 ConvNet architecture 설계에서 중요한 depth문제를 다루는데, 이를 위해서  architecture 의 다른 
parameters를 수정하고 모든 layer에 매우 작은(3x3) convolutional layer를 추가하여 network의 depth를 높였습니다.

결과적으로 ILSVRC classification and localisation 높은 정확도, 그리고 단순한 Pipeline의 일부를 사용하더라도 우수한 성능을 달성하는 다른 이미지 인식 데이터셋에도 적용 가능합니다. (예를 들면 fine-tuning 없이 liear SVM으로 분류된 
Deep feature)그리고 성능좋은 모델 두개를 공개 하였습니다.(VGG16,VGG19)

나머지 부분에 잘 정리 되어 있으며 , 2장은 ConvNet의 구성에 대해 설명, image classification training and evaluation 은 3장, 4장에는 ILSVRC Classification , 5장에서는 논문을 끝냅니다.
부록 A에서는 ILSVRC-2014 object localisation system를 설명, 부록 B는 dataset에 대한 generalisation읜 Discuss,
그리고 부록C에는 주요 논문 목록을 담고 있습니다.

2 CONVNET CONFIGURATIONS

2.1 에서는 ConvNet의 일반적인 Configurations
2.2 에서는 ConvNet의 평가에 사용되는 특정 Configurations
2.3 에서는 자기들의 설계에 대해서 설명하고, 앞에 기술과 비교 합니다.

2.1 ARCHITECTURE

train 중에는 ConvNet의 대한 INPUT은 224*224 RGB Image로 고정 됩니다.
여기서 하는 data pre-processing은 오직 train set에서 계산한 mean RGB값을 빼는 것 뿐입니다.
Image는 Convolution layer를 통과 하며, 여기서 저자들은 아주 작은 Receptive filed를 사용 합니다.

(CNN에서 Receptive field는 각 단계의 입력 이미지에 대해 하나의 필터가 커버할 수 있는 이미지 영역의 일부를 뜻)
3 x 3을 이용하는데 좌우아래위 중앙을 capture하는 작은 크기 입니다.
그 중에는 input channel을 linear transformation 으로 볼 수 있는 1x1 convolution filter도 사용 합니다.
비선형은 뒤에서 처리합니다. Convolution stride는 1 pixel로 고정됩니다.
그리고 Conv layer에서 Spatial padding은 Convolution 이후에도 spatial resolution이 유지 됩니다.
즉 3x3 Convolution layer에 대해 padding을 1 입니다.
왜냐하면 (이미지 width/height - filter_size + padding*2) / stride + 1) 이기 때문입니다.
Spatial padding은 Max Pooling layer에 의해서 수행됩니다. 그리고 이 layer는 일부는 Convolution layer이후에 수행,
이때 Max pooling 은 stride는 2, 2x2 로 수행됩니다.
Convolution layer stack에는 그 이후에 3개의 Fully connected layer가 옵니다.
처음 두개는 4096개의 Channel, 세번째는 ILSVRC를 위해서 1000개의 Channel입니다.

VGGNET의 간단한 구조

Final layer는 softmax layer이며, Fully connected layer의 Configuration은 모두 동일합니다.
모든 Hidden layer는 ReLU가 non-linearity가 있습니다.
LRN , 저번에 AlexNet에서 사용한 방식은 사용하지 않습니다. 왜냐하면 Local Response Normalisation는
ILSVRC Dataset 의 성능을 향상 시키지는 않지만 Memory와 계산 시간을 증가 시킵니다.

2.2 CONFIGURATIONS

ConvNet configurations

A-E 까지 이름을 정합니다.

모든 Configuration은 2.1에서 말한것에 의해 일반적인 설계를 가지게 됩니다. 깊이만 다릅니다.

11 weight layers in the network A (8 conv. and 3 FC layers)
19 weight layers in the network E (16 conv. and 3 FC layers)
Convolution layer의 Channel width는 작은 편으로, 첫 layer에서는 64, maxPooling layer마다 2배씩 증가하여 512.
표2에서는 각 Configuration 마다 Parameter수가 나옵니다. 원래는 엄청 많지만, 다른 것보다는 적네요.

2.3 DISCUSSION

Receptive field 3x3 filter

VGG의 ConvNet 의 Configuration은 2012년 AlexNet과 2013년 우슨자의 Sermanet과는 다르게 되어 있습니다.
첫 Convolution layer는 large Receptive field, AlexNet의 경우 Stride 4, Stride를 사용하는 것에 비해 여기서는 모든
Network에 걸쳐서 매우 작은 3x3 Receptive filed를 사용합니다. 

 

두개의 3x3 Convolution layer로 이루어진 Stack은 5x5 의 Receptive filed를 가지고 있습니다.
따라서 생각해보면 3x3 Convolution layer는 7x7 의 Receptive filed를 가지게 됩니다.
그러므로 하나의 7x7 layer를 사용하는 대신에 3x3 layer stack 을 사용하면 얻게 되는 장점은 무엇일까요?
첫째 3개의 Non linear rectification layer을 이용하여 decision function이 더욱 차별적으로 만듭니다.(좋게한다)
그리고 parameters의 수를 줄일 수 있습니다.
간단하게 3x3 Convolution stack 은 모두 C개의 채널로 구성되어 있다고 가정합니다.
3x3 Convolution layer stack 의 weight는 3 * (3*3*C*C) , 27*C^2 입니다.
7x7 Convolution layer의 경우 weight는 7*7*C^2, 49*C^2 입니다.
이로인해 약 3x3 Convolution filter를 이용하면 약 81%의 parameter를 줄일 수 있씁니다.
이것은 7x7 Convolution filter를 정규화 하는 것으로 볼 수 있으며 3x3 으로 분해합니다.

1x1 Convolution layer는 Convolution layer의 Receptive  fields에 영향을 끼치지 않고 decision function의 non-linearlity
를 증가 시키는 방법입니다. 비록 1x1읜 입출력 채널의 수는 동일한 liear projection 이지만, 추가적으로 non-linearlity는 
rectification 함수가 추가됩니다. 1x1은 Network in Network 아키텍처에서 사용 되었습니다.

 

Small size convolution filter는 이전에도 몇번 사용 되었습니다. 그러나 less deep 하고 ILSVRC Dataset에서 평가 하지 않았습니다. GoodFellow는 11 weight layer로 Street Number recongition 을 적용하였고, network의 depth가 깊어질수록 성능이 좋아지는 것을 알 수 있었습니다.
ILSVRC-2014 Classification에서 일등을 한 GoogLeNet에서는 VGG와 독립적으로 개발 하였지만, 매우 깊은 ConvNet(22weight layter)와 small convolution filter(3x3 과는 별도로 1x1, 5x5도 사용합니다.)를 기반으로 합니다.
Network topology는 VGG보다 복잡 하지만, 계산량을 줄이기 위해 첫 Layer에서는 Feature map의 resolution이 더
공격적으로 감소합니다.  single-network classification accuracy에서 Szegedy보다 우수 합니다.

3 CLASSIFICATION FRAMEWORK

앞에서는 Network configuration에 대해서 설명 하였고, 이제 ConvNet Training 그리고 Evaluation에 대해 설명합니다.

3.1 TRAINING

ConvNet의 training procedure을 일반적으로 AlexNet을 다르게 됩니다.

(input crops from multi-scale training images 을 제외)
즉 여기서 training은 mini-batch gradient descent를 (역전파 기반)을 사용하며 mometum도 사용, multinomial logistic regression을 목표로 optimising 합니다.
batch size는 256, momemtum은 0.9입니다.
training regularised의 weight decay는 L2 penalty 5*10^(-4)와 , 첫 두 layer에 대한 drop out regularsation의 비율을 0.5
learning rate는 처음에는 1e-2 이지만 validation set의 accuracy가 좋아지지 않자 10배 감소 하도록 하였고, 총 train동안
3번 감소 하였습니다. 그리고 370K의 iteration후에 멈추었으며, 74epochs가 돌았습니다.
여기서 AlexNet 에 비해 더 많은 parameter와 , 더 큰 depth에도 불구하고, 더 큰 깊이, 그리고 더 작은 Convolution 크기에 의해서 암묵적으로 regularisation됩니다. 그리고 특정 layer의 pre-initialisation 덕분에 금방 수렴합니다. 

 

네트워크의 weight의 initialisation은 중요합니다. 초기화가 잘못되면 deep network의 gradient 불안정성으로 인해 
학습이 굉장히 오래 걸릴 수 있습니다.
이 문제를 피하기 위해서는 표1의 A를 random initialisation 할 수 있을 정도로 얕은 train부터 시작 하였고,그 다음
더 깊은 architecutres를 train 할때는 처음 4개의 Conv layer와 마지막 3개의 FC Later를 A Layer와 함께 초기화 .
(중간 layer는 무작위로 초기화) 여기서 미리 initialised된 layer는 learning rate를 줄이지 않고, train 중에 바꿀수 있도록 하였습니다.
random initalisation은 평균 0, 분산이 1e-2인 정규 분포에서 표본을 추출 하였고, bias는 0으로 하였습니다.
그리고 논문을 제출 한 다음에 Glorot & Bengjo의 random initialisation procedure을 통해 pre-train없이 초기화 가능 한
것을 찾았다고 합니다.

training image size는 isotropically rescaled을 하는데 이것의 의미는 training image의 넓이, 높이 중에 더 작은 width, height를 해당 사이즈로 줄이고, 이때 aspect ratio를 유지하여 rescale 합니다.
즉 해당 사이즈가 256이면, H = 1024, W= 512 이면 작은 길이를 가지는 W가 256으로 바뀌고, H는 512가 됩니다.
이때의 Scale하는 S값은 우리가 정해줍니다. 그리고 이 이미지에서 224x224만큼 Crop 합니다.
Crop의 크기가 224x224로 고정된 동안에는 원칙적으로는 s는 224이상의 값을 가져야 합니다.

여기서 Training Scale S를 설정하기 위해 두가지 방법으로 접근합니다.

single Scale training 이 방법은 S를 256 그리고 384로 고정시켜서 학습합니다. S를 256으로 학습 한 뒤에 그 다음으로 S를 384로 학습합니다. S=256으로 pre-train되어 있으므로 S=384로 할때는 Learning rate을 1e-3으로 낮춰서 학습합니다.

Second approach는 S를 multi-scale training 하는 것 입니다.
각 훈련 이미지는 [Smin, Smax]에서 random 하게 sampling 하여 scale을 조정합니다.(Smin = 256, Sma =512)
영상의 object size는 다를 수 있기 때문에 Train 중에는 이것을 고려 하는 것이 좋습니다.
이는 single model 이 크기가 다양한 범위의 object를 인식하도록 훈련하는 Scale jiittering 에 의한data augmentation 효과를 볼 수 있습니다. 속도상의 이유로 동일한 Configuration으로 single-scale model의 layer를 미세 조정 하여서 multi-scale model을 train 하였는데, S= 384로 Pre-train 하였습니다.
이것을 보통 scale jittering이라고 합니다.

Scale jittering

 

3.2 TESTING

test에서는 ConvNet과 입력 이미지가 주어지면 다음과 같은 방식으로 합니다.
다양하게 Recale하여 입력으로 들어갔습니다. 다양하게 하는 덕분에 성능이 개선되었고, 또 Horizontal flipping를 하여 test set을 증가 시키고, 최종 점수를 얻기 위해서는 원본과 data augmentation 된 이미지들의 평균 점수를 이용합니다.
test image에서도 crop을 하였지만 비효율적 이라고 합니다.

3.3 IMPLEMENTATION DETAILS

여기서 구현은 Caffe을 이용 하였다고 합니다. 
NVIDIA Titan Black GPU 4개를 이용하여 2~3주 걸렸습니다.
4개 사용해서 3.75배 빨라졌다고 합니다.

4 CLASSIFICATION EXPERIMENTS

dataset은 ILSCRC-2012 dataset을 이용합니다.
이거는 Train image는 130M, valid 는 50K, test는 100K를 사용합니다.
평가 기준은 top-1, top-5 두가치 척도를 이용하는데, top-1의 경우 예측이 잘못 된 경우, top-5는 predicte category에 없는 경우 입니다.

4.1 SINGLE SCALE EVALUATION

결과

ConvNet model의 성능은 Single Scale로 평가 합니다.
test image size는 Q = S , jitter [Smin, Smax]의 경우 Q = 0.5(Smin + Smax) 로 설정합니다,
첫째는 LRN을 사용하는 모델 A에는 좋아지는 모습이 없었습니다. 그러므로 B ~ E에는 사용하지 않았습니다.
둘째는 Classification 오류는 ConvNet이 depth가 증가 할 수록 감소합니다.
A는 11개, E는 19개 Layer로 이루어 집니다. 
특히 같은 depth에도 불구하고, C는 3개의 1x1 conv layer를 사용하는 것은, 네트워크 전체에 3x3 convv layer를 사용
하는 D보다 성능이 안좋습니다. 
이는 추가적인 Non- linearity 에는 도움이 되긴 하지만,( C가 B보다 좋기 때문에) receptive field가 있는 것을 사용하는 것이 (D가 더 좋은거) 공간적인 맥락을 이해하는데 더 좋은거 같습니다.
아키텍처 Error rate는 depth가 19 layer에 도달하면 saturate됩니다. 더 깊은 model도, 더 큰 dataset도 도움이 될 수도 있습니다.
여기서 B와 5x5 conv layer을 가진 shallow network와 비교 하였는데, 이는 B에서 3x3 conv를 쓰는 것 보다 top-1 error rate가 7% 높다고 합니다.
마지막으로 single scale test 시간에 사용되더라도 train scale jittering 이 fix 된 것 보다 (S ≤ [256; 512]) 으로 하는게 더 좋은 결과가 나온 것 입니다. 한마디로 data augmentation이 잘 되었으므로 실제로 큰 도움이 된 것 입니다.

4.2 MULTI-SCALE EVALUATION

이제 Multi-scale 을 평가 하여 봅니다. scale jitter 효과를 평가 하는 것 이지요.
test 이미지의 여려 scale된 버전으러 model을 실행 하고 나서 class 의 posterior를 평균으로 구합니다.
train scale과 test scale의 큰 차이가 성능저하가 되는 것을 고려하여, 고정 S로 Train 한 model을 train image 크기에 
가까운 test image size에 대해 평가 하였습니다.
Q = {S − 32, S, S + 32}
그리고 동시에 train 시에 scale jittering을 통해 된 것은  S s [Smin; Smax], Q = {Smin, 0.5(Smin + Smax), Smax} 에서 
평가 하였습니다.
표 4에 결과를 보면 single-scale보다 multi scale도 좋은 결과가 나오는 것을 알 수 있습니다.
S를 고정하는 것 보다는 Scale jitter가 더 좋다는 것 입니다. 검증 세트에서 제일 좋은 것은24.8%/7.5% top-1/top-5.
그리고 Test set에서 TOP-5 error가 7.3% 입니다.

4.3 MULTI-CROP EVALUATION

이 표는 dense가 높은 ConvNet 과 Multi crop 을 평가 및 비교 합니다.
softmax 출력은 두 평가 기법의 상호보완성을 평가하는데, 두가지 동시에 접근하는 방식이 상호보완적이라 좋습니다.
위에서 말한거와 같이 convolution boundary condition의 처리 때문 이라고 생각한다고 합니다.

4.4 CONVNET FUSION

지금까지는 개별 ConvNet에 model의 성능에 대해서 평가 하였습니다.
이 실험에서는 여러 모델의 softmax posteriors를 결합하여 평균화 합니다. 
ILSVRC 제출 후에는 여기서는 dense eval을 통해여 7.0%를 ,dense multi-crop을 통하여 6.8%로 줄이는데 이때 두개의
최고성능 multi scale mode d,e만 앙상블을 하였습니다.
최고성능은 model E 입니다.

4.5 COMPARISON WITH THE STATE OF THE ART

table 7은 다른 결과와 비교합니다.
VGG는 7개의 model과 앙상블 하여 7.3%로 2위를 하였습니다.
그리ㅗ 제출 한 뒤에 2개의 모델로 앙상블 하여 6.8%로 줄였습니다.
GoogLeNet와 비교해도 상당히 경쟁력이 있습니다.
그리고 흥미로운 것은 ILSVRC 에 제출한것과 달리 2개를 앙상블 한것 이 더 우수하다는 것 입니다.
단일 아키텍처 기준으로 자기들것이 0.9% 좋다고 합니다.

5 CONCLUSION

이 연구에서는 대규모 이미지 Classification을 위해서 deep convolutional network(19 weight layer)를 사용 하였습니다.

representation depth가 classification accuracy에 큰 도움이 되며, ImageNet 챌린지 데이터셋에 대한 좋은 성능 뿐만 아니라 ConvNet 아키텍처를 이용하여 달성 할 수 있다는 것이 입증되었습니다.

부록에서는 model이 광범위한 작업 및 dataset에 잘 일반화되어 deep image representation을 중심으로 구축된 복잡한 recognition pipeline과 거의 일치하거나 그 이상의 성능을 보여줬습니다.
여기서 visual representation은 depth의 중요성을 확인 해 줍니다.
GPU 빌려준 NVIDIA 감사합니다. 라고 하네여.

너무 기네요 논문 ㅜ

틀린 점 있으면 댓글 부탁 드립니다.
다음에는 논문을 구현하여 올리겠습니다.

* 공부한 내용 뇌피셜로 정리 *

출처 : https://arxiv.org/abs/2004.10934

object detecion모델을 사용해보거나 논문을 읽어본 사람은 다음과 같은 그림을 본적이 있을것이다.

아무것도 모르고 본 상태에서 직관으로는 AP와 FPS가 모두 높아야 좋은 모델이란 것을 생각 할 수 있다.

위에서 부터 단어의 정의를 하나씩 정리하는 방향으로 가는 것이 좋을 것 같다.

보통 object의 성능을 평가하는 요소들은 IOU, Precision-Recall Curve, Average precision, Confidence threshold가 사용 됩니다. 

mAP (mean Average precision) 란?

실제 object detect된 recall과 presion의 값을 평균한 성능 수치 입니다.

출처 : https://machinelearningmastery.com/roc-curves-and-precision-recall-curves-for-imbalanced-classification/

다음과 같은 recall, precision 그래프의 아래의 면적을 평균을 취한 것이 mAP라고 이해하면 됩니다.

여기서 Recall과 Precision에 대하여 궁금증이 생기게 됩니다.

보통 Precision과 Recall 은 이진분류에 사용되는 성능 지표입니다.

Precision 이란?

한국어로는 정밀도 라고 하며 이는 검색된 결과들 중에 관련이 있는 것으로 분류된 결과들 중 관련있는 것으로 분류된 결과물의 분류

Recall 이란?

한국어로는 재현율 라고 하며 이는 관련 있는 것으로 분류된 항목들 중 실제 검색된 항목들의 비율이다.

https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B0%80%EB%8F%84%EC%99%80_%EC%9E%AC%ED%98%84%EC%9C%A8

 

대부분의 사람이 글로 보면 이해하기 어려울 것 이라고 생각합니다.

https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B0%80%EB%8F%84%EC%99%80_%EC%9E%AC%ED%98%84%EC%9C%A8
계산하는 방식

Object detecion에서 사용하는 방식으로 설명을 하겠습니다.

Object detecion에서는 어떤 물체를 예측하면 bbox를 치게 됩니다.

TP

간단하게 bbox에서 정확하게 예측한 경우

FP

bbox를 생성하긴 하였지만 예측을 정확하게 못한경우 , class가 틀린 경우, IOU가 낮은 경우, Overlap이 일어나지 않은 경우 

FN

아예 object가 있는 곳에 bbox를 생성하지 않은 경우

쉽게 생각하여 Precision은 bbox를 생성 한 것들 중에 정확하게 예측한게 몇개있냐,

Recall은 기존에 annotation한 object 중에 몇개를 정확하게 예측하였냐 입니다.

 

업무에 따라서 Recall 과 Precision의 값을 잘 선택 하셔야 한다.

Recall이 중요한 경우는 양성이 중요한 것을 음성으로 판단하여 업무상 큰 재해가 발생하는 경우 입니다.

즉 암진단 같은 경우 Recall이 낮아지면 암이 지만 잘못된 판단을 할 수도 있습니다.

Precision이 중요한 경우는 음성인 데이터를 양성으로 판단하는 경우 입니다.

즉 스팸메일 같은 경우 음성인 데이터를 양성으로 판단하여 걸러버리면 업무상에 문제가 발생 할 수 있습니다.

정밀도와 재현율을 적절한 값으로 구하는 것이 중요 합니다.

 

confidence threshold값에 따라 Precision과 recall값이 크게 변하게 됩니다.

confidence threshold는 특정 임계값을 넘으면 bbox를 생성 하도록 하는 것 입니다.

간단하게 생각하여 Confidence threshold가 낮으면 많은 bbox가 생성되어 Precision은 낮아지고, Recall은 높아집니다.

만약 높아지면 bbox가 신중하게 생성되어 Precision은 높아지고, Recall은 낮아집니다.

이 두값은 서로 상호보완적인 관계 이므로 confidence threshold를 바꾸며 관찰하면 한쪽이 높아지면 다른쪽이 낮아지는 현상이 발생합니다.

이는 Trade off현상이라고 생각하면 됩니다.

Confidence Threshold를 조절하여 생성한 Precision-Recall curve를 이용하여 아래의 면적을 계산하면 AP가 되게 됩니다.

 

AP는 한개의 Object에 대한 성능 수치로 mAP는 여러 Object들의 AP를 평균하여 구해게 됩니다.

 

PASCAL VOC같은 경우 IOU가 0.5이상으로 mAP를 구합니다.

COCO같은 경우 다양한 경우로 AP를 구하는데 상당히 까다롭게 하게 됩니다. 

 

COCO YOLOV2

 

PASCAL VOC

 

* 공부한 내용 뇌피셜로 정리 *

Non max suppression 기법

Non max suppression 기법은 Object detection 알고리즘에서 사용되는 방법중 하나 입니다.

Object detection은 있을만한 위치를 모두 예측 하므로 위에 그림과 가이 겹치는 bounding box가 많아 집니다.

이렇게 겹치는 bounding box가 많을때 비슷한 것을 제거하고 가장 적합한 것을 선택하는 기법입니다.

NMS수행 로직은 어렵지 않습니다.

 

1단계

Object detected 된 bounding box에서 사용자가 설정한 confidence threshold이하인 bounding box는 모두 제거 합니다. 즉 이용자가 threshold를 0.6 으로 정하면 0.6 이하는 모두 제거합니다.

2단계

confidence score별로 내림차순을 적용합니다.

3단계

confidence score가 높은 놈들과 겹치는 다른 box는 모두 제거 하는데, 이용자가 정한 특정한 IOU Threshold 이상인 것들은 모두 제거 합니다. 즉 IOU값은 0.5로 정하면 0.5 이상은 모두 제거합니다.

4단계 

남아있는 BBOX를 선택합니다.

* 공부한 내용 뇌피셜로 정리 *

Intersection over union은 model이 예측한 결과와 ground truth 실측 box가 얼마나 겹치는 가에 대한 지표 입니다. 

간단하게 그림과 같이 생각 할 수 있습니다. 겹치는 영역 / 전체 box 영역 입니다.

값의 범위는 0~1로 1에 가까울수록 예측을 잘한 것 이라는 것을 알 수 있습니다.

IOU는 코드로 간단하게 구현이 가능한데 다음과 같이 구현 하였습니다.

IOU를 간단하게 구현하고 예를 들기 위해 저번 포스팅에서 실습한 Selective Search를 활용 하였습니다.

 

https://inha-kim.tistory.com/37?category=963044 

 

[컴퓨터 비전] Sliding window 대한 내용, Selective Search 사용 및 시각화

* 공부한 내용 뇌피셜로 정리 * 컴퓨터 비전에서 Sliding Windows방식은 Object Detecion에 아주 초기 기법으로 사용된 방식이다. 사용방법은 다양한 크기의 Windows(보통 사각형 모양)을 이미지에서 이동시

inha-kim.tistory.com

내용이 궁금한 분은 들어가 보세요.

필수 패키지 import

필수 패키지 import합니다. selective search 이후의 code입니다.

 

opencv로 데이터 시각화

ground truth영역을 임의로 정한 뒤에 ground truth box는 red로, selective search 로 구한 영역을 초록색으로 표현 

하였습니다.

출력결과 

코드 실행 결과는 다음과 같습니다. 빨간색이 실제 영역, 나머지는 예측 영역.

iou를 계산하는 코드

iou계산은 다음과 진행됩니다.

교차 영역 /예측영역 + 실제 영역 - 교차 영역 

교차영역은 왼쪽 위 꼭지점, 아래 꼭지점을 구하여 넓이를 구할 수 있습니다. 이때 만약 교차하지 않으면 겹치는 영역은 0으로 됩니다.

iou를 출력하는 코드

iou를 출력하는 코드는 enumerate를 이용하여 index와 cand_box로 rects를 전달합니다.

rects에서 전달받은 좌표값을 살짝 가공 해야하는데 selective search에서 나온 값은 왼쪽 위 꼭지점 + 너비와 높이 값 이므로 오른쪽 아래의 좌표는 각각 cand_box[2]와 cand_box[3]에 cand_box[0,1] 값을 더해서 compute_iou에 전달합니다.

계산된 iou

iou값을 시각화를 진행 하여 보겠습니다.

iou가 0.5 이상인 값들만 시각화를 진행 하였습니다.

iou 0.5이상에 박스 추가

다음과 같이 iou가 0.5이상일 경우 rectangle과 putText를 추가 하였습니다.

출력결과

전체 코드는 다음과 같이 코랩에 있습니다.

https://colab.research.google.com/drive/1HtS-UsIrCRkn3gQE4xSVjcHV8en4WHyX?usp=sharing 

 

IOU.ipynb

Colaboratory notebook

colab.research.google.com

 

* 공부한 내용 뇌피셜로 정리 *

컴퓨터 비전에서 Sliding Windows방식은 Object Detecion에 아주 초기 기법으로 사용된 방식이다.

사용방법은 다양한 크기의 Windows(보통 사각형 모양)을 이미지에서 이동시켜가면서 객체가 있을법한 위치를 찾는방법

하지만 이 방식은 여러개의 Window사이즈, 그리고 이미지 사이즈를 이용하여 찾아야 다양한 크기의 객체를 찾을 수

있어 모든 경우를 따져야 하므로 수행시간도 오래 걸리고, 생각보다 적절한 검출이 어렵다.

그래서 탄생한 방식이 위와같이 모든 경우를 탐색하는 방법보다는 Region Proposal 영역추정 Object가 있을 만한 곳을 추정하자는 방식이 나오게 되었다.

여기서 나온 알고리즘이 Selective Search 이다.

Selective Search는 객체가 있을 만한 곳을 탐지하는데 이때 어떻게 탐지하느냐, Color,Size,Texture,Shape에 따라 Segmentaion을 적용하는데, 이때 심각하게 Over Segmentation이 발생 하는 경우도 발생 하는데 이걸 그대로 사용하는 것이 아니라 주변의 Color,Size,Texture,Shape가 유사한 것 들 끼리 grouping을 반복하여 Region Proposal을 반복 합니다. 그러면 처음에 Raw하게 Segmentaion 한 것 보다는 적은 Bounding box를 얻을 수 있습니다.

 

 

 

https://colab.research.google.com/drive/18yMw5pe0vR_0mtwVcTkfEA5aOjdwMUnB?usp=sharing 

 

Selective_Search.ipynb

Colaboratory notebook

colab.research.google.com

간단하게 있는 패키지를 이용하여 실습을 진행 하였습니다.

+ Recent posts