7.6. predict의 해부¶
Model.predict(inputs, *, callback=None) 은 로드된 모델 객체가 실제로 작업을 수행하는 곳입니다. 입력이 들어가고 결과가 나오는 사이에 세 단계가 순서대로 실행됩니다: 전처리, 엔진 디스패치, 후처리. 셋 중 둘은 스크립트가 직접 제어하는 매개변수를 받고, 가운데의 엔진은 카메라가 결정합니다.
predict() 의 세 단계입니다. 전처리와 후처리는 스크립트가 제어하는 매개변수를 받고, 가운데의 엔진은 카메라에 의해 고정됩니다.¶
7.6.1. 전처리¶
전처리 단계는 각 입력을 신경망이 기대하는 조밀한 텐서로 변환합니다. 가장 흔한 입력은 RGB565로 캡처된 image.Image 입니다. 이 단계는 입력을 신경망의 input_shape 에 맞춰 크롭하고 리사이즈하며, RGB565에서 신경망이 학습된 채널 형식(대부분의 비전 신경망의 경우 RGB888)으로 변환하고, 채널별 스케일과 오프셋을 적용하며, 신경망이 정수 입력을 기대하는 경우 같은 패스에서 모델의 input_dtype 으로 양자화합니다. 부동소수점 입력으로 학습된 신경망은 양자화 단계를 건너뛰고 스케일과 오프셋 결과를 직접 받습니다.
기본 ml.preprocessing.Normalization 은 모델의 입력 dtype을 읽고 올바른 변환을 자동으로 실행합니다. 직접 조정한 Normalization 은 커스텀 채널 통계로 학습된 모델(ImageNet에서 유래한 평균과 표준편차가 흔한 사례)을 위해 스케일, 평균, 표준편차 값을 재정의합니다. 단순한 호출 가능 객체는 이 단계를 통째로 재정의합니다 – 입력이 애초에 이미지가 아니거나 애플리케이션이 이미 조밀한 텐서를 직접 만들어 둔 경우에 유용합니다.
7.6.2. 엔진 디스패치¶
엔진 단계는 신경망을 실행합니다. 어느 엔진으로 디스패치하는지는 카메라에 의해 고정됩니다: H7과 RT1062는 TFLM (TensorFlow Lite for Microcontrollers 인터프리터로, 존재하는 곳에서는 ARM 최적화된 CMSIS-NN 커널로 디스패치)을 실행하고, AE3은 동일한 TFLM 인터프리터를 Cortex-M55 폴백과 함께 실행하면서 오프라인 Vela 컴파일러가 가속기용으로 태그한 연산자는 Ethos-U NPU가 처리하며, N6은 N6의 전용 NPU를 위한 ST의 런타임인 STAI 를 실행합니다.
스크립트는 엔진을 고르지 않습니다. 카메라와 함께 출하되는 엔진이 카메라가 로드하는 모든 모델을 실행합니다.
7.6.3. 후처리¶
후처리 단계는 신경망의 원시 출력 텐서를 다시 사용 가능한 결과로 변환합니다. 기본 동작은 각 출력 텐서를 부동소수점으로 역양자화하고(부동소수점 출력을 가진 신경망의 경우 변경 없이 통과시킴) 이를 ndarray 객체의 리스트로 반환하는 것입니다. 대부분의 애플리케이션은 후처리기 – 신경망의 출력 레이아웃을 아는 호출 가능 객체 – 를 등록하여 텐서를 애플리케이션이 동작의 근거로 삼는 결과 형태(경계 상자 리스트, 키포인트 리스트, 클래스 리스트)로 디코딩합니다.
스크립트는 이 단계를 두 가지 방식으로 제어합니다. 생성자의 postprocess= 키워드는 모든 호출에서 실행되는 후처리기를 등록합니다. predict() 의 callback= 키워드는 단 한 번의 호출에 대해서만 등록된 후처리기를 재정의합니다 – 모델을 다시 로드하지 않고 여러 디코더 사이를 전환할 때 유용합니다. 어느 형식이든 (model, inputs, outputs) 을 받아 애플리케이션이 기대하는 무엇이든 반환합니다.
7.6.4. 스크립트가 제어하는 것¶
전처리와 후처리는 스크립트의 두 가지 손잡이입니다. 기본 전처리기는 대부분의 비전 모델을 처리하며, 주어진 신경망 계열에 맞는 후처리기는 ml.postprocessing 아래의 카탈로그에서 선택됩니다. 가운데의 엔진은 빌드에 의해 결정되며 스크립트가 무엇을 요청하든 동일한 방식으로 실행됩니다.