نوشته‌ها

یک مثال سریع: مجموعه داده‌ی Iris

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

در این مثال خاص، هدف اینه که گونه‌ی گل Iris رو بر اساس طول و عرض کاسبرگ‌ها و گلبرگ‌ها پیش‌بینی کنیم. اول، باید یه مدل بسازیم بر اساس مجموعه داده‌ای که اندازه‌گیری‌های گل‌ها و گونه‌های مربوط به اون‌ها رو داره. بر اساس کدمون، کامپیوتر “از داده‌ها یاد می‌گیره” و الگوهایی از اون استخراج می‌کنه. بعد از این، چیزی که یاد گرفته رو روی یه مجموعه داده‌ی جدید اعمال می‌کنه. بیایید به کد نگاه کنیم:

مرحله 1: نصب و وارد کردن کتابخانه‌ها

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

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

مرحله 2: بارگیری داده‌ها

حالا مجموعه داده‌ی Iris رو بارگیری می‌کنیم:

# بارگیری مجموعه داده‌ی Iris
iris = load_iris()
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['species'] = iris.target

مرحله 3: تقسیم داده‌ها به مجموعه‌ی آموزشی و آزمایشی

برای ارزیابی عملکرد مدل، داده‌ها رو به دو بخش آموزشی و آزمایشی تقسیم می‌کنیم:

# تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی
X = data[iris.feature_names]
y = data['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

مرحله 4: ساخت و آموزش مدل

حالا یک مدل جنگل تصادفی (Random Forest) می‌سازیم و اون رو آموزش می‌دیم:

# ساخت و آموزش مدل جنگل تصادفی
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

مرحله 5: پیش‌بینی و ارزیابی مدل

بعد از آموزش مدل، پیش‌بینی‌ها رو روی مجموعه‌ی آزمایشی انجام می‌دیم و دقت مدل رو ارزیابی می‌کنیم:

# پیش‌بینی روی مجموعه‌ی آزمایشی
y_pred = model.predict(X_test)

# ارزیابی دقت مدل
accuracy = accuracy_score(y_test, y_pred)
print(f'DAccuracy: {accuracy * 100:.2f}%')

نتیجه

اگر همه چیز به درستی پیش بره، باید دقت مدل رو ببینیم که به احتمال زیاد بالاست، چون مجموعه داده‌ی Iris نسبتاً ساده و تمیزه.

توضیح مختصر کد

  • بارگیری داده‌ها: ابتدا مجموعه داده‌ی Iris رو از کتابخانه‌ی sklearn بارگیری می‌کنیم و اون رو به یک DataFrame تبدیل می‌کنیم.
  • تقسیم داده‌ها: داده‌ها رو به دو بخش آموزشی (برای آموزش مدل) و آزمایشی (برای ارزیابی مدل) تقسیم می‌کنیم.
  • ساخت و آموزش مدل: یک مدل جنگل تصادفی می‌سازیم و اون رو با استفاده از داده‌های آموزشی آموزش می‌دیم.
  • پیش‌بینی و ارزیابی: پیش‌بینی‌ها رو روی مجموعه‌ی آزمایشی انجام می‌دیم و دقت مدل رو محاسبه می‌کنیم.

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

محدودیت‌های تحلیل داده‌ها و یادگیری ماشین

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

در واقع، جامعه در حال حاضر داره تغییر می‌کنه. پشت صحنه، یادگیری ماشین و تحلیل مداوم داده‌ها در حال انجامه، به خصوص در موتورهای جستجو، شبکه‌های اجتماعی و تجارت الکترونیک. یادگیری ماشین حالا کارهایی مثل این‌ها رو راحت‌تر و سریع‌تر انجام می‌ده:

  • آیا در تصویر چهره انسانی وجود داره؟
  • آیا کاربر روی تبلیغ کلیک می‌کنه؟ (آیا تبلیغ شخصی‌سازی شده و برای او جذابه؟)
  • چطور کپشن‌های دقیق‌تری روی ویدیوهای یوتیوب ایجاد کنیم؟ (تشخیص گفتار و تبدیل به متن)
  • آیا موتور یا قطعه‌ای خراب می‌شه؟ (نگهداری پیشگیرانه در تولید)
  • آیا تراکنش جعلیه؟
  • آیا ایمیل اسپم هست یا نه؟

این‌ها به لطف دسترسی به مجموعه داده‌های عظیم و قدرت پردازش بالا ممکن شده. با این حال، تحلیل پیشرفته داده‌ها با استفاده از پایتون (و یادگیری ماشین) جادو نیست. این‌ها راه‌حل همه مشکلات نیستن. چرا که دقت و عملکرد ابزارها و مدل‌های ما به شدت وابسته به یکپارچگی داده‌ها و مهارت و قضاوت خودمونه.

دقت و عملکرد

رایج‌ترین استفاده از تحلیل داده‌ها در پیش‌بینی‌های موفق (پیش‌بینی) و بهینه‌سازیه. آیا تقاضا برای محصول ما در پنج سال آینده افزایش پیدا می‌کنه؟ بهترین مسیرها برای تحویل‌کالا که کمترین هزینه عملیاتی رو دارن چیه؟

به همین دلیله که بهبود دقت حتی به اندازه 1% می‌تونه به میلیون‌ها دلار درآمد اضافی تبدیل بشه. مثلاً، فروشگاه‌های بزرگ می‌تونن برخی محصولات رو از قبل انبار کنن اگه نتایج تحلیل نشون بده تقاضا در حال افزایشه. حمل و نقل و لجستیک هم می‌تونن مسیرها و برنامه‌های بهتری برای استفاده کمتر از سوخت و تحویل‌های سریع‌تر برنامه‌ریزی کنن.

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

کشف فرصت‌ها

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

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

تحلیل داده‌ها در مقابل علم داده و یادگیری ماشین

تحلیل داده‌ها و علم داده

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

  • تحلیل داده‌ها: معمولاً به استفاده از ابزارهایی مثل Microsoft Excel و دیگر نرم‌افزارها برای خلاصه‌سازی داده‌ها و پیدا کردن الگوها مربوط می‌شه.
  • علم داده: معمولاً با استفاده از برنامه‌نویسی برای کار با مجموعه‌های بزرگ داده مرتبطه. علم داده به خاطر تولید گیگابایت‌های داده از منابع آنلاین و فعالیت‌ها (موتورهای جستجو، شبکه‌های اجتماعی) محبوب شده.

تفاوت‌ها

اگرچه عنوان شغلی “دانشمند داده” خیلی جذاب‌تر از “تحلیلگر داده” به نظر میاد، اما وظایف شغلی این دو ممکنه مشابه و هم‌پوشانی داشته باشه. هر دو با کشف الگوها و تولید بینش از داده‌ها سر و کار دارن. همچنین کار اونها، شامل پرسیدن سوالات هوشمندانه درباره ماهیت داده‌ها می‌شه (مثلاً: آیا نقاط داده‌ای به صورت طبیعی به خوشه‌ها تقسیم می‌شن؟ آیا واقعاً بین سن و سرطان ارتباطی وجود داره؟).

یادگیری ماشین چیست؟

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

مثال:

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

ممکنه بعداً یه برنامه ساده بسازیم که بلافاصله ارزیابی کنه آیا یه نفر بدهی‌ش رو پرداخت می‌کنه یا نه بر اساس اطلاعاتش (سن، محدوده درآمد، محل سکونت و شغل). این یه مثال از استفاده از داده‌ها برای پیش‌بینی رفتار احتمالی فرد هستش.

امکانات

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

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

آیا تخصص ریاضی برای تحلیل داده با پایتون ضروری است؟

تحلیل داده‌ها اغلب به معنای کار با اعداد و استخراج اطلاعات ارزشمند از اونهاست. اما آیا واقعاً باید توی اعداد و ریاضیات متخصص باشیم؟

موفقیت در تحلیل داده‌ها با استفاده از پایتون معمولاً نیاز به داشتن مهارت‌ها و دانش مناسبی در ریاضی، برنامه‌نویسی و حوزه کاری شما داره. این یعنی لازم نیست تو هیچ‌کدوم از این‌ها متخصص باشید (مگر اینکه قصد دارید مقاله‌ای در کنفرانس‌های علمی بین‌المللی ارائه بدید).

نذارید خیلی از “متخصص‌ها” شما رو گول بزنن چون خیلی از اون‌ها یا فیک هستن یا اصلاً تجربه‌ای ندارن. چیزی که باید بدونید اینه که قدم بعدی چیه تا بتونید پروژه‌هاتون رو با موفقیت به پایان برسونید. شما بعد از خوندن همه فصل‌های اینجا متخصص هیچ چیزی نخواهید شد. اما این مطالب برای این کافی هست که شما یه درک بهتر از پایتون و تحلیل داده‌ها پیدا کنید.

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

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

آموزش سینتکس پایتون به زبان ساده

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

۱. متغیرها و انواع داده‌ها

در پایتون، شما نیازی به تعریف نوع متغیر ندارید. کافی است مقدار رو به متغیر اختصاص بدید:

x = 5       # عدد صحیح (integer)
y = 3.14    # عدد اعشاری (float)
name = "Ali" # رشته (string)
is_student = True # مقدار بولی (boolean)

۲. چاپ کردن (Print)

برای چاپ کردن مقادیر در پایتون از تابع print() استفاده می‌کنیم:

print(x)          # چاپ عدد صحیح
print(name)       # چاپ رشته
print("Hello, world!") # چاپ متن ثابت

۳. لیست‌ها (Lists)

لیست‌ها در پایتون برای ذخیره‌ی مجموعه‌ای از مقادیر استفاده می‌شن. شما می‌تونید به راحتی لیست‌ها رو ایجاد و ویرایش کنید:

numbers = [1, 2, 3, 4, 5]
print(numbers[0]) # دسترسی به اولین عنصر لیست
numbers.append(6) # افزودن یک عنصر به انتهای لیست
print(numbers)

۴. حلقه‌ها (Loops)

در پایتون، دو نوع حلقه اصلی وجود داره: for و while.

حلقه for برای تکرار بر روی مجموعه‌ای از آیتم‌ها استفاده می‌شه:

for number in numbers:
    print(number)

حلقه while تا زمانی که شرط برقرار باشه، اجرا می‌شه:

count = 0
while count < 5:
    print(count)
    count += 1

۵. شرط‌ها (Conditionals)

برای بررسی شرط‌ها در پایتون از if, elif و else استفاده می‌کنیم:

age = 18

if age < 18:
    print("You are a minor.")
elif age == 18:
    print("You are exactly 18 years old.")
else:
    print("You are an adult.")

۶. توابع (Functions)

برای تعریف توابع در پایتون از کلمه کلیدی def استفاده می‌کنیم:

def greet(name):
    print("Hello, " + name + "!")

greet("Ali")

۷. کتابخانه‌ها (Libraries)

پایتون دارای کتابخانه‌های زیادیه که می‌تونید از اون‌ها برای انجام کارهای مختلف استفاده کنید. مثلاً برای کار با اعداد و محاسبات علمی از numpy استفاده می‌کنیم:

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

چرا پایتون را برای علوم داده و یادگیری ماشین انتخاب کنیم؟

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

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

پایتون در مقابل R

شاید قبلاً تو سایت‌هایی مثل Stack Overflow، Reddit، Quora و بقیه انجمن‌ها در مورد این موضوع شنیده باشید. شاید هم به دنبال زبان‌های برنامه‌نویسی دیگه‌ای گشته باشید چون در نهایت، یاد گرفتن پایتون یا R (یا هر زبان دیگه‌ای) چندین هفته و ماه طول می‌کشه. این یه سرمایه‌گذاری بزرگ زمانیه و نمی‌خواید اشتباه کنید.

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

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

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

استفاده گسترده از پایتون در تحلیل داده‌ها

امروزه بسته‌ها و ابزارهای زیادی وجود دارن که استفاده از پایتون در تحلیل داده‌ها و یادگیری ماشین رو خیلی راحت‌تر می‌کنن. TensorFlow (از گوگل)، Theano، scikit-learn، numpy و pandas فقط چند نمونه از چیزهایی هستن که علم داده رو سریع‌تر و آسون‌تر می‌کنن.

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

یکی دیگه از دلایل استفاده گسترده از پایتون اینه که منابع بی‌شماری وجود دارن که بهت میگن چطور تقریباً هر کاری رو انجام بدی. اگه سوالی داری، احتمال زیادی هست که یکی دیگه قبلاً اون رو پرسیده و یکی دیگه هم براش حلش کرده (گوگل و Stack Overflow دوستات هستن). این موضوع پایتون رو حتی محبوب‌تر می‌کنه چون منابع آنلاین زیادی وجود داره.

وضوح

به خاطر سادگی یادگیری و استفاده از پایتون (تا حدی به خاطر وضوح سینتکسش)، حرفه‌ای‌ها می‌تونن روی جنبه‌های مهم‌تر پروژه‌ها و مشکلاتشون تمرکز کنن. مثلاً، می‌تونن به جای ساختن همه چیز از اول، سریعاً از numpy، scikit-learn و TensorFlow استفاده کنن تا به بینش‌های لازم برسن.

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

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

ایجاد عنوانی از کلمات کلیدی برای تصویر

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

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

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

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

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


import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

# Load pre-trained ResNet50 model
model = ResNet50(weights='imagenet')

def generate_title(image_path):
# Load and preprocess the image
img = tf.keras.preprocessing.image.load_img(image_path, target_size=(224, 224))
img_array = tf.keras.preprocessing.image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)

