Xây dựng và huấn luyện các mô hình thị giác máy tính để phát hiện vị trí ô tô trong hình ảnh bằng Amazon SageMaker và Amazon Rekognition | Dịch vụ web của Amazon

Xây dựng và huấn luyện các mô hình thị giác máy tính để phát hiện vị trí ô tô trong hình ảnh bằng Amazon SageMaker và Amazon Rekognition | Dịch vụ web của Amazon

Thị giác máy tính (CV) là một trong những ứng dụng phổ biến nhất của học máy (ML) và học sâu. Các trường hợp sử dụng bao gồm ô tô tự lái, kiểm duyệt nội dung trên nền tảng truyền thông xã hội, phát hiện ung thư và phát hiện khiếm khuyết tự động. Nhận thức lại Amazon là một dịch vụ được quản lý hoàn toàn, có thể thực hiện các tác vụ CV như phát hiện đối tượng, phát hiện phân đoạn video, kiểm duyệt nội dung, v.v. để trích xuất thông tin chi tiết từ dữ liệu mà không cần bất kỳ trải nghiệm ML nào trước đó. Trong một số trường hợp, có thể cần một giải pháp tùy chỉnh hơn cùng với dịch vụ để giải quyết một vấn đề rất cụ thể.

Trong bài đăng này, chúng tôi đề cập đến các lĩnh vực mà CV có thể được áp dụng cho các trường hợp sử dụng trong đó tư thế của đối tượng, vị trí và hướng của chúng là quan trọng. Một trường hợp sử dụng như vậy sẽ là các ứng dụng di động hướng tới khách hàng yêu cầu tải lên hình ảnh. Có thể vì lý do tuân thủ hoặc để cung cấp trải nghiệm người dùng nhất quán và cải thiện mức độ tương tác. Ví dụ: trên các nền tảng mua sắm trực tuyến, góc nhìn của sản phẩm trong hình ảnh có ảnh hưởng đến tỷ lệ mua sản phẩm này. Một trường hợp như vậy là phát hiện vị trí của một chiếc ô tô. Chúng tôi trình bày cách bạn có thể kết hợp các giải pháp ML nổi tiếng với quá trình xử lý hậu kỳ để giải quyết vấn đề này trên Đám mây AWS.

Chúng tôi sử dụng các mô hình học sâu để giải quyết vấn đề này. Việc đào tạo các thuật toán ML để ước tính tư thế đòi hỏi nhiều chuyên môn và dữ liệu đào tạo tùy chỉnh. Cả hai yêu cầu đều khó khăn và tốn kém để có được. Do đó, chúng tôi đưa ra hai tùy chọn: một tùy chọn không yêu cầu bất kỳ chuyên môn ML nào và sử dụng Amazon Rekognition và tùy chọn khác sử dụng Amazon SageMaker để đào tạo và triển khai mô hình ML tùy chỉnh. Trong tùy chọn đầu tiên, chúng tôi sử dụng Amazon Rekognition để phát hiện bánh xe ô tô. Sau đó, chúng tôi suy ra hướng của ô tô từ các vị trí bánh xe bằng hệ thống dựa trên quy tắc. Trong tùy chọn thứ hai, chúng tôi phát hiện bánh xe và các bộ phận khác của ô tô bằng cách sử dụng máy dò người mẫu. Chúng lại được sử dụng để suy ra vị trí ô tô bằng mã dựa trên quy tắc. Tùy chọn thứ hai yêu cầu kinh nghiệm ML nhưng cũng có thể tùy chỉnh nhiều hơn. Nó có thể được sử dụng để xử lý hậu kỳ thêm trên hình ảnh, chẳng hạn như cắt bỏ toàn bộ chiếc ô tô. Cả hai tùy chọn đều có thể được đào tạo trên các bộ dữ liệu có sẵn công khai. Cuối cùng, chúng tôi chỉ ra cách bạn có thể tích hợp giải pháp phát hiện tư thế ô tô này vào ứng dụng web hiện có của mình bằng các dịch vụ như Cổng API AmazonAmplify AWS.

Tổng quan về giải pháp

