1. 논문의 특징 1.1 Look Only Once - 이미지 전체를 한번에 봄 - R-CNN은 Region Proposal을 통하여 부분을 보지만 YOLO는 전체를 봄 - 전체를 보기 때문에 예술과 같은 다른 도메인에서 더 성능이 잘 나온다. 1.2 Unified object Detection - DPM, R-CNN은 localization 과 detection을 각각 학습시킴 - YOLO는 localization과 detection능력을 한번에 regression으로 학습 가능 - YOLO는 한번의 feedfoward로 예측도 수행함 (Only One Feedfoward 한다고 함) 1.3. Real Time - Fast RCNN : 7 FPS -> (ROI 추출 시 Region Proposal 을 사용함) - Yolo : 45 FPS(Pascal VOC 2007로 평가함) - Fast YOLO : 155FPS 2. 다른 논문과의 차이점 - 이전 DPM, R-CNN의 경우 classification, post processing 을 수행하지만 YOLO는 한번에 추론을 수행함 2.1 DPM(Deformable Parts Models) - sliding window 2.2 R-CNN - Generate Boudning Boxes : 박스를 무작위로 생성 - Classification : 분류를 수행함 - Post-Processing(refinement, elimentation, rescore) : 후처리를 수행 2.3 YOLO - Resize Image : 이미지 크기 줄임 - Run Convolutional Network : 추론 - Nonmax suppression : 이미지를 그리드 셀로 분할한 후, 각 그리드 셀은 object detection을 수행함, 이 때, 경계선에서 겹치는 object는 nonmax suppression으로 걸러냄 3. YOLO 특징 3.1. grid cell 생성 -> sxs 개의 grid cell을 생성하며, 논문에서는 7x7 로 나눔 3.2 bounding box (x,y,w,h) -> 각 cell은 b개의 bounding box를 생성하며, 논문에서는 각 cell 당 2개의 bounding box 를 생성함 -> 학습으로 출력되는 x,y,w,h는 이미지 크기로 나눈 0~1 사이의 값임 3.3 confidence -> 물체가 많이 포함되어 있는지 비율/ Pr(object) * IOU ->그림에서 confidence 가 높은 bounding box는 진하게 표시를 함 3.4 class probablity (클례쓰 확률) -> pr(Class | Object) -> 각셀은 하나의 class 를 갖고 있다고 판단하므로 각 셀에서 나오는 bounding box는 같은 class를 갖고 있다고 판단 3.5 학습 기법 - 1000 class갖는 image net 데이터로 pretrain으로 학습 - classifier 부분에 fully connected layer 와 CNN을 결합하여 추가 학습 - input size를 224x224 -> 448x448로 늘려서 학습을 학습 3.6 YOLO Model - googleLeNet (inception v1) 을 따르고 있음 3.7 tiny YOLO - 일반 YOLO는 - 24개의 convolution layer + 2 fully connected layer, 1X1 reduction layer 사용 - 최종적으로 confidence 와 class probablity를 곱하여 pr(class) * IOU 를 스코어로 사용함 4. TRAIN 전략 - epochs = 135 - batch size = 64 - momentum = 0.9 - decay = 0.0005 - learning rate = [0.0001,0.001,0.0001,0.00001] - dropout rate = 0.5 - argumentation = [scaling, translation, exposure, saturation] 5. NMS(Non Maximum Suppression) - confidence 와 class probablity 를 곱하여 값이 큰 순서대로 나열함 - 가장 큰 값의 bounding box와 그 다음으로 큰 bounding box를 비교하여 큰 값의 bounding box를 기준으로 IOU가 0.5 이상 겹치면 지워나가는 방식으로 bounding box를 없앰 - 각 class 별로 모두 수행하여 나온 bounding box만 추려냄 6. Loss 함수 - 물체가 있는 bounding box와 없는 bounding box 를 나누어 cost 함수를 구성함 - width 와 hedight는 큰 bounding box의 변화보다 작은 bounding box의 변화에 민감하게 반응하는 것을 없애고자 루트를 씌워서 해결함 7. YOLO 헌계 - 물체의 중심이 같은 경우, 한 그리드 셀은 한가지 class 만 분류하기 때문에 오차가 발생할 수 있음 - 같은 셀 안에 여러개의 물체가 동시에 나타마녀 성능이 좋지 않으므로 이럴 경우 grid cell을 작게할 필요가 있음 - Localization 에러를 항상 포함하고 있음 8. 정리 - 빠름 - end to end learning - false positive 가 덜 나옴 - 최신 모델보다는 정확도는 떨어짐 - 다른 모델과 결합하였을 때 성능이 더 좋게 나옴을 확인함 - 예술 작품과 같은 다른 도메인에서 성능이 잘 나옴을 확인함 출처 : autonomous-vehicle.tistory.com/31
안녕하세요. 영상 감사히 잘 봤습니다. 23:39 에 첨언을 하자면, 1i,j^{noobj}는 i th grid cell에 있는 j th bounding box predicator에 object가 포함되지 않을 때 1로 표시되는 것으로 보입니다. 이를 둔 이유는 원래는 \sum_{i=0}^{S^2} \sum_{j=0}^B (C_i- C_i^{hat}) 으로만 물체가 있을 confidence value의 loss 값을 계산하면 되지만 물체가 없을 경우 즉 C_i =0 일 경우 loss를 더 작게 해주는 역할을 하게 되는데요 니는 confidence rate가 0 인 부분인 아닌 부분보다 훨씬 많기 때문에 이를 보정해주기 위해서 따로 땐 것에 불가한 것으로 보입니다. 결론은 1_{i,j}^{obj}+1_{i,j}^(noobj) = 1 으로 보시면 될 것 같스빈다.
Hey I'm new to the field of Convolutional Neural Network. I have a presentation in school on YOLO and I need some help. Can someone please explain how the output of the convolution layer works. The input to the first convolution network is a 448*448*3 tensor. And it's output is a 224*224*64 tensor on a filter of 7*7. I understand that the depth is 64 because of 64 different filters (features) Thank you!
안녕하세요, 영상 감사히 잘 보고있습니다. 질문이 있어서 댓글을 남깁니다. yolo에서 각 grid cell별로 bounding box가 두 개씩 나온다고 이해하였는데, 해당 bounding box는 어떻게 구하게 되는 건가요? RPN이나 SS같은 방법론이 없는 것 같아서 질문 드립니다.
안녕하세요. bounding box의 갯수는 학습 이전에 미리 결정을 해둡니다. 그리고 학습 과정에서 bounding box의 크기 (w,h)와 위치 (grid cell로부터의 중심점 위치 x, y)를 통해 모양과 위치를 학습하게 됩니다. RPN과 유사한 과정을 YOLO에서는 학습단계에서 하나로 합쳐진 loss function을 통해 regression 문제를 해결함으로써 결정하게 됩니다. 감사합니다.
답변감사합니다. 이해가 잘 가지 않아 다시 질문을 드리자면 "bounding box의 크기 (w,h)와 위치 (grid cell로부터의 중심점 위치 x, y)를 통해 모양과 위치를 학습"이 부분이 이해가 잘 되지 않는데, 초기에 x,y,w,h의 값을 bounding box 1,2에 대해서 랜덤하게 뿌려놓고(initialization) 학습을 통해(backpropagation) 보다 정확한 위치를 찾아간다는 말씀이신건가요..?
안녕하세요. 우선 친절한 설명 감사드립니다. 논문과 영상을 통해 공부하는 과정에서 궁금한 점이 있어 여쭤보고 싶습니다. 실제 detection을 하는 과정, 즉 testing 과정에서는 groundtruth가 어떻게 주어지는 건가요? 각 bounding box의 confidence를 구하려면 groundtruth를 알아야 그것과의 IoU를 계산하는 것 같은데, 실제 testing에서 이 값이 주어져도 되는 것인지, 주어진다면 어떻게 주어지는것인지 궁급합니다.
@@윤-o8o2d 네. 학습된 네트워크가 알아서 confidence에 해당하는 값을 출력한다고 이해하는게 맞습니다. 학습을 시킬 때 confidence 값에 대한 loss를 지속적으로 학습을 했기 때문에 해당 네트워크에 따라서 출력을 하면 실제 confidence와 비슷한(loss값이 작은) confidence가 출력이 되는거죠.
안녕하세요 공부하던중 관련 내용 찾다가 들어오게 되었습니다. 좀 오래전에 포스팅 하셨던 글이라 보고 답변해주실지 모르겠지만 혹시나 해서 질문드리겠습니다. 사실 다른 부분은 다 잘 이해가 되는데 confidence score 관련하여 궁금한게 있습니다. Confidence Score를 "Pr(Object)∗IOUtruthpred" 로 정의한다고 논문에도 나와있고 포스팅에도 되어있는데요.. IoU 개념은 ground truth와 얼마나 겹치지는지를 나타나는 걸로 알고 있습니다. 그러면 Pr(object)는 어떤 개념인가요? 어떤 class에 속할지 모르지만 물체가 있을 확률인가요? 그러면 이 확률은 어떻게 구하는 건지... 그게 잘 모르겠더라구요! 혹시 보신다면 답변 부탁드릴게요 감사합니다.
제가 프리젠테이션의 저자는 아니지만 지나가다 답글 올려봅니다. 논문에는 셀에 object가 없으면 0, object가 있으면 IoU로 confidence를 정의한다고 했습니다. 이를 볼 때 ,Pr(object)는 셀에 object가 있다 없다로 1과 0으로 할당되는 binary 함수로 추정됩니다.
안녕하세요. 좋은 영상 감사드립니다. 저도 위에 분과 같은 궁금증인데 아직 명쾌하게 해결이 되지않아 질문드립니다. 학습을 ground truth에 가까워지도록 하려면 일단 초기 bounding box 2개에 대한 initial 값이 있어야하고, 위에 댓글을 보면 랜덤하게 초기값을 뿌려놓고 학습을 하는 것이 맞다고 하셨는데, 그에 대한 내용을 논문에서 찾을 수가 없어서 혹시 좀 더 자세하게 설명해주실 수 있는지 궁금합니다.
학습된 네트워크가 알아서 confidence에 해당하는 값을 출력한다고 이해하는게 맞습니다. 학습을 시킬 때 confidence 값에 대한 loss를 지속적으로 학습을 했기 때문에 해당 네트워크에 따라서 출력을 하면 실제 confidence와 비슷한(loss값이 작은) confidence가 출력이 되는거죠. 한마디 붙인다면, 출력되어 나오는 bounding box에 대한 x,y,w,h값도 실제 bounding box가 아니고 학습되어서 출력되는 bounding box의 위치, 크기 값입니다. confidence도 그렇게 이해하시면 됩니다.
1. 논문의 특징
1.1 Look Only Once
- 이미지 전체를 한번에 봄
- R-CNN은 Region Proposal을 통하여 부분을 보지만 YOLO는 전체를 봄
- 전체를 보기 때문에 예술과 같은 다른 도메인에서 더 성능이 잘 나온다.
1.2 Unified object Detection
- DPM, R-CNN은 localization 과 detection을 각각 학습시킴
- YOLO는 localization과 detection능력을 한번에 regression으로 학습 가능
- YOLO는 한번의 feedfoward로 예측도 수행함 (Only One Feedfoward 한다고 함)
1.3. Real Time
- Fast RCNN : 7 FPS -> (ROI 추출 시 Region Proposal 을 사용함)
- Yolo : 45 FPS(Pascal VOC 2007로 평가함)
- Fast YOLO : 155FPS
2. 다른 논문과의 차이점
- 이전 DPM, R-CNN의 경우 classification, post processing 을 수행하지만 YOLO는 한번에 추론을 수행함
2.1 DPM(Deformable Parts Models)
- sliding window
2.2 R-CNN
- Generate Boudning Boxes : 박스를 무작위로 생성
- Classification : 분류를 수행함
- Post-Processing(refinement, elimentation, rescore) : 후처리를 수행
2.3 YOLO
- Resize Image : 이미지 크기 줄임
- Run Convolutional Network : 추론
- Nonmax suppression : 이미지를 그리드 셀로 분할한 후, 각 그리드 셀은 object detection을 수행함, 이 때, 경계선에서 겹치는 object는 nonmax suppression으로 걸러냄
3. YOLO 특징
3.1. grid cell 생성
-> sxs 개의 grid cell을 생성하며, 논문에서는 7x7 로 나눔
3.2 bounding box (x,y,w,h)
-> 각 cell은 b개의 bounding box를 생성하며, 논문에서는 각 cell 당 2개의 bounding box 를 생성함
-> 학습으로 출력되는 x,y,w,h는 이미지 크기로 나눈 0~1 사이의 값임
3.3 confidence
-> 물체가 많이 포함되어 있는지 비율/ Pr(object) * IOU
->그림에서 confidence 가 높은 bounding box는 진하게 표시를 함
3.4 class probablity (클례쓰 확률)
-> pr(Class | Object)
-> 각셀은 하나의 class 를 갖고 있다고 판단하므로 각 셀에서 나오는 bounding box는 같은 class를 갖고 있다고 판단
3.5 학습 기법
- 1000 class갖는 image net 데이터로 pretrain으로 학습
- classifier 부분에 fully connected layer 와 CNN을 결합하여 추가 학습
- input size를 224x224 -> 448x448로 늘려서 학습을 학습
3.6 YOLO Model
- googleLeNet (inception v1) 을 따르고 있음
3.7 tiny YOLO
- 일반 YOLO는 - 24개의 convolution layer + 2 fully connected layer, 1X1 reduction layer 사용
- 최종적으로 confidence 와 class probablity를 곱하여 pr(class) * IOU 를 스코어로 사용함
4. TRAIN 전략
- epochs = 135
- batch size = 64
- momentum = 0.9
- decay = 0.0005
- learning rate = [0.0001,0.001,0.0001,0.00001]
- dropout rate = 0.5
- argumentation = [scaling, translation, exposure, saturation]
5. NMS(Non Maximum Suppression)
- confidence 와 class probablity 를 곱하여 값이 큰 순서대로 나열함
- 가장 큰 값의 bounding box와 그 다음으로 큰 bounding box를 비교하여 큰 값의 bounding box를 기준으로 IOU가 0.5 이상 겹치면 지워나가는 방식으로 bounding box를 없앰
- 각 class 별로 모두 수행하여 나온 bounding box만 추려냄
6. Loss 함수
- 물체가 있는 bounding box와 없는 bounding box 를 나누어 cost 함수를 구성함
- width 와 hedight는 큰 bounding box의 변화보다 작은 bounding box의 변화에 민감하게 반응하는 것을 없애고자 루트를 씌워서 해결함
7. YOLO 헌계
- 물체의 중심이 같은 경우, 한 그리드 셀은 한가지 class 만 분류하기 때문에 오차가 발생할 수 있음
- 같은 셀 안에 여러개의 물체가 동시에 나타마녀 성능이 좋지 않으므로 이럴 경우 grid cell을 작게할 필요가 있음
- Localization 에러를 항상 포함하고 있음
8. 정리
- 빠름
- end to end learning
- false positive 가 덜 나옴
- 최신 모델보다는 정확도는 떨어짐
- 다른 모델과 결합하였을 때 성능이 더 좋게 나옴을 확인함
- 예술 작품과 같은 다른 도메인에서 성능이 잘 나옴을 확인함
출처 : autonomous-vehicle.tistory.com/31
안녕하세요. 영상 감사히 잘 봤습니다. 23:39 에 첨언을 하자면, 1i,j^{noobj}는 i th grid cell에 있는 j th bounding box predicator에 object가 포함되지 않을 때 1로 표시되는 것으로 보입니다. 이를 둔 이유는 원래는 \sum_{i=0}^{S^2} \sum_{j=0}^B (C_i- C_i^{hat}) 으로만 물체가 있을 confidence value의 loss 값을 계산하면 되지만 물체가 없을 경우 즉 C_i =0 일 경우 loss를 더 작게 해주는 역할을 하게 되는데요 니는 confidence rate가 0 인 부분인 아닌 부분보다 훨씬 많기 때문에 이를 보정해주기 위해서 따로 땐 것에 불가한 것으로 보입니다. 결론은 1_{i,j}^{obj}+1_{i,j}^(noobj) = 1 으로 보시면 될 것 같스빈다.
좋은 코멘트 감사합니다.
감사합니다
C_i = 0 인경우가 no obj일때 ground truth = 0 이다 라는 것을 말씀하는 것인가요?
Hey I'm new to the field of Convolutional Neural Network.
I have a presentation in school on YOLO and I need some help.
Can someone please explain how the output of the convolution layer works.
The input to the first convolution network is a 448*448*3 tensor. And it's output is a 224*224*64 tensor on a filter of 7*7.
I understand that the depth is 64 because of 64 different filters (features)
Thank you!
안녕하세요, 영상 감사히 잘 보고있습니다. 질문이 있어서 댓글을 남깁니다.
yolo에서 각 grid cell별로 bounding box가 두 개씩 나온다고 이해하였는데, 해당 bounding box는 어떻게 구하게 되는 건가요?
RPN이나 SS같은 방법론이 없는 것 같아서 질문 드립니다.
안녕하세요. bounding box의 갯수는 학습 이전에 미리 결정을 해둡니다. 그리고 학습 과정에서 bounding box의 크기 (w,h)와 위치 (grid cell로부터의 중심점 위치 x, y)를 통해 모양과 위치를 학습하게 됩니다.
RPN과 유사한 과정을 YOLO에서는 학습단계에서 하나로 합쳐진 loss function을 통해 regression 문제를 해결함으로써 결정하게 됩니다.
감사합니다.
답변감사합니다. 이해가 잘 가지 않아 다시 질문을 드리자면 "bounding box의 크기 (w,h)와 위치 (grid cell로부터의 중심점 위치 x, y)를 통해 모양과 위치를 학습"이 부분이 이해가 잘 되지 않는데, 초기에 x,y,w,h의 값을 bounding box 1,2에 대해서 랜덤하게 뿌려놓고(initialization) 학습을 통해(backpropagation) 보다 정확한 위치를 찾아간다는 말씀이신건가요..?
네 맞습니다. 최종 학습하는 결과인 7x7x30 텐서의 30dim을 보면 (5d, 5d, 20d) 로 볼수 있는데 각 5d이 bounding box의 (w,h,x,y,confidence)를 나타냅니다.
친절한 답변 감사드립니다! 다음 영상도 기대하고있겠습니다
안녕하세요. 우선 친절한 설명 감사드립니다. 논문과 영상을 통해 공부하는 과정에서 궁금한 점이 있어 여쭤보고 싶습니다. 실제 detection을 하는 과정, 즉 testing 과정에서는 groundtruth가 어떻게 주어지는 건가요? 각 bounding box의 confidence를 구하려면 groundtruth를 알아야 그것과의 IoU를 계산하는 것 같은데, 실제 testing에서 이 값이 주어져도 되는 것인지, 주어진다면 어떻게 주어지는것인지 궁급합니다.
실제 test 단계에서는 ground truth가 존재하지 않는 상황입니다.
감사합니다. 아직 이해가 되지 않아서 다시 질문드리는데, 그러면 실제 test 단계에서는 confidence를 어떻게 구할수 있나요? 학습된 네트워크가 알아서 confidence에 해당하는 값을 출력하도록 두는건가요?
@@윤-o8o2d 네. 학습된 네트워크가 알아서 confidence에 해당하는 값을 출력한다고 이해하는게 맞습니다. 학습을 시킬 때 confidence 값에 대한 loss를 지속적으로 학습을 했기 때문에 해당 네트워크에 따라서 출력을 하면 실제 confidence와 비슷한(loss값이 작은) confidence가 출력이 되는거죠.
@@윤-o8o2d 한마디 붙인다면, 출력되어 나오는 bounding box에 대한 x,y,w,h값도 실제 bounding box가 아니고 학습되어서 출력되는 bounding box의 위치, 크기 값입니다. confidence도 그렇게 이해하시면 됩니다.
loss function 설명에서 MSE 가 아닌 sum-squared-error 을 사용하여 단순하 시켰다고 말씀하시는 부분이 잘 이해가 안 가서 그러는데 부가적인 설명 해주실 수 있나요?
안녕하세요 공부하던중 관련 내용 찾다가 들어오게 되었습니다. 좀 오래전에 포스팅 하셨던 글이라 보고 답변해주실지 모르겠지만 혹시나 해서 질문드리겠습니다.
사실 다른 부분은 다 잘 이해가 되는데 confidence score 관련하여 궁금한게 있습니다.
Confidence Score를 "Pr(Object)∗IOUtruthpred" 로 정의한다고 논문에도 나와있고 포스팅에도 되어있는데요.. IoU 개념은 ground truth와 얼마나 겹치지는지를 나타나는 걸로 알고 있습니다.
그러면 Pr(object)는 어떤 개념인가요? 어떤 class에 속할지 모르지만 물체가 있을 확률인가요? 그러면 이 확률은 어떻게 구하는 건지... 그게 잘 모르겠더라구요! 혹시 보신다면 답변 부탁드릴게요
감사합니다.
제가 프리젠테이션의 저자는 아니지만 지나가다 답글 올려봅니다. 논문에는 셀에 object가 없으면 0, object가 있으면 IoU로 confidence를 정의한다고 했습니다. 이를 볼 때 ,Pr(object)는 셀에 object가 있다 없다로 1과 0으로 할당되는 binary 함수로 추정됩니다.
whats wrong with English? please include in the title anything that indicates the language with which the slides are explained.
안녕하세요. 좋은 영상 감사드립니다.
저도 위에 분과 같은 궁금증인데 아직 명쾌하게 해결이 되지않아 질문드립니다.
학습을 ground truth에 가까워지도록 하려면 일단 초기 bounding box 2개에 대한 initial 값이 있어야하고, 위에 댓글을 보면 랜덤하게 초기값을 뿌려놓고 학습을 하는 것이 맞다고 하셨는데, 그에 대한 내용을 논문에서 찾을 수가 없어서 혹시 좀 더 자세하게 설명해주실 수 있는지 궁금합니다.
논문에는 해당 내용이 없습니다. 소스코드를 확인해서 해당 부분을 찾아서 말씀드리도록 하겠습니다.
학습된 네트워크가 알아서 confidence에 해당하는 값을 출력한다고 이해하는게 맞습니다. 학습을 시킬 때 confidence 값에 대한 loss를 지속적으로 학습을 했기 때문에 해당 네트워크에 따라서 출력을 하면 실제 confidence와 비슷한(loss값이 작은) confidence가 출력이 되는거죠.
한마디 붙인다면, 출력되어 나오는 bounding box에 대한 x,y,w,h값도 실제 bounding box가 아니고 학습되어서 출력되는 bounding box의 위치, 크기 값입니다. confidence도 그렇게 이해하시면 됩니다.
실제 학습 data엔 bounding box를 labeling해서 label data를 입력해야 학습이 진행됩니다. 지도 학습이기 때문에 labeling없이는 학습이 안됩니다.
초기값을 어떻게 주어지는지 코드를 보아야 알 수 있지만 이는 학습 속도에 대한 문제일뿐 gt값에 가까워지도록 하는 것과는 별개입니다. gt값과 비슷하게 하는 것으로는 옵티마이저를 통해 label값과 최대한 가깝게 학습하도록 유도됩니다.
영어 자막을 제공 할 수 있다면 고맙겠습니다.
영어자막은 유튜브에 찾아보면 나옵니다.
DO NOT put English title if the language is not English, please!
This is the most ridiculous comment ever lol. DO NOT write ur name in English unless ur name is from England
ㅋㅋㅋㅋㅋㅋㅋ 약간 들어오고나서 짜증날만하긴하네
논문 제목이 영어인데 어떡함 ㅋㅋㅋㅋㅋㅋ