Cara Mengidentifikasi Objek pada Level Piksel menggunakan Deep Learning di Java – Menuju AI

Cara Mengidentifikasi Objek pada Level Piksel menggunakan Deep Learning di Java – Menuju AI

Author(s): Xin Yang

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda membuat produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

dengan Deep Java Library

Segmentasi semantik adalah teknik yang ampuh dalam pembelajaran mendalam yang memungkinkan identifikasi objek dalam gambar pada tingkat piksel. Tujuan segmentasi semantik adalah memberi label pada setiap piksel gambar dengan kelas yang sesuai. Dalam postingan blog ini, kita akan mengeksplorasi cara menggunakan segmentasi semantik untuk mengidentifikasi objek dalam gambar di Java.

Perhatikan bahwa segmentasi semantik berbeda dari segmentasi instance, yang mampu membedakan beberapa instance yang termasuk dalam kelas yang sama. Oleh karena itu, jika kita memiliki dua objek dengan kategori yang sama pada citra masukan, peta segmentasi akan memberikan label yang sama untuk kedua objek tersebut. Untuk membedakan instance terpisah dari kelas yang sama, silakan lihat segmentasi instance.

Segmentasi semantik dapat diterapkan pada berbagai kasus penggunaan seperti mobil self-driving, pencarian gambar visual, pencitraan medis, dan sebagainya. Misalnya, segmentasi semantik dapat digunakan untuk secara akurat mengidentifikasi dan mengklasifikasikan berbagai objek di lingkungan, seperti pejalan kaki, kendaraan, rambu lalu lintas, dan bangunan.

Segmentasi semantik untuk mobil self-driving (Sumber)

Deep Java Library (DJL) adalah Framework Deep Learning (DL) berbasis Java. Ini dapat digunakan untuk membuat dan melatih model, serta menjalankan inferensi. DJL menyediakan fungsionalitas yang diperkaya untuk menerapkan Segmentasi Semantik ke kasus penggunaan. Dalam postingan ini, kami akan mendemonstrasikan cara menggunakan fungsionalitas ini untuk mencapai beberapa kasus penggunaan umum.

Prasyarat

Untuk memulai, pertama-tama kita perlu mendeklarasikan dependensi DJL di file build.gradle modul:

dependensi {
implementation “ai.djl:api:0.20.0”
runtimeOnly “ai.djl.pytorch:mesin-pytorch:0.20.0”
runtimeOnly “ai.djl.android:pytorch-native:0.20.0”
}

Jalankan Inferensi

Setelah kita menyiapkan dependensi, kita dapat mulai menulis kode untuk menjalankan inferensi. Dalam contoh ini, kami akan menggunakan model DeepLabV3, yang merupakan model canggih untuk segmentasi semantik.

Untuk menjalankan inferensi Segmentasi Semantik, muat model Segmentasi Semantik terlebih dahulu. Kemudian buat prediktor dengan Model dan Translator yang diberikan. Dalam hal ini, SemanticSegmentationTranslator akan digunakan.

Setelah memuat model, beri model gambar dan terima “peta segmentasi” sebagai output. Ini dapat dilakukan dengan memanggil Predictor.predict(). Prediktor mengambil Gambar sebagai masukan, dan mengembalikan CategoryMask sebagai keluaran. CategoryMask berisi larik 2D yang mewakili kelas setiap piksel pada gambar asli. Kita dapat menggunakan kode berikut untuk melakukan ini:

String url = “https://mlrepo.djl.ai/model/cv/semantic_segmentation/ai/djl/pytorch/deeplabv3/0.0.1/deeplabv3.zip”;
Kriteria kriteria =
Kriteria.pembangun()
.setTypes(Image.class, CategoryMask.class)
.optModelUrls(url)
.optTranslatorFactory(baru SemanticSegmentationTranslatorFactory())
.optEngine(“PyTorch”)
.optProgress(ProgressBar baru())
.membangun();
coba (ZooModel model = criteria.loadModel();
Predictor prediktor = model.newPredictor()) {
Topeng Topeng Kategori = prediktor.prediksi(img);
// Lakukan sesuatu dengan `topeng`
}

Misalnya, kita memiliki gambar warna RGB 600x800x3:

Output CategoryMask berisi array mask 600×800×1 yang mewakili label kelas sebagai bilangan bulat. Di bawah ini adalah susunan topeng yang diturunkan sampelnya:

DJL juga menyediakan utilitas untuk memvisualisasikan hasil segmentasi semantik, seperti kemampuan untuk melapisi peta segmentasi di atas gambar asli untuk menyorot area yang telah diklasifikasikan model sebagai milik kelas tertentu. Ini dapat berguna untuk berbagai kasus penggunaan.

Gunakan Kasus

Kasus Penggunaan 1: Mobil Mengemudi Sendiri