Sơ đồ sau minh họa kiến ​​trúc giải pháp.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Giải pháp này bao gồm một ứng dụng web mô phỏng trong Amplify nơi người dùng có thể tải hình ảnh lên và gọi mô hình Amazon Rekognition hoặc mô hình Detectron tùy chỉnh để phát hiện vị trí của ô tô. Đối với mỗi tùy chọn, chúng tôi lưu trữ một AWS Lambda hoạt động đằng sau Cổng API được hiển thị cho ứng dụng mô phỏng của chúng tôi. Chúng tôi đã đặt cấu hình hàm Lambda để chạy với mô hình Detectron được đào tạo về SageMaker hoặc Amazon Rekognition.

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

Tạo ứng dụng serverless bằng Amazon Rekognition

Tùy chọn đầu tiên của chúng tôi trình bày cách bạn có thể phát hiện hướng ô tô trong hình ảnh bằng Amazon Rekognition. Ý tưởng là sử dụng Amazon Rekognition để phát hiện vị trí của ô tô và các bánh xe, sau đó thực hiện xử lý hậu kỳ để xác định hướng của ô tô từ thông tin này. Toàn bộ giải pháp được triển khai bằng Lambda như trong Kho lưu trữ Github. Thư mục này chứa hai tệp chính: một Dockerfile xác định hình ảnh Docker sẽ chạy trong hàm Lambda của chúng ta và tệp app.py tệp, đây sẽ là điểm vào chính của hàm 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')

Hàm Lambda dự kiến ​​một sự kiện chứa tiêu đề và nội dung, trong đó nội dung phải là hình ảnh cần được gắn nhãn là đối tượng được giải mã base64. Với hình ảnh, Amazon Rekognition detect_labels hàm được gọi từ hàm Lambda bằng cách sử dụng boto3. Hàm trả về một hoặc nhiều nhãn cho từng đối tượng trong hình ảnh và chi tiết hộp giới hạn cho tất cả các nhãn đối tượng được phát hiện như một phần của phản hồi, cùng với các thông tin khác như độ tin cậy của nhãn được chỉ định, nhãn tổ tiên của nhãn được phát hiện, có thể bí danh cho nhãn và danh mục mà nhãn được phát hiện thuộc về. Dựa trên các nhãn được Amazon Rekognition trả về, chúng tôi chạy hàm label_image, tính toán góc ô tô từ các bánh xe được phát hiện như sau:

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]]]

Lưu ý rằng ứng dụng yêu cầu chỉ có một chiếc ô tô trong hình ảnh và trả về lỗi nếu không đúng như vậy. Tuy nhiên, quá trình xử lý hậu kỳ có thể được điều chỉnh để cung cấp các mô tả hướng chi tiết hơn, bao gồm một số ô tô hoặc tính toán hướng của các đối tượng phức tạp hơn.

Cải thiện khả năng phát hiện bánh xe

Để cải thiện hơn nữa độ chính xác của việc phát hiện bánh xe, bạn có thể sử dụng Nhãn tùy chỉnh Rekognition của Amazon. Tương tự như việc tinh chỉnh bằng SageMaker để đào tạo và triển khai mô hình ML tùy chỉnh, bạn có thể mang dữ liệu được gắn nhãn của riêng mình để Amazon Rekognition có thể tạo mô hình phân tích hình ảnh tùy chỉnh cho bạn chỉ sau vài giờ. Với Nhãn tùy chỉnh Rekognition, bạn chỉ cần một tập hợp nhỏ các hình ảnh đào tạo dành riêng cho trường hợp sử dụng của mình, trong trường hợp này là hình ảnh ô tô với các góc cụ thể, vì nó sử dụng các khả năng hiện có trong Amazon Rekognition để đào tạo trên hàng chục triệu hình ảnh trên khắp nhiều hạng mục. Nhãn tùy chỉnh Rekognition có thể được tích hợp chỉ với một vài cú nhấp chuột và những điều chỉnh nhỏ cho chức năng Lambda mà chúng tôi sử dụng cho giải pháp Amazon Rekognition tiêu chuẩn.

