۲۷ مهر ۱۴۰۴

Techboy

اخبار و اطلاعات روز تکنولوژی

یادگیری ماشین در جاوا، پردازش تصویر را تسریع می‌کند.

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

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

[

علاقه به یادگیری ماشین در سال‌های اخیر به‌ طور پیوسته رشد کرده است. به‌ طور خاص، شرکت‌ها اکنون از یادگیری ماشین برای تشخیص تصویر در انواع موارد استفاده می‌کنند. کاربردهایی در صنعت خودروسازی، بهداشت و درمان، امنیت، خرده‌فروشی، ردیابی خودکار محصولات در انبارها، کشاورزی و زراعت، شناسایی غذا و حتی ترجمه لحظه‌ای با اشاره به دوربین تلفن‌تان. به‌ کمک یادگیری ماشین و تشخیص بصری، ماشین‌ها می‌توانند تشخیص سرطان و COVID-19 را در اسکن‌های MRI و CT شناسایی کنند.

,

امروزه بسیاری از این راهکارها عمدتاً با پایتون و با استفاده از جعبه‌ابزارهای منبع باز و اختصاصی یادگیری ماشین توسعه داده می‌شوند، که هر کدام APIهای خود را دارند. با وجود محبوبیت جاوا در سازمان‌ها، استانداردی برای توسعه برنامه‌های یادگیری ماشین با جاوا وجود ندارد. JSR-381 برای رفع این کمبود توسعه یافته است تا مجموعه‌ای از APIهای استاندارد، انعطاف‌پذیر و دوستانه برای جاوا ارائه دهد که برای برنامه‌های تشخیص بصری (VisRec) مانند طبقه‌بندی تصویر و شناسایی شیء استفاده می‌شود. JSR-381 چندین پیاده‌سازی دارد که بر بسترهای یادگیری ماشین مانند TensorFlow، MXNet و DeepNetts متکی هستند. یکی از این پیاده‌سازی‌ها بر پایه Deep Java Library (DJL)، یک کتابخانه متن باز توسط آمازون توسعه یافته است تا یادگیری ماشین را در جاوا بسازد. DJL امکاناتی را برای چارچوب‌های محبوب یادگیری ماشین مانند TensorFlow، MXNet و PyTorch فراهم می‌کند، به‌طوری که روتین‌های پردازش تصویر مورد نیاز را به‌صورت بسته در اختیار می‌گذارد و گزینه‌ای انعطاف‌پذیر و ساده برای کاربران JSR-381 می‌شود.

,

در این مقاله نشان می‌دهیم که توسعه‌دهندگان جاوا چگونه می‌توانند با استفاده از API VisRec در JSR-381، طبقه‌بندی تصویر یا شناسایی شیء را با مدل‌های پیش‌آموزش دیده DJL در کمتر از ۱۰ خط کد پیاده‌سازی کنند. همچنین نشان می‌دهیم که کاربران می‌توانند مدل‌های یادگیری ماشین پیش‌آموزش دیده را در کمتر از ۱۰ دقیقه با دو مثال مختلف استفاده کنند. بیایید شروع کنیم!

,

شناسایی ارقام دست‌نویس با استفاده از یک مدل پیش‌آموزش دیده

,

یک کاربرد مفید و مثال «سلام دنیا» در تشخیص بصری، شناسایی ارقام دست‌نویس است. شناسایی ارقام دست‌نویس برای یک انسان به‌نظر ساده می‌آید. به‌ کمک توانایی پردازش و همکاری زیرسیستم‌های بصری و تطبیق الگو در مغزمان، معمولاً می‌توانیم رقم صحیح را از یک سند دست‌نویس به‌دست‌وچاپی تشخیص دهیم. اما این کار که برای انسان ساده است، برای ماشین به دلیل تنوع زیاد بسیار پیچیده است. این یک کاربرد مناسب برای یادگیری ماشین، به‌ویژه تشخیص بصری است. مخزن JSR‑۳۸۱ یک مثال عالی دارد که از API VisRec در JSR‑۳۸۱ برای شناسایی صحیح ارقام دست‌نویس استفاده می‌کند. این مثال ارقام دست‌نویس را در مقابل  داده‌مجموعه ارقام دست‌نویس MNIST، یک پایگاه داده عمومی شامل بیش از ۶۰ هزار تصویر، مقایسه می‌کند. پیش‌بینی آنچه تصویر نشان می‌دهد، طبقه‌بندی تصویر نامیده می‌شود. مثال ما به تصویری جدید نگاه کرده و سعی می‌کند احتمال هر رقم خاص را تعیین کند.

,

برای این کار، API VisRec یک رابط ImageClassifier فراهم می‌کند که می‌تواند برای کلاس‌های خاص جاوا برای تصاویر ورودی با پارامترهای کلی استفاده شود. همچنین یک متد classify() دارد که طبقه‌بندی تصویر را انجام می‌دهد و یک نقشهٔ احتمالات کلاس برای تمام کلاس‌های ممکن تصویر برمی‌گرداند. به‌طور معمول در API VisRec، هر مدل یک متد سازندهٔ static builder() دارد که یک شیء سازندهٔ مربوطه را برمی‌گرداند و به توسعه‌دهنده اجازه می‌دهد تمام تنظیمات مربوط، مانند imageHeight و imageWidth، را پیکربندی کند.

,

برای تعریف یک طبقه‌بند تصویر برای مثال ارقام دست‌نویس، ورودی را با استفاده از

inputClass(BufferedImage.class). With that you specify the class which is used to represent the image.

پیکربندی می‌کنید. شما از

imageHeight(28)

و

mageWidth(28)

برای تغییر اندازهٔ تصویر ورودی به شکل ۲۸×۲۸ استفاده می‌کنید، چون همان اندازهٔ اصلی‌ای است که برای آموزش مدل به‌کار رفته بود.

,

پس از ساخت شیء طبقه‌بند، تصویر ورودی را به طبقه‌بند می‌فرستید تا تصویر را شناسایی کند.

, عکس صفحه 2020 12 18 ساعت 2.43.09 ب.ظ,

اجرای این کد خروجی زیر را تولید می‌کند.

, عکس صفحه 2020 12 18 ساعت 2.44.26 ب.ظ,

مدل پنج گزینهٔ ممکن برای رقم موجود در تصویر را به همراه احتمالات هر گزینه شناسایی می‌کند. طبقه‌بند به‌درستی پیش‌بینی می‌کند که رقم اصلی ۰ با احتمال غلبه‌کننده ۹۹٫۹۸٪ است.

,

یک تعمیم واضح از این مورد این سؤال است که چه‌کار باید کرد وقتی نیاز به شناسایی اشیاء مختلف در همان تصویر دارید؟

,

شناسایی اشیاء با استفاده از یک مدل پیش‌آموزش دیده Single Shot Detector (SSD)

,

Single Shot Detector (SSD) یک مکانیزم است که اشیاء را در تصاویر با استفاده از یک شبکه عصبی عمیق تنها شناسایی می‌کند. در مثال، شما اشیاء را در یک تصویر با مدل پیش‌آموزش دیده SSD شناسایی می‌کنید. شناسایی اشیاء یک کار بصری چالش‌برانگیزتر است. علاوه بر طبقه‌بندی اشیاء در تصاویر، شناسایی اشیاء مکان آن‌ها را در تصویر نیز مشخص می‌کند و می‌تواند یک جعبهٔ محدوده (bounding box) اطراف هر شیء مورد علاقه به همراه برچسب متنی (class) رسم کند.

,

مکانیزم SSD توسعه‌ای تازه در یادگیری ماشین است که با سرعت شگفت‌انگیزی اشیاء را شناسایی می‌کند، در حالی که دقت را نسبت به مدل‌های محاسباتی سنگین‌تر حفظ می‌کند. می‌توانید بیشتر در مورد مدل SSD از طریق درک SSD MultiBox — تشخیص لحظه‌ای اشیاء در یادگیری عمیق و تمرین در کتاب Dive into Deep Learning بیاموزید.

,

با پیاده‌سازی DJL برای JSR‑۳۸۱، کاربران به یک پیاده‌سازی پیش‌آموزش دیده از مدل SSD دسترسی دارند که بلافاصله قابل استفاده است. DJL از ModelZoo برای ساده‌سازی استقرار مدل‌ها استفاده می‌کند. در بلوک کد زیر، یک مدل پیش‌آموزش دیده را با متد ModelZoo.loadModel() بارگذاری می‌کنید، یک کلاس تشخیص شیء ایجاد می‌کنید و این مدل را بر روی تصویر نمونه اعمال می‌کنید.

, عکس صفحه 2020 12 18 ساعت 2.45.25 ب.ظ,

در اینجا یک تصویر جدید که می‌توانیم استفاده کنیم وجود دارد.

, عکس صفحه 2020 12 18 ساعت 2.46.23 ب.ظ,

اجرای کد ما بر روی این تصویر نتیجه زیر را تولید می‌کند:

, عکس صفحه 2020 12 18 ساعت 2.47.14 ب.ظ,

اگر می‌خواهید جعبه‌های محدوده (bounding boxes) را اطراف هر شیء شناسایی شده بر روی تصویر اضافه کنید، می‌توانید با چند خط کد اضافی این کار را انجام دهید. برای اطلاعات بیشتر، به کامل مثال GitHub مراجعه کنید. مدل سه شیء مورد علاقه (دوچرخه، ماشین و سگ) را طبقه‌بندی می‌کند، جعبهٔ محدوده‌ای اطراف هر یک می‌کشد و سطح اطمینان را که توسط احتمالات نشان داده می‌شود، ارائه می‌دهد.

, عکس صفحه 2020 12 18 ساعت 2.48.10 ب.ظ,

مراحل بعدی چیست؟

,

در این پست، ما تنها به سطح کار با پیاده‌سازی DJL از API JSR‑۳۸۱ پرداختیم. می‌توانید با مخزن مدل‌های پیش‌آموزش دیده در ModelZoo مدل‌های بیشتری را کشف و پیاده‌سازی کنید یا مدل خودتان را بیاورید.

,

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

,

موارد استفادهٔ زیادی برای DJL وجود دارد؛ می‌توانید یک برنامهٔ پرسش و پاسخ برای خدمات مشتری، تخمین وضعیت بر روی حرکات یوگای خود یا آموزش مدل خود برای شناسایی نفوذگران در حیاط پشتی خود را توسعه دهید. کیت شروع Spring Boot نیز ادغام ML با برنامه‌های Spring Boot را آسان می‌کند. می‌توانید بیشتر درباره DJL را از طریق وبلاگ معرفی، وب‌سایت و مخزن مثال‌ها بیاموزید. به مخزن Github سر بزنید و با ما در کانال Slack همکاری کنید.

]