کتابخانه Deep Java Library چیست و چه کاربردی دارد؟

Deep Java Library

12 اسفند 1400
Deep-Java-Library

کتابخانه Deep Java Library که به اختصار DJL نامیده می‌شود یک کتابخانه منبع باز است که برای ساخت و استقرار مدل‌های یادگیری عمیقِ سازگار با جاوا، با API های سطح بالا استفاده می‌شود. این کتابخانه برای ارتقاء و تقویت و همینطور شکل دهی مغز سیستم‌های هوش مصنوعی بکار می‌رود.

توسعه و نگهداری این کتابخانه بر عهده تیم وب‌ سرور شرکت آمازون است. انتشار این کتابخانه در سال 2019 و بصورت منبع باز (Open-Source) ارائه می‌شود که در کنفرانس AWS Re-Invent معرفی گردید.

این کتابخانه متشکل از Api های مختلف جاوا است که برای ساده سازی، آزمایش، آموزش، استقرار، تجزیه و تحلیل و پیش‌بینی داده‌‌ها با ساخت مدل‌های عمیق در هوش مصنوعی بکار گرفته می‌شود.

جاوا یک زبان برنامه نویسی پرکاربرد است که در اواخر دهه ۹۰ میلادی ساخته شد و توسط توسعه دهندگان فراوانی به طور گسترده تقویت شده است. البته با این حال پایتون نیز به دلیل منابع متعدد برای یادگیری زبان عمیقِ ماشین در حال رقابت با جاوا در این زمینه است.

معمولا توسعه دهندگان جاوا، در ابتدا فکر می‌کنند که کتابخانه‌هایی مخصوص این زبان در هوش مصنوعی وجود ندارد، اما این جمله نادرست است! کتابخانه‌های متعددی وجود دارند که برای توسعه ماژول‌های هوش مصنوعی با زبان جاوا سازگارند.

توسعه دهندگان با مهارت‌هایی که از یادگیری جاوا به دست آورده اند می‌توانند به راحتی مدل‌های یادگیری عمیقِ ماشین را با کمک کتابخانه‌های موجود از جمله Deep Java Library پیاده سازی‌ کنند و آنها را توسعه بخشند.

این کتابخانه نیز همانند جاوا با اصل «یک‌بار بنویس، همه جا اجرا کن» سازگار است و کاملا مفهوم شی‌گرایی در آن مشهود است. این اصل به توسعه دهندگان این اجازه را می‌دهد تا مدل یادگیری عمیق خود را با استفاده از DJL بر روی یک موتور خاص بسازند و آن را بر روی هر ماشین دیگری که انتخاب می‌کنند، مانند MXNet، Pytorch یا TensorFlow اجرا کنند.

این کتابخانه، همچنین یک تجربه بومی در جاوا را ارائه می‌دهد که شامل طیف گسترده ای از توابع داخلی، شبیه به کتابخانه‌های دیگر جاوا هستند و همچنین اسکریپت‌های مختلف یادگیری عمیقِ ماشین نیز در آن وجود دارد.

کتابخانه Deep Java Library می‌تواند با هر مدل یا رابط کاربری و همچنین با هر برنامه‌ تحت وب یا اندرویدی ادغام شود و به اجرا در بیاید.

کتابخانه DJL به توسعه دهندگان جاوا این اجازه را می‌دهد تا از IDE های موجود مثل Eclipse یا IntelliJ برای ساخت، آموزش و استقرار مدل‌های یادگیری ماشین استفاده کنند. همچنین این کتابخانه با IDE های رایج جاوا یا اجرای کد مبتنی بر نوت‌بوک Jupyter برای یادگیری عمیقِ ماشین مبتنی بر جاوا سازگار است.

کتابخانه Deep Java Library
منبع تصویر: Towards Data Science

کتابخانه Deep Java Library با استفاده از Java Native Access (JNA)، توابع یادگیری عمیقِ پرکاربرد ماشین را انتزاعی می‌کند که نتیجه آن اجرای Apache MXNet و TensorFlow می‌باشد. همچنین این کتابخانه، یک جعبه ابزار فوق‌العاده بصری و آسان است که از این ابزار به طور گسترده برای توسعه ماژول‌های طبقه‌ بندی همانند ماژول‌های طبقه بندی کفش یا لباس استفاده می‌گردد.

