

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자습서: TensorFlow Lite를 사용하여 샘플 이미지 분류 추론 수행
<a name="ml-tutorial-image-classification"></a>

이 자습서에서는 [TensorFlow Lite 이미지 분류](tensorflow-lite-image-classification-component.md) 추론 구성 요소를 사용하여 Greengrass 코어 디바이스에서 샘플 이미지 분류 추론을 수행하는 방법을 보여줍니다. 이 구성 요소에는 다음 구성 요소 종속성이 포함됩니다.
+ TensorFlow Lite 이미지 분류 모델 저장소 구성 요소
+ TensorFlow Lite 런타임 구성 요소

이 구성 요소를 배포하면 사전 훈련된 MobileNet v1 모델이 다운로드되고 [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) 런타임과 그 종속성이 설치됩니다. 이 구성 요소는 `ml/tflite/image-classification` 주제에 대한 추론 결과를 게시합니다. 이러한 추론 결과를 보려면 AWS IoT 콘솔의 AWS IoT MQTT 클라이언트를 사용하여이 주제를 구독합니다.

이 자습서에서는 샘플 추론 구성 요소를 배포하여 AWS IoT Greengrass에서 제공하는 샘플 이미지에 대한 이미지 분류를 수행합니다. 이 자습서를 완료하면 Greengrass 코어 디바이스에서 로컬로 실행되는 카메라의 이미지에 대한 이미지 분류를 수행하도록 샘플 추론 구성 요소를 수정하는 방법을 보여주는 [자습서: TensorFlow Lite를 사용하여 카메라의 이미지에 대한 샘플 이미지 분류 추론 수행](ml-tutorial-image-classification-camera.md)을 완료할 수 있습니다.

