오늘 할 일
강의 - 컴그, 기학, 컴개
과제 - 컴프2
내일 할 일
강의 - 컴그, 선대, 기학
과제 - 선대
시간 날 때 해야하는 일
코드 최적화 정리
리액트 클론 코딩 - 영화 리뷰 앱
java -> UML, class 분할 interface공부
wsl2 사용법 익히기
도커 복습
사물을 인지할 때, template(patch)을 보고, sliding window를 하면서 template과의 유사도를 측정한다. ex) normalized correlation. 그러나, template과 같은 사물이 아니라 하더라도 유사도가 높게 나올 수도 있다. 사물에 대한 정보가 부족하기 떄문이다. 즉, 정보의 양을 늘려야 한다.
Training 과정에서, Training Images에서, feature들을 추출한다. ex) SIFT, HOG, RGB... 그리고, 인식하고자 하는 task에 맞춘 label(정답)을 classifier에 집어넣어서 학습을 시킨다. 학습을 진행시켜 완성된 classifier를 이용해 test할 때는, test image에서 feature를 추출할 때, training에서 뽑은 방법과 동일한 방법으로 추출해야 한다. 이를 classifier에 집어 넣어서 predict할 수 있다.
BOW(Bag-Of-Words) : 여기선 img가 word이다. word들은 class라고 할 수 있다. img를 일정한 pattern(class, word)로 나누어서, 빈도 수로 학습을 한다.
feature 추출(특징 vector) -> visual voca 학습 -> quantization features -> represent image
feature를 추출할 때는, regular grid(같은 간격) 혹은 interest regions(points)를 찾아서 구역을 할당해 추출한다.
dense (uniformly), randomly한 방식들을 주로 사용한다.
feature를 추출하고 공간에 놓는다. 이를 clustering 한다. ex) K-means. cluster들에서 대표 특징 vector를 선정한다. ex) 평균. 이 대표 특정 vector를 하나의 단어(class)로 여기고, 빈도 수를 통해 특징을 기술하는 것이다.
k-means : 랜덤하게 cluster center를 k개 선정하고, 각 cluster를 나누어서 각 거리 계산해서 더 나은 center를 찾는다. 계속 반복한다. 간단하고 빠르지만, k를 설정해야 하고, outlier에 약하며, 초기 center point값에 크게 영향을 받는다.
색상을 이용해 특징을 기술할 때는, 같은 색상 분포를 가진 다른 이미지가 존재할 수 있다. 이를 막기 위해, spatial pyramid라는 기법을 이용한다. 이 기법은 img를 일정항 영역으로 나누어 각 영역 별로 색깔 분포를 검사한다.
classify : K-NN, Naive Bayes, SVM 등이 있다. K-NN은 가장 가까운 것 N개 선정하는 것인데, 간단하지만, test하는 데 속도가 너무 오래 걸린다. 일일이 거리를 계산해야 하니까. NN이 나오기 전까지 SVM를 주로 사용했다.
distance : euclidean(L2), cosine(vector 간 각도. 좁을 수록 좋다.) Chi-squared(확률 분포가 얼마나 가까운지.)
validation data : fold들로 학습하고, 마지막 fold를 hyperparameter를 결정하기 위해 val로 사용한다. train data = fold data
CNN : 합성곱 신경망. grid-like topology. convolutional operation 해서 공간적인 특성을 가지는 data에 적용. data를 pixel로 축약해 나타낼 수 있다.
grid-like topology : 가까이 있는 것에 유사성을 가짐. ex) 2D-img
input data에 filter(=kernel)을 element간 multiply해서 summation하고, window sliding 해서 output(feature map) 산출
stride : sliding을 얼만큼씩 할건지. output의 size에도 영향을 줌.
CNN은 sparse connection하고, parameter sharing을 한다. => 연산이 훨씬 간단. regularization 하는 역할
즉, CNN은 regularization이 적용된 MLP라고 할 수 있다.
=> simple한 representation을 찾기 위한 과정
fully-connection : 하나의 node에 대해 아래 층의 node가 모두 연결.
sparse-connection : 몇개만 골라서. weight의 수가 적다.
parameter sharing : parameter들을 공유 -> 공통된 weight를 가짐.
3-dim 이상의 array(=metrics)를 tensor라고 한다.
각 channel에 filtering한걸 sum해서 conv map#1을 만든다. conv map을 여러개 놓아 conv layer를 구성. conv map을 hidden node라고 생각하고, conv layer를 hidden layer라고 생각하면 될 듯. output을 구하는 방법을 헷갈리지 말자.
kernel의 값은 back propagation을 통해 정한다.
pooling : hidden nove value을 일부 수정하겠다. 즉, 대표값만 남기고 축약하겠다. max pooling이 가장 많이 쓰인다.
-> 같은 grid 내부 값끼리는 유사성을 가지니까!
conv 했다는 것은 grid 안의 값을 축약해 하나의 값(pixel)로 만들었다고 볼 수 있다.
pool 한다는 것은 1번 더 축약하겠다는 말과 같다.
map을 만들었다는 것은 active func까지 적용했다는 말과 같다.
padding : data size가 줄어드는 것을 방지.
pooling으로 flatten -> fully connected의 작업(예측)을 수행할 수 있다.
=> 연산 수는 훨씬 적어진다.
convolution -> pooling 진행하면서 width, height 값은 줄어든다. 그러나, channel을 올린다면, feature map의 수를 올려 feature를 뽑을 후보들을 늘린다는 소리와 같다.
efficiency와 accuracy는 trade-off 관계가 아니다.
model의 구조가 왜 성능이 왜 좋은지 논리적으로 설명, 증명하는 건 어렵다.
=> 결국 귀납적으로 설명하는 셈
LeNet, AlexNet, VGGNet, GoogleNet, ResNet 등의 CNN structure가 있다.
Inception module : 여러 종류의 filter를 병행해서 사용해보고 가장 좋은 것을 선택해보는 것.
1 * 1 convolution 하겠다는 것은 skip connection 하겠다는 뜻.
=> 특별한 operation 하지 않겠다.
=> 정보를 다음 layer로 그대로 보내겠다.
ResNet은 residual net + plain net
residual net은 original data를 계속 가져와 보여주면서 초심 잃지 말라고 방향을 제시.
Object detection은 Object(Classification) + Region(Regression)의 구조를 지닌다.
R-CNN, Faster R-CNN, YOLO, Mask R-CNN, XAI
ROI : Region Of Interest. 관심 있는 영역. Object가 있을 것으로 예상되는 영역
YOLO는 정확도는 떨어지나 속도가 매우 빠름.
grid마다 classification하고, bounding box를 여러개 만들고, object가 있는 것만 골라낸다.
Mask R-CNN : mask(경계선)까지 그어줌. 여기에 classification이 또 들어감. 즉, 매우 heavy함.
eXplainable AI (XAI) : 판단 근거를 제시해준다. GAP(Global Avarabe Pooling)을 사용.
예측을 할 때, 영향을 끼친 것들을 나타낸다.
요즘은 signal을 img화 해서 CNN으로 나타낸다. NLP 분야에서도 적용이 가능하다. data img가 일방적으로 내려가면 1-D 퍼져나가면 2-D. CNN이 워낙 성능이 좋으니 이런 식으로 표현 가능.