Đào tạo người mẫu bằng công việc đào tạo SageMaker

Trong tùy chọn thứ hai, chúng tôi đào tạo mô hình deep learning tùy chỉnh trên SageMaker. Chúng tôi sử dụng Khung Detectron2 để phân loại phụ tùng ô tô. Những phân đoạn này sau đó được sử dụng để suy ra vị trí của chiếc xe.

Khung Detectron2 là một thư viện cung cấp các thuật toán phân đoạn và phát hiện tiên tiến. Detectron cung cấp nhiều mô hình Mask R-CNN khác nhau đã được đào tạo trên bộ dữ liệu COCO (Đối tượng chung trong ngữ cảnh) nổi tiếng. Để xây dựng mô hình phát hiện đối tượng ô tô, chúng tôi sử dụng phương pháp học chuyển giao để tinh chỉnh mô hình Mask R-CNN đã được huấn luyện trước trên phân khúc phụ tùng ô tô tập dữ liệu. Tập dữ liệu này cho phép chúng tôi đào tạo một mô hình có thể phát hiện bánh xe cũng như các bộ phận khác của ô tô. Thông tin bổ sung này có thể được tiếp tục sử dụng trong tính toán góc ô tô so với hình ảnh.

Tập dữ liệu chứa dữ liệu chú thích về các bộ phận ô tô được sử dụng để phát hiện đối tượng và phân đoạn ngữ nghĩa: khoảng 500 hình ảnh về xe sedan, xe bán tải và xe thể thao đa dụng (SUV), được chụp ở nhiều chế độ xem (phía trước, phía sau và bên). Mỗi hình ảnh được chú thích bằng 18 mặt nạ mẫu và hộp giới hạn tượng trưng cho các bộ phận khác nhau của ô tô như bánh xe, gương, đèn, kính trước và sau. Chúng tôi đã sửa đổi chú thích cơ sở của các bánh xe sao cho mỗi bánh xe được coi là một đối tượng riêng lẻ thay vì coi tất cả các bánh xe có sẵn trong ảnh là một đối tượng.

Chúng tôi sử dụng Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) để lưu trữ tập dữ liệu dùng để huấn luyện mô hình Detectron cùng với các thành phần lạ của mô hình đã huấn luyện. Hơn nữa, bộ chứa Docker chạy trong hàm Lambda được lưu trữ trong Đăng ký container đàn hồi Amazon (Amazon ECR). Cần có vùng chứa Docker trong hàm Lambda để bao gồm các thư viện và phần phụ thuộc cần thiết để chạy mã. Chúng ta có thể sử dụng cách khác Lớp lambda, nhưng nó bị giới hạn ở hạn ngạch kích thước đóng gói triển khai đã giải nén là 250 MB và có thể thêm tối đa năm lớp vào hàm Lambda.

Giải pháp của chúng tôi được xây dựng trên SageMaker: chúng tôi mở rộng giải pháp dựng sẵn Bộ chứa Docker của SageMaker để PyTorch chạy PyTorch tùy chỉnh của chúng tôi mã đào tạo. Tiếp theo, chúng tôi sử dụng SageMaker Python SDK để gói hình ảnh đào tạo vào công cụ ước tính SageMaker PyTorch, như minh họa trong đoạn mã sau:

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)

Cuối cùng, chúng ta bắt đầu công việc đào tạo bằng cách gọi fit() hoạt động trên công cụ ước tính PyTorch đã tạo. Khi quá trình đào tạo kết thúc, tạo phẩm mô hình đã đào tạo sẽ được lưu trữ trong bộ chứa phiên trên Amazon S3 để sử dụng cho quy trình suy luận.

Triển khai mô hình bằng SageMaker và quy trình suy luận

