Amazon Web Services 한국 블로그

AWS Panorama Appliance 정식 출시 – 엣지 기반 컴퓨터 비전 탐지 디바이스

오늘 AWS Panorama Appliance가 공식 출시됩니다. AWS Panorama Appliance는 네트워크에 배포해 온프레미스 카메라에서 제공하는 이미지를 분석하도록 설계된 컴퓨터 비전(CV) 어플라이언스입니다.

AWS Panorama Appliance

저는 매주 컴퓨터 비전의 새롭고 혁신적인 사용 사례에 대한 글을 읽습니다. 몇 가지만 예를 들면, CV를 사용해 팔레트 트럭이 지정된 구역에 주차되어 있는지 확인해 창고에서의 작업자 안전을 담보하기도 하고, 공간과 제품 배치를 최적화하기 위해 소매점에서 고객의 보행 흐름을 분석하는 데 사용하기도 하며, 일부는 고양이와 생쥐를 인식하는 데 사용하기도 합니다.

AWS 고객은 스토리지와 컴퓨팅 리소스에 대한 무한한 접근성 때문에 클라우드가 컴퓨터 비전 모델을 교육하기에 가장 편리한 장소라는 데 동의합니다. 클라우드에서 데이터 과학자는 Amazon SageMaker와 같은 강력한 도구와 다양한 컴퓨팅 리소스프레임워크에 액세스할 수 있습니다.

그러나 클라우드는 하나 또는 여러 개의 비디오 피드에서 이미지를 분석해야 하는 상황에서는 그러한 워크로드를 실행할 만한 곳은 못 된다고 많은 사람들이 말합니다. 그 이유는 여러 가지가 있습니다. 때로는 이미지가 캡처되는 시설에 비디오 피드를 클라우드로 보낼 만한 충분한 대역폭이 없다거나, 일부 사용 사례에서는 매우 짧은 대기 시간을 필요로 한다든가, 아니면 어떤 경우는 네트워크 외부에서의 분석을 위해 이미지를 전송하지 않고 온프레미스에 보관하고자 하는 경우가 있을 수 있습니다.

지난 re:Invent 2020에서 당사는 이러한 요구 사항을 해결하기 위해 AWS Panorama Appliance 및 SDK를 발표했습니다.

AWS Panorama는 기계 학습 어플라이언스 및 소프트웨어 개발 키트(SDK)로, 컴퓨터 비전을 온프레미스 카메라로 가져와 높은 정확도와 짧은 대기 시간으로 로컬에서 예측을 수행할 수 있도록 해줍니다. AWS Panorama Appliance를 사용하면 이전에는 사람의 검사가 필요했던 작업을 자동화하여 잠재적인 문제를 미리 파악할 수 있습니다. 예를 들어, AWS Panorama Appliance를 사용하여 제조 품질을 평가하고, 산업 프로세스의 병목 현상을 식별하고, 인터넷 연결이 제한적이거나 없는 환경에서도 직장 내 보안을 모니터링할 수 있습니다. 소프트웨어 개발 키트를 통해 카메라 제조업체는 동일한 기능을 IP 카메라 내부에 곧바로 적용할 수 있습니다.

이 블로그에서 늘 그렇듯이 AWS Panorama Appliance용 컴퓨터 비전 애플리케이션의 개발 및 배포에 대해 설명하고자 합니다. 이 블로그의 데모 애플리케이션은 머신 러닝 모델을 사용하여 네트워크 카메라의 비디오 프레임에 있는 객체를 인식합니다. 애플리케이션은 모델을 AWS Panorama Appliance로 로드하고 카메라에서 이미지를 가져온 다음 모델을 통해 해당 이미지를 실행합니다. 그런 다음 애플리케이션은 결과를 원본 비디오 위에 오버레이하고 연결된 디스플레이로 출력합니다. 애플리케이션은 AWS Panorama가 제공하는 라이브러리를 사용해 입력과 출력 비디오 스트림 및 모델과 상호 작용하므로 낮은 수준의 프로그래밍이 필요하지 않습니다.

먼저 몇 가지 개념을 정의해 보겠습니다. AWS Panorama 설명서 페이지에서 다음 정의를 차용했습니다.

기본 개념
AWS Panorama Appliance는 애플리케이션을 실행하는 하드웨어입니다. AWS Panorama 콘솔 또는 AWS SDK를 사용해 어플라이언스를 등록하고, 해당 소프트웨어를 업데이트하고, 애플리케이션을 배포할 수 있습니다. 어플라이언스에서 실행되는 소프트웨어는 카메라 스트림을 검색하여 연결하고, 비디오 프레임을 애플리케이션으로 전송하며, 연결된 디스플레이에 비디오 출력을 선택적으로 표시합니다.

