Buat dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Layanan Web Amazon

Buat dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Layanan Web Amazon

Computer vision (CV) adalah salah satu aplikasi pembelajaran mesin (ML) dan pembelajaran mendalam yang paling umum. Kasus penggunaan berkisar dari mobil tanpa pengemudi, moderasi konten di platform media sosial, deteksi kanker, dan deteksi cacat otomatis. Rekognisi Amazon adalah layanan terkelola sepenuhnya yang dapat melakukan tugas CV seperti deteksi objek, deteksi segmen video, moderasi konten, dan lainnya untuk mengekstrak wawasan dari data tanpa memerlukan pengalaman ML sebelumnya. Dalam beberapa kasus, solusi yang lebih khusus mungkin diperlukan bersama dengan layanan untuk menyelesaikan masalah yang sangat spesifik.

Dalam postingan ini, kami membahas area di mana CV dapat diterapkan pada kasus penggunaan yang mengutamakan pose objek, posisinya, dan orientasinya. Salah satu kasus penggunaannya adalah aplikasi seluler yang berhubungan dengan pelanggan yang memerlukan pengunggahan gambar. Hal ini mungkin karena alasan kepatuhan atau untuk memberikan pengalaman pengguna yang konsisten dan meningkatkan keterlibatan. Misalnya saja pada platform belanja online, sudut pandang produk dalam gambar berpengaruh terhadap tingkat pembelian produk tersebut. Salah satu kasusnya adalah mendeteksi posisi mobil. Kami mendemonstrasikan bagaimana Anda dapat menggabungkan solusi ML terkenal dengan pascapemrosesan untuk mengatasi masalah ini di AWS Cloud.

Kami menggunakan model pembelajaran mendalam untuk memecahkan masalah ini. Melatih algoritme ML untuk estimasi pose memerlukan banyak keahlian dan data pelatihan khusus. Kedua persyaratan tersebut sulit dan mahal untuk diperoleh. Oleh karena itu, kami menyajikan dua opsi: opsi yang tidak memerlukan keahlian ML apa pun dan menggunakan Amazon Rekognition, dan opsi lainnya yang menggunakan Amazon SageMaker untuk melatih dan menerapkan model ML khusus. Pada opsi pertama, kami menggunakan Amazon Rekognition untuk mendeteksi roda mobil. Kami kemudian menyimpulkan orientasi mobil dari posisi roda menggunakan sistem berbasis aturan. Pada opsi kedua, kami mendeteksi roda dan bagian mobil lainnya menggunakan Detektor model. Ini sekali lagi digunakan untuk menyimpulkan posisi mobil dengan kode berbasis aturan. Opsi kedua memerlukan pengalaman ML tetapi juga lebih dapat disesuaikan. Ini dapat digunakan untuk pasca-pemrosesan lebih lanjut pada gambar, misalnya, untuk memotong keseluruhan mobil. Kedua opsi tersebut dapat dilatih pada kumpulan data yang tersedia untuk umum. Terakhir, kami menunjukkan bagaimana Anda dapat mengintegrasikan solusi deteksi pose mobil ini ke dalam aplikasi web Anda yang sudah ada menggunakan layanan seperti Gerbang API Amazon dan Amplifikasi AWS.

Ikhtisar solusi

Diagram berikut menggambarkan arsitektur solusi.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.

Solusinya terdiri dari aplikasi web tiruan di Amplify di mana pengguna dapat mengunggah gambar dan memanggil model Amazon Rekognition atau model Detectron khusus untuk mendeteksi posisi mobil. Untuk setiap opsi, kami menghosting sebuah AWS Lambda berfungsi di belakang API Gateway yang diekspos ke aplikasi tiruan kami. Kami mengonfigurasi fungsi Lambda agar berjalan dengan model Detectron yang dilatih di SageMaker atau Amazon Rekognition.

Prasyarat

Untuk penelusuran ini, Anda harus memiliki prasyarat berikut:

Buat aplikasi tanpa server menggunakan Amazon Rekognition

Opsi pertama kami menunjukkan bagaimana Anda dapat mendeteksi orientasi mobil dalam gambar menggunakan Amazon Rekognition. Idenya adalah menggunakan Amazon Rekognition untuk mendeteksi lokasi mobil dan rodanya, lalu melakukan pascapemrosesan untuk mendapatkan orientasi mobil dari informasi ini. Seluruh solusi diterapkan menggunakan Lambda seperti yang ditunjukkan pada gambar Gudang Github. Folder ini berisi dua file utama: Dockerfile yang mendefinisikan image Docker yang akan dijalankan di fungsi Lambda kita, dan app.py file, yang akan menjadi titik masuk utama fungsi 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')

