응용 프로그램 설계

다음 표는 런타임 성능을 높일 수 있는 응용 프로그램 설계 상의 특징을 요약하고 있습니다. 성능을 높이도록 응용 프로그램을 설계하는 것은 일반적으로 시스템 작동에 최소의 영향만이 있습니다.

설계 패턴 빠른 이유 최선의 대안 주의 사항

스트림 당 도구 숫자를 적게 이용합니다.

단일 Deep Learning 도구의 프로세싱 시간은 해당 도구가 반환하는 정보의 양에 따라 크게 변동하지 않습니다.

예를 들어, 100개의 다른 feature를 찾도록 트레이닝된 단일 Blue 도구는 하나의 feature만을 찾도록 트레이닝된 도구와 동일한 속도로 실행됩니다. 나아가, 반환되는 feature의 수도 속도에 대한 영향은 매우 적습니다.

마찬가지로, Red 도구는 얼마나 많은 결함을 찾는가와 무관하게 동일한 속도로 실행되며, Green 도구도 2개 클래스로 분류하든 2000개 클래스로 분류하든 속도는 동일합니다.

하나의 도구로 응용 프로그램을 구축하기 시작합니다.

 

이미지 전환을 피합니다.

도구 작업 중, 이미지는 신경망에 의한 프로세싱을 위해 샘플링되어야 합니다. 이 샘플링은 bitmap 같은 래스터(비압축) 형식의 이미지를 필요로 합니다. 이러한 전환 작업은 시간이 걸립니다.

마찬가지로, 도구가 단일 채널(회색조) 이미지를 input으로 이용하도록 구성되었지만, 다채널 컬러 이미지가 제공되면, 런타임에서 각 이미지의 밝기를 계산해야 합니다.

응용 프로그램이 단일 채널 회색조 이미지를 이용하도록 시도합니다.

일부 응용 프로그램은 컬러 정보가 필요합니다.

프로세싱할 데이터 양을 줄입니다.

다음을 통해, 프로세싱할 데이터의 양을 줄입니다.

  • 작은 ROI 사용
  • 마스크 사용
  • 최대한 적은 이미지 채널 사용

이렇게 하면 프로세싱할 데이터의 양이 줄어들어 프로세싱 속도가 향상됩니다.

ROI를 제한합니다.

VisionPro Deep Learning 도구가 잘 작동하려면 context 정보가 필요하므로, ROI를 지나치게 제한하지 마십시오.

대개의 경우 다운샘플링(샘플링 밀도 매개변수를 이용해 설정)은 필요하지 않습니다. Feature 크기를 크게 함으로써, 속도를 향상하고 런타임 다운샘플링의 필요를 없앱니다.

멀티 스레딩 이용

GPU가 다수 있는 시스템에서는, 다수의 스트림을 동시에 프로세싱하면 도구가 병행 실행되어 프로세싱 양이 늘어납니다.

Note: 다중 GPU를 사용하여 스트림에서 병렬로 여러 도구를 트레이닝 및 프로세싱 할 수 있습니다. 자세한 내용은 다중 GPU 설정를 확인하십시오.

단일 GPU 시스템에서는, 다수의 프로세스가 동일한 GPU를 이용하도록 시스템을 구성할 수 있습니다. 이렇게 하면 GPU 점유율이 높아져 프로세싱 양이 늘어나지만, 도구 실행 시간은 증가합니다.

--max-process-count command line 인수를 이용해 다수의 스레드가 단일 GPU에 액세스하도록 합니다.

로컬 컨트롤의 GlobalConfig()메서드를 이용해 런타임 응용 프로그램의 다중 프로세스 GPU 액세스를 활성화하려면, 다음을 이용합니다.

control.GlobalConfig("max_process_count=2");

개별 도구의 프로세싱 시간은 늘어납니다.

C++(언매니지드)

언매니지드 언어 환경을 이용하면, 시스템 활동이 도구 실행에 미치는 영향이 줄어듭니다.

대기 시간이 짧고, 고성능인 응용 프로그램에는 Cognex Designer를 이용하지 마십시오.

Windows는 실시간 운영 체제(RTOS)가 아닙니다.

 

개발을 위한 일반적인 팁

다음은 VisionPro Deep Learning application에 유용한 팁과 비결입니다.

VisionPro Deep Learning application 개발 시 다음 팁을 고려하십시오.

  • 도구 복제본을 만들어 A-B 비교를 수행합니다.

    도구의 복제본을 만들면, 매개변수를 변경해 다시 트레이닝하고, 원본과 복제본을 비교해 도구 매개변수 변경의 영향을 알 수 있습니다.

  • 이미지 세트 테스트를 수행 할 스트림 복제본을 만듭니다.

    테스트에 대량의 이미지 배치가 있는데, 데이터베이스를 어지럽게 만들고 싶지 않은 경우, 스트림을 복제하고 이미지들을 클론에 추가하십시오. 이렇게 하면 현재 도구 상태를 테스트할 수 있습니다. 완료 후에는, 복제된 스트림을 삭제하십시오.

  • 복제된 이미지를 추가해 도구를 "속이려" 하지 마십시오.

    이렇게 하면 모델에 부정적인 영향이 있습니다. 특정 이미지의 트레이닝 가중치를 높이고 싶다면, Green 분류 도구의 High Detail 모드의 "클래스 가중치" 옵션을 이용하십시오.

  • "부트스트랩" 라벨 지정

    "부트스트랩" 라벨 지정은 이미지 중 소수의 샘플에 라벨을 지정하고 도구를 트레이닝한 후, 결과를 검토하면서, 정확하게 마킹된 뷰는 라벨로 전환하도록 수락하고, 정확하지 않은 마킹은 삭제하고 정확한 라벨로 교체하는 방식입니다. 이미지를 다수의 뷰로 나누고 하나의 뷰에만 라벨을 지정함으로써 이 과정의 속도를 더욱 빠르게 할 수도 있습니다. 또한, 일시적으로 Epoch 횟수 매개변수를 줄이면 트레이닝 속도가 더욱 빨라집니다.