# Make predictions
predictions = model.predict(img_array)
# Decode predictions
decoded_predictions = decode_predictions(predictions, top=10)[0]

# Extract labels from predictions
labels = [label for (_, label, _) in decoded_predictions]

# Generate title based on labels
title = " ".join(labels)

return title

# Example usage
image_path = "example_image.jpg"
title = generate_title(image_path)
print("Generated Title:", title)

 

تصحیح جهت تصویر کارت اسکن شده با پایتون

یکی دیگر از کاربردهای مسئله تضیح داده شده در نوشته “کشف تصویر کوچک درون تصویر بزرگ با استفاده از پایتون و OpenCV” این هست که شما با استفاده از این کد می توانید یک نشانه خاص در کارت شناسایی را پیدا کرده و بر اساس آن تغییرات خاصی را اعمال کنید.

برای نمونه ما در اینجا یک نوع گواهینامه نمونه را که به صورت برعکس اسکن شده است به برنامه داده ایم و پس از پیدا کردن نشانه موجود در گوشه سمت راست و بالای کارت آن را به تعداد لازم rotate می کنیم تا تصویر گواهینامه با جهت درست نشان داده شود.

نمونه کد:

import cv2

def find_image_in_larger_image(small_image, large_image):

# Read images

# Check if images are loaded successfully