Salah satu kasus penggunaan segmentasi semantik adalah memungkinkan mobil self-driving untuk memahami dan memahami sekelilingnya. Misalnya, dengan mengidentifikasi secara akurat posisi kendaraan lain di jalan raya, mobil yang dapat mengemudi sendiri dapat membuat keputusan yang tepat tentang cara bernavigasi di lalu lintas. Demikian pula, dengan mengidentifikasi pejalan kaki dan rintangan lainnya secara akurat, mobil self-driving dapat mengambil tindakan yang tepat untuk menghindari tabrakan.

Untuk mengidentifikasi objek dalam gambar, panggil Predictor.predict() untuk memberi makan model dengan gambar di bawah ini:

Topeng Topeng Kategori = prediktor.prediksi(img);
Pemandangan jalanan (Sumber)

Kemudian, untuk memvisualisasikan hasilnya, panggil CategoryMask.drawMask() untuk menyorot objek yang terdeteksi pada gambar.

topeng.drawMask(img, 180, 0);

Kasus Penggunaan 2: Ekstrak objek dari foto

Kasus penggunaan lain untuk segmentasi semantik adalah dalam proses mengekstraksi objek dari foto untuk aplikasi paspor. Misalnya, pertimbangkan skenario di mana seseorang diharuskan mengirimkan foto gaya paspor sebagai bagian dari aplikasi mereka. Dalam kasus ini, tujuannya mungkin menggunakan segmentasi semantik untuk mengekstrak wajah individu dari foto dan menggunakannya untuk menghasilkan foto bergaya paspor yang memenuhi spesifikasi yang diperlukan.

Untuk mengekstrak wajah dalam gambar, panggil Predictor.predict() untuk memberi makan model dengan gambar di bawah:

Topeng Topeng Kategori = prediktor.prediksi(img);
Gambar potret (Sumber)

Kemudian panggil metode CategoryMask.getMaskImage() . Perhatikan bahwa 15 adalah ID dari kelas orang tersebut.

Gambar orang = mask.getMaskImage(img, 15);
orang = orang.resize(img.getWidth(), img.getHeight(), true);

Kasus Penggunaan 3: Ganti latar belakang untuk konferensi video

Kasus penggunaan ketiga untuk segmentasi semantik sedang dalam proses mengganti latar belakang gambar untuk konferensi video. Misalnya, pertimbangkan skenario di mana seseorang berpartisipasi dalam konferensi video dan ingin mengganti latar belakangnya dengan gambar yang lebih profesional atau menarik. Dalam hal ini, kita dapat menggunakan segmentasi semantik untuk mengekstrak latar depan secara otomatis (mis. tubuh dan objek apa pun yang dipegang) dari latar belakang gambar.

Untuk mencapai ini, kita dapat mengekstrak latar depan individu dari latar belakang gambar. Latar depan yang diekstraksi kemudian dapat digabungkan ke gambar latar belakang baru. Hal ini memungkinkan individu untuk mengganti latar belakang gambar dengan gambar yang lebih profesional atau menarik, yang dapat berguna untuk konferensi video di mana individu tersebut ingin menampilkan penampilan yang lebih halus.

Untuk mengekstrak latar depan dalam sebuah gambar, panggil Predictor.predict() untuk memberi makan model dengan gambar di bawah ini:

Topeng Topeng Kategori = prediktor.prediksi(img);
Adegan konferensi video (Sumber)

Kemudian ganti latar belakang dengan gambar lain:

Latar belakang gambar = ImageFactory.getInstance().fromFile(Paths.get(“image_path”));
Gambar orang = mask.getMaskImage(img, 15);
orang = orang.resize(img.getWidth(), img.getHeight(), true);
background.drawImage(orang, benar);

Anda dapat menemukan lebih banyak kode contoh DJL di sini.

DJL juga menyediakan aplikasi Android dengan semantic_segmentation yang dapat mengambil gambar dan menjalankan semantic segmentation dengan berbagai pilihan.

Kesimpulan

Singkatnya, menggunakan Perpustakaan Deep Java, mudah memuat model pembelajaran mendalam untuk segmentasi semantik dan menggunakannya untuk mengidentifikasi objek dalam gambar pada tingkat piksel. Ini dapat berguna untuk aplikasi seperti mobil self-driving, di mana penting untuk secara akurat mendeteksi dan mengidentifikasi objek di lingkungan. Dengan Perpustakaan Deep Java, Anda dapat dengan cepat dan mudah menjalankan model pembelajaran mendalam di Java, menjadikannya alat yang berharga bagi setiap pengembang Java yang bekerja di bidang visi komputer.

Cara Mengidentifikasi Objek pada Level Piksel menggunakan Deep Learning di Java awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyorot dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Scott Anderson