세로형
Recent Posts
Recent Comments
Link
11-07 22:26
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

cs231n 2017년 강의 11강 detection and segmentation 본문

deep learning(딥러닝)

cs231n 2017년 강의 11강 detection and segmentation

이수진의 블로그 2018. 12. 25. 10:56
반응형
728x170

안녕하세요! 오늘은 크리스마스네요

벌써 연말이군요.. 오늘 하루 행복하시구요

연말 마무리 잘하시고 새로운 한 해를 맞이할 준비 잘 하셨으면 좋겠습니다!


이번 장에서는 이미지와 관련된 새로운 것을 배우게 됩니다.

제가 여태 올렸던 강의 정리 및 cs231n에서 소개했던 방법은 다 이미지 분류(image classification)이었습니다. 하지만 이건 가~~~장 기본적인 것입니다. 여기서 좀 더 해야할 것이 있죠.

 

바로 이미지 localization, segmentation, object detection 등입니다. 이번 장에선 이런 것들을 배웁니다.



우리는 앞에서 image가 들어오면 어떤 deep neural network를 통과해서 그 결과로 feature vector가 나오게 되고 최종 결과로 image net의 경우 1000개의 차원으로 score를 기반으로 나오게 되었죠.  , 이미지가 들어오면 카테고리가 출력이 되었습니다. 근데 이제 이거 대신에 아래와 같은



이런 것들을 배우게 됩니다. 먼저 semantic segmentation을 배웁니다. 그리고 classification + localizationobject detection 그리고 instance segmentation에 대해서 배웁니다.



먼저 sementic segmentation입니다



여기서는 입력으로 이미지가 들어오게 되고 출력으로 이미지의 픽셀에 카테고리를 정하게 됩니다. 여기서는 고양이, 소가 나오네요. 고양

이 기준으로 그 픽셀이 고양이, 잔디, 나무, 하늘이 되어서 이 이미지에 대해 어떤 부분이 저 4개 카테고리인지 정하는 것입니다. 이것도 일

종의 classification 분류문제인데요. 다른 점은 이미지 전체에 카테고리 하나가 아니라 모든 픽셀에 카테고리가 매겨집니다. 가령 저 오

른쪽 소를 보면 소가 2마리이지만 여기서는 그냥 둘을 합쳐서 소라고 표시합니다. 그래서 2마리 소를 표시하는게 아니라 그저 얘는 !

라는 labeledpixel을 얻는 것이죠. 그래서 이게 semantic segmentation의 단점이라고 합니다. 이 단점을 해결한 것이 instance segmentation입니다



semantic segmentation을 위해서 sliding window 방법을 사용해볼 수 있습니다. 입력 이미지를 작은 단위로 쪼개고 (이 예제에서는 머리 부분을 쪼갰네요) 그리고 이 단위 부분이 어떤 분류에 속하는지 classification을 하는 것입니다



근데 이 방법은 좋은 방법이 아니라고 하네요. 비용이 크다고 합니다. 작은 영역으로 쪼개고 이 모든 영역을 forward/backward하는 것은 비효율 적이기 때문이죠! 그리고 만약 서로 다른 영역이라도 인접해 있으면 그 특징들을 일종의 공유를 할 수 있는데 그게 안되니까 별로 안좋겠죠?



그래서 개선한 방법이 fully convolutional network입니다. 여기서는 Fully connected layer가 없고 convolution layer만 구성되어 있습니다. 여기서 3x3 zero padding을 사용하면 이미지의 공간 정보는 손실되지 않겠죠. 그래서 최종적으로는 C x H x W가 나온다고 합니다. C는 카테고리 개수를 뜻한다고 하네요. 이 출력 tensor는 입력 이미지의 모든 픽셀 값에 대해 score를 매긴 값이라고 합니다. 이거를 하려면 모든 픽셀의 classification loss를 계산하고 평균값을 취해야하죠. 그리고 예전과 같이 backward를 하면 됩니다.



