속도 향상 방법

매칭을 수행할 때, 검색 속도를 향상시키는 것은 매우 중요하다. 특히, 대용량 이미지나 실시간 처리 시스템에서는 속도가 중요한 요소로 작용한다. HALCON에서는 검색 속도를 향상시키기 위한 여러 가지 방법을 제공하고 있으며, 이들을 적절히 사용하면 매칭 프로세스를 크게 최적화할 수 있다. 다음은 속도를 높이는 몇 가지 주요 방법이다.

검색 공간 제한

검색할 공간을 제한하면 매칭을 더 빨리 수행할 수 있다. 이미 알고 있는 객체의 예상 위치나 크기, 방향에 대한 정보를 바탕으로 검색 범위를 줄이면 불필요한 계산을 줄일 수 있다. 이를 통해 불필요한 영역을 제외하고 매칭 속도를 높일 수 있다.

  • ROI 사용: 전체 이미지를 검색하는 대신 특정 영역(ROI)을 지정하여 그 범위 내에서만 검색을 수행한다. 이렇게 하면 이미지 전체를 검색할 필요가 없어 속도가 향상된다.

이미지 피라미드 활용

이미지 피라미드는 원본 이미지를 여러 크기의 하위 이미지들로 다운샘플링한 구조로, 각 피라미드 레벨에서 차례대로 검색을 수행하면서 점점 더 정확한 결과를 얻는다. 높은 해상도에서 전체 검색을 진행하기보다는, 처음에는 작은 해상도에서 빠르게 매칭을 수행한 뒤, 점점 더 높은 해상도로 내려가면서 정확도를 높일 수 있다.

그리디(greedy) 검색

그리디 알고리즘을 사용하면 빠르게 매칭 후보를 걸러낼 수 있다. 이 방법은 매칭 후보를 한 번에 모두 검사하지 않고, 유망한 후보만 선택적으로 검사하여 불필요한 계산을 피하는 방식이다.

  • 그리디 검색 설정: Greediness 값을 설정하여, 얼마나 빨리 검색을 중단할 것인지를 제어할 수 있다. 값이 높으면 더 빨리 중단되고, 값이 낮으면 더 세밀하게 검사를 진행한다. MinScore와 함께 설정하여 성능을 최적화할 수 있다.

후보 수 제한 (Limit the Number of Candidates)

후보의 수를 제한하는 것도 매칭 속도를 높이는 중요한 방법이다. MinScoreNumMatches 파라미터를 설정하여, 일정 점수 이상의 매칭 후보만 추출하거나, 찾을 수 있는 매칭의 수를 제한함으로써 속도를 최적화할 수 있다.

  • MinScore: 후보가 일정 점수 이상일 때만 매칭을 고려하도록 설정하여 불필요한 후보를 제거한다.
  • NumMatches: 최대 매칭 수를 제한하여, 필요한 매칭만을 반환하도록 한다.

여러 결과 사용

Shape-based matching은 객체의 형태를 기반으로 매칭을 수행하는 강력한 방법으로, 다양한 객체의 변형을 처리할 수 있다. 이 매칭 방식은 여러 형태를 비교하고, 그 중 가장 적합한 모델을 찾는 데 유용하다. 하지만 하나의 매칭만을 수행하는 것이 아니라, 여러 매칭 결과를 동시에 처리해야 할 경우도 있다. 이 때 Use Multiple Shape-Based Matching Results 기능이 중요한 역할을 한다.

여러 모델을 동시에 매칭하기

여러 모델을 동시에 찾고, 각 모델을 개별적으로 추적하는 방식은 복잡한 장면에서 매우 유용하다. 여러 개의 모델을 찾을 때는 각 모델에 대해 매칭을 개별적으로 수행한 후, 그 결과를 조합하여 최종 매칭 결과를 도출한다. 이를 통해 더 복잡한 장면에서 효율적으로 객체를 식별할 수 있다.