if small_image is None or large_image is None:

print("Error: Unable to load images.")

return None

# Get dimensions of both images

small_height, small_width = small_image.shape

large_height, large_width = large_image.shape

# Find the template (small image) within the larger image

result = cv2.matchTemplate(large_image, small_image, cv2.TM_CCOEFF_NORMED)

# Define a threshold to consider a match

threshold = 0.6

# Find locations where the correlation coefficient is greater than the threshold

locations = cv2.findNonZero((result >= threshold).astype(int))

# If no match is found

if locations is None:

return None

# Determine position of the matched areas

matched_positions = []

for loc in locations:

x, y = loc[0]

if x < large_width / 2:

position_x = "left"

else:

position_x = "right"

if y < large_height / 2:

position_y = "top"

else:

position_y = "bottom"

matched_positions.append((position_x, position_y))

return matched_positions

# Example usage

small_image_path = "mark.jpg"

large_image_path = "card.jpg"

small_image = cv2.imread(small_image_path, cv2.IMREAD_GRAYSCALE)

large_image = cv2.imread(large_image_path, cv2.IMREAD_GRAYSCALE)

rotated_large_image=large_image

positions = find_image_in_larger_image(small_image, large_image)

max_rotation = 10 # Set the maximum rotation limit

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

while max_rotation>0:

max_rotation-=1

rotated_large_image = cv2.rotate(rotated_large_image, cv2.ROTATE_90_CLOCKWISE)

positions = find_image_in_larger_image(small_image, rotated_large_image)

if positions:

position_x, position_y = positions[0]

print("Position: {}, {}".format(position_x, position_y))

if(position_x=='right' and position_y=='top'):

cv2.imshow("Mark", small_image)

cv2.imshow("Original", large_image)

cv2.imshow("Result", rotated_large_image)

cv2.waitKey(0)

cv2.destroyAllWindows()

max_rotation=0

else:

print("No match found after {} rotations.".format(10-max_rotation))

