Amazon SageMaker 및 Amazon Rekognition을 사용하여 이미지에서 차량 위치를 감지하는 컴퓨터 비전 모델 구축 및 훈련 | 아마존 웹 서비스

Amazon SageMaker 및 Amazon Rekognition을 사용하여 이미지에서 차량 위치를 감지하는 컴퓨터 비전 모델 구축 및 훈련 | 아마존 웹 서비스

컴퓨터 비전(CV)은 머신 러닝(ML) 및 딥 러닝의 가장 일반적인 애플리케이션 중 하나입니다. 사용 사례는 자율 주행 자동차, 소셜 미디어 플랫폼의 콘텐츠 조정, 암 감지, 자동 결함 감지 등 다양합니다. 아마존 인식 객체 감지, 비디오 세그먼트 감지, 콘텐츠 조정 등과 같은 CV 작업을 수행하여 이전 ML 경험 없이도 데이터에서 인사이트를 추출할 수 있는 완전 관리형 서비스입니다. 경우에 따라 매우 특정한 문제를 해결하기 위해 서비스와 함께 더 많은 맞춤형 솔루션이 필요할 수 있습니다.

이 게시물에서는 개체의 포즈, 위치 및 방향이 중요한 사용 사례에 CV를 적용할 수 있는 영역을 다룹니다. 이러한 사용 사례 중 하나는 이미지 업로드가 필요한 고객 대면 모바일 애플리케이션입니다. 규정 준수를 위한 것일 수도 있고 일관된 사용자 경험을 제공하고 참여를 개선하기 위한 것일 수도 있습니다. 예를 들어 온라인 쇼핑 플랫폼에서 제품이 이미지에 표시되는 각도는 해당 제품의 구매율에 영향을 미칩니다. 그러한 경우 중 하나는 자동차의 위치를 ​​감지하는 것입니다. 잘 알려진 ML 솔루션을 사후 처리와 결합하여 AWS 클라우드에서 이 문제를 해결할 수 있는 방법을 시연합니다.

이 문제를 해결하기 위해 딥 러닝 모델을 사용합니다. 포즈 추정을 위한 학습 ML 알고리즘에는 많은 전문 지식과 사용자 지정 학습 데이터가 필요합니다. 두 요구 사항 모두 획득하기 어렵고 비용이 많이 듭니다. 따라서 ML 전문 지식이 필요하지 않고 Amazon Rekognition을 사용하는 옵션과 아마존 세이지 메이커 사용자 지정 ML 모델을 교육하고 배포합니다. 첫 번째 옵션에서는 Amazon Rekognition을 사용하여 자동차 바퀴를 감지합니다. 그런 다음 규칙 기반 시스템을 사용하여 바퀴 위치에서 자동차 방향을 추론합니다. 두 번째 옵션에서는 다음을 사용하여 바퀴 및 기타 자동차 부품을 감지합니다. 디텍 트론 모델. 이들은 다시 규칙 기반 코드로 자동차 위치를 추론하는 데 사용됩니다. 두 번째 옵션은 ML 경험이 필요하지만 더 많은 사용자 정의가 가능합니다. 예를 들어 전체 자동차를 자르기 위해 이미지에 대한 추가 후처리에 사용할 수 있습니다. 두 옵션 모두 공개적으로 사용 가능한 데이터 세트에서 학습할 수 있습니다. 마지막으로 다음과 같은 서비스를 사용하여 이 자동차 자세 감지 솔루션을 기존 웹 애플리케이션에 통합하는 방법을 보여줍니다. 아마존 API 게이트웨이AWS 증폭.

솔루션 개요

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.

이 솔루션은 사용자가 이미지를 업로드하고 Amazon Rekognition 모델 또는 사용자 지정 Detectron 모델을 호출하여 자동차의 위치를 ​​감지할 수 있는 Amplify의 모의 웹 애플리케이션으로 구성됩니다. 각 옵션에 대해 AWS 람다 모의 애플리케이션에 노출되는 API 게이트웨이 뒤에 있는 함수입니다. SageMaker 또는 Amazon Rekognition에서 훈련된 Detectron 모델과 함께 실행되도록 Lambda 함수를 구성했습니다.

사전 조건

이 연습에서는 다음과 같은 전제 조건이 있어야합니다.

Amazon Rekognition을 사용하여 서버리스 앱 생성