Fungsi Lambda mengharapkan peristiwa yang berisi header dan isi, yang mana isi tersebut harus berupa gambar yang perlu diberi label sebagai objek yang didekodekan base64. Mengingat gambarnya, Amazon Recognition detect_labels fungsi dipanggil dari fungsi Lambda menggunakan bot3. Fungsi ini mengembalikan satu atau lebih label untuk setiap objek dalam gambar dan detail kotak pembatas untuk semua label objek yang terdeteksi sebagai bagian dari respons, bersama dengan informasi lain seperti keyakinan label yang ditetapkan, label leluhur dari label yang terdeteksi, kemungkinan alias untuk label, dan kategori milik label yang terdeteksi. Berdasarkan label yang dikembalikan oleh Amazon Rekognition, kami menjalankan fungsinya label_image, yang menghitung sudut mobil dari roda yang terdeteksi sebagai berikut:

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

Perhatikan bahwa aplikasi mengharuskan hanya satu mobil yang ada dalam gambar dan mengembalikan kesalahan jika bukan itu masalahnya. Namun, pemrosesan pasca dapat diadaptasi untuk memberikan deskripsi orientasi yang lebih terperinci, mencakup beberapa mobil, atau menghitung orientasi objek yang lebih kompleks.

Tingkatkan deteksi roda

Untuk lebih meningkatkan akurasi deteksi roda, Anda dapat menggunakan Label Kustom Amazon Rekognition. Mirip dengan menyempurnakan penggunaan SageMaker untuk melatih dan menerapkan model ML kustom, Anda dapat membawa data berlabel Anda sendiri sehingga Amazon Rekognition dapat menghasilkan model analisis gambar kustom untuk Anda hanya dalam beberapa jam. Dengan Label Kustom Rekognition, Anda hanya memerlukan sekumpulan kecil gambar pelatihan yang khusus untuk kasus penggunaan Anda, dalam hal ini gambar mobil dengan sudut tertentu, karena menggunakan kemampuan yang ada di Amazon Rekognition untuk dilatih pada puluhan juta gambar di seluruh banyak kategori. Label Kustom Rekognition dapat diintegrasikan hanya dengan beberapa klik dan sedikit adaptasi pada fungsi Lambda yang kami gunakan untuk solusi standar Amazon Rekognition.

Latih model menggunakan tugas pelatihan SageMaker

Pada opsi kedua, kami melatih model pembelajaran mendalam khusus di SageMaker. Kami menggunakan Kerangka Detectron2 untuk segmentasi suku cadang mobil. Segmen ini kemudian digunakan untuk menyimpulkan posisi mobil.

Kerangka kerja Detectron2 adalah perpustakaan yang menyediakan algoritma deteksi dan segmentasi canggih. Detectron menyediakan berbagai model Mask R-CNN yang dilatih pada kumpulan data COCO (Common Objects in Context) yang terkenal. Untuk membuat model deteksi objek mobil, kami menggunakan pembelajaran transfer untuk menyempurnakan model Mask R-CNN yang telah dilatih sebelumnya di segmentasi suku cadang mobil Himpunan data. Kumpulan data ini memungkinkan kita melatih model yang dapat mendeteksi roda dan bagian mobil lainnya. Informasi tambahan ini selanjutnya dapat digunakan dalam perhitungan sudut mobil relatif terhadap gambar.

Kumpulan data berisi data beranotasi suku cadang mobil yang akan digunakan untuk deteksi objek dan tugas segmentasi semantik: sekitar 500 gambar sedan, pikap, dan kendaraan keperluan olahraga (SUV), diambil dalam berbagai tampilan (tampilan depan, belakang, dan samping). Setiap gambar dianotasi dengan 18 contoh topeng dan kotak pembatas yang mewakili berbagai bagian mobil seperti roda, kaca spion, lampu, serta kaca depan dan belakang. Kami memodifikasi anotasi dasar roda sedemikian rupa sehingga setiap roda dianggap sebagai objek individual, bukan menganggap semua roda yang tersedia dalam gambar sebagai satu objek.

