- IOU (Intersection over Union)
아래와 같이 두개의 Box가 겹칠 경우 Intersection의 부분의 비율을 알아보는 것이다.
출처
https://medium.com/@ageitgey/snagging-parking-spaces-with-mask-r-cnn-and-python-955f2231c400
OpenCV 와 DeepStream Object Tracking
https://ahyuo79.blogspot.com/2019/07/opencv-object-tracking.html
NVIDIA-DeepStream의 nvInfer 의 Tracker
https://ahyuo79.blogspot.com/2019/07/deepstream-gst-nvinfer-tensorrt-iplugin.html
https://ahyuo79.blogspot.com/2019/07/opencv-object-tracking.html
NVIDIA-DeepStream의 nvInfer 의 Tracker
https://ahyuo79.blogspot.com/2019/07/deepstream-gst-nvinfer-tensorrt-iplugin.html
NVIDIA-DeepStream
https://ahyuo79.blogspot.com/search/label/NVIDIA-DeepStream
1.1 IOU 계산 방법
상위 방법은 Python으로 사용하면 쉽게 구할 수 있을 것 같은데, 소스의 동작원리를 정확하게 모르겠다.
일반적인 좌표를 사용하게 되면 어떻게 구현이 될까라는 것도 궁금하다
Left(X), Top(Y) , Width, Height
이때 사각형의 대각선 좌표값으로, X, Y 좌표와 (X+Width) , ( Y+Height) 좌표 두개로 쉽게 IOU를 감지하고 이를 계산가능
ex) A-BBOX의 좌표 X(3) , Y (3) , widht (3) ,height(4) 이라고 하면 아래 두 좌표로 4각형을 인지가능
상위와 같이 InterSection Size만 알면, 모든 계산이 쉬어진다.
현재 상위 조건은 모눈종이에 직접 그려서 생각해본 것 이며, 오류가 아직 존재할 수 있다.
추후 소스로 작성된 소스 검증을 해봐야겠다.
머리가 나뻐서 자꾸, 모눈 종이가 필요해서 아래 링크
http://blog.daum.net/miparang/7058252
https://bskyvision.com/465
아래의 소스는 상위 소스에서 간단히 IOU를 만드는 소스를 만들어 보았는데, 아직 검증을 제대로 해보지를 못했다.
1.2 IOU 사용용도
IOU 사용용도는 다양한 것 같으며, 일단, 아래의 사이트 에서 처럼 실제 BBOX와 예측된 BBOX의 차이를 알아서 교정을 위해서 도 사용이 되어진다.
IOU 관련내용
https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
또한 동일한 Object를 여러개의 Object로 인식을 할 경우, 이때 IOU값에 따라 나머지를 없애는 데에도 사용되어 지는 것 같다.
더불어 Tracking 알고리즘에서도 역시 IOU는 사용이 되어지는데, Object Detection이 되고 이전 Frame 과 이후 Frame IOU값을 가지고 지속적으로
Tracking 하기위해서도 사용되어지는 것 같다.
이외에도 개인적으로 생각을 해보면, ROI(Region of Interest) BBOX 와 Object Detection 된 BBOX의 IOU를 이용도 가능 할 것 같다.
이는 각각의 ROI의 영역이 서로 겹칠 경우, 상위 Smart Parking System일 경우 이용 가능할 것 같다.
간단하지만, 생각해보면 아주 다양하게 이용이 되어지기 때문에 꼭 필요하다
1.1 IOU 계산 방법
- IOU 계산방법
상위 방법은 Python으로 사용하면 쉽게 구할 수 있을 것 같은데, 소스의 동작원리를 정확하게 모르겠다.
일반적인 좌표를 사용하게 되면 어떻게 구현이 될까라는 것도 궁금하다
- 좌표로만 IOU 직접 계산방법
Left(X), Top(Y) , Width, Height
이때 사각형의 대각선 좌표값으로, X, Y 좌표와 (X+Width) , ( Y+Height) 좌표 두개로 쉽게 IOU를 감지하고 이를 계산가능
ex) A-BBOX의 좌표 X(3) , Y (3) , widht (3) ,height(4) 이라고 하면 아래 두 좌표로 4각형을 인지가능
- A-BBOX의 A-MIN 좌표 (3,3)
- A-BBOX의 A-MAX 좌표 (6,7)
- B-BBOX 의 B-MIN 좌표 X >=3 && Y>=3 일 때
- B-MIN 좌표의 X, Y가 아래 두 조건 충족시 IOU 계산
- 3 < X < 6 (3+width)
- 3 < Y < 7 (3+height)
- InterSection Size = A-MAX - B-MIN (각각의 크기나옴)
- B-BBOX의 B-MIN 좌표 X < 3 || Y < 3 일 때
- B-MAX 좌표의 X, Y가 아래 두 조건 충족시 IOU 계산
- 3 < X < 6 (3+width)
- 3 < Y < 7 (3+height)
- InterSection Size = B-MAX - A-MIN (각각의 크기나옴)
상위와 같이 InterSection Size만 알면, 모든 계산이 쉬어진다.
현재 상위 조건은 모눈종이에 직접 그려서 생각해본 것 이며, 오류가 아직 존재할 수 있다.
추후 소스로 작성된 소스 검증을 해봐야겠다.
- 모눈종이 PDF 문서
머리가 나뻐서 자꾸, 모눈 종이가 필요해서 아래 링크
http://blog.daum.net/miparang/7058252
- IOU 관련소스 자료모음
https://bskyvision.com/465
아래의 소스는 상위 소스에서 간단히 IOU를 만드는 소스를 만들어 보았는데, 아직 검증을 제대로 해보지를 못했다.
static int max(int v1 , int v2) { if(v1 > v2) return v1; else return v2; } static int min(int v1 , int v2) { if(v1 > v2) return v2; else return v1; } static int interSection(int Ax1, int Ay1, int Ax2, int Ay2, int Bx1, int By1, int Bx2, int By2) { int left = max(Ax1, Bx1); int top = max(Ay1, By1); int right = min(Ax2, Bx2); int bottom = min(Ay2, By2); int interArea = 0; if (left < right && bottom > top) interArea = ((right - left) + 1) * ((bottom - top)+1); return interArea; }
1.2 IOU 사용용도
IOU 사용용도는 다양한 것 같으며, 일단, 아래의 사이트 에서 처럼 실제 BBOX와 예측된 BBOX의 차이를 알아서 교정을 위해서 도 사용이 되어진다.
- Ground-Truth bouning Box: 실제 모델의 Box, 손으로 직접 Label
- Predicted bouning Box: Deep Learning을 통해 예측된 BBOX
https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
또한 동일한 Object를 여러개의 Object로 인식을 할 경우, 이때 IOU값에 따라 나머지를 없애는 데에도 사용되어 지는 것 같다.
더불어 Tracking 알고리즘에서도 역시 IOU는 사용이 되어지는데, Object Detection이 되고 이전 Frame 과 이후 Frame IOU값을 가지고 지속적으로
Tracking 하기위해서도 사용되어지는 것 같다.
이외에도 개인적으로 생각을 해보면, ROI(Region of Interest) BBOX 와 Object Detection 된 BBOX의 IOU를 이용도 가능 할 것 같다.
이는 각각의 ROI의 영역이 서로 겹칠 경우, 상위 Smart Parking System일 경우 이용 가능할 것 같다.
간단하지만, 생각해보면 아주 다양하게 이용이 되어지기 때문에 꼭 필요하다
댓글 없음 :
댓글 쓰기