첫 번째 옵션은 Amazon Rekognition을 사용하여 이미지에서 자동차 방향을 감지하는 방법을 보여줍니다. 아이디어는 Amazon Rekognition을 사용하여 자동차와 바퀴의 위치를 ​​감지한 다음 후처리를 수행하여 이 정보에서 자동차의 방향을 도출하는 것입니다. 전체 솔루션은 다음과 같이 Lambda를 사용하여 배포됩니다. Github 저장소. 이 폴더에는 Lambda 함수에서 실행될 Docker 이미지를 정의하는 Dockerfile과 app.py Lambda 함수의 기본 진입점이 될 파일:

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

Lambda 함수는 헤더와 본문을 포함하는 이벤트를 예상합니다. 여기서 본문은 base64 디코딩 객체로 레이블을 지정하는 데 필요한 이미지여야 합니다. 이미지가 주어지면 Amazon Rekognition detect_labels 함수는 다음을 사용하여 Lambda 함수에서 호출됩니다. 보토3. 이 함수는 할당된 레이블의 신뢰도, 감지된 레이블의 상위 레이블, 레이블의 별칭 및 감지된 레이블이 속한 범주입니다. Amazon Rekognition에서 반환한 레이블을 기반으로 함수를 실행합니다. label_image, 다음과 같이 감지된 바퀴에서 자동차 각도를 계산합니다.

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

애플리케이션에서는 이미지에 자동차가 하나만 있어야 하며 그렇지 않은 경우 오류를 반환합니다. 그러나 사후 처리를 조정하여 더 세분화된 방향 설명을 제공하거나 여러 대의 자동차를 다루거나 더 복잡한 객체의 방향을 계산할 수 있습니다.

휠 감지 개선

휠 감지의 정확도를 더욱 향상시키기 위해 다음을 사용할 수 있습니다. Amazon Rekognition 사용자 지정 레이블. SageMaker를 사용하여 미세 조정하여 사용자 지정 ML 모델을 교육하고 배포하는 것과 마찬가지로 Amazon Rekognition이 단 몇 시간 만에 사용자 지정 이미지 분석 모델을 생성할 수 있도록 자체적으로 레이블이 지정된 데이터를 가져올 수 있습니다. Rekognition Custom Labels를 사용하면 사용 사례에 특정한 작은 훈련 이미지 세트만 필요합니다. 이 경우에는 특정 각도의 자동차 이미지입니다. 많은 카테고리. Rekognition Custom Labels는 표준 Amazon Rekognition 솔루션에 사용하는 Lambda 함수에 몇 번의 클릭과 약간의 조정만으로 통합할 수 있습니다.

SageMaker 교육 작업을 사용하여 모델 교육

두 번째 옵션에서는 SageMaker에서 맞춤형 딥 러닝 모델을 교육합니다. 우리는 Detectron2 프레임워크 자동차 부품의 분할을 위해. 그런 다음 이러한 세그먼트를 사용하여 자동차의 위치를 ​​추론합니다.

Detectron2 프레임워크는 최첨단 감지 및 분할 알고리즘을 제공하는 라이브러리입니다. Detectron은 유명한 COCO(Common objects in Context) 데이터 세트에서 훈련된 다양한 Mask R-CNN 모델을 제공합니다. 자동차 물체 감지 모델을 구축하기 위해 전이 학습을 사용하여 사전 훈련된 Mask R-CNN 모델을 미세 조정합니다. 자동차 부품 세분화 데이터 세트. 이 데이터 세트를 사용하면 바퀴뿐만 아니라 다른 자동차 부품도 감지할 수 있는 모델을 훈련할 수 있습니다. 이 추가 정보는 이미지를 기준으로 자동차 각도 계산에 추가로 사용될 수 있습니다.

데이터 세트에는 객체 감지 및 시맨틱 분할 작업에 사용되는 자동차 부품의 주석 데이터가 포함되어 있습니다. 세단, 픽업 및 스포츠 유틸리티 차량(SUV)의 약 500개 이미지는 여러 보기(전면, 후면 및 측면 보기)에서 촬영됩니다. 각 이미지는 18개의 인스턴스 마스크와 바퀴, 거울, 조명, 전면 및 후면 유리와 같은 자동차의 다양한 부분을 나타내는 경계 상자로 주석이 추가됩니다. 이미지에서 사용 가능한 모든 바퀴를 하나의 개체로 간주하는 대신 각 바퀴가 개별 개체로 간주되도록 바퀴의 기본 주석을 수정했습니다.