Kami menggunakan Layanan Penyimpanan Sederhana Amazon (Amazon S3) untuk menyimpan kumpulan data yang digunakan untuk melatih model Detectron bersama dengan artefak model yang dilatih. Selain itu, kontainer Docker yang berjalan di fungsi Lambda disimpan di dalamnya Registry Kontainer Elastis Amazon (Amazon ECR). Kontainer Docker di fungsi Lambda diperlukan untuk menyertakan perpustakaan dan dependensi yang diperlukan untuk menjalankan kode. Sebagai alternatif, kita bisa menggunakan Lapisan lambda, namun terbatas pada kuota ukuran paket penerapan yang belum di-zip sebesar 250 MB dan maksimal lima lapisan dapat ditambahkan ke fungsi Lambda.

Solusi kami dibangun di atas SageMaker: kami memperluas yang sudah dibuat sebelumnya Kontainer Docker SageMaker agar PyTorch menjalankan PyTorch khusus kami kode pelatihan. Selanjutnya, kita menggunakan SageMaker Python SDK untuk menggabungkan gambar pelatihan ke dalam estimator SageMaker PyTorch, seperti yang ditunjukkan dalam cuplikan kode berikut:

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)

Akhirnya, kami memulai pekerjaan pelatihan dengan menelepon fit() fungsi pada estimator PyTorch yang dibuat. Ketika pelatihan selesai, artefak model yang dilatih disimpan dalam bucket sesi di Amazon S3 untuk digunakan untuk pipa inferensi.

Terapkan model menggunakan SageMaker dan alur inferensi

Kami juga menggunakan SageMaker untuk menghosting titik akhir inferensi yang menjalankan model Detectron kustom kami. Infrastruktur lengkap yang digunakan untuk menerapkan solusi kami disediakan menggunakan AWS CDK. Kami dapat meng-host model khusus kami melalui a Titik akhir waktu nyata SageMaker dengan menyebut deploy pada penaksir PyTorch. Ini adalah kedua kalinya kami memperluas wadah SageMaker PyTorch yang telah dibuat sebelumnya untuk menyertakan PyTorch Detectron. Kami menggunakannya untuk menjalankan skrip inferensi dan menghosting model PyTorch terlatih kami sebagai berikut:

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)

Perhatikan bahwa kami menggunakan GPU ml.g4dn.xlarge untuk penerapan karena ini adalah GPU terkecil yang tersedia dan cukup untuk demo ini. Dua komponen perlu dikonfigurasi di kami skrip inferensi: pemuatan model dan penyajian model. Fungsinya model_fn() digunakan untuk memuat model terlatih yang merupakan bagian dari kontainer Docker yang dihosting dan juga dapat ditemukan di Amazon S3 dan mengembalikan objek model yang dapat digunakan untuk penyajian model sebagai berikut:

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)

Fungsi predict_fn() melakukan prediksi dan mengembalikan hasilnya. Selain menggunakan model terlatih, kami menggunakan versi model Mask R-CNN yang telah dilatih sebelumnya yang dilatih pada kumpulan data COCO untuk mengekstrak mobil utama dalam gambar. Ini adalah langkah pascapemrosesan tambahan untuk menangani gambar yang terdapat lebih dari satu mobil. Lihat kode berikut:

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

Mirip dengan solusi Amazon Rekognition, kotak pembatas diprediksi untuk wheel kelas disaring dari keluaran deteksi dan dipasok ke modul pascapemrosesan untuk menilai posisi mobil relatif terhadap keluaran.

Terakhir, kami juga meningkatkan pascapemrosesan untuk solusi Detectron. Ia juga menggunakan segmen suku cadang mobil yang berbeda untuk menyimpulkan solusinya. Misalnya, setiap kali bemper depan terdeteksi, tetapi tidak ada bemper belakang, diasumsikan bahwa kita memiliki tampilan depan mobil dan sudut yang sesuai telah dihitung.

Hubungkan solusi Anda ke aplikasi web

Langkah-langkah untuk menghubungkan endpoint model ke Amplify adalah sebagai berikut:

  • Kloning repositori aplikasi yang dibuat oleh tumpukan AWS CDK, beri nama car-angle-detection-website-repo. Pastikan Anda mencarinya di Wilayah yang Anda gunakan untuk penerapan.
  • Salin titik akhir API Gateway untuk setiap fungsi Lambda yang diterapkan ke dalam index.html file di repositori sebelumnya (ada placeholder di mana titik akhir perlu ditempatkan). Kode berikut adalah contoh tampilan bagian file .html ini:
<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>

  • Simpan file HTML dan dorong perubahan kode ke cabang utama jarak jauh.