else:

print("No match found after {} rotations.".format(10-max_rotation))

 

برای مشاهده در گیت هاب اینجا کلیک کنید.

تشخیص چهره با HOG و MTCNN

بررسی تکنیک‌های تشخیص چهره: HOG در مقابل MTCNN

تشخیص چهره یک کار اساسی در بینایی کامپیوتر با برنامه های کاربردی از سیستم های امنیتی گرفته تا رسانه های اجتماعی است. دو روش محبوب برای تشخیص چهره عبارتند از: هیستوگرام گرادیان های جهت دار (HOG) و شبکه های کانولوشن چند وظیفه ای (MTCNN). در این پست وبلاگ، هر دو تکنیک را بررسی خواهیم کرد و یک نمای کلی از اصول آنها ارائه می دهیم و کد پایتون را برای هر کدام به نمایش می گذاریم.

هیستوگرام گرادیان های جهت دار (HOG)

درک HOG

HOG یک توصیفگر ویژگی است که به طور گسترده برای تشخیص اشیا استفاده می شود. با تجزیه و تحلیل توزیع گرادیان ها در یک تصویر کار می کند و آن را به ویژه برای تشخیص اجسام با اشکال و بافت های متمایز موثر می کند.

چگونه کار می کند

الگوریتم HOG یک تصویر را به سلول های کوچک و همپوشانی تقسیم می کند، جهت گیری گرادیان را در هر سلول محاسبه می کند و سپس یک هیستوگرام از این جهت ها ایجاد می کند. سپس این هیستوگرام ها به هم متصل می شوند تا بردار ویژگی نهایی را تشکیل دهند که برای آموزش ماشین بردار پشتیبان (SVM) یا طبقه بندی کننده دیگر استفاده می شود.

مثال کد پایتون

ما با بررسی تشخیص چهره مبتنی بر HOG با استفاده از OpenCV در پایتون شروع خواهیم کرد. کد ارائه شده یک تصویر را بارگیری می کند، آشکارساز HOG را اعمال می کند، و کادرهای مرزی را در اطراف چهره های شناسایی شده ترسیم می کند.

در GitHub مشاهده کنید

شبکه های کانولوشن آبشاری چند کاره (MTCNN)

آشنایی با MTCNN

MTCNN یک مدل تشخیص چهره مبتنی بر یادگیری عمیق است که برای کنترل جهت گیری ها و مقیاس های مختلف چهره طراحی شده است. این شامل سه مرحله است: تشخیص چهره، رگرسیون جعبه مرزی، و محلی سازی نقطه عطف چهره.

چگونه کار می کند

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

مثال کد پایتون

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

در GitHub مشاهده کنید

انتخاب روش مناسب

در حالی که هر دو HOG و MTCNN برای تشخیص چهره موثر هستند، هر کدام نقاط قوت و محدودیت های خود را دارند. HOG قوی و از نظر محاسباتی کارآمد است و آن را برای کاربردهای بلادرنگ مناسب می کند. از سوی دیگر، MTCNN در مدیریت جهت گیری های مختلف چهره برتر است و برای سناریوهایی که ممکن است چهره ها در مقیاس ها و زوایای مختلف ظاهر شوند، مناسب است.

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

برای توضیح دقیق کد، دستورالعمل‌های استفاده، و بحث در مورد عوامل مؤثر بر دقت تشخیص، به خواندن ادامه دهید.

درک هیستوگرام گرادیان های جهت دار (HOG) برای تشخیص چهره

معرفی
در حوزه بینایی کامپیوتری، تشخیص چهره به عنوان یک کار مهم با برنامه های کاربردی از امنیت و نظارت گرفته تا عکاسی و رسانه های اجتماعی عمل می کند. یکی از تکنیک های قدرتمندی که برای تشخیص اشیا، از جمله چهره ها به کار می رود، هیستوگرام گرادیان های جهت دار (HOG) است. در این مقاله، اصول پشت HOG، متدولوژی آن و پیاده سازی آن در پایتون با استفاده از کتابخانه OpenCV را بررسی خواهیم کرد.