Chúng tôi cũng sử dụng SageMaker để lưu trữ điểm cuối suy luận chạy mô hình Detectron tùy chỉnh của chúng tôi. Cơ sở hạ tầng đầy đủ dùng để triển khai giải pháp của chúng tôi được cung cấp bằng AWS CDK. Chúng tôi có thể lưu trữ mô hình tùy chỉnh của mình thông qua một Điểm cuối thời gian thực của SageMaker bằng cách gọi deploy trên công cụ ước tính PyTorch. Đây là lần thứ hai chúng tôi mở rộng vùng chứa SageMaker PyTorch dựng sẵn để bao gồm PyTorch Detectron. Chúng tôi sử dụng nó để chạy tập lệnh suy luận và lưu trữ mô hình PyTorch đã được đào tạo của mình như sau:

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)

Lưu ý rằng chúng tôi đã sử dụng GPU ml.g4dn.xlarge để triển khai vì đây là GPU nhỏ nhất hiện có và đủ cho bản demo này. Hai thành phần cần được cấu hình trong kịch bản suy luận: tải mô hình và phục vụ mô hình. Chức năng model_fn() được sử dụng để tải mô hình được đào tạo là một phần của vùng chứa Docker được lưu trữ và cũng có thể được tìm thấy trong Amazon S3 và trả về một đối tượng mô hình có thể được sử dụng để phân phối mô hình như sau:

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)

Các chức năng predict_fn() thực hiện dự đoán và trả về kết quả. Bên cạnh việc sử dụng mô hình đã được huấn luyện, chúng tôi còn sử dụng phiên bản đã được huấn luyện trước của mô hình Mask R-CNN được huấn luyện trên bộ dữ liệu COCO để trích xuất chiếc ô tô chính trong ảnh. Đây là một bước xử lý hậu kỳ bổ sung để xử lý các hình ảnh có nhiều ô tô tồn tại. Xem đoạn mã sau:

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

Tương tự như giải pháp Amazon Rekognition, các hộp giới hạn được dự đoán cho wheel lớp được lọc từ các đầu ra phát hiện và cung cấp cho mô-đun xử lý hậu kỳ để đánh giá vị trí ô tô so với đầu ra.

Cuối cùng, chúng tôi cũng cải thiện quá trình xử lý hậu kỳ cho giải pháp Detectron. Nó cũng sử dụng các phân đoạn của các bộ phận ô tô khác nhau để suy ra giải pháp. Ví dụ: bất cứ khi nào phát hiện thấy cản trước nhưng không có cản sau, giả định rằng chúng ta có góc nhìn từ phía trước của ô tô và tính toán góc tương ứng.

Kết nối giải pháp của bạn với ứng dụng web

Các bước để kết nối điểm cuối của mô hình với Amplify như sau:

  • Sao chép kho ứng dụng mà ngăn xếp AWS CDK đã tạo, được đặt tên car-angle-detection-website-repo. Đảm bảo rằng bạn đang tìm kiếm nó trong Khu vực bạn đã sử dụng để triển khai.
  • Sao chép điểm cuối Cổng API cho từng hàm Lambda được triển khai vào index.html tệp trong kho lưu trữ trước đó (có các phần giữ chỗ cần đặt điểm cuối). Đoạn mã sau đây là ví dụ về phần này của tệp .html trông như thế nào:
<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>

  • Lưu tệp HTML và đẩy thay đổi mã vào nhánh chính từ xa.

Điều này sẽ cập nhật tệp HTML trong quá trình triển khai. Ứng dụng hiện đã sẵn sàng để sử dụng.

  • Điều hướng đến bảng điều khiển Amplify và tìm dự án bạn đã tạo.

URL ứng dụng sẽ hiển thị sau khi triển khai hoàn tất.

  • Điều hướng đến URL và tận hưởng giao diện người dùng.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Kết luận