그럼 이 training data를 어떻게 만들까요?? 이거는 입력 이미지에 모든 픽셀에 대해서 레이블링을 한다고 하네요. ㄷㄷㄷㄷ 엄청난 노가다이겠네요. 그리고 여기서는 모든 픽셀의 카테고리를 알고 있다는 전제하에 진행한다고 합니다. Image classification에서도 카테고리 수가 정해져있었는데요. 여기서도 클래스의 수가 정해져있다고 합니다




그렇지만 여기서도 문제가 있다고 하는데요. 빨간색 글씨로 쓰여져있죠. 이 네트워크의 경우 이미지의 apatial size를 계속 유지시켜줍니다. 그래서 계산량이 너무 커지죠. 그래서 대안이 나옵니다.



보통은 이렇게 한다고 하는데요. Downsamplingupsampling이라고 합니다. 그래서 처음에 convolution으로 조금 사용하고 max pooling, stride convolution 등으로 downsampling합니다. 그리고 원래 기존에는 여기서 fc-layer가 있었죠? 여기서는 upsampling을 진행합니다. 다시 spatial resolution을 키우는 것이죠. 결국 입력 이미지의 해상도와 같아지게 됩니다




우리는 downsampling은 들어본적이 있습니다. 그런데 upsampling이란 무엇일까요?? 또한 어떻게 할까요?? 그걸 이제 좀 알아봅니다.



먼저 첫 번째 방법은 unpooling입니다. 왼쪽에는 nearest neighbor방법, 오른쪽에는 bed of nails방법이 있습니다. 딱 그림만 봐도 어떤식인지 아시겠죠??

Nearest neighbor방법은 숫자를 동일하게 해서 키우는 것입니다. 그리고 bed of nails1번째 위치에 input의 값을 넣고 나머진 0으로 채우는 것이죠. 얘가 이래서 혼자 영역에만 값이 뾰족하게 튀기 때문에 bed of nails라고 이름이 붙여졌다고 하네요 ㅎㅎ



그 다음은 max unpolling이란 방법이 있습니다. Max pooling할 때 max pooling한 위치를 기억해둬서 그 선택된 자리에 값을 넣고 나머지는 0으로 채우는 것이죠.

이렇게 하는 이유는 maxpooling을 하게 되면 특징맵의 공간 정보를 잃게 됩니다. 왜냐하면 큰 값을 가져오기 때문이죠. 그런데 이렇게 하면 공간정보를 좀 균형 있게 유지할 수 있기 때문에 좋은 방법이라고 하네요.



그리고 다른 방법이 있습니다. Transpose confolution이라고 불리우는 방법인데요. 앞에서 했던 것은 고정된 함수이고 이걸 뭐 별도로 학습하지는 않습니다. 근데 여기서는 학습을 합니다. 봐보죠. Strided convolution의 경우 어떤 식으로 downsampling을 해야할 지 네트워크가 학습할 수 있습니다. 이와 유사하게 upsampling에서도 학습이 가능한데 이게  transpose convolution이라고 하네요. 이 또한 convolution방법이라고 합니다



일반적인 3x3 conv, stride1, padding 1convolution filter가 동작하는 방법은 위와 같습니다. 이렇게 하면 입력이 4x4라고 하면 출력도 4x4



그럼 stride2면 어떻게 될까요?



입력이 4x4면 출력이 2x2가 됩니다.



왜냐하면 한 픽셀만큼 움직이는게 아니라 두 픽셀만큼 움직이기 때문입니다. 그래서 이건 2down sampling하는 것이죠



이렇게 2칸씩 움직이죠.



Transpose convolution은 반대의 경우입니다. 입력이 2x2고 출력이 4x4



우선 특징맵에서 값을 하나 선택합니다(분홍색). 이 값은 스칼라(1)의 값입니다. 이 스칼라 값을 3x3 filter와 곱합니다. 그리고 출력의 3x3 영역에 그 값을 넣습니다. transpose convolution에서는 필터와 입력의 내적을 계산하는 것이 아니라 입력 값이 필터에 곱해지는 가중치역할을 합니다. 출력 값은 필터 * 입력(가중치)가 되는 것이죠



그리고 stride2기 때문에 파란색처럼 두 칸씩 움직입니다. 이 파란색도 마찬가지로 스칼라 값 x (3x3) filter를 곱하는 것이죠. 그리고 저 부분이 겹치게됩니다. 겹치는 부분은 그냥 더해준다고합니다.






