austin-distel-rxpThOwuVgE-unsplash.jpg

AI연구회

경남ICT협회 AI 연구 모임

Non-Max Merging이란

객체 감지를 오랫동안 다루어 왔다면 의심할 여지 없이 이중 감지 문제에 부딪혔을 것입니다. 이는 모델이 동일한 객체를 여러 번 감지하는 경우입니다.

이는 일반적 으로 가장 확실한 경계 감지를 유지하고 나머지는 삭제하는 NMS( Non-Max Suppression ) 를 통해 해결됩니다 . 하지만 대신 상자를 병합하고 싶다면 어떻게 해야 할까요?

이 글에서는 이중 탐지와 현재 Non-Max Merging(NMM) 에 대해 설명합니다 . 다음 사항에 대해 논의합니다.

  • 이중 감지의 원인은 무엇입니까?
  • 비최대 병합 알고리즘
  • NMS와 NMM의 차이점

그런 다음 컴퓨터 비전 모델 예측으로 NMS를 실행하는 방법을 보여주는 몇 가지 예제 코드를 설명하겠습니다.

이중 감지 문제

이중 감지의 원인은? 두 건의 사건이 두드러진 범인입니다.

첫째, 중복 감지는 모델 자체에 의해 생성될 수 있습니다.

  • YOLO 또는 Faster R-CNN과 같은 모델은 앵커 상자 또는 영역 제안을 사용하여 객체를 예측합니다. 여러 앵커 상자가 위치, 크기 또는 종횡비에 약간의 변화를 주어 동일한 개체를 덮을 수 있으므로 여러 번 감지할 수 있습니다.
  • 모델은 특히 노이즈가 많은 주석이 있는 데이터 세트에서 학습한 경우나 객체에 다른 위치나 크기에서 두드러지는 고유한 특징이 있는 경우 동일한 객체의 여러 영역에 대해 과신할 수 있습니다.
  • 모델이 객체가 어떤 클래스에 속하는지 확실하지 않은 경우 다양한 클래스 레이블을 사용하여 여러 탐지를 생성할 수 있습니다. 예를 들어, "자동차"와 "차량"이 동일한 객체를 참조하더라도 별도의 엔터티로 감지할 수 있습니다.

기본적으로 Ultralytics와 같은 프레임워크는 대부분의 모델 예측을 필터링합니다. 낮은 신뢰 임계값을 지정하면 더 많은 모델 예측이 나타납니다.

둘째, 의도적으로 중복이 만들어졌을 수도 있습니다.

  • InferenceSlicer(SAHI)는 이미지를 작은 슬라이스로 나누고 각 슬라이스에 모델을 적용한 다음 결과를 병합합니다. 슬라이스 가장자리에서 객체가 갑자기 잘리는 것을 방지하기 위해 슬라이스가 약간 겹쳐집니다. 그러나 이러한 겹침으로 인해 동일한 객체 또는 해당 부분이 여러 번 식별될 수 있습니다.

이 이미지에서 사람을 어떻게 감지할 수 있나요?

물체가 작습니다. 대부분의 모델은 큰 이미지로 학습하기 때문에 어려움을 겪습니다.

InferenceSlicer 를 사용하면 해당 작업을 쉽게 처리할 수 있습니다 .

성공?

확대해보면 대부분의 감지 아래에 또 다른 이중 감지가 있는 것을 알 수 있습니다.

'사람' 레이블 주변의 색이 다른 선은 그 아래에 또 다른 감지가 있음을 의미합니다.

오버랩 필터링

이중 감지를 해결하기 위해 두 가지 유사한 알고리즘이 사용됩니다.

  • 상자 중복을 확인하고 최상의 감지만 유지하는 비최대 억제(NMS)
  • NMM(Non-Max Merging) - 상자 중복을 확인하고 탐지 내용을 하나로 병합합니다.

전제 조건 개념을 명확히 한 다음 알고리즘을 더 자세히 살펴보겠습니다.

교차-연합(IOU)

' 겹침 ' 이라고 말할 때는 일반적으로 높은 Intersection-Over-Union 값을 의미합니다. 이는 두 상자가 교차하는 면적을 두 상자의 병합된 면적으로 나누어 계산합니다. IOU는 0에서 1까지입니다. 값이 높을수록 겹침이 커집니다!

비최대 억제(NMS)

이미지에 모델을 실행하여 탐지 목록을 생성한다고 가정합니다. 두 탐지가 같은 객체에 배치되는 경우를 필터링하려고 합니다.

가장 일반적인 방법은 비최대 억제를 사용하는 것입니다.

Non-Max 억제 작동 중

  1. 먼저, 모든 탐지 결과를 신뢰도 점수에 따라 가장 높은 점수부터 가장 낮은 점수 순으로 정렬합니다.
  2. 그런 다음 모든 감지 쌍을 가져와 해당 IOU를 계산하여 쌍이 얼마나 겹치는지 확인합니다.
  3. 중첩이 사용자가 지정한 것보다 높은 모든 쌍에 대해 iou_threshold신뢰도가 낮은 쌍을 폐기합니다.
  4. 이 작업은 모든 클래스와 감지 쌍이 설명될 때까지 수행됩니다.

