# 응용 프로그램 설계

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

설계 패턴 | 빠른 이유 | 최선의 대안 | 주의 사항
--- | --- | --- | ---
스트림 당 도구 숫자를 적게 이용합니다. | 단일 Deep Learning 도구의 프로세싱 시간은 해당 도구가 반환하는 정보의 양에 따라 크게 변동하지 않습니다. 예를 들어, 100개의 다른 feature를 찾도록 트레이닝된 단일 Blue 도구는 하나의 feature만을 찾도록 트레이닝된 도구와 동일한 속도로 실행됩니다. 나아가, 반환되는 feature의 수도 속도에 대한 영향은 매우 적습니다. 마찬가지로, Red 도구는 얼마나 많은 결함을 찾는가와 무관하게 동일한 속도로 실행되며, Green 도구도 2개 클래스로 분류하든 2000개 클래스로 분류하든 속도는 동일합니다. | 하나의 도구로 응용 프로그램을 구축하기 시작합니다. |
이미지 전환을 피합니다. | 도구 작업 중, 이미지는 신경망에 의한 프로세싱을 위해 샘플링되어야 합니다. 이 샘플링은 bitmap 같은 래스터(비압축) 형식의 이미지를 필요로 합니다. 이러한 전환 작업은 시간이 걸립니다. 마찬가지로, 도구가 단일 채널(회색조) 이미지를 input으로 이용하도록 구성되었지만, 다채널 컬러 이미지가 제공되면, 런타임에서 각 이미지의 밝기를 계산해야 합니다. | 응용 프로그램이 단일 채널 회색조 이미지를 이용하도록 시도합니다. | 일부 응용 프로그램은 컬러 정보가 필요합니다.
프로세싱할 데이터 양을 줄입니다. | 다음을 통해, 프로세싱할 데이터의 양을 줄입니다. 작은 ROI 사용 마스크 사용 최대한 적은 이미지 채널 사용 이렇게 하면 프로세싱할 데이터의 양이 줄어들어 프로세싱 속도가 향상됩니다. | ROI를 제한합니다. | Deep Learning 도구가 잘 작동하려면 context 정보가 필요하므로, ROI를 지나치게 제한하지 마십시오. 대개의 경우 다운샘플링(샘플링 밀도 매개변수를 이용해 설정)은 필요하지 않습니다. Feature 크기를 크게 함으로써, 속도를 향상하고 런타임 다운샘플링의 필요를 없앱니다.
멀티 스레딩 이용 | GPU가 다수 있는 시스템에서는, 다수의 스트림을 동시에 프로세싱하면 도구가 병행 실행되어 프로세싱 양이 늘어납니다. Note: GPU 수에 관계없이 여러 Green 분류 도구의 High Detail 모드를 처리하려고 하면 한 번에 한개만 처리할 수 있습니다. 단일 GPU 시스템에서는, 다수의 프로세스가 동일한 GPU를 이용하도록 시스템을 구성할 수 있습니다. 이렇게 하면 GPU 점유율이 높아져 프로세싱 양이 늘어나지만, 도구 실행 시간은 증가합니다. | --max-process-count command line 인수를 이용해 다수의 스레드가 단일 GPU에 액세스하도록 합니다. 로컬 컨트롤의 GlobalConfig()메서드를 이용해 런타임 응용 프로그램의 다중 프로세스 GPU 액세스를 활성화하려면, 다음을 이용합니다.
    control.GlobalConfig("max_process_count=2");
| 개별 도구의 프로세싱 시간은 늘어납니다.
C++(언매니지드) | 언매니지드 언어 환경을 이용하면, 시스템 활동이 도구 실행에 미치는 영향이 줄어듭니다. | 대기 시간이 짧고, 고성능인 응용 프로그램에는 Cognex Designer를 이용하지 마십시오. | Windows는 실시간 운영 체제(RTOS)가 아닙니다.