어플라이언스는 엣지 디바이스입니다. 처리를 위해 이미지를 AWS 클라우드로 전송하는 대신 최적화된 하드웨어에서 로컬로 애플리케이션을 실행합니다. 이를 통해 비디오를 실시간으로 분석하고 제한된 연결로도 결과를 처리할 수 있습니다. 장치의 상태를 보고하고, 로그를 업로드하고, 소프트웨어 업데이트 및 배포를 가져오기 위해 인터넷 연결만 있으면 됩니다.

애플리케이션은 카메라, 모델, 코드 또는 전역 변수를 나타내는 노드라는 여러 요소로 구성됩니다. 노드는 구성 전용(입력 및 출력)이거나 아티팩트(모델 및 코드)를 포함할 수 있습니다. 애플리케이션 노드는 AWS Panorama Appliance가 액세스할 수 있는 S3 액세스 포인트로 업로드하는 노드 패키지에 번들로 제공됩니다. 애플리케이션 매니페스트는 노드 간의 연결을 정의하는 구성 파일입니다.

컴퓨터 비전 모델은 이미지를 처리하도록 훈련된 기계 학습 네트워크입니다. 컴퓨터 비전 모델은 분류, 탐지, 세분화 및 추적과 같은 다양한 작업을 수행할 수 있습니다. 컴퓨터 비전 모델은 이미지를 입력으로 받아 이미지 또는 이미지의 여러 객체에 대한 정보를 출력합니다.

AWS Panorama는 Apache MXNet, DarkNet, GluonCV, Keras, ONNX, PyTorch, TensorFlowTensorFlow Lite로 구축된 모델을 지원합니다. Amazon SageMaker를 사용해 모델을 구축하고 Amazon Simple Storage Service(Amazon S3) 버킷에서 모델을 가져올 수 있습니다.

AWS Panorama 컨텍스트

개념을 파악했으므로 이제 직접 실행해 보겠습니다.

AWS Panorama Appliance 언박싱
서비스 팀이 보낸 상자에는 어플라이언스(예상한 일이었죠!), 전원 코드 및 두 개의 이더넷 케이블이 있었습니다. 이 상자에는 어플라이언스를 처음 구성할 수 있는 USB 키도 포함되어 있습니다. 이 장치는 산업 환경에서 작동하도록 설계되었습니다. 뒷면의 전원 커넥터 옆에 두 개의 이더넷 포트가 있습니다. 슬라이딩 도어 뒤쪽에 감춰진 앞면에는 SD 카드 리더기, HDMI 커넥터 각각 1 개와 USB 포트 2 개가 있었습니다. 장치를 공장 출하 상태로 다시 초기화하는 전원 버튼과 재설정 버튼도 있습니다.

AWS Panorama Appliance 앞면 AWS Panorama Appliance 뒷면 AWS Panorama USB 키

어플라이언스 구성
먼저 네트워크(케이블+DHCP이지만 고정 IP 구성도 지원)에 맞게 구성하고 AWS 계정에 안전하게 다시 연결하도록 등록했습니다. 이를 위해 AWS 관리 콘솔로 이동하여 네트워크 구성 세부 정보를 입력했습니다. 구성 파일 및 인증서 집합이 생성되었습니다. 제공된 USB 키를 사용해 이를 어플라이언스에 복사했습니다. 제 동료 Martin Beeby가 이 과정을 담은 스크린샷을 공유했습니다. 미리 보기에서 받은 피드백을 바탕으로 팀에서 화면을 약간 수정했지만, 다시 단계별 프로세스를 수행할 필요는 없다고 생각합니다. 현장 팁: 상자 안에 제공된 USB 키를 사용하십시오. 올바르게 포맷되어 어플라이언스에서 자동으로 인식됩니다(제 USB 키는 제대로 인식되지 않았습니다).

그런 다음 Panorama GitHub 리포지토리의 샘플 애플리케이션다운로드하고 이 GitHub에서도 사용할 수 있는 Panorama 테스트 유틸리티로 테스트했습니다(테스트 유틸리티는 시뮬레이터로 역할을 하도록 구성된 EC2 인스턴스입니다). Panorama 테스트 유틸리티는 Jupyter 노트북을 사용하여 어플라이언스에 배포하기 전에 샘플 애플리케이션 또는 코드를 빠르게 테스트합니다. 또한 애플리케이션을 프로그래밍 방식으로 어플라이언스에 배포할 수 있는 명령을 나열합니다.