주요 단계

  1. 여러 모델 ID 사용: 여러 모델을 찾을 때는 각 모델을 구별할 수 있는 ID를 설정하고, 이를 통해 개별적으로 매칭을 수행한다.
  2. 다수 모델 결과 처리: 각 모델의 매칭 결과를 별도로 추적하여, 그 결과를 나중에 합치거나 개별적으로 분석할 수 있다.
  3. 속도 최적화: 여러 모델을 동시에 매칭할 때, 피라미드를 활용하거나, 후보 수를 제한하여 성능을 최적화할 수 있다.

적용 사례

이 방식은 다수의 객체를 동시에 찾거나, 객체들이 서로 겹쳐 있는 장면에서 유용하게 사용된다. 예를 들어, 공장 자동화 시스템에서는 여러 제품을 동시에 찾거나, 로봇 비전 시스템에서 여러 객체를 추적하는 데 활용된다. 또한, 다양한 크기나 모양의 객체를 다룰 때 유용하게 적용할 수 있다.

Shape-based matching의 강력한 점은 변형된 형태를 인식하고, 이를 정확히 매칭할 수 있다는 것이다. 그러나 여러 결과를 동시에 활용해야 할 때는 처리 속도와 성능을 고려한 최적화가 필요하다. 여러 모델을 동시에 매칭하면서도 속도와 정확성을 유지할 수 있도록, 적절한 매칭 파라미터와 후처리 방법을 선택하는 것이 중요하다.

3.2.9의 Optimize the Matching Speed

다음은 매칭 속도를 최적화하는 두 가지 단계에 대해 설명한다. 매칭을 최적화하려면 애플리케이션에서 객체가 위치, 방향, 가려짐, 조명 등에서 허용되는 모든 변형에 대해 나타날 수 있는 대표적인 테스트 이미지 세트를 보유하는 것이 매우 중요하다.

Step 1: 모든 객체가 발견되도록 보장하기

속도를 조정하기 전에, 매칭이 모든 테스트 이미지에서 성공하도록 설정을 찾아야 한다. 즉, 모든 객체 인스턴스가 발견되도록 해야 한다. 기본값을 사용하여 이 작업이 이루어지지 않는 경우, 다음 사항을 확인해보자:

  • 검색 알고리즘이 “너무 greedy”한가?
    일부 경우, ‘greediness’ 값이 너무 높으면 완전히 보이는 객체도 찾을 수 없다. 철저한 검색을 위해 값을 0으로 설정해보자.

  • 객체가 부분적으로 가려졌는가?
    객체가 가려진 상태에서도 인식해야 하는 경우, ‘min_score’ 파라미터를 낮춰보자. 추가 정보는 섹션 3.2.6.2에서 참조할 수 있다.

  • 최고 피라미드 레벨에서 매칭이 실패하는가?
    일부 경우, 최고 피라미드 레벨에서 min_score에 도달하지 못할 수 있다. 이 경우 ‘num_levels’를 줄이거나 ‘pyramid_level_highest’ 값을 설정하거나, ‘min_score’를 낮춰보자.

  • 객체의 대비가 낮은가?
    객체가 낮은 대비에서도 인식되어야 한다면, ‘min_contrast’ 값을 낮춰보자. 관련된 내용은 섹션 3.2.4.1에서 확인할 수 있다.

  • 대비의 극성이 전역적으로 또는 지역적으로 반전되었는가?
    객체가 이런 상태에서도 인식되도록 해야 한다면, 모델을 생성할 때 ‘metric’ 파라미터의 적절한 값을 사용해보자. 만약 객체의 일부만 영향을 받는다면, ‘min_score’를 줄이는 것이 더 나을 수 있다.

  • 객체가 다른 객체 인스턴스와 겹쳐 있는가?
    객체가 겹쳐져서도 인식되어야 한다면, ‘max_overlap’ 파라미터를 늘려보자.

  • 동일 객체에서 여러 개의 매칭이 발견되는가?
    객체가 거의 대칭인 경우, 섹션 3.2.6.1에서 설명된 대로 회전 범위를 제한하거나, ‘max_overlap’ 값을 줄여서 해결할 수 있다.