بطور مثال برای ساخت ماژول طبقه‌ بندی خود، ابتدا باید چند نمونه‌ آزمایشی در قالب تصاویر به ماژول ارائه دهید که در واقع با این کار، در حال آموزش به ماژول خود برای شناسایی اشیاء هستید. پس از این کار، مدل شما بَصری می‌شود و می‌تواند پیش‌بینی‌ هایی را برای آزمایش و طبقه‌ بندی اشیاء به اجرا درآورد. سپس این مدل‌ها برای جستجوی بهینه‌سازی و ارائه توصیه‌هایی به کاربر، با اپلیکیشن‌های تجارت الکترونیک یا جاهای دیگر ادغام می‌شوند.

چرخه یادگیری ماشین آنقدر مختصر است که با استفاده از DJL می توان در عرض مدت کوتاهی یک مدل دقیق ۹۰% طراحی کرد. در این مقاله به شما در مورد شروع یادگیری Deep Java و ایجاد اولین مدل Deep Learning از پیش آموزش داده شده در چند دقیقه، خواهیم گفت.

شروع کار با Deep Java Library

تشخیص اشیاء را می‌توان به عنوان یک تکنیک بینایی کامپیوتری برای مکان‌یابیِ نمونه‌هایی از اشیاء در تصاویر یا فیلم ها، با برچسب‌ها یا برچسب‌های نام مربوطه تعریف کرد. در مثال ارائه شده در زیر، ما قصد داریم اشیاء شخص را شناسایی کنیم، این می‌تواند برای فوکوس کردن لنز دوربین در حالی که یک بازی فوتبال در حال انجام است استفاده شود.

مرحله اول: تنظیم محیط

سه مرحله برای تنظیم محیط DJL در سیستم شما وجود دارد :

  • ابزار JDK 8 را نصب کنید (DJL برخی مشکلات شناخته شده با JDK 11 دارد)
  • ابزار IntelliJ a IDE را نصب کنید
  • پروژه DJL را با استفاده از IntelliJ وارد کنید

برای راهنمای نصب دقیق، بر روی پیوند کلیک کنید.

مرحله دوم: گنجاندن مخازن و وابستگی‌ها در ساخت فایل gradle برنامه جاوای شما

باید در نظر داشته باشید که وابستگی‌های زمان اجرا برای MXNet برای محیط‌های لینوکس و macOS متمایز است. برای آمار واضح به مستندات GitHub مراجعه کنید.

برای افزودن DJL به هر یک از پروژه‌های کاربردی مبتنی بر جاوا،  یک پروژه gradle با IntelliJ IDEA  ایجاد کنید و کد زیر را به پیکربندی build.gradle خود اضافه کنید.

plugins {
        id 'java'
    }
    
    repositories {                           
        jcenter()
    }
    
    dependencies {
        compile "org.apache.logging.log4j:log4j-slf4j-impl:2.12.1"
        compile "ai.djl.mxnet:mxnet-model-zoo:0.2.0"
        runtime "ai.djl.mxnet:mxnet-native-mkl:1.6.0-a:linux-x86_64"
        // Comment above line for osx and un-comment line below
        //runtime "ai.djl.mxnet:mxnet-native-mkl:1.6.0-a:osx-x86_64"
    }

منبع کد: build.Gradle با میزبانی GitHub

مرحله سوم: کلاس‌های DJL را در منبع کد خود وارد کنید

برای استفاده از کتابخانه‌های DJL در کد جاوا، باید کلاس‌های DJL را وارد کنید تا بتوانید اشیاء را ایجاد کنید و از تابع پیش‌بینی استفاده کنید.

import ai.djl.modality.cv.ImageVisualization;
import ai.djl.modality.cv.DetectedObjects;
import ai.djl.modality.cv.util.BufferedImageUtils;
import ai.djl.mxnet.zoo.MxModelZoo;
import ai.djl.repository.zoo.ZooModel;
import ai.djl.training.util.ProgressBar;

مرحله چهارم: کلاس‌های پردازش تصویر را در منبع کد خود وارد کنید

برای پردازش تصویر، باید کلاس‌های تصویر را برای ایجاد بافر تصویر و دسترسی به فایل i/o قرار دهید.

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

مرحله پنجم: کد کامل را برای تشخیص یک شیِ شبیه به شخص بنویسید