우리는 사용 아마존 단순 스토리지 서비스 (Amazon S3) 훈련된 모델 아티팩트와 함께 Detectron 모델 훈련에 사용되는 데이터 세트를 저장합니다. 또한 Lambda 함수에서 실행되는 Docker 컨테이너는 다음에 저장됩니다. Amazon Elastic Container Registry (아마존 ECR). 코드를 실행하는 데 필요한 라이브러리와 종속성을 포함하려면 Lambda 함수의 Docker 컨테이너가 필요합니다. 우리는 대안으로 사용할 수 있습니다 람다 계층, 하지만 압축 해제된 배포 패키지 크기 할당량은 250MB로 제한되며 최대 XNUMX개의 계층을 Lambda 함수에 추가할 수 있습니다.

당사의 솔루션은 SageMaker를 기반으로 합니다. 미리 구축된 것을 확장합니다. SageMaker 도커 컨테이너 PyTorch가 맞춤형 PyTorch를 실행하기 위해 교육 코드. 다음으로 SageMaker Python SDK를 사용하여 다음 코드 스니펫과 같이 교육 이미지를 SageMaker PyTorch 추정기로 래핑합니다.

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

마지막으로 다음을 호출하여 훈련 작업을 시작합니다. fit() 생성된 PyTorch 추정기의 함수. 훈련이 끝나면 훈련된 모델 아티팩트가 Amazon S3의 세션 버킷에 저장되어 추론 파이프라인에 사용됩니다.

SageMaker 및 추론 파이프라인을 사용하여 모델 배포

또한 SageMaker를 사용하여 맞춤형 Detectron 모델을 실행하는 추론 엔드포인트를 호스팅합니다. 솔루션을 배포하는 데 사용되는 전체 인프라는 AWS CDK를 사용하여 프로비저닝됩니다. 우리는 다음을 통해 맞춤형 모델을 호스팅할 수 있습니다. SageMaker 실시간 끝점 전화하여 deploy PyTorch 추정기에서. 사전 구축된 SageMaker PyTorch 컨테이너를 확장하여 PyTorch Detectron을 포함하는 것은 이번이 두 번째입니다. 이를 사용하여 다음과 같이 추론 스크립트를 실행하고 훈련된 PyTorch 모델을 호스팅합니다.

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

ml.g4dn.xlarge GPU는 사용 가능한 가장 작은 GPU이고 이 데모에 충분하기 때문에 배포에 ml.gXNUMXdn.xlarge GPU를 사용했습니다. 두 가지 구성 요소를 구성해야 합니다. 추론 스크립트: 모델 로딩 및 모델 서빙. 함수 model_fn() 호스팅된 Docker 컨테이너의 일부이며 Amazon S3에서도 찾을 수 있는 훈련된 모델을 로드하는 데 사용되며 다음과 같이 모델 제공에 사용할 수 있는 모델 객체를 반환합니다.

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

기능 predict_fn() 예측을 수행하고 결과를 반환합니다. 훈련된 모델을 사용하는 것 외에도 COCO 데이터 세트에서 훈련된 Mask R-CNN 모델의 사전 훈련된 버전을 사용하여 이미지에서 주요 자동차를 추출합니다. 이는 두 대 이상의 자동차가 존재하는 이미지를 처리하기 위한 추가 후처리 단계입니다. 다음 코드를 참조하십시오.

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Amazon Rekognition 솔루션과 유사하게 경계 상자는 wheel 클래스는 감지 출력에서 ​​필터링되고 후처리 모듈에 제공되어 출력에 상대적인 자동차 위치를 평가합니다.

마지막으로 Detectron 솔루션의 후처리도 개선했습니다. 또한 서로 다른 자동차 부품의 세그먼트를 사용하여 솔루션을 추론합니다. 예를 들어 앞 범퍼는 감지되지만 뒷 범퍼는 감지되지 않을 때마다 자동차의 전면이 있다고 가정하고 해당 각도를 계산합니다.

솔루션을 웹 애플리케이션에 연결

모델 엔드포인트를 Amplify에 연결하는 단계는 다음과 같습니다.

  • AWS CDK 스택이 생성한 애플리케이션 리포지토리를 복제합니다. car-angle-detection-website-repo. 배포에 사용한 지역에서 찾고 있는지 확인하십시오.
  • 배포된 각 Lambda 함수에 대한 API 게이트웨이 엔드포인트를 index.html 이전 리포지토리의 파일(엔드포인트를 배치해야 하는 자리 표시자가 있음). 다음 코드는 .html 파일의 이 섹션이 어떻게 생겼는지에 대한 예입니다.
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • HTML 파일을 저장하고 코드 변경 사항을 원격 기본 분기로 푸시합니다.