Step 2: 속도에 맞게 파라미터 조정하기

모든 객체가 발견되었지만 애플리케이션의 속도가 향상되어야 한다면, 모델과 검색 파라미터에 따라 속도를 조정할 수 있는 몇 가지 방법이 있다. 매칭 파이프라인의 주요 부분들의 실행 시간을 살펴보는 것은 어떤 검색 단계가 속도 향상 잠재력이 큰지 알 수 있는 좋은 지표가 될 수 있다. 시간 측정은 호출마다 달라질 수 있으며, 외부 요인(예: os 인터럽트, 바이러스 백신 프로그램 등)에 의해 영향을 받을 수 있다는 점을 유의해야 한다. 시간 측정은 set_generic_shape_model_param을 사용하여 pipeline을 활성화하여 할 수 있다. 매칭 작업의 결과 핸들은 get_generic_shape_model_result를 사용하여 조회할 수 있으며, 매칭 파이프라인에 따라 실행 시간을 표시할 수 있다.

만약 시간이 최고 수준 단계에서 많이 소요된다면, 다음과 같이 진행할 수 있다:

  • ‘min_score’ 값을 가능한 한 높게 설정 하여 매칭이 성공하도록 한다.
  • ‘greediness’ 값을 증가시켜, 매칭이 실패할 때까지 테스트 한 후, 실패한다면 ‘min_score’를 낮추어 보자. 그래도 실패하면 이전 값을 복원한다.
  • 회전 및 스케일 범위를 가능한 한 제한한다. 이는 섹션 3.2.6.1에서 설명된 대로 수행할 수 있으며, 모델 레벨에서 미리 이 파라미터들을 조정하는 방법도 있다.
  • 검색을 ROI으로 제한한다. 이는 섹션 3.2.7에서 설명된 대로 할 수 있다.

만약 시간이 추적 단계에서 많이 소요되고 정확성과 강건성을 속도에 맞춰서 희생할 의향이 있다면, 다음과 같이 할 수 있다:

  • 더 높은 피라미드 레벨에서 검색을 종료 한다.
    • 하지만, 이미지의 예시와 같이 낮은 대비로 인해 MVTec에서 V가 사라지는 현상이 생길 수 있다.
  • 모델 변형을 최대한 제한한다.

만약 서브픽셀 정밀화가 매칭 파이프라인에서 상당한 시간을 소요한다면, 다음과 같은 방법을 사용할 수 있다:

  • 서브픽셀 정밀화를 ‘interpolation’으로 설정하거나 , 정확도를 속도와 교환하기 위해 ‘none’으로 설정할 수 있다.

이미지를 획득하고 모델을 생성할 때, 검색 속도에 크게 영향을 미칠 수 있는 모델을 선호하는 것이 중요하다. 예를 들어, 약한 구조보다 우세한 구조를 가진 모델을 선호하면 속도에 긍정적인 영향을 미친다.

추가 방법들 (이 방법들은 더 “위험한” 방법일 수 있으며, 부적절한 파라미터 값을 선택할 경우 매칭 실패가 발생할 수 있다):

  • ‘min_contrast’ 값을 높여서 매칭이 성공하는 한까지 설정 한다.
  • 특히 큰 객체를 검색하는 경우, ‘optimization’ 파라미터에서 더 높은 점수 축소를 선택 하는 것이 도움이 된다. 관련된 정보는 섹션 3.2.4.2에서 확인할 수 있다.
  • ‘angle_step’(및 ‘iso_scale_step’ 또는 비균일 스케일링에 대한 해당 파라미터)을 매칭이 성공하는 한까지 늘린다.