مبانی HOG
HOG چیست؟
HOG یک توصیفگر ویژگی است که توزیع گرادیان های شدت در یک تصویر را ثبت می کند. HOG که توسط Navneet Dalal و Bill Triggs در سال 2005 توسعه یافت، ثابت کرده است که در وظایف تشخیص اشیا، به ویژه برای تشخیص عابران پیاده و چهره، بسیار موثر است.

HOG چگونه کار می کند؟
HOG بر این فرض عمل می کند که شکل و ظاهر محلی یک شی را می توان با توزیع گرادیان های شدت یا جهت های لبه مشخص کرد. با تقسیم یک تصویر به سلول های کوچک و همپوشانی، HOG جهت گیری گرادیان را در هر سلول محاسبه می کند و هیستوگرام هایی از این جهت ها ایجاد می کند. سپس این هیستوگرام ها به هم متصل می شوند تا یک بردار ویژگی را تشکیل دهند که به عنوان نمایشی از ظاهر جسم عمل می کند.

مراحل محاسبه HOG:
محاسبه گرادیان:
شیب تصویر را با استفاده از تکنیک هایی مانند عملگرهای Sobel برای شناسایی لبه ها محاسبه کنید.
تقسیم سلولی:
تصویر را به سلول های کوچک تقسیم کنید تا اطلاعات شیب محلی را بگیرید.
محاسبه هیستوگرام:
هیستوگرام جهت گیری های گرادیان در هر سلول را محاسبه کنید.
عادی سازی بلوک:
گروه‌هایی از سلول‌ها که به بلوک‌ها معروف هستند را عادی کنید تا تغییرات نور و کنتراست را در نظر بگیرید.
شکل گیری بردار ویژگی:
هیستوگرام های بلوک نرمال شده را به هم متصل کنید تا بردار ویژگی نهایی را تشکیل دهید.
پیاده سازی HOG در پایتون
حالا بیایید با استفاده از پایتون و OpenCV به جنبه عملی HOG بپردازیم. اسکریپت پایتون زیر تشخیص چهره مبتنی بر HOG را نشان می دهد:

import cv2

# Load the image

image = cv2.imread(‘path/to/your/image.jpg’)

# Convert the image to grayscale

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Create a HOG face detector

hog_face_detector = cv2.HOGDescriptor()

hog_face_detector.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# Detect faces in the image using HOG

faces_hog, _ = hog_face_detector.detectMultiScale(gray_image)

# Draw bounding boxes around detected faces

for (x, y, w, h) in faces_hog:

cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)

# Display the image with bounding boxes

cv2.imshow(‘HOG Face Detection’, image)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

ملاحظات و نکات

تنظیم پارامترها:
آشکارسازهای مبتنی بر HOG اغلب دارای پارامترهایی هستند که می توانند برای عملکرد بهتر تنظیم شوند. پارامترهایی مانند ضریب مقیاس و حداقل اندازه اشیاء شناسایی شده را برای دستیابی به نتایج بهینه برای مورد استفاده خاص خود آزمایش کنید.

کارایی محاسباتی:
یکی از نقاط قوت HOG کارایی محاسباتی آن است که آن را برای کاربردهای بلادرنگ مناسب می کند. با این حال، اندازه پنجره تشخیص و پیچیدگی تصویر می تواند بر زمان پردازش تأثیر بگذارد.

محدودیت ها:
در حالی که HOG در بسیاری از سناریوها موثر است، ممکن است با چالش های خاصی مانند تغییرات در شرایط نوری و پس زمینه های پیچیده دست و پنجه نرم کند. درک این محدودیت ها هنگام انتخاب روش مناسب برای برنامه شما ضروری است.

نتیجه
هیستوگرام گرادیان های جهت دار (HOG) به سنگ بنای تشخیص اشیا تبدیل شده است و ابزاری قوی و کارآمد محاسباتی برای ثبت ویژگی های اساسی اشیاء در تصاویر ارائه می دهد. در زمینه تشخیص چهره، HOG یک تکنیک قابل اعتماد و همه کاره است.

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

در قسمت بعدی این مجموعه، روش قدرتمند دیگری برای تشخیص چهره، شبکه‌های کانولوشن آبشاری چند وظیفه‌ای (MTCNN) را بررسی می‌کنیم که درک جامعی از تکنیک‌های مختلف موجود برای این کار حیاتی بینایی رایانه ارائه می‌دهد. گوش به زنگ باشید!