그리고 이건 다른 이름으로 불리우기도 한다는데요. 왼쪽 위에서처럼 불리기도 한다는데 뭐 그렇다고 합니다. 넘어갈게요.



그리고 여기서는 구체적인 예시를 보여줍니다. 편하게 보여주기 위해서 1D example을 보여줍니다. 그냥 딱 봐도 이해하기 쉽죠? 그리고 보아야 할 것이 저 겹치는 부분 az + bx를 더해줍니다!



그리고 여기서 더 자세한? 예시가 나오는데요. 왜 이게 이름이 conv가 붙을까?에 대한 설명입니다. Convolution 연산은 언제든 행렬 곱 연산으로 나타낼 수 있는데요. 여기서 1차원 예제로 살펴보죠. 그리고 x, y, x라고 되어 있는데 마지막 xz입니다. 오타인 것 같아요 아마



그리고 여기에서 오른쪽에 transpose conv가 나오는데요. 같은 행렬을 사용해서 행렬곱을 하지만 transpose을 취합니다. 즉 왼쪽은 stride 1 convolution이고 오른쪽은 stride 1 transpose conv인 것이죠. a를 보면 4개 만큼 값이 이루어져있습니다. Transpose된 만큼 그렇게 된 것이겠죠.



더 자세히 봐봅니다. Stride 1 transpose convolution의 모양을 보면 일반적인 conv와 유사하게 생겼습니다. Padding 등을 고려하면 좀 달라지겠지만 기본적으론 비슷합니다. 하지만 여기서는 stride2인데요. Stride2가 되면 조금 상황이 달라집니다



왼쪽은 stride 2 convolution을 행렬곱 연산으로 표현한 것입니다. (stride 1과 달라진 점은 xyz1개씩 움직이지 않고 2칸씩 움직였죠?? 그리고 또 2칸을 움직이지 못해서 [0 0 x y z 0]에서 멈추었습니다) 만약 stride1을 초과하면 transpose convconvolution이 아니라고 하네요. 뭐 여기서는 convolution이 어떤 식으로 행렬처럼 표현되는지 생각해보라고 합니다. 아무튼 stride 2 transpose convolutionnormal convolution과 근본적으로 다른 연산이 되었습니다. 그래서 transpose convolution이라고 붙었다고 하네요. 여기서 a를 보면 tranpose만큼 값이 2개 뿐이 안됩니다. 아마 이것 떄문에 그러지 않을까 싶습니다



이러한 semantic segmentation 구조는 일반적인 구조라고 하네요. 이 네트워크 내부에 downsampling/upsampling을 하는 convolution network가 있구요. upsampling은 앞서 배운 것들을 사용한다고 합니다. (transpose convolution or unpooling or upsampling) 그리고 모든 픽셀에 cross-entorpy를 계산하면 네트워크 전체를 end to end로 학습시킬 수 있다고 합니다



자 다음은 classification + localization입니다. 이거는 이미지가 어떤 카테고리에 속하는지 뿐만 아니라 실제 객체가 어디에 위치하는지 box를 치는 것입니다. 이거는 흔히 object detection과 헷갈려 하시는 분들이 계시는데요. Localization에서는 객체가 오직 하나 뿐이라고 가정합니다. 이런 것을 classification + localization 이라고 합니다



아키텍처 구조는 다음과 같습니다. 기본적으로 image classification과 비슷한데요. 하나의 fc가 더 있습니다. 여기서는 box corrdinate를 하는 것이죠. 이것은 width, height, x, y 의 값을 가지고 있습니다



그래서 이런식으로 하나는 score를 반환하고 하나는 bounding box(bbox)의 좌표를 반환합니다. 이 네트워크를 학습시키려면 2개의 loss가 존재합니다. 또한 이것은 완전히 supervised 이라서 학습 이미지에는 카테고리 레이블과 해당 객체의 bounding box ground truth(GT)를 동시에 가지고 있어야 합니다. 2가지 loss중 하나는 softmax loss입니다. 그리고 ground truth bbox와 예측한 Bbox 사이에 차이(오차)를 측정하는 loss도 있습니다. 여기서 lossl2 loss를 써서 차이를 구합니다