Panorama 명령줄
Panorama 명령줄은 프로젝트를 생성하고, 자산을 가져오고, 패키징하고, AWS Panorama Appliance에 배포하는 작업을 간소화합니다. 다음 지침에 따라 Panorama 명령줄을 다운로드하고 설치할 수 있습니다.

샘플 애플리케이션과 같이 다른 사람이 개발한 애플리케이션을 받으면 모든 애플리케이션 파일과 디렉터리 이름에서 AWS 계정 ID를 바꿔야 합니다. 이 작업은 하나의 명령으로 수행합니다.

Panorama-cli 가져오기-애플리케이션

애플리케이션 구조
Panorama 애플리케이션 구조는 다음과 같습니다.

├── assets
├── graphs
│   └── example_project
│       └── graph.json
└── packages
    ├── accountXYZ-model-1.0
    │   ├── descriptor.json
    │   └── package.json
    └── accountXYZ-sample-app-1.0
        ├── Dockerfile
        ├── descriptor.json
        ├── package.json
        └── src
            └── app.py

  • graph.json은 이 애플리케이션의 모든 패키지와 노드를 나열합니다. 노드는 Panorama에서 애플리케이션을 정의하는 방법입니다.
  • 각 패키지의 package.json에는 패키지와 패키지가 사용하는 자산에 대한 세부 정보가 있습니다.
  • 모델 패키지 모델에는 모델 컴파일에 필요한 메타 데이터가 포함된 descriptor.json이 있습니다.
  • 컨테이너 패키지 sample-app 패키지에는src 디렉토리의 애플리케이션 코드와 컨테이너를 빌드하기 위한 Dockerfile이 포함되어 있습니다. descriptor.json에는 컨테이너가 시작될 때 사용할 명령과 파일에 대한 세부 정보가 있습니다.
  • assets 디렉토리는 패키지된 코드 및 컴파일된 모델과 같은 모든 자산이 상주하는 위치입니다. 이 디렉터리를 변경하면 안 됩니다.

패키지 이름 앞에는 계정 번호가 붙습니다.

애플리케이션이 준비되면 컨테이너를 빌드합니다(저는macOS 또는 Windows용 Docker Desktop의 사용을 피하기 위해 Docker EngineDocker CLI가 있는 Linux 시스템을 사용하고 있습니다).

$ panorama-cli build-container                               \
               --container-asset-name {container_asset_name} \ 
               --package-path packages/{account_id}-{package_name}-1.0 

카메라에 대한 참고 사항
AWS Panorama Appliance는 “추상 카메라”라는 개념을 가지고 있습니다. 추상 카메라 소스는 애플리케이션 배포 중에 실제 카메라 장치에 매핑할 수 있는 자리 표시자입니다. Panorama용 테스트 유틸리티를 사용하면 추상 카메라를 비디오 파일에 매핑하여 쉽고 반복 가능한 테스트를 수행할 수 있습니다.

기계 학습 모델 추가
AWS Panorama Appliance는 여러 기계 학습 모델 프레임워크를 지원합니다. 모델은 Amazon SageMaker 또는 사용자가 선택한 다른 솔루션에서 교육할 수 있습니다. S3에서 기계 학습 모델을 다운로드하여 프로젝트로 가져왔습니다.

panorama-cli add-raw-model                                                 \
    --model-asset-name {asset_name}                                        \
    --model-s3-uri s3://{S3_BUCKET}/{project_name}/{ML_MODEL_FNAME}.tar.gz \
    --descriptor-path {descriptor_path}                                    \
    --packages-path {package_path}

배후에서 기계 학습 모델이 AWS Panorama Appliance의 Nvidia Accelerated Linux Arm64 아키텍처에 최적화하도록 컴파일됩니다.

애플리케이션 패키징
이제 컨테이너에 패키징된 기계 학습 모델과 애플리케이션 코드가 있으므로 AWS Panorama Appliance용 애플리케이션 자산을 패키징할 준비가 되었습니다.

panorama-cli package-application

이 명령은 모든 매니페스트와 함께 모든 애플리케이션 자산을 AWS 클라우드 계정에 업로드합니다.

애플리케이션 배포
마지막으로 애플리케이션을 AWS Panorama Appliance에 배포합니다. 배포는 애플리케이션과 카메라 스트림 선택과 같은 해당 구성을 AWS 클라우드에서 내 온프레미스 AWS Panorama Appliance로 복사합니다. Python 코드(및 이미 알고 있을 수 있는 Boto3 SDK)를 사용해 프로그래밍 방식으로 애플리케이션을 배포할 수 있습니다.


