CNN을 공부할 때 사람이 사물을 지각하는 방법과 그럭저럭 비슷하게 구현해서 놀랐다. CNN은 Convolution layer, Relu layer, Pooling layer, Fully connected layer로 구성되어 있다.
벡터에만 내적을 하는 줄 알았더니 행렬에도 내적개념이 있었다(!!!). conv layer에서 kernel이 이미지 행렬과 이렇게 연산한다.
지난 conv layer에서 지적했듯이 기존 방법으로 CNN을 연산하면 속도가 $O(n^4)$로 느리다는 점이 있다. 그래서 머리 좋은 사람들이 컴퓨팅 자원을 효율적으로 쓰려고 만든 방법이 im2col이다.
아이유 말고 아이오유. Object detection 모델 논문을 보면 AP50이나 AP75처럼 AP(Average Precision)에 옵션을 달아두는 식으로 자주 만날 수 있다.
MobileNet과 EfficientNet의 뼈대라고 할 수 있다. 모바일 환경이 점차 늘어나면서 '어떻게 하면 network의 크기와 연산량을 줄일 수 있을까?' 하는 고민으로부터 나온 결과물이다.
SE block을 구현할 때 FC layer와 Conv layer사이에 별차이가 없는 것 같아서 실험해봤다.
CNN을 공부하다 보면 FCN, FPN 처럼 conv layer로 줄어든 spatial dimension을 다시 키우는 모델과 마주한다. 이 과정을 지칭하는 용어도 4가지나 있어서 더욱 헷깔리게 한다.
각 픽셀의 밝기나 색깔이 얼마나 강한지 히스토그램으로 분석해서 너무 강한 픽셀은 0-255 사이의 값으로 평준화 해주는 거다. gray scale 이미지에서는 어느 정도로 밝은지, rgb이미지에서는 어떤 색이 강한지 알아볼 때도 쓸 수 있을 것 같다.
classifier를 detector로 만들어주는 핵심구조다. Faster R-CNN의 연구자들은 기존에 쓰던 selective search대신 region proposal network를 제안했다. 이후의 detector들은 `RPN`을 조금씩 변형해서 쓰고 있다.
Detector 관련 논문을 읽다가 보면 가끔 만날 수 있다. 내가 알고 있는 단어들을 합쳐도 "변화가 없다" 정도로 파악할 수 있을 뿐 구체적으로 어떤 변화를 말하는 건지 모르겠다. 앞뒤로 문맥을 좀 파악해보려고 해도 오리무중이다.
Backbone과 RPN으로부터 넘어오는 data를 받아서 최종적으로 bbox를 그리고 bbox 안에 있는 object의 class를 예측하는 모듈이다. 2 stage detector, 1 stage detector 모두에 두루 쓰인다.