
انتقال به دانشگاه فردوسی مشهد
بعد از حدود ربع قرن حضور در دانشگاه حکیم سبزواری، به دانشگاه فردوسی مشهد منتقل شدهام. از همه دوستانی که در این مدت همراه من بودند، سپاسگزاری میکنم. برای اطلاع بیشتر به صفحه شخصی من در گیتهاب مراجعه فرمایید.
بعد از حدود ربع قرن حضور در دانشگاه حکیم سبزواری، به دانشگاه فردوسی مشهد منتقل شدهام. از همه دوستانی که در این مدت همراه من بودند، سپاسگزاری میکنم. برای اطلاع بیشتر به صفحه شخصی من در گیتهاب مراجعه فرمایید.
مدتی است که صفحه شخصی من به آدرس mamintoosi.ir غیرفعال شده و از گیت هاب به آدرس https://mamintoosi.github.io/ استفاده میکنم.
در مورد نحوهی ایجاد یک صفحه شخصی در گیتهاب در سایتهای مختلفی منجمله سایتهای زیر توضیحات خوبی داده شده است:
هر یک از موارد بالا ویژگیهای خاص خودشان را دارند، اما دقیقا مطابق خواسته من نیستند. مبتنی بر دو مورد اول، آموزش ایجاد یک صفحه شخصی را در سه بخش کوتاه آماده کردهام که لینک دانلود آنها در ادامه تقدیم میگردد. در این آموزش یک صفحه شخصی فرضی برای شهید سلیمانی ایجاد میشود.
بخش اول: ایجاد مخزن گیتهاب
بخش دوم: قرار دادن یک متن ساده در صفحه شخصی
بخش سوم: قرار دادن یک قالب از یش آماده در صفحه شخصی توسط گیتهاب دسکتاپ
یکی از دوستان درخصوص اجرای برنامههای یادگیری عمیق در گوگل کولب و چگونگی دیدن سورس کد توابع مورد استفاده سؤالاتی داشتند که به پرسش ایشان در قالب اجرای برنامه شناسایی هندوانه در تصویر پاسخ دادم. از آنجا که پرسش ایشان احتمالا مورد سؤال دیگر دانشجویان هم باشد، تکه فیلمی که در این باره ضبط کرده بودم را در اینجــــــا به اشتراک میگذارم.
کد اصلی را میتوانید در آدرس زیر ملاحظه فرمایید:
drmdm/Whats-My-Melon: An Exploration into Convolutional Neural Networks (github.com)
پایتون به ابزاری قدرتمند در علوم داده تبدیل شده است. NLTK از جمله کتابخانههای پایتون است که برای پردازش زبان طبیعی بکار میرود. هضــــم ابزار پردازش زبان فارسی در پایتون است که توسط سبحـه فراهم شده است. برنامه زیر، برنامهی تستی است که در سایت هضم قرار داده شده است:
from __future__ import unicode_literals from hazm import * normalizer = Normalizer() normalizer.normalize('اصلاح نويسه ها و استفاده از نیمفاصله پردازش را آسان مي كند') sent_tokenize('ما هم برای وصل کردن آمدیم! ولی برای پردازش، جدا بهتر نیست؟') word_tokenize('ولی برای پردازش، جدا بهتر نیست؟') stemmer = Stemmer() stemmer.stem('کتابها') lemmatizer = Lemmatizer() lemmatizer.lemmatize('میروم') tagger = POSTagger(model='resources/postagger.model') tagger.tag(word_tokenize('ما بسیار کتاب میخوانیم')) chunker = Chunker(model='resources/chunker.model') tagged = tagger.tag(word_tokenize('کتاب خواندن را دوست داریم')) tree2brackets(chunker.parse(tagged)) parser = DependencyParser(tagger=tagger, lemmatizer=lemmatizer) parser.parse(word_tokenize('زنگها برای که به صدا درمیآید؟'))
معمولاً نصب هضم و اجرای کد بالا تا خط ۱۵ مشکل خاصی ندارد. در دستور POSTagger مدلی مورد استفاده قرار میگیرد که از گیتهاب هضم قابل دریافت است. مشکل اصلی با این دستور، نیاز به کتابخانه libwapiti است که فایلهای باینری آن – حداقل در زمان نوشتن این متن – برای ویندوز موجود نیست. روی دستگاه من نسخههای مختلف کامپایلر ++C وجود دارد اما در هنگام نصب و کامپایل با خطا مواجه میشویم ):
در چنین مواقعی کار در لینوکس بسیار راحت است و کامپایل بستهها به راحتی انجام میپذیرد.
روشهای بسیاری همچون نصب جداگانه لینوکس، ماشین مجازی و قابلیت Hyper-V سختافزارهای جدید هست که میتوان بکار گرفت. همه آنها را قبلا آزمودهام اما با هیچکدام از آنها حال نکردهام. مدتی است که ویندوز ۱۰ امکان اجرای نسخه خط فرمانی لینوکس در بستر ویندوز را تحت عنوان Windows Subsystem for Linux یا WSL فراهم آورده است که به نظر من بسیار جالب آمد. روش کار با آن و نیازمندیهای آن در سایتهای مختلفی مثل سایتهای زیر آمده است:
چگونه لینوکس را بصورت کامل در ویندوز داشته باشیم و
اوبونتوی 18.04 با استفاده از راهنمای خود میکروسافت به آسانی در سیستم من نصب شد.
پس از نصب WSL، پایتون و ژوپیترو بستههای مورد نیاز را نصب کردم.
sudo apt update && upgrade sudo apt install python3 python3-pip ipython3 sudo apt install python-pip pip3 install jupyter sudo apt install jupyter-notebook pip install nltk pip3 install hazm sudo apt-get install graphviz
پس از آن برنامه فوق تا خط ۲۲ اجرا شد. اما برای نمایش گراف در خط ۲۴ و دستور DependencyParser نیازمند جاوا بودم که آن را مطابق این راهنما هم نصب کردم و در نهایت مثال به خوبی اجرا شد:
اوبونتوی نصب شده با روش بالا فاقد رابط گرافیکی کاربر است. در صورت تمایل مطابق با لینکهای ارائه شده در بالا میتوان رابط کاربری داشت و با Remote Desktop متصل شد، اما من نیازی نداشتم. پس از اجرای jupyter notebook در خط فرمان اوبونتو، یک آدرس مانند آدرس زیر به ما داده میشود که با کپی کردن آن در مرورگر ویندوز، ژوپیتر لینوکس قابل دسترس خواهد بود.
http://localhost:8888/?token=c02149abdc2ad69d9e8e7497faf0bbed48ffd44264f935f1
دقت داشته باشید که برای دسترسی به فایلها در پارتیشهای خود باید ابتدا به پوشه mnt وارد شوید و سپس ژوپیترنوتبوک را اجرا کنید.
مدلهای Word2vec و GloVe در زمینه نمایش برداری کلمات در حوزه پردازش زبان طبیعی مشهور هستند. سایتها و منابع مناسب مختلفی همچون دو مورد زیر برای یادگیری Word2vec موجود هستند:
https://www.kaggle.com/c/word2vec-nlp-tutorial
https://www.tensorflow.org/tutorials/representation/word2vec
هدف این پست آموزش این دو مورد نیست، فقط یک مثال کوچک مشهور را خواهیم دید. در بسیاری از موارد آموزشی، مثال {«زن» + «مرد» – «پادشاه»} را میبینیم که نتیجه آن «ملکه» میشود:
King – man + woman → Queen
برای اجرای آن باید یک مدل آموزش دیده داشته باشیم، یکی از این مدلها، فایل یک و نیم گیگابایتی گوگل (مبتنی بر مدل Word2vec) است؛ که حجم زیاد آن، ممکن است مانعی برای اجرای مثال مربوطه باشد. برای تست لازم نیست این فایل را داشته باشیم و میتوان از فایلهایی با حجم کمتر مانند glove-wiki-gigaword-100 (مبتنی بر مدل GloVe) استفاده کرد. این دو مدل با هم متفاوت هستند، اما فعلاً فقط مایلم یک مثال اجرا کنم. مثال ۴ خطی زیر نحوه کار را نشان میدهد:
[python] import gensim.downloader as api word_vectors = api.load("glove-wiki-gigaword-100") result = word_vectors.most_similar(positive=['king','woman'], negative=['man']) print(result[0][0]) [/python]
خروجی قطعه کد بالا «queen» خواهد بود.
فایل glove-wiki-gigaword-100 که مشتمل بر ۴۰۰ هزار بردار از ویکی پدیا بوده و ۱۲۸ مگابایت حجم دارد، با اجرای مثال فوق به صورت خودکار دانلود میشود. مشخصات این فایل و چندین مدل دیگر را میتوانید دراین مقاله و اینجــــــا ملاحظه فرمایید.
مثال بالا در آناکوندا نسخه 1.9.2 و gensim نسخه 3.6.0 اجرا شده است.
شکل زیر نمایش برداری مثال بالا را نشان میدهد:
اجرای این مثال در فارسی هم درصورت داشتن یک مدل مناسب امکانپذیر است. مدل با حجم نسبتا کم پیشنهادی در این پست، این مدل اشاره شده در سایت دانشگاه قم با نام FinalModel است. این مدل، مدل برداری کلمات فارسی بر اساس ویکیپدیای فارسی (تا تاریخ ۲۰ اکتبر ۲۰۱۶، ۲۶۰ مگابایت) میباشد. با این فرض که این فایل را دارید، کد مربوطه برای نمایش مثال فوق به صورت زیر خواهد بود:
[python] import gensim model = gensim.models.KeyedVectors.load_word2vec_format('PATH/TO/FinalModel') result = model.most_similar(positive=['پادشاه','زن'],negative=['مرد']) [/python]
خروجی کد بالا «ملکه» میباشد 🙂
کد زیر اولین چند کلمه خروجی مدل را به ما میدهد:
که خروجی آن موارد زیر است:
همانگونه که ملاحظه میشود، خروجیها تقریبا مورد قبول میباشند.
(وشتی، نام همسر خشایارشا بوده است)
در پست انتقال سبک با یادگیری عمیق کاربردی از شبکههای عصبی کانولوشنی در تقلید سبک نقاشی نشان داده شد. در مقاله زیر روشی سریع برای این عمل پیشنهاد شده است:
Learning Linear Transformations for Fast Arbitrary Style Transfer
by: Xueting Li, Sifei Liu, Jan Kautz, Ming-Hsuan Yang
کدهای مرتبط با این مقاله که با پایتورچ نوشته شده است را میتوانید از اینجــــــــــا دانلود کنید.
روش فوق بر روی تصویر سه روباه اعمال شده که نتایج را میتوانید در گیتهاب من ملاحظه کنید.
خروجی اجرای این روش روی تصویر دانشجویان علوم کامپیوتر دانشگاه حکیم سبزواری و سبک نشان داده شده را در تصویر زیر ملاحظه میفرمایید:
سبکهای دیگری هم بر روی تصویر فوق اعمال شدهاند، که هر سبک (استایل) و خروجی مربوطه در تصاویر زیر دیده میشوند:
در پست انتقال سبک با یادگیری عمیق به کاربردی از شبکههای عصبی کانولوشنی در یادگیری سبک نقاشی اشاره شد. مثالهای پست قبل به این ترتیب بودند که سبک (استایل) یک تصویر(style) بر تصویری دیگری (content) نقش میشد. در کاربرد دیگری که در این پست اشاره خواهد شد، همین کار انجام میشود، اما با معرفی دو ماسک برای تصاویر ورودی و خروجی، شبکه عصبی، سبک (استایل) هر ناحیه از style بر ناحیهی متناظر آن از تصویر content نقش میشود. شکل زیر نحوه کار را نشان میدهد:
تصویر بالا سمت چپ یک منظره را نمایش میدهد که متناظر با آن یک ماسک چهار رنگ (نواحی آسمان، درختان، سبزهزار و رودخانه) در نقاش ویندوز کشیده شده است (تصویر کوچک پایین آن). همین کار برای اثر هنری سمت راست انجام شده است.
شکل پایین در تصویر بالا، خروجی «دودل عصبی» را نشان میدهد.
از آنجا که با کمک این شیوه میتوان تصاویر ساده نقاشی مانند (ماسکهای مورد اشاره) را به تصاویر هنری تبدیل کرد، به آن دودل (Doodle) گفته میشود. در ادامه خواهیم دید که چرا به آن دودل گفته میشود.
طراحی به سبک doodle یا احمقانه سبکی از طراحی است که در آن می توان افکار و احساست خود را به شکل انتزاعی نمایش داد.طراح در این سبک با استفاده از نقاشی ها ساده میتواند معنای نمایشی پیوسته ای را بیان کند.
با شیوه «دودل عصبی» میتوان یک طرح ساده را به یک اثر هنری تبدیل کرد. دیدن این ویدئو از تخته سفید دلیل نامگذاری را بهتر قابل درک میسازد. گیتهاب های زیر شامل کدهای آماده برای انجام کار هستند.
https://github.com/alexjc/neural-doodle
https://github.com/DmitryUlyanov/fast-neural-doodle
https://github.com/titu1994/Neural-Style-Transfer
ده تکرار الگوریتم مربوط به آخرین برنامه لینک بالا و برای تصاویر ابتدای پست، در گیف زیر نشان داده شده است:
در دستگاه با مشخصات زیر هر تکرار حدود ۱۲ ثانیه روی GPU طول کشیده است:
CPU: Intel® Core™ i7-7700HQ , 4 Cores
GPU: NVIDIA® GeForce® GTX 1050 Ti – 4 GB GDDR5
یکی از امکانات برنامه پایتون یادگیری عمیق مورد استفاده در اجرای نمونهها، اجازه انتخاب طرح رنگ است. در تصویر بالا، طرح رنگ از تصویر style گرفته شده بود، اگر طرح رنگ از تصویر content گرفته شود، خروجی زیر را خواهیم داشت:
یادگیری عمیق (DeepLearning) کاربردهای متنوعی پیدا کرده است. یکی از کاربردهای جالب آن استفاده از سبک (استایل) یک تصویر در تصویر دیگر است که از آن با نام Neural Style Transfer یاد میشود. مقالات Leon Gatys و منجمله مقاله زیر را میتوان نقطه شروع تحقیقات این حوزه دانست:
Gatys, Leon A., Alexander S. Ecker and Matthias Bethge. “Image Style Transfer Using Convolutional Neural Networks.” 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2016): 2414-2423.
ویدیوی مرتبط با مقاله بالا را میتوانید در تخته سفید ملاحظه فرمایید.
شکل زیر (برگرفته از گیتهاب دیمیتری اولیانوف )موضوع را بهتر نمایش میدهد:
سبک نقاشی تصویر وسط (با نام starry_night) بر روی تصویر سگ اعمال شده و شکل سمت راست تولید شده است.
نمونههای دیگری را هم میتوانید در ادامه مشاهده فرمایید (سایت دوم)
دو سایت زیر نحوه انجام انتقال سبک تصویر با یادگیری عمیق را توضیح دادهاند:
Neural artistic style transfer a comprehensive look
Making AI Art with style transfer using Keras
Neural Style Transfer & Neural Doodles
Implementation of Neural Style Transfer from the paper A Neural Algorithm of Artistic Style in Keras 2.0+
Fast Neural Style Transfer with Arbitrary Style using AdaIN Layer – Based on Huang et al. “Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization”
زمان هر تکرار پردازش تصویر بالای صفحه، روی CPU حدود ۶۰۰ ثانیه و زمان هر تکرار روی GPU، حدود ۲۰ ثانیه بوده است.
مشخصات دستگاه:
CPU: Intel® Core™ i7-7700HQ , 4 Cores
GPU: NVIDIA® GeForce® GTX 1050 Ti – 4 GB GDDR5
فایلهای مرتبط با هر مورد در پیوند Links هریک قرار داده شده است.
پسوند presentation مشخصه اسلاید مربوطه میباشد.
پروندههای مقالات از آدرس http://mamintoosi.ir/dl/pubs/ قابل دسترس میباشند.
[tplist image=”left” image_size=”120″ tag=”2″]
تالیفات