그리고 이 두 개의 loss를 합친 lossmulti-task loss라고 부른다고 합니다. gradient를 구하려면 네트워크 가중치들의 각각의 미분 값

(scalar)을 계산해야 합니다. 이게 2개이니까 이 2개를 모두 최소화 시켜야 합니다. 그리고 실제로는 두 loss의 가중치를 조절하는 하이퍼파

라미터가 있다고 하네요. 그래서 두 loss의 가중치 합이 최종 loss라고 합니다. 근데 이 하이퍼파라미터를 조절하는 것은 매우 까다롭다고 

저스틴이 말했습니다. 그래서 뭐 loss값으로 성능을 비교하는게 아니라 다른 지표( 실제 모델 성능 지표 등)을 본다고도 말했습니다.



그리고 여기서도 pretrained된 모델을 사용해서 하면 더 좋고 빠르다고 하는 것 같군요



classification + localization을 적용해볼 수 있는 문제 중 대표적인 것이 human pose estimation이라고 합니다. 흔히 관절을 보여주는 그런 모델이죠. 사람의 팔 다리가 어디에 위치하고 있는지 예측하는 것입니다. 그래서 여기서는 14개의 관절의 위치로 사람의 포즈를 정의한다고 합니다




여기서는 입력으로 사람의 이미지가 들어가겠죠. 그리고 출력은 14개의 관절 위치 좌표 값이 나옵니다. 그래서 예측된 14개의 점에 대해서 regression loss를 계산하고 backprop으로 학습합니다. 가장 단순하게 L2 loss를 사용하고 때로는 다양한 regression loss를 사용한다고 하네요.(l1, smooth l1 loss )



여기서 팁! Regression loss란 무엇일까요?? 이건 매우 중요합니다. Regression losscross entropysoftmax가 아닌 loss를 뜻합니다. Softmax 같은 것은 categorical을 가지고 있죠. 하지만 regressioncontinuous합니다. 즉 연속적이라는 것이죠. 만약 고정된 개수의 카테고리가 있고 이걸 가지고 클래스 스코어를 예측을 하게 되면 cross entorpoy/ svm loss등을 사용할 수 있죠. 하지만 출력이 연속적인 값이라면 (여기서 관절의 위치)는 연속적인 값이기 때문에 다른 lossregression loss를 사용하는 것이죠



다음은 object detection입니다. 완전 핫하죠. 이것은 ㅎㅎ 여기 강의에서는 간단하게만 설명하고 넘어간다고 합니다. 우선 object detection에서도 고정된 카테고리가 있다고 합니다. 고양이, 개 등 고정된 카테고리 개수만 생각한다고 합니다. object detectiontask는 입력 이미지가 주어지면 이미지의 나타나는 객체들의 Bbox와 해당하는 카테고리를 예측합니다. 이는 앞에서 봤던 localization과 다르죠. 예측해야 하는 Bbox의 수가 입력 이미지에 따라 달라지니까요. 사람이야 이미지에 강아지가 몇 개고 이런걸 보기 쉽지만 컴퓨터가 봤을 때는 그걸 모르니까 이건 쉽지 않은 문제입니다



여기서는 해마다 object detection의 성능 향상을 보여줍니다. 딥러닝을 사용하고 나서 급격히 증가하게 되었죠. 여기서는 15년뿐이 자료가 없지만 아마 더 찾아보면 성능이 더 향상되었을 거라 생각합니다



앞서 설명 드렸듯이 localizationobject detection은 많이 다릅니다. Detection은 이미지가 몇 개인지 예측을 할 수 없기 때문이죠. 그래서 앞서 localization처럼 regression을 이용해서 풀기에는 상당히 까다롭습니다



그래서 새로운 방법을 써야하는 것이죠



많은 사람들이 사용했던 방법은 sliding window방법입니다



그래서 이렇게 가면서 배경이니?, 개니?, 고양이니? 이렇게 물으면서 진행합니다. 여기서 배경이라는 카테고리가 추가됩니다. 개나 고양이가 아닌 카테고리죠. 즉 어느 곳에서도 속하지 않는 카테고리입니다