Chúc mừng! Chúng tôi đã triển khai một kiến ​​trúc serverless hoàn chỉnh, trong đó chúng tôi sử dụng Amazon Rekognition nhưng cũng cung cấp tùy chọn cho mô hình tùy chỉnh của riêng bạn, với ví dụ này có sẵn trên GitHub. Nếu bạn không có kiến ​​thức chuyên môn về ML trong nhóm của mình hoặc không có đủ dữ liệu tùy chỉnh để đào tạo mô hình, bạn có thể chọn tùy chọn sử dụng Amazon Rekognition. Nếu bạn muốn kiểm soát nhiều hơn đối với mô hình của mình, muốn tùy chỉnh mô hình thêm và có đủ dữ liệu, bạn có thể chọn giải pháp SageMaker. Nếu bạn có một nhóm các nhà khoa học dữ liệu, họ cũng có thể muốn nâng cao hơn nữa các mô hình và chọn một tùy chọn tùy chỉnh và linh hoạt hơn. Bạn có thể đặt hàm Lambda và Cổng API phía sau ứng dụng web của mình bằng một trong hai tùy chọn. Bạn cũng có thể sử dụng phương pháp này cho trường hợp sử dụng khác mà bạn có thể muốn điều chỉnh mã cho phù hợp.

Ưu điểm của kiến ​​trúc serverless này là các khối xây dựng hoàn toàn có thể trao đổi được. Các cơ hội gần như vô hạn. Vì vậy, hãy bắt đầu ngay hôm nay!

Như mọi khi, AWS hoan nghênh phản hồi. Xin vui lòng gửi bất kỳ ý kiến ​​hoặc câu hỏi.


Về các tác giả

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Micheal Wallner là Chuyên gia tư vấn cấp cao về Dữ liệu & AI với Dịch vụ chuyên nghiệp của AWS và rất tâm huyết trong việc hỗ trợ khách hàng trên hành trình trở thành một người sử dụng dữ liệu và TUYỆT VỜI trên đám mây AWS. Trên hết, anh thích nghĩ lớn cùng khách hàng để đổi mới và phát minh ra những ý tưởng mới cho họ.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Aamna Najmi là Nhà khoa học dữ liệu với Dịch vụ chuyên nghiệp của AWS. Cô đam mê giúp đỡ khách hàng đổi mới bằng công nghệ Dữ liệu lớn và Trí tuệ nhân tạo để khai thác giá trị kinh doanh và hiểu biết sâu sắc từ dữ liệu. Cô có kinh nghiệm làm việc trên nền tảng dữ liệu và các dự án AI/ML trong lĩnh vực chăm sóc sức khỏe và khoa học đời sống. Khi rảnh rỗi, cô thích làm vườn và đi du lịch đến những địa điểm mới.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.David Sauerwein là Nhà khoa học dữ liệu cấp cao tại AWS Professional Services, nơi ông hỗ trợ khách hàng trong hành trình AI/ML của họ trên đám mây AWS. David tập trung vào cặp song sinh kỹ thuật số, dự báo và tính toán lượng tử. Ông có bằng tiến sĩ vật lý lý thuyết tại Đại học Innsbruck, Áo. Ông cũng là nhà nghiên cứu tiến sĩ và sau tiến sĩ tại Viện Quang học Lượng tử Max-Planck ở Đức. Khi rảnh rỗi, anh ấy thích đọc sách, trượt tuyết và dành thời gian cho gia đình.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Srikrishna Chaitanya Konduru là Nhà khoa học dữ liệu cấp cao với các dịch vụ AWS Professional. Anh hỗ trợ khách hàng tạo nguyên mẫu và vận hành các ứng dụng ML của họ trên AWS. Srikrishna tập trung vào thị giác máy tính và NLP. Ông cũng lãnh đạo các sáng kiến ​​thiết kế nền tảng ML và xác định trường hợp sử dụng cho khách hàng thuộc nhiều ngành dọc khác nhau. Srikrishna có bằng Thạc sĩ Kỹ thuật Y sinh tại trường đại học RWTH Aachen, Đức, chuyên ngành Hình ảnh Y tế.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Ahmed Mansour là Nhà khoa học dữ liệu tại AWS Professional Services. Anh cung cấp hỗ trợ kỹ thuật cho khách hàng thông qua hành trình AI/ML của họ trên đám mây AWS. Ahmed tập trung vào các ứng dụng của NLP vào miền protein cùng với RL. Ông có bằng Tiến sĩ Kỹ thuật tại Đại học Kỹ thuật Munich, Đức. Khi rảnh rỗi, anh ấy thích đến phòng tập thể dục và chơi với các con.

Dấu thời gian:

Thêm từ Học máy AWS