client = boto3.client('panorama')
client.create_application_instance(
    Name="AWS News Blog Sample Application",
    Description="An object detection app",
    ManifestPayload={
       'PayloadData': manifest         # <== this is the graph.json file content 
    },
    RuntimeRoleArn=role,               # <== this is a role that gives my app permissions to use AWS Services such as Cloudwatch
    DefaultRuntimeContextDevice=device # <== this is my device name 
)

또는 AWS 관리 콘솔을 사용할 수도 있습니다.

배포된 애플리케이션에서 애플리케이션 배포를 선택합니다.

AWS Panorama - 배포 시작

graphs/<project name>/graph.json의 내용을 복사하여 콘솔에 붙여 넣고 다음을 선택합니다.

AWS Panorama - 그래프 JSON 복사

애플리케이션에 이름과 설명(선택 사항)을 부여합니다. 배포 진행을 선택합니다.

AWS Panoram 배포 - 애플리케이션 이름

그 다음 단계는 아래와 같습니다.

  • 내 애플리케이션에 AWS 서비스 사용 권한을 부여하는 IAM 역할을 선언합니다. 최소 권한 집합을 통해 CloudWatch에서 PuMetricData API를 호출할 수 있습니다.
  • 배포할 AWS Panorama Appliance를 선택합니다.
  • 애플리케이션descriptors.json에 정의된 추상 카메라를 AWS Panorama 어플라이언스에 의해 식별된 물리적 카메라에 매핑합니다.
  • 허용 가능한 임계값, 로그 수준 등과 같은 애플리케이션별 입력 내용을 입력합니다.

IAM 정책의 예는 다음과 같습니다.

AWSTemplateFormatVersion: '2010-09-09'
설명: AWS Panorama 애플리케이션을 위한 리소스.
Resources:
  runtimeRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - panorama.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: cloudwatch-putmetrics
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action: 'cloudwatch:PutMetricData'
                Resource: '*'
      Path: /service-role/

이 6개의 스크린샷은 이 프로세스를 캡처합니다.

AWS Panorama — 배포 2 AWS Panorama — 배포 1 AWS Panorama — 배포 3
AWS Panorama — 배포 4 AWS Panorama — 배포 5 AWS Panorama — 배포 5

배포는 코드의 크기와 기계 학습 모델, 어플라이언스 사용이 가능한 대역폭에 따라 15~30분이 소요됩니다. 마침내 상태가 녹색의 “실행 중”으로 바뀝니다.

AWS Panorama - 배포 완료

애플리케이션이 AWS Panorama Appliance에 배포되면 실행을 시작하여 비디오를 지속적으로 분석하고 밀리초 내에 로컬에서 매우 정확한 예측을 생성합니다. HDMI 케이블을 AWS Panorama Appliance에 연결하여 출력을 모니터링하면 다음을 확인할 수 있습니다.

AWS Panorama HDMI 출력

배포 중 또는 애플리케이션 수명 주기 동안 문제가 발생하면 Amazon CloudWatch의 로그에 액세스할 수 있습니다. 두 개의 로그 스트림이 생성되며, 하나는 AWS Panorama Appliance 자체용이고 다른 하나는 애플리케이션용입니다.

AWS Panorama Appliance 로그 AWS Panorama 애플리케이션 로그

요금 및 가용성
AWS Panorama ApplianceAWS 콘솔의 AWS Elemental 주문 페이지에서 구입할 수 있습니다. 미국, 캐나다, 영국 및 EU에서 주문할 수 있습니다. 어플라이언스 자체에 대해 4,000 USD의 일회성 요금이 부과됩니다.

월 8.33 USD/카메라 피드의 사용 요금이 있습니다.

AWS Panorama는 AWS Panorama Appliance(기계 학습 모델 및 비즈니스 로직 포함)에 배포된 모든 버전 지정 자산의 사본을 클라우드에 저장합니다. 이 스토리지에 대해 매월 GB당 0.10 USD가 청구됩니다.

AWS Panorama Appliance에 배포된 비즈니스 로직이 다른 AWS 서비스를 사용하는 경우 추가 요금이 발생할 수 있습니다. 예를 들어, 비즈니스 로직이 오프라인 분석을 위해 기계 학습 예측을 S3에 업로드하는 경우 발생한 모든 스토리지 요금에 대해 S3에서 별도로 청구합니다.

AWS Panorama Appliance는 어디서나 설치할 수 있습니다. 어플라이언스는 미국 동부(버지니아 북부), 미국 서부(오레곤), 캐나다(중부) 또는 EU(아일랜드) AWS 리전 중 하나에 있는 AWS 클라우드의 AWS Panorama 서비스에 다시 연결됩니다.

지금 바로 첫 번째 컴퓨터 비전 모델을 구축해 보십시오.

— seb