이렇게 쭉쭉합니다.



근데 여기서 문제가 있습니다. 어떻게 영역을 추측해야 하는지도 문제고 objects가 몇 개인지 어디에 존재하는지 크기가 얼마나 되는지 알 수가 없습니다. 그리고 좀 종횡비를 갖춘 것으로 표현해야 할지도 모르죠.



그래서 sliding window대신 region proposal을 사용합니다. 사실 이거는 딥러닝을 사용하지 않습니다. 이것은 객체가 있을법한 후보(region proposal)을 찾아내는 것입니다. 그래서 1000개의 regrionselective search를 통해 찾아냅니다. 이것의 방법은 뭉친곳들을 찾아내는 것이죠. 그래서 이미지에 객체가 존재한다면 selective searchregion proposal안에 속할 가능성이 높습니다근데 우리는 이걸 다 고려하는게 아니라 있을법한 region proposal을 얻어내야하죠. 그리고 이 region proposalsCNN의 입력으로 해서 추출합니다.



이 아이디어가 R-CNN입니다. 이미지가 주어지면 region proposal을 얻기 위해 region proposal network(RPN)을 수행합니다



그리고 region proposalregion proposal of interest(ROI)라고 부르기도 합니다. 그래서 selective search를 통해 2000개의 ROI를 얻어냅니다



여기서 나온 ROI사이즈가 각양각색입니다. 동일하지 않죠. 그래서 추출된 ROICNN classification을 수행해주려면 fc-layer 등으로 인해서 동일한 사이즈로 맞춰 주어야합니다. 따라서 고정된 크기로 변형시켜줍니다. region proposal을 추출하면 동일한 고정된 크기로 사이즈를 바꿉니다. (warped image region)



그리고 이것을 CNN에 통과시킵니다.



그리고 RCNN의 경우 최종 분류에 SVM을 사용했습니다



그리고 여기서 Bbox reg가 있는데 region proposal보정하기 위한 regression 과정입니다. Selective searchregion proposal은 대게 정확하지만 그렇지 못한 경우도 있기 때문에 보정을 해줍니다. 그래서 RCNNBBox의 카테고리도 예측하지만 BBox를 보정해줄 수 있는 offset 4개도 예측합니다. 이를 multi-task loss로 두고 한 번에 학습합니다.

여기서 region proposal은 학습되지 않습니다. 고정된 알고리즘인 selective search를 사용하죠.

그리고 supervised 학습이라서 이미지 내의 모든 객체의 BBox가 있어야 훈련이 가능하다고 합니다



그래서 이런 R-CNN은 여러 문제점들이 있습니다. 일단 계산비용이 많고 느립니다. 그리고 학습이 되지 않는 region proposal때문에 문제가 될 가능성이 있습니다.



그래서 fast R-CNN이 나오게 됩니다.



Fast R-CNN이 나오면서 R-CNN의 단점들이 보완이 되었습니다. R-CNN과 다른 점은 각 ROI마다 각각 CNN을 수행하지 않습니다. 전체 이미지에 CNN을 수행하죠. 그렇기 때문에 전체 이미지에 대한 고해상도 feature map을 얻을 수 있게 됩니다



여기서도 마찬가지로 selective search 방법으로 region proposal을 계산을 하는데요. 하지만 조금 달라집니다. 이미지에서 ROI를 뜯어내지 않죠. CNN에서 나온 feature map에다가 ROI를 뜯어냅니다!



그래서 하나의 CNN에서 나온 feature를 여러 ROI가 공유할 수 있게 됩니다



그 다음은 FC-layer가 있는데요. 여기서도 마찬가지로 ROI의 크기가 조정이 됩니다. 이 과정이 바로 ROI Pooling layer입니다. 이렇게 조절을 해서 FC로 넣게 되면 classification scorelinear regression의 값을 얻을 수 있죠



그리고 최종 LOSS는 이 2개를 합친 것이 됩니다



그리고 backpropagationmulti-task loss로써 계산이 됩니다