Greengrass 디바이스의 기계 학습에 대한 자세한 내용은 [기계 학습 추론 수행](perform-machine-learning-inference.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#ml-tutorial-prereqs)
+ [1단계: 기본 알림 주제 구독](#ml-image-classification-subscribe)
+ [2단계: TensorFlow Lite 이미지 분류 구성 요소 배포](#ml-image-classification-deploy)
+ [3단계: 추론 결과 보기](#ml-image-classification-results)
+ [다음 단계](#ml-image-classification-next-steps)

## 사전 조건
<a name="ml-tutorial-prereqs"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ Linux Greengrass 코어 디바이스. 없으면 [자습서: AWS IoT Greengrass V2 시작하기](getting-started.md) 섹션을 참조하세요. 코어 디바이스는 다음과 같은 요구 사항을 충족해야 합니다.<a name="ml-component-requirements"></a>
  + Amazon Linux 2 또는 Ubuntu 18.04를 실행 중인 Greengrass 코어 디바이스의 경우 [GNU C 라이브러리](https://www.gnu.org/software/libc/)(glibc) 버전 2.27 이상이 디바이스에 설치되어 있어야 합니다.
  + Raspberry Pi와 같은 Armv7l 디바이스에는 디바이스에 OpenCV-Python에 대한 종속성이 설치되어 있어야 합니다. 다음 명령을 실행하여 종속성을 설치합니다.

    ```
    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    ```
  + Raspberry Pi OS Bullseye를 실행하는 Raspberry Pi 디바이스는 다음과 같은 요구 사항을 충족해야 합니다.
    + 디바이스에 NumPy 1.22.4 이상이 설치되어 있어야 합니다. Raspberry Pi OS Bullseye에는 이전 버전의 NumPy가 포함되어 있으므로 다음 명령을 실행하여 디바이스에서 NumPy를 업그레이드할 수 있습니다.

      ```
      pip3 install --upgrade numpy
      ```
    + 디바이스에서 레거시 카메라 스택이 활성화되어 있어야 합니다. Raspberry Pi OS Bullseye에는 기본적으로 활성화되어 있지만 호환되지 않는 새 카메라 스택이 포함되어 있으므로 레거시 카메라 스택을 활성화해야 합니다.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**레거시 카메라 스택을 활성화하려면**

      1. 다음 명령을 실행하여 Raspberry Pi 구성 도구를 엽니다.

         ```
         sudo raspi-config
         ```

      1. **인터페이스 옵션**을 선택합니다.

      1. **레거시 카메라**를 선택하여 레거시 카메라 스택을 활성화합니다.

      1. Raspberry Pi를 재부팅합니다.

## 1단계: 기본 알림 주제 구독
<a name="ml-image-classification-subscribe"></a>

이 단계에서는 TensorFlow Lite 이미지 분류 구성 요소에서 게시한 AWS IoT MQTT 메시지를 볼 수 있도록 AWS IoT 콘솔에서 MQTT 클라이언트를 구성합니다. 기본적으로 구성 요소는 `ml/tflite/image-classification` 주제에 대한 추론 결과를 게시합니다. 구성 요소가 처음 실행될 때 추론 결과를 확인하려면 Greengrass 코어 디바이스에 구성 요소를 배포하기 전에 이 주제를 구독합니다.



**기본 알림 주제를 구독하려면**

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/) 탐색 메뉴에서 **테스트, MQTT 테스트 클라이언트**를 선택합니다.

1. **주제 구독**의 **주제 이름** 상자에 **ml/tflite/image-classification**을 입력합니다.

1. **구독**을 선택합니다.

## 2단계: TensorFlow Lite 이미지 분류 구성 요소 배포
<a name="ml-image-classification-deploy"></a>

이 단계에서는 코어 디바이스에 TensorFlow Lite 이미지 분류 구성 요소를 배포합니다.

### TensorFlow Lite 이미지 분류 구성 요소를 배포하려면(콘솔)
<a name="ml-image-classification-deploy-console"></a>

1. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass) 탐색 메뉴에서 **구성 요소**를 선택합니다.

1. **구성 요소** 페이지의 **퍼블릭 구성 요소** 탭에서 `aws.greengrass.TensorFlowLiteImageClassification`을(를) 선택합니다.

1. **aws.greengrass.TensorFlowLiteImageClassification** 페이지에서 **배포**를 선택합니다.

1. <a name="add-deployment"></a>**배포에 추가**에서 다음 중 하나를 선택합니다.

   1. 이 구성 요소를 대상 디바이스의 기존 배포에 병합하려면 **기존 배포에 추가**를 선택한 다음 수정하려는 배포를 선택합니다.

   1. 대상 디바이스에서 새 배포를 생성하려면 **새 배포 생성**을 선택합니다. 디바이스에 기존 배포가 있는 경우 이 단계를 선택하면 기존 배포가 대체됩니다.

1. <a name="specify-deployment-target"></a>**대상 지정** 페이지에서 다음 작업을 수행합니다.

   1. **배포 정보** 아래에서 친숙한 배포 이름을 입력하거나 수정합니다.

   1. **배포 대상** 아래에서 배포 대상을 선택하고 **다음**을 선택합니다. 기존 배포 수정 시 배포 대상을 변경할 수 없습니다.

1. **구성 요소 선택** 페이지의 **퍼블릭 구성 요소**에서 `aws.greengrass.TensorFlowLiteImageClassification` 구성 요소가 선택되었는지 확인하고 **다음**을 선택합니다.

1. **구성 요소 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **고급 설정 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **검토** 페이지에서 **배포**를 선택합니다.

### TensorFlow Lite 이미지 분류 구성 요소를 배포하려면(AWS CLI)
<a name="ml-image-classification-deploy-cli"></a>

1. `deployment.json` 파일을 생성하여 TensorFlow Lite 이미지 분류 구성 요소의 배포 구성을 정의합니다. 이 파일은 다음과 같습니다.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.TensorFlowLiteImageClassification": {
         "componentVersion": 2.1.0,
         "configurationUpdate": {
         }
       }
     }
   }
   ```
   + `targetArn` 필드에서 `targetArn`을 다음 형식으로 배포 대상으로 지정할 사물 또는 사물 그룹의 Amazon 리소스 이름(ARN)으로 바꿉니다.
     + 사물: `arn:aws:iot:region:account-id:thing/thingName`
     + 사물 그룹: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + 이 자습서는 구성 요소 버전 2.1.0을 사용합니다. `aws.greengrass.TensorFlowLiteObjectDetection` 구성 요소 객체에서 *2.1.0*을 바꾸면 다른 버전의 TensorFlow Lite 객체 감지 구성 요소를 사용할 수 있습니다.

1. 다음 명령을 실행하여 TensorFlow Lite 이미지 분류 구성 요소를 디바이스에 배포합니다.

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 단계에서는 구성 요소 로그를 확인하여 배포가 정상적으로 완료되었는지 확인하고 추론 결과를 확인합니다.

## 3단계: 추론 결과 보기
<a name="ml-image-classification-results"></a>

구성 요소를 배포한 후에는 Greengrass 코어 디바이스의 구성 요소 로그와 AWS IoT 콘솔의 AWS IoT MQTT 클라이언트에서 추론 결과를 볼 수 있습니다. 구성 요소에서 추론 결과를 게시하는 주제를 구독하려면 [1단계: 기본 알림 주제 구독](#ml-image-classification-subscribe) 섹션을 참조하세요.
+ **AWS IoT MQTT 클라이언트** - 추론 구성 요소가 [기본 알림 주제에](#ml-image-classification-subscribe) 게시하는 결과를 보려면 다음 단계를 완료합니다.

  1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/) 탐색 메뉴에서 **테스트, MQTT 테스트 클라이언트**를 선택합니다.

  1. **구독**에서 **ml/tflite/image-classification**을 선택합니다.

     다음 예제와 비슷한 메시지가 표시되어야 합니다.

     ```
     {
       "timestamp": "2021-01-01 00:00:00.000000",
       "inference-type": "image-classification",
       "inference-description": "Top 5 predictions with score 0.3 or above ",
       "inference-results": [
         {
           "Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "Persian cat",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "tiger cat",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "dalmatian, coach dog, carriage dog",
           "Score": "0.5607843137254902"
         },
         {
           "Label": "malamute, malemute, Alaskan malamute",
           "Score": "0.5450980392156862"
         }
       ]
     }
     ```
+ **구성 요소 로그** - 구성 요소 로그에서 추론 결과를 보려면 Greengrass 코어 디바이스에서 다음 명령을 실행합니다.

  ```
  sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log
  ```

  다음 예제와 비슷한 결과가 나타나야 합니다.

  ```
  2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. Publishing results to the IoT core.... {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}
          
  2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. {"timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [{"Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471"}, {"Label": "Persian cat", "Score": "0.5882352941176471"}, {"Label": "tiger cat", "Score": "0.5882352941176471"}, {"Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902"}, {"Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862"}]}. {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}
  ```

구성 요소 로그 또는 MQTT 클라이언트에서 추론 결과를 볼 수 없는 경우 배포가 실패했거나 코어 디바이스에 연결하지 못한 것입니다. 이는 코어 디바이스가 인터넷에 연결되어 있지 않거나 구성 요소를 실행하는 데 적절한 권한이 없는 경우 발생할 수 있습니다. 코어 디바이스에서 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어 로그 파일을 확인합니다. 이 파일에는 Greengrass 코어 디바이스의 배포 서비스의 로그가 포함됩니다.

```
sudo tail -f /greengrass/v2/logs/greengrass.log
```

자세한 내용은 [기계 학습 추론 문제 해결](ml-troubleshooting.md) 단원을 참조하십시오.

## 다음 단계
<a name="ml-image-classification-next-steps"></a>

지원되는 카메라 인터페이스가 포함된 Greengrass 코어 디바이스가 있는 경우 로컬로 실행되는 카메라의 이미지에 대한 이미지 분류를 수행하도록 샘플 추론 구성 요소를 수정하는 방법을 보여주는 [자습서: TensorFlow Lite를 사용하여 카메라의 이미지에 대한 샘플 이미지 분류 추론 수행](ml-tutorial-image-classification-camera.md)을 완료할 수 있습니다.

샘플 [TensorFlow Lite 이미지 분류](tensorflow-lite-image-classification-component.md) 추론 구성 요소의 구성을 자세히 알아보려면 다음을 시도하세요.
+ `InferenceInterval` 구성 파라미터를 수정하여 추론 코드가 실행되는 빈도를 변경합니다.
+ 추론 구성 요소 구성에서 `ImageName` 및 `ImageDirectory` 구성 파라미터를 수정하여 추론에 사용할 사용자 지정 이미지를 지정합니다.

퍼블릭 구성 요소의 구성을 사용자 지정하거나 사용자 지정 기계 학습 구성 요소를 생성하는 방법에 대한 자세한 내용은 [기계 학습 구성 요소 사용자 지정](ml-customization.md) 섹션을 참조하세요.