이렇게 하면 배포에서 HTML 파일이 업데이트됩니다. 이제 응용 프로그램을 사용할 준비가 되었습니다.

  • Amplify 콘솔로 이동하여 생성한 프로젝트를 찾습니다.

배포가 완료되면 애플리케이션 URL이 표시됩니다.

  • URL로 이동하여 UI를 즐겨보세요.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.

결론

축하해요! 우리는 Amazon Rekognition을 사용하는 완전한 서버리스 아키텍처를 배포했지만 자체 사용자 지정 모델에 대한 옵션도 제공했으며 이 예제는 다음에서 사용할 수 있습니다. GitHub의. 팀에 ML 전문 지식이 없거나 모델을 교육하기에 충분한 사용자 지정 데이터가 없는 경우 Amazon Rekognition을 사용하는 옵션을 선택할 수 있습니다. 모델에 대한 더 많은 제어를 원하고 추가로 사용자 지정하고 싶고 충분한 데이터가 있는 경우 SageMaker 솔루션을 선택할 수 있습니다. 데이터 과학자 팀이 있는 경우 모델을 추가로 개선하고 보다 사용자 지정되고 유연한 옵션을 선택하려고 할 수도 있습니다. 두 옵션 중 하나를 사용하여 웹 애플리케이션 뒤에 Lambda 함수와 API 게이트웨이를 배치할 수 있습니다. 코드를 조정하려는 다른 사용 사례에 대해서도 이 접근 방식을 사용할 수 있습니다.

이 서버리스 아키텍처의 장점은 빌딩 블록을 완전히 교환할 수 있다는 것입니다. 기회는 거의 무한합니다. 자, 오늘 시작하세요!

언제나 그렇듯이 AWS는 피드백을 환영합니다. 의견이나 질문을 제출하십시오.


저자에 관하여

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.마이클 월너 AWS Professional Services의 데이터 및 AI 선임 컨설턴트이며 고객이 AWS 클라우드에서 데이터 기반 및 AWSome이 되는 여정을 지원하는 데 열정적입니다. 또한 그는 고객을 위해 혁신하고 새로운 아이디어를 발명하기 위해 고객과 함께 크게 생각하는 것을 좋아합니다.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.암나 나지미 AWS Professional Services의 데이터 과학자입니다. 그녀는 고객이 빅 데이터 및 인공 지능 기술로 혁신하여 데이터에서 비즈니스 가치와 통찰력을 얻을 수 있도록 돕는 데 열정적입니다. 그녀는 의료 및 생명 과학 분야에서 데이터 플랫폼 및 AI/ML 프로젝트 작업 경험이 있습니다. 여가 시간에는 정원 가꾸기와 새로운 장소로의 여행을 즐깁니다.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.데이비드 사우어바인 AWS Professional Services의 선임 데이터 과학자로서 AWS 클라우드에서 고객의 AI/ML 여정을 지원합니다. David는 디지털 트윈, 예측 및 양자 계산에 중점을 둡니다. 오스트리아 인스브루크 대학에서 이론 물리학 박사 학위를 받았습니다. 또한 독일 Max-Planck-Institute for Quantum Optics의 박사 및 박사 후 연구원이었습니다. 여가 시간에는 독서, 스키 타기, 가족과 함께 시간 보내기를 좋아합니다.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.스리크리슈나 차이타냐 콘두루 AWS Professional Services의 선임 데이터 과학자입니다. 그는 고객이 AWS에서 ML 애플리케이션을 프로토타이핑하고 운영할 수 있도록 지원합니다. Srikrishna는 컴퓨터 비전과 NLP에 중점을 둡니다. 또한 다양한 산업 분야의 고객을 위한 ML 플랫폼 설계 및 사용 사례 식별 이니셔티브를 이끌고 있습니다. Srikrishna는 독일 RWTH 아헨 대학교에서 의료 이미징에 중점을 둔 생체 의학 공학 석사 학위를 받았습니다.

Amazon SageMaker 및 Amazon Rekognition | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.아흐메드 만수르 AWS Professional Services의 데이터 과학자입니다. 그는 AWS 클라우드에서 AI/ML 여정을 통해 고객에게 기술 지원을 제공합니다. Ahmed는 RL과 함께 NLP를 단백질 도메인에 적용하는 데 중점을 둡니다. 그는 독일 뮌헨 공과대학에서 공학 박사 학위를 받았습니다. 여가 시간에 그는 체육관에 가서 아이들과 노는 것을 좋아합니다.

타임 스탬프 :

더보기 AWS 기계 학습