비최대 억제는 클래스별로(예: 자동차, 개, 식물) 또는 클래스에 독립적인 방식으로 수행할 수 있으며, 이 경우 모든 클래스의 상자로 중복을 검사합니다.

더 읽어보기 위해 Piotr는 NumPy를 사용한 Non-Max Suppression 에 대한 심층 분석을 작성했습니다  .

비최대 병합(NMM)

이 알고리즘의 단계는 약간 더 복잡합니다. 모델이 탐지 목록을 생성하고 그 중 일부가 객체를 두 번 탐지하는 경우부터 다시 시작해 보겠습니다.

Non-Max 병합이 실행 중입니다. Non-Max 억제와 매우 유사합니다!

Non-Max Merge의 단계는 다음과 같습니다.

  1. 먼저, 모든 탐지 결과를 신뢰도 점수에 따라 가장 높은 점수부터 가장 낮은 점수 순으로 정렬합니다.
  2. 그런 다음 모든 감지 쌍을 가져와 해당 IOU를 계산하여 쌍이 얼마나 겹치는지 확인합니다.
  3. 가장 확실한 것부터 가장 낮은 것까지, 중복되는 탐지 그룹을 구축합니다.
    1. 가장 확신도가 높은 비그룹화 감지 D1을 사용하여 새로운 그룹을 만드는 것으로 시작합니다 .
    2. 그런 다음, 사용자가 지정한 값 이상 D1 과 겹치는 각 그룹화되지 않은 감지 항목을 동일한 그룹에 배치합니다.iou_threshold
    3. 이 두 단계를 반복하면 [[D1, D2, D4], [D3], [D5, D6]] 와 같이 상호 배타적인 그룹이 생성됩니다 .
  4. 그런 다음 병합이 시작됩니다. 이는 감지 쌍 (D1, D2) 을 사용하여 수행되며 구현에 따라 다릅니다. 감독 에서 우리는:
    1. D1D2xyxy 모두에 맞는 새로운 경계 상자를 만듭니다 .
    2. D1 또는 D2mask 의 마스크가 있던 곳에 새로운 포함 픽셀을 만듭니다 .
    3. D1D2를 각각 면적 으로 정규화 confidence하여 더한 새로운 값을 생성합니다 .confidencexyxy
      New Conf = (Conf 1 * Area 1 + Conf 2 * Area 2) / (Area 1 + Area 2)
    4. 복사 class_id하고 탐지에서 더 높은 신뢰도를 얻습니다 tracker_id,.data
  5. 이전 단계는 탐지 쌍에서 수행됩니다. 전체 그룹을 어떻게 병합합니까?
    1. 결과에 대한 빈 목록을 만듭니다.
    2. 그룹에 탐지 항목이 하나만 있는 경우 결과 목록에 추가합니다.
    3. 그렇지 않으면, 처음 두 개의 탐지를 선택하고, IOU를 다시 계산하고, 사용자 지정보다 위에 있으면 iou_threshold이전 단계에서 설명한 대로 쌍으로 병합합니다.
      병합된 탐지 결과는 새로운 첫 번째 요소로 그룹에 남아 있고, 그룹은 1만큼 줄어듭니다. 그룹에 두 개 이상의 요소가 있는 동안 쌍으로 병합을 계속합니다.
      IOU 계산은 알고리즘을 더 비싸게 만들지만, 병합된 탐지가 무한정 커지는 것을 방지하는 데 필요합니다.

결국 모든 원래 탐지가 유지되거나 정확한 결과로 병합되어 더 짧은 탐지 목록을 얻게 됩니다.

각 방법을 사용하는 경우

보시다시피, 두 방법은 종종 비슷한 결과를 생성합니다. 사용 사례에 맞게 무엇을 선택해야 합니까? 빠른 대답은 기본값이 아닌 최대 억제를 선택하고 사용 사례에 맞게 최대가 아닌 병합에 대해 몇 가지 테스트를 수행하는 것입니다.

다음 이미지에서는 Non-Max Merge의 성능이 더 뛰어났습니다.

트럭의 측면이 매우 높은 신뢰도로 감지되었으므로 최대값이 아닌 억제는 다른 중복 감지를 삭제합니다. 테스트에서 개체의 일부가 높은 신뢰도로 감지된 것으로 나타나 감지 영역을 확장해야 하거나 감지가 개체 크기를 과소평가하는 경우 먼저 매개 nms_threshold변수를 수정한 다음 Non-Max Merge를 테스트해야 합니다.

성능 고려 사항

우리 구현에서는 Non-Max Suppression(NMS)이 Non-Max Merge(NMM)보다 약 2배 빠르다는 것을 확인했습니다.

35개 탐지에 대해 실행한 결과는 다음과 같습니다(밀리초 단위).

  • NMS: 1.25ms
  • NMM: 4.23ms

750개의 감지 항목을 실행할 경우:

  • NMS: 41.15ms
  • NMM: 75.71ms

 

(리나스 콘드라키스 게시물에서 가져옴) 

기업 홍보를 위한 확실한 방법
협회 홈페이지에 회사정보를 보강해 보세요.