کد طبقه‌ بندی‌ کننده شی را در اَکتیویتی اصلی اضافه می‌کنیم و مدل پیش‌بینی را برای دریافت نتایج اجرا می‌کنیم. کد ارائه شده در زیر، یک مدل SSD را از مدل باغ وحش بارگیری می‌کند. یک تابع ابزار کمکی برای افزودن عناصر گرافیکی به تصویر استفاده می‌شود، مانند جعبه‌های مَحصور در اطرافِ اشیاءِ شناسایی شده توسط کد جاوا.

import ai.djl.modality.cv.ImageVisualization; 
import ai.djl.modality.cv.DetectedObjects; 
import ai.djl.modality.cv.util.BufferedImageUtils; import ai.djl.mxnet.zoo.MxModelZoo;
import ai.djl.repository.zoo.ZooModel;
import ai.djl.training.util.ProgressBar;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class SimpleSSDExample { 
public static void main(String[] args) throws Exception{ 
// Get image file path
BufferedImage img = BufferedImageUtils 
.fromUrl("https://raw.githubusercontent.com/dmlc/web-data/master/gluoncv/pose/soccer.png");

//Get resnet model from model zoo. 
ZooModel<BufferedImage, DetectedObjects> model =
MxModelZoo.SSD.loadModel(new ProgressBar()); 
//Create a new predictor from model and predict on image.
DetectedObjects predictResult = model.newPredictor().predict(img); 
// Draw Bounding boxes on image
ImageVisualization.drawBoundingBoxes(img, predictResult); 
//Save result
ImageIO.write(img, "png", new File("ssd.png"));
model.close(); 
} 
}

منبع کد: SimpleSDInference.java با میزبانی GitHub

مرحله ششم: مدل را با ارائه یک تصویر ورودی و سپس تجزیه و تحلیل نتایج آزمایش کنید

کد بالا، سه بازیکن را در تصویر ورودی شناسایی می‌کند و نتیجه را به عنوان ssd.png در دایرکتوری کاری سیستم شما ذخیره می‌کند.

تصویر ورودی داده شده به مدل طبقه‌ بندی کننده برای شناسایی
تصویر ورودی داده شده به مدل طبقه‌ بندی کننده برای شناسایی | منبع تصویر: ارائه شده تحت مجوز Apache-2.0 در Gluon-CV
پس از آموزش مدل، سیستم می‌تواند افراد را به عنوان اشیاء شناسایی کند
پس از آموزش مدل، سیستم می‌تواند افراد را به عنوان اشیاء شناسایی کند | منبع تصویر : ارائه شده تحت مجوز Apache-2.0 در Gluon-CV

کتابخانه عمیق جاوا فقط در مورد شناسایی و طبقه‌ بندی اشیاء نیست. این در مورد محصولات نرم افزاری و پارادایم‌های مختلفی است که می‌توان از آن ایجاد کرد مانند نرم افزار تشخیص ماسک صورت، مدل طبقه‌ بندی کننده کفش برای سایت‌های تجارت الکترونیک، همچنین می‌تواند توسط سیستم امنیتی برای شناسایی هر گونه اشیاء غیر معمول یا مشکوک استفاده شود.

مدل‌های یادگیری ماشینی، ظرفیت محاسباتی بسیار بالایی دارند. اگر از API های قوی استفاده شود، می‌توانند موانع و اشیاء دوردَست را نیز شناسایی کنند. در خودروهای خودکار، مدل‌های یادگیریِ عمیق برای شناسایی هرگونه مانع ناگهانی یا هر وسیله نقلیه دیگری که در خیابان ظاهر می‌شود، استفاده می‌شود.

از این کتابخانه برای توسعه بازی‌های مبتنی بر واقعیت مجازی همانند بازی‌های تیراندازی، شناسایی و فوکوس دوربین بر روی اشیاء و همینطور فیلترهای اینستاگرام استفاده می‌شود.

برای آشنایی با کتابخانه Deep Java Library یا به اختصار (DJL) بر روی لینک‌های زیر کلیک کنید:

مخزن رسمی کتابخانه Deep Java Library در گیت‌هاب

آشنایی با چند نمونه از کتابخانه Deep Java Library

اگر با مبحث هوش مصنوعی آشنایی ندارید پیشنهاد می‌کنیم مقاله‌های هوش مصنوعی چیست؟ و زبان‌های برنامه نویسی هوش مصنوعی را نیز مطالعه نمایید.


منبع: وب سایت codingninjas

نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.