Diposting oleh Paul Ruiz – Insinyur Hubungan Pengembang Senior
Awal tahun ini, kami meluncurkan Google AI Edge, seperangkat alat dengan akses mudah ke tugas ML siap pakai, kerangka kerja yang memungkinkan Anda membangun pipeline ML, dan menjalankan LLM populer serta model kustom—semuanya di perangkat Anda. Untuk Kecerdasan Buatan di Android Spotlight Week, tim Google menyoroti berbagai cara pengembang Android dapat menggunakan pembelajaran mesin untuk meningkatkan aplikasi mereka.
Dalam postingan ini, kita akan mendalami Google AI Edge Torch, yang memungkinkan Anda mengonversi model PiTorch agar berjalan secara native di Android dan platform lainnya, menggunakan pustaka Google AI Edge LiteRT (sebelumnya TensorFlow Lite) dan MediaPipe Tasks. Untuk melihat alat canggih lainnya, pastikan untuk menjelajahi AI lainnya di konten Android Spotlight Week.
Untuk membantu Anda memulai Google AI Edge, kami telah menyediakan contoh yang tersedia di GitHub sebagai lab kode yang dapat dieksekusi. Mereka menunjukkan cara mengonversi model MobileViT untuk klasifikasi gambar (kompatibel dengan MediaPipe Tasks) dan model DIS untuk segmentasi (kompatibel dengan LiteRT).
Keluaran model DIS
Blog ini memandu Anda tentang cara menggunakan model MobileViT dengan tugas MediaPipe. Perhatikan bahwa runtime LiteRT menyediakan kemampuan serupa, memungkinkan Anda membangun alur dan fungsi khusus.
Jadikan model klasifikasi gambar MobileViT kompatibel dengan MediaPipe Tasks
Setelah Anda menginstal dependensi dan utilitas yang diperlukan untuk aplikasi Anda, langkah pertama adalah mengunduh model PiTorch yang ingin Anda konversi, bersama dengan komponen MobileViT lainnya yang mungkin Anda perlukan (seperti prosesor gambar untuk pengujian).
dari transformator mengimpor MobileViTImageProcessor, MobileViTForImageClassification hf_model_path=”apple/mobilevit-small” processor = MobileViTImageProcessor.from_pretrained(hf_model_path) pt_model = MobileViTForImageClassification.from_pretrained
Karena hasil akhir tutorial ini akan berfungsi dengan tugas MediaPipe, ambil langkah ekstra untuk mencocokkan bentuk input dan output yang diharapkan untuk klasifikasi gambar dengan apa yang digunakan dalam tugas klasifikasi gambar MediaPipe.
kelas HF2MP_ImageClassificationModelVrapper(nn.Module): def __init__(self, hf_image_classification_model, hf_processor): super().__init__() self.model = hf_image_classification_model if hf_scale_processor_self else: self.rescale_factor = 1.0 def forward(self, image: torch.Tensor) : # BHVC -> BCHV. gambar = gambar.permute(0, 3, 1, 2) # RGB -> BGR. image = image.flip(dims=(1,)) # Skala (0, 255) -> (0, 1). gambar = gambar * self.rescale_factor logits = self.model(pixel_values=image).logits # (B, 1000) float32. # Softmax diperlukan untuk model klasifikasi MediaPipe. logits = torch.nn.fungsional.softmak(logits, dim=-1) mengembalikan logits hf_model_path=”apple/mobilevit-small” hf_mobile_vit_processor = MobileViTImageProcessor.from_pretrained(hf_model_path) hf_mobile_vit_model(Mobile_vit_model). jalur) dibungkus_pt_model = HF2MP_ImageClassificationModelVrapper( hf_mobile_vit_model, hf_mobile_vit_processor).eval()
Baik Anda berencana menggunakan model MobileViT yang dikonversi dengan MediaPipe Tasks atau LiteRT, langkah selanjutnya adalah mengonversi model ke format .tflite.
Pertama, cocokkan bentuk masukan. Dalam contoh ini, bentuk masukannya adalah 1, 256, 256, 3 untuk gambar RGB tiga saluran berukuran 256×256 piksel.
Kemudian panggil fungsi konversi AI Edge Torch untuk menyelesaikan proses konversi.
impor ai_edge_torch sample_args = (torch.rand((1, 256, 256, 3)),) edge_model = ai_edge_torch.convert(wrapped_pt_model, sample_args)
Setelah mengonversi model, Anda dapat menyempurnakannya lebih lanjut dengan menyertakan metadata untuk tag klasifikasi gambar. Tugas MediaPipe akan menggunakan metadata ini untuk menampilkan atau mengembalikan informasi yang relevan setelah klasifikasi.
dari mediapipe.tasks.pithon.metadata.metadata_vriters impor image_classifier dari mediapipe.tasks.pithon.metadata.metadata_vriters impor metadata_vriters dari mediapipe.tasks.pithon.vision.image_classifier impor ImageClassifier dari pathlib import_pathlib_pathlib flat_sport_ rav.tflite') edge_model.ekport(flatbuffer_file ) tflite_model_buffer = flatbuffer_file.read_bites() //Ekstrak tag klasifikasi gambar dari model HF untuk kemudian diintegrasikan ke dalam model TFLite. labels = list(hf_mobile_vit_model.config.id2label.values()) vriter = image_classifier.MetadataVriter.create( tflite_model_buffer, input_norm_mean=(0.0), # Normalisasi tidak diperlukan untuk model ini. input_norm.davriter(Lav) ().add( label ), ) tflite_model_buffer, _ = writer.populate()
Setelah semua selesai, saatnya mengintegrasikan model Anda ke dalam aplikasi Android Anda. Jika Anda mengikuti notebook resmi Colab, ini berarti menyimpan model secara lokal. Untuk contoh klasifikasi gambar dengan tugas MediaPipe, jelajahi repositori GitHub. Informasi lebih lanjut dapat ditemukan di dokumentasi resmi Google AI Edge.
Model ViT yang baru dikonversi dengan tugas MediaPipe
Setelah Anda memahami cara mengonversi model klasifikasi gambar sederhana, Anda dapat menggunakan teknik yang sama untuk mengadaptasi model PiTorch yang berbeda untuk alat Google AI Edge LiteRT atau MediaPipe Tasks di Android.
Untuk lebih mengoptimalkan model, pertimbangkan metode seperti kuantisasi selama konversi. Lihat contoh GitHub untuk mempelajari lebih lanjut tentang cara mengonversi model segmentasi gambar PiTorch ke LiteRT dan mengkuantisasinya.
Apa selanjutnya
Untuk terus mengikuti perkembangan Google AI Edge, carilah pengumuman di saluran YouTube dan blog Google untuk Pengembang.
Kami menantikan cara Anda menggunakan fitur ini dalam proyek Anda. Gunakan hashtag #AndroidAI untuk membagikan masukan atau apa yang telah Anda buat di media sosial dan lihat konten AI lainnya di Android Spotlight Week!