Amazon Rekognition
Amazon Rekognition을 사용하면 머신러닝 전문 지식이 없어도 API 호출 방식으로 쉽게 사용할 수 있으며, 확장성이 뛰어난 검증된 딥러닝 기술을 사용하여 애플리케이션에 이미지 및 비디오 분석을 쉽게 추가할 수 있습니다. 또한 이미지 및 비디오에서 개체, 사람, 텍스트, 장면 및 작업을 식별할 수 있을 뿐 아니라 부적절한 콘텐츠를 탐지할 수 있습니다.
1. 분류
1. 이미지 분석
- 사물, 장면, 액티비티(활동적 장면)
- 폭력, 성적인 장면
- 텍스트
- 유명인사 얼굴 인식
- 얼굴 탐지 및 분석
- 저장한 얼굴 데이터베이스에서 얼굴을 검색하는 기능
2. 비디오 분석
- 동영상에서의 색상 막대, 블랙 프레임, 엔딩 크레딧 등의 세그먼트를 감지하는 기능
- 비디오 속 인물의 경로 트래킹 기능
2. Amazon Rekognition 사용법
1. detecLabels : 이미지에서 사물을 식별하는 API
→ API를 호출할 때 이미지를 같이 Rekognition에 보내면 Response는 Return을 응답한다. 이때 식별된 사물의 명칭(Name), Confidence(신뢰성), BoundingBox(사물의 위치 정보)를 확인할 수 있습니다. 이렇게 응답된 정보중 필요한 정보는 꺼내서 활용하면 됩니다.
만약 일반적인 비전이 아닌 사용자 개인에 맞는 컴퓨터 비전을 설정하여 사용하려고 하면 어떻게 해야 할까?
방법은 크게 세 가지 정도로 분류할 수 있습니다.
1) 직접 모델을 만드는 방법
Amazon SageMaker라는 AWS의 머신러닝 엔드 투 엔드 서비스를 활용하면 AWS 환경에서 학습 데이터 준비, 학습, 하이퍼파라미터 튜닝, 운영환경 배포까지 할 수 있다. 머신러닝의 시간과 비용이 많이 든다는 단점이 있습니다.
2) 파트너사가 만들어 놓은 컴퓨터 비전 모델 사용하는 방법
AWS Marketplace : AWS 파트너가 미리 만든 컴퓨터 비전 모델 구독하여 컴퓨터 비전 모델을 활용할 수 있습니다. 다만 사용자에 맞게 딱 맞는 모델을 찾기는 어려울 수 있습니다.
3) Amazon Rekognition Custom Labels
기계 학습 경험이 없어도 나만의 컴퓨터 비전 모델을 만들 수 있는 Rekognition의 특화 기능.
① Custom Labels
- 이미지 레이블과 바운딩 박스를 추가할 수 있는 UI 제공
- 머신러닝 학습 데이터를 쉽고 정확하게 레이블링 할 수 있는 SageMaker Groud Truth에서 만든 레이블링 결과를 활용 가능
② 학습시
AutoML에서는 여러 알고리즘과 하이퍼파라미터 조합을 사용하여 여러 모델을 동시에 학습한 후 최적의 예측 성능을 갖는 모델을 선택합니다. 이때 학습은 전체 모델을 처음부터 끝까지 학습하는 방식이 아니라 Pre-Trained 된 모델을 베이스로 일부 파라미터를 Fine-Tuning 하는 Transfer-Learning 기법을 사용하기 때문에 상대적으로 적은 이미지로 높은 예측 성능을 기대할 수 있습니다.
③ 배포
학습이 끝난 모델의 배포는 원클릭으로 가능하며, 모델 성능을 개선하기 위한 피드백 프로세스도 어렵지 않게 구현할 수 있습니다.
a. 어떤 레이블을 식별해야 하는지 결정
b. 학습 데이터를 준비하고 레이블링 한 다음 모델 학습
c. 학습된 모델의 성능 평가(한 번에 사용자가 원하는 높은 예측 성능을 갖는 모델을 만들기는 어렵다)
d. 모델이 사용자가 원하는 수준의 성능을 지닌 경우 학습한 모델을 배포
e. 학습 커스텀 모델 사용 방법은 Rekognition을 사용하는 방식과 동일 → DetectCustomLabels라는 API를 사용
f. 모델 성능을 모니터링하고 모델을 재학습하는 피드백 루프 생성
g. 사용자만의 머신러닝 파이프라인 완성(Rekognition Custom Label Proccess 그림 참조)
3. 특정 사물 디텍션 하는 컴퓨터 비전 모델 만드는 방법(Rekognition Custom Labels)
1. 이미지 수집 시 권장사항(이미지의 다양성) : 다양한 환경에서 찍은 이미지를 학습 데이터로 활용해야 학습된 모델이 오버 피팅되지 않고 일방성을 가지게 됩니다.
- 다양한 조명, 배경, 해상도
- 충분히 큰 해상도
- 배경과 충분한 대비가 있는 이미지
- 밝고 선명한 이미지
- 개체가 이미지의 많은 부분을 차지하는 이미지
- 레이블 당 최소 10개의 이미지
2. Data Augmentation(수집 이미지 수가 적을 때 사용하는 기법)
- 데이터 준비 후 레이블링 실행
- 기준은 이미지를 보고 객체를 식별할 수 있는 경우를 기준으로 실행(image classification) → ex) 해 질 녘의 노을 사진
- 만약 하나의 이미지에 식별하고자 하는 두 개 이상의 사물이 있을 때, 이를 각각 식별하는 모델을 만들기 위해서는 이미지 레벨 레이블링이 아닌 바운딩 박스를 치는 레이블링을 해야 하고, 이렇게 설정된 레이블링은 object detection에서 사용됩니다(아래 그림 참조)
- 레이블링을 선택하고 바운딩 박스를 치고 저장 버튼을 누르면 레이블링 결과가 저장.
- 이미지를 S3에 저장
- Custom Labels에서는 학습 데이터를 만들 때 S3에 저장된 이미지의 경로를 읽어서 input manifest파일 생성 이때 input manifest에는 S3의 경로가 들어가 있습니다. 이때 저장된 이미지가 100장이라면 이 경로가 100개가 됩니다. → "source-ref" : "s3경로"
- 레이블러(사용자)가 Custom Labels UI에서 레이블을 지정하고 바운딩 박스를 치고 저장을 하면 input manifest파일의 S3경로에 레이블링 된 결과가 추가되고, 별도의 output manifest라는 파일이 만들어집니다.
- Annotations 항목을 보면 레이블과 바운딩 박스 정보가 있는데 이는 반드시 S3에 이미지를 업로드하는 방식만 있는 것이 아니라 Local PC에 있는 이미지를 Custom Labels에 직접 업로드해서 레이블링을 할 수도 있고, Amazon SageMaker Ground Truth에서 미리 만든 레이블링 결과를 가져와서 학습 데이터로 활용할 수 있습니다.
- Amazon SageMaker의 Ground Truth : 중요한 레이블링 작업을 빠르고 정확하게 할 수 있도록 제공하는 서비스
- 높은 레이블링 품질을 위해 동일 이미지를 여러 레이블러가 레이블링 하게 하고 각각의 레이블링 결과를 병합하여 최상의 레이블링 결과를 학습 데이터에 반영하는 과정을 구현할 수 있습니다.
- 레이블링 인력도 Amazon SageMaker의 Ground Truth 콘솔에서 Public, Private과 같은 인력을 소싱할 수 있고, 이미지나 언어 등에 특화된 전문 파트너사 인력을 레이블링에 활용할 수도 있습니다.
- 수 만, 수 십만, 수 백 만장 또는 그 이상의 학습 데이터 레이블링을 할 경우에는 사람이 아닌 기계가 레이블링을 하게 할 수 있습니다. 이때 Active Learning이라는 머신러닝 기법이 사용된다(Amazon SageMaker - Ground Truth 그림 참조)
- 레이블링 준비가 끝나면 Custom Labels에서 학습을 시작할 준비가 완료.
- Custom Labels에서 트레이닝을 시작하는 화면(Custom Labels - Training 그림 참조)
- 학습 데이터 세트, 테스트 세트 분할(AWS Rekognition 동영상 참고)
2. 얼굴 비교와 얼굴 인식 (Face Comparison & Face Rekognition)
1. 얼굴 비교
Amazon Rekognition API
애플리케이션에서 등록돼 있는 사진과 카메라를 통해서 들어오는 사진에 대해 Similarity score를 통해 동인 인물인지 확인할 수 있다.
2. 얼굴 인식
얼굴을 가지고 일종의 저장소(Collection)를 만든 뒤 만들어진 저장소 내에서 새로운 사진을 가지고 와서 해당 얼굴과 매칭이 되는 사람이 존재하는지 검색해 주는 API.
Amazon Rekognition API의 종류
1. Collection에 얼굴을 등록하는 API : Index
2. Collection에서 얼굴을 검색하는 API : Search
이미지 하나를 입력으로 주고 해당 입력 이미지를 어느 컬렉션에 넣을 건지 두 가지만 설정하면 됩니다. 이때 컬렉션에는 사진 정보가 저장되는 것이 아니라 사진의 얼굴에서 추출한 벡터 값 메타데이터만 저장됩니다. 그리고 기존 컬렉션에 이미지 메타데이터가 저장되어 있으면 새로운 메타데이터를 추가로 저장할 경우 기존 데이터에 새로운 데이터가 덮어씌워지거나 삭제되는 것이 아니라 기존 컬렉션에 추가가 되는 형태로 저장됩니다.
아래 사진은 사람 세 명을 컬렉션에 등록하려고 할 때 어떻게 저장되는지 보여주는 사진입니다. 세 명 각각의 얼굴 정보를 벡터 값 메타데이터로 컬렉션에 저장합니다.
컬렉션에 이미지를 저장하고 활용할 경우에는 다음과 같습니다. 컬렉션 하나를 지정하여 이미지를 컬렉션에 주면 그 이미지를 기존 컬렉션과 비교하여 컬렉션 내에 동일한 얼굴이 존재하는지 확인하여 얼굴 정보가 일치하는 데이터를 리턴하게 된다.
a. 등록과정
① Reference Architecture - 얼굴 등록
카메라로부터 영상 스트림이 오는 것을 프레임 단위로 잘라서 애플리케이션에 이미지로 S3로 등록
보관한 이미지를 컬렉션에(face collection) 넣어주는 형태로 컬렉션에 들어간 뒤 face_id를 리턴 받아 람다가 돌려받은 뒤 S3에 저장된 이미지와 이미지의 URL을 매핑시키기 위해 해당 데이터를 DynamoDB와 같은 애플리케이션 테이블에 저장하게 됩니다.
어플리케이션 테이블에 저장된 데이터를 Photo App에서 새로운 이미지를 제시할 경우 해당 요청 이미지를 Rekognition을 통해 컬렉션으로 전달되어 컬렉션 내에 동일한 face_id가 있으면 해당 face_id를 리턴 받고, 리턴 받은 것을 테이블에 조회하여 face_id를 가지고 있는 이미지의 URL를 리턴 받는 구성으로 이루어진다.
Amazon Rekognition으로 개발하기
Rekognition은 현재 거의 모든 SDK의 플랫폼을 제공하고 있다. CLI로도 이용할 수 있다. 이를 통해 애플리케이션을 만들면 되는데 몇 가지 주의 사항이 있다.
1. 인터페이스 활용 시 주의사항(필수사항)
- S3 Input 최대 이미지 사이즈 : 15MB
- non-s3(Base64 encoded) API 호출 : 5MB 제한
- 최소 이미지 해상도 : 80 pixel(가로 혹은 세로)
- PNG, JPG 포맷 지원
- 단일 컬렉션의 최대 얼굴 개수 : 백만 개
- Search API에 의한 결과(일치한 얼굴) : 최대 4096개까지 반환
- 얼굴은 원활한 감지를 위해 이미지의 5% 이상을 차지해야 한다
2. Input Source 최적화 : 입력 이미지 및 요청을 최적화하여 성능 향상(성능 개선 위한 옵션 사항)
1) 이미지
- 이미지 향상, 추출 및 안정화
- 흐린 이미지를 선명하게 조정 : Upsharp mask, deconvolution
- e.g. ImageMagick, OpenCV, sckit-image
2) 비디오
- 비디오 안정화(떨림 방지)
- 장면 변화 감지 vs 프레임 추출
- e.g. FFMPEG w/deshake, vidstab, OpenCV
3. 저장소(Collection) 활용
분석을 위해 제출된 이미지는 저장하지 않고, 제출한 이미지 속 인물의 얼굴의 메타데이터만 저장한다. (이미지 자체가 저장되는 것이 아니다) 그렇기 때문에 프라이버시에 대한 이슈가 없다.
이러한 컬렉션은 이벤트의 종류에 따라 다양하게 활용할 수 있다. 예를 들면 행사 속 방명록을 만든다고 하면 참석자의 컬렉션을 만들어서 거기에 모든 사람의 얼굴을 넣으면 된다.
AI 다른 서비스, 딥러닝 기술들을 활용하여 향상된 기술을 만들거나, 다른 솔루션들을 이용해 활용할 수 있다.
거의 대부분 Rekognition API 하나만으로는 기능을 만들기가 어렵기 때문에 여러 가지의 API와 Third Party AI API, Open Source 이미지 전처리 기술 등 다른 기술들을 함께 활용해야 한다. 이러한 부분을 순차적으로 진행하기 위해서는 Step Function을 이용해 어떠한 이미지 처리 프로세스를 순차적으로 일어날 수 있도록 할 수 있다.
람다 step function 호출 - 기본적 이미지 전처리 - rekognition 호출 - 썸네일 생성 - 데이터베이스에 저장
이러한 과정을 순차적으로 이루어지도록 Step Function을 활용한다.
4. Rekognition APIs 고급 활용 - 유명인사 근처에 있는 용의자 찾기
여러 사람의 모습이 담겨 있는 사진에서 한 명의 용의자만을 찾는 기능을 만들기 위해서는 다음과 같은 과정을 거친다.
첫 줄을 보면 create-collection이 있는데 이 중 persons-of-interest라는 용의자 컬렉션을 하나 만든 뒤, 다량의 용의자 데이터들을 index-faces라는 커맨드를 입력하여 용의자라는 컬렉션에 계속하여 학습을 시킨다.
이렇게 생성된 용의자 컬렉션을 호출하기 전에 다른 유명인사가 있는지부터 확인하는 API를 실행하고, 유명인사가 나온 이미지에 대해서 용의자가 존재하는지 알기 위한 API를 실행한다.
'AWS > Basic' 카테고리의 다른 글
ssh 세팅 : Power Shell로 접속하기 (0) | 2021.07.08 |
---|---|
클라우드(Cloud) (0) | 2021.04.08 |
댓글