Ini akan memperbarui file HTML dalam penerapan. Aplikasi sekarang siap digunakan.

  • Navigasikan ke konsol Amplify dan temukan proyek yang Anda buat.

URL aplikasi akan terlihat setelah penerapan selesai.

  • Navigasikan ke URL dan bersenang-senanglah dengan UI.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.

Kesimpulan

Selamat! Kami telah menerapkan arsitektur tanpa server lengkap yang menggunakan Amazon Rekognition, tetapi juga memberikan opsi untuk model kustom Anda sendiri, dengan contoh ini tersedia di GitHub. Jika Anda tidak memiliki keahlian ML di tim Anda atau data khusus yang cukup untuk melatih model, Anda dapat memilih opsi yang menggunakan Amazon Rekognition. Jika Anda ingin kontrol lebih besar atas model Anda, ingin menyesuaikannya lebih lanjut, dan memiliki cukup data, Anda dapat memilih solusi SageMaker. Jika Anda memiliki tim ilmuwan data, mereka mungkin juga ingin menyempurnakan model lebih lanjut dan memilih opsi yang lebih khusus dan fleksibel. Anda dapat menempatkan fungsi Lambda dan API Gateway di belakang aplikasi web Anda menggunakan salah satu dari dua opsi tersebut. Anda juga dapat menggunakan pendekatan ini untuk kasus penggunaan lain yang mungkin ingin Anda sesuaikan kodenya.

Keuntungan arsitektur tanpa server ini adalah blok penyusunnya dapat ditukar sepenuhnya. Peluangnya hampir tidak terbatas. Jadi, mulailah hari ini!

Seperti biasa, AWS menyambut umpan balik. Silakan kirim komentar atau pertanyaan apa pun.


Tentang Penulis

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Michael Wallner adalah Konsultan Senior Data & AI di Layanan Profesional AWS dan bersemangat untuk memungkinkan pelanggan dalam perjalanan mereka menjadi berbasis data dan AWSome di cloud AWS. Selain itu, dia suka berpikir besar dengan pelanggan untuk berinovasi dan menciptakan ide-ide baru bagi mereka.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Aamna Najmi adalah Ilmuwan Data dengan Layanan Profesional AWS. Dia bersemangat membantu pelanggan berinovasi dengan teknologi Big Data dan Kecerdasan Buatan untuk memanfaatkan nilai bisnis dan wawasan dari data. Dia memiliki pengalaman bekerja pada platform data dan proyek AI/ML di bidang kesehatan dan ilmu hayati. Di waktu luangnya, ia senang berkebun dan jalan-jalan ke tempat baru.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.David Sauerwein adalah Ilmuwan Data Senior di AWS Professional Services, yang membantu pelanggan dalam perjalanan AI/ML mereka di cloud AWS. David berfokus pada kembaran digital, peramalan, dan komputasi kuantum. Beliau meraih gelar PhD dalam bidang fisika teoretis dari Universitas Innsbruck, Austria. Ia juga seorang peneliti doktoral dan pasca doktoral di Max-Planck-Institute for Quantum Optics di Jerman. Di waktu luangnya dia suka membaca, bermain ski, dan menghabiskan waktu bersama keluarganya.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Srikrishna Chaitanya Konduru adalah Ilmuwan Data Senior dengan layanan Profesional AWS. Dia mendukung pelanggan dalam membuat prototipe dan mengoperasionalkan aplikasi ML mereka di AWS. Srikrishna berfokus pada visi komputer dan NLP. Dia juga memimpin desain platform ML dan inisiatif identifikasi kasus penggunaan untuk pelanggan di berbagai vertikal industri. Srikrishna memiliki gelar M.Sc di bidang Teknik Biomedis dari RWTH Aachen university, Jerman, dengan fokus pada Pencitraan Medis.

Bangun dan latih model visi komputer untuk mendeteksi posisi mobil dalam gambar menggunakan Amazon SageMaker dan Amazon Rekognition | Kecerdasan Data PlatoBlockchain Layanan Web Amazon. Pencarian Vertikal. Ai.Ahmed Mansour adalah Ilmuwan Data di AWS Professional Services. Dia memberikan dukungan teknis bagi pelanggan melalui perjalanan AI/ML mereka di cloud AWS. Ahmed berfokus pada penerapan NLP pada domain protein bersama dengan RL. Beliau meraih gelar PhD di bidang Teknik dari Technical University of Munich, Jerman. Di waktu luangnya dia suka pergi ke gym dan bermain dengan anak-anaknya.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS