1) Semantic Segmentation
이미지의 모든 pixel이 어떤 label에 속하는지 다루는 것.
지금까지 배운 CNN의 구조는 input이 들어오면 convolution 연산을 하고 그 후 denselayer를 통과해서 결과를 보는 식이었다.
그런데 이러한 dense layer의 연산을 convolution 연산으로 바꿔서 할 수 있다.
그래서 나온것이 fully Convolutional Network이다. 이러한 Dense layer를 없애는 과정을 convolutionalization이다. 하지만 Convolution layer로 바꾼다고 하더라고 파라미터의 수에는 변화가 없다.
왜냐하면 Convolution 연산을 하더라도 바뀐 것은 없는것이다. 왜냐하면 10 x 10 x 3 짜리 를 dense 로 피게 된다면 필요한 parameter 의 수는 300개이다. Convolution 연산을 하더라도 10 X 10 X 3 짜리 filter하나를 쓰는 것이기 때문이 parameter의 갯수는 10 x 10 x 3 , 300개로 같은 것이다.
그럼 이렇게 변화가 없는데 어째서 Convolution 연산을 하는 것일까??
이러한 FCN이 가지는 특징은 input의 dimension에 독립적이라는 것이다. Input 이미지의 크기에 상관없이 network가 돌아간다. Ouput의 크기가 커질수록 뒷단의 spatial dimension가 커지게 된다. 그리고 이러한 saptial dimension이 유지되기 때문에 고양이가 어디에 있는지에 대한 heatmap의 형식으로 나오게 학습시킬 수 있다.
이렇게 나온 heatmap 이 완전 input 의 크기는 아니다. 즉 100 * 100의 이미지를 넣었을 때 10 * 10 으로 줄어 든다는 이야기이다. 따라서 이것을 다시 늘려줘야할 필요가 있다.
Deconvolution(conv transpose)
convolution의 역연산이다.
왼쪽이 Convolution 연산이다. Stride를 2를 주게 되면 이미지가 정확히 절반 줄어들게 된다. Deconvolution 연산은 반대로 이용해 크기를 키운다. 하지만 convolution 의 엄밀히 말하면 역연산은 존재하지 않는다. 2 + 8 을해 서 10인건 알지만 반대로 더한 두 숫자를 알 수 없는 것처럼. 하지만 나중에 이렇게 생각하면 편하기 때문에 생각을 한다.
Deconvolution은 위와 같이 padding 을 많이 줘서 연산을 하게 된다. 그러면 우리가 원하는 크기의 결과가 나오게 된다.
2) Detection
물체를 찾는 것은 segmentation과 동일하나 Detection은 Bounding Box를 이용하여 문제를 해결한다.
1. R-CNN
이미지 안에서 Bounding Box를 여러개 뽑고 Region에 대한 feature를 CNN(AlexNet)으로 얻어내고, linear SVM으로 분류하자.
Brute Force적이다. 2000개의 Bounding Box가 있다면 이미지 마다 Convolution feature map을 만드려면 alexnet을 2000번 돌려야 하기 때문이다.
R-CNN의 문제 박스를 2000개 만들면 2000개를 CNN에 다 통과시켜야함. 한개 이미지를 처리하는데 오래걸림.
2. SPPNet
SPPNet은 여러번 CNN을 적용시켜야하는 R-NN과 달리 한번만 돌리자라고 생각을 했다.
이미지 전체에 대한 Convolution feature map을 만들고 뽑힌 Box 위치에 해당하는 feature map의 tensor만 가져오자.
따라서 RCN에 비해 빠르다. RCN에 비해서만 빠른거지 느리다. Convolution은 한번 돌리지만 Bounding Box를 여러개 뜯어와서 하나의 vector로 만들고 분류를 해줘야한다.
3. Fast R-CNN
1. 입력과 bounding Box들을 준비한다.
2. Convolution feature map 을 얻어낸다
3. 각 region마다 ROI pooling을 통해 고정된 길이의 feature를 얻어낸다.
4. 뉴럴 넷트워크를 통해 label과 Bounding box 를 어떻게 움직이면 좋을지에 대한 결과값이 나온다.
4. Faster R-CNN
Bounding Box를 뽑는것도 network로 학습하자.
따라서 기존이 Fast R-CNN에 Region Proposal Network가 더해진 거이라고 볼 수 있다.
Region Proposal Network
이미지에서 물체가 있을지 없을지를 찾아준다. 무엇인지를 하는 것이 아니라 있을거같다라는 것만 처리해준다.
그래서 anchor boxes라는것을 이용하는데 이것은 미리 박스의 크기를 정의해놓은 것이다.
이런 Region Propsal Network는 FCN을 사용한다. FCN이 모든 convolution feature map 의 모든영역을 돌아가면서 찍는다. 따라서 FCN이 해당하는 커널에 물체가 있는지 없는지에 대한 정보가 FCN에 담기게 된다.
RPN에는 미리 정의된 region 이 9개가 있다. 그리고 이러한 boudding box 마다 어떻게움직일지에 대한 parameter가 4개가 있고 쓸모 있는지 없는지 판단하는 box classification parameter가 2개 있다.
5. YOLO
faster R-CNN보다 빠르다. 그냥 이미지에서 바로 찍어서 결과를 도출하기 때문이다. Bounding Box 를 따로 뽑는 step이 없다. Bounding Box를 뽑으며 classificaiton까지 동시에 진행한다.
Yolo의 방법은 다음과같다.
1.먼저 S x S 의 grid로 픽셀을 나눈다.
2. B개의 Bounding Box 를 예측한다. 총 5개의 변수 박스의 좌표위치, 박스의 wiedth height, 그리고 쓸모있는지 여부를 저장한다. + NMP를 이용해 숨어있는 허수를 제거한다.
3. 그리고 동시에 Bounding Box안에 있는 것에 대한 classification을 진행한다.
학습하는 방법은 Faster R-CNN과 동일하다.
여기서 맨 마지막 layer 의 채널이 30인 이유는 다음과 같다. 일단 B는 2개의 anchor Boxes를 사용했고 C는 class 종류의 수로 20개의 분류label을 가진다. 따라서 한 cell 당 30개의 channel을 가진다.
따라서 tensor의 크기는 다음과 같아 진다.
S x S x (B*5 + C)
S x S : gride의 cell의 갯수이다.
B * 5: 각 box의 offset과, 쓸지 말지 여부를 나타낸다
C: 분류하는 classes의 수이다.
YOLO의 특징
YOLO는 맨 마지막에 prediction을 해서 localization 정확도가 떨어진다.
'AI > Deep Learning' 카테고리의 다른 글
CNN (Alexnet, GooLeNet, VGG, ResNet, DenseNet) (0) | 2023.03.26 |
---|---|
Generative Model 2(VAE, GAN, Diffusion) (0) | 2023.03.26 |
Generative Model (Autoregressive model) (0) | 2023.03.24 |
Optimizer (0) | 2023.03.24 |
Transformer (0) | 2023.03.23 |