그리고 ROI Pooling에 대해서 설명이 나옵니다. 강의에서는 자세히 다루지 않는데요.

그림만 보셔도 대충 느낌은 오실겁니다. CNN에서 나온 feature값에 다가 imageBox되어 있는 부분에 대해서 Pooling하는 방식처럼 되는 것이죠. 그리고 이것을 FC-layer에 넣게 됩니다



여기서는 다른 모델들과 비교를 해줍니다. Fast R-CNN이 훨씬 빠른 것을 볼 수 있죠.



근데 여기 빨간색 text로도 나와있지만 Fast R-CNN에도 문제가 있습니다. Fast R-CNN은 빠르긴 하지만 Region Proposal을 계산하는데 시간이 대부분입니다. 2000개의 Region Proposalselective search로 계산하는데 2초가량 걸린다고하네요. Region proposal을 계산한 이후 CNN을 거치는 과정은 모든 Region Proposal이 공유하기 때문에 1초도 안걸린다고 합니다.

그래서 fast R-CNNRegion proposal을 계산하는 구간이 병목이라고 합니다



이걸 해결하기 위해서 faster R-CNN이 나옵니다(뭔가 이름을 우려먹는 듯한 느낌은 크흠..)


Faster R-CNN은 네트워크가 region proposal을 직접 만들 수 있습니다. 이미지가 입력으로 들어오면 먼저 전체 CNN을 통해서 Feature map을 뽑아냅니다. 그리고 여기서 별도의 region proposal network가 있습니다.(줄여서 RPN) RPN은 네트워크가 feature map을 가지고 region proposal을 계산하도록 합니다. 이걸 거치고 나면 나머지는 fast R-CNN과 같습니다.

그래서 그림에도 나와있듯이 4개의 loss가 한 번에 계산됩니다. RPN쪽과 예측한 loss 등입니다.

RPNloss 2개 중 하나는 이곳에 객체가 있는지 판단합니다. 그리고 나머지는 BBox에 관한 것입니다. 여기서 classification loss는 일종의 binary classification이라고도 한다고 합니다. Region proposal 후보들에 대해서 각각을 binary decision합니다. , region안에 객체가 존재하는지 아닌지를 결정하는 것이죠! 그래서 binary라고 이름이 붙어있습니다.

다른쪽 loss는 하나는 classification에 대한 결과 그리고 나머지는 BBox Regression입니다.

Faster R-CNN은 강의에서 더 자세히 나오지 않습니다. 더 궁금하신 분들은 따로 구글링을 통해 찾아보시고 공부하셔야 할 것 같습니다.


그리고 이따가 나올  YOLO와 비교되는 것은 이것은 2 stage입니다. 왼쪽, 오른쪽 2개의 스테이지가 있죠. 

여기서는 RPN에서 슬라이딩 윈도우를 돌면서 region을 떤져주면서 classification에서 있다, 없다를 보여주고 하는 방법입니다.

근데 YOLO에서는 저 그림의 왼쪽만 하는 대신 있다, 없다가 아니라 바로 고양이다, 아니다를 판별하죠.



실제로 faster R-CNNfast R-CNN보다 더 빠릅니다. 빨라진 이유는 네트워크 밖에서 계산했던 region proposal의 병목을 제거했기 때문이라고 합니다.

R-CNN 계열 네트워크들은 후보 ROI마다 독립적인 연산을 수행합니다. R-CNN 계열의 네트워크들을 region-based method라고 한다고 하네요.



그리고 다른 방법도 있습니다. Feed forward를 한 반향으로 수행하는 네트워크라고 하는데요. 그 중 하나가 요즘 정말 핫한 YOLO(you only look once)입니다. 그 욜로 아닙니당 ㅋㅋㅋ 그리고 다른 하나는 SSD(Single Shot Detection)입니다



이것들의 아이디어는 각 task를 따로 계산하지 말고 하나의 regression 문제로 풀어보자는 것입니다. 입력 이미지가 있으면 이미지를 크게크게 나눕니다. 여기서는 예를 들어 7x7 grid로 나누었네요. grid cell 내부에는 base bbox가 있구요. 이 경우에는 3가지의 base bbox가 있습니다. 그림에서 보이는 것과 같이 하나는 가로로 길고, 하나는 세로로 길고 하나는 정사각인 것들이죠. 이 각 grid cell에 대해서 bbox가 있고 이를 기반으로 에측을 수행하는 것입니다. Bboxoffset을 계산해서 실제 위치가 되려면 basebox가 얼마나 옮겨져야 하는지 등을 계산하는 것이죠. 그리고 각 bbox에 대해서 classification scores를 계산합니다. BBox안에 이 카테고리에 속한 객체가 존재할 가능성을 의미하죠. 그래서 여기예에서는 네트워크에 입력 이미지가 들어오면 7x7 grid마다 (5B + c)개의 tensor를 가지게 됩니다. BC는 옆에 설명이 나와있죠. C는 클래스 개수이고 B5개의 숫자를 가진 박스 개수를 나타내겠죠.

그래서 출력이 3d를 가지는 tensor가 됩니다. 그리고 CNN으로 학습시키는 것이죠.

그리고 여기서 d는 델타인데 얼만큼 움직여!’라는 것을 뜻합니다





 

이러한 YOLOSDDSingle Shot method라고 합니다. 후보 base BBoxeGT를 매칭시키는 것이죠. 마치 Faster R-CNN에서 쓰는 RPN과 비슷합니다. 2개는 결국 Regression + classification를 푸는 것입니다. Faster R-CNNRPN으로 먼저 Regression 문제를 풀고 ROI단위로 Classification을 합니다. 반면 YOLO같은 것은 한 번의 forward pass로 끝내버리죠!

그리고 이렇게 다양한 다른 것들이 있으니 꼭 알아보세요.

 



그리고 이 장은 카파시가 Anderj와 함께 object detectionimage captioning을 조합한 논문이라고 합니다. Dense captioning이라고 하네요. 이거는 각 region에 대해서 카테고리를 예측하는 것이 아니라 각 regioncaption을 예측하는 것이라고 합니다.



이것을 위해 각 Regioncaption이 있는 데이터 셋이 있어야 한다고 하구요. 이 네트워크는 마치 Faster R-CNN과 비슷하다고 말합니다. Region proposal stage가 있고 예측한 BBox 단위로 추가적으로 처리를 한다고 하네요



 

비디오는 생략

  

이걸 카파시가 보여준 이유는 여러 문제를 섞어서 문제를 풀 수 있다는 것을 보여주려고 보여주었다고 합니다.



마지막 taskinstance segmentation입니다. 이거는 semantic segmentationobject detection을 섞은 것이죠. 이미지 내의 두 마리의 개가 있으면 이 2마리를 구분해내야 합니다



그리고 여기서는 mask R-CNN을 소개해줍니다. Faster R-CNN과 매우 유사하다고 하네요

CNNRPN을 거치고 -> ROI 뽑고 -> segmentation mask를 예측하고.. 뭐 이런식으로 한다고 하네요. 위에 보면 첫 번째 갈림길이 나오는데요. 여기서는 region proposal이 어떤 카테고리에 속하는지 계산한다고 합니다. 그리고 region proposal의 좌표를 보정해주는 BBox regression도 예측을 하죠. 그리고 두 번째 갈래는 객체인지 아닌지 판별합니다


그래서 이 사진을 보면 매우 잘되는 것을 볼 수 있습니다. 심지어 저 멀리 있는 사람들 또한 다 파별하네요!



그리고 여기서 관절에 대해서도 추가를 할 수 있다고 합니다.



이렇게 사람의 관절이 어떻게 되어 있는지 예측을 할 수 있죠. 매우 신기하네요 ㄷㄷ


그래서 이번 강의는 여기까지입니다. GAN을 마지막으로 정리하려고 했는데..

요즘 너무 바빠서 GAN은 정리를 못하겠네요

 

이 강의 정리는 모두의연구소 CS231n 영상처리 스터디 반에서 진행한 내용입니다.

스터디 같이 하셨던 분들 수고 많으셨고 혹시나 이 글을 연속으로 보시는 분들 계신다면 정말 수고 많으셨습니다





반응형
그리드형
Comments