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

تشخیص سرطان پوست با یادگیری عمیق

    1
    مدت زمان مطالعه: ۷ دقیقه
    شرح مختصر
    ملانوما کشنده‌ترین نوع سرطان پوست است و سالانه جان ۶۰.۰۰۰ نفر را می‌گیرد. اما اگر تشخیص سرطان پوست در مراحل ابتدایی صورت گرفته شود، میزان بهبودی تا ۹۵ درصد افزایش می‌یابد. توسعه‌دهندگان می‌توانند با مراجعه به آدرس https://challenge2018.isic-archive.com/ به تصاویر متعددی از سرطان پوست دسترسی پیدا کرده و مدل‌های پیش‌بینی‌کنندۀ خود را برای تشخیص سرطان پوست ایجاد کنند. پست حاضر بر آن تا است چالش‌های این کار را تبیین کند. کد به صورت منبع باز قابل دسترس است:
    https://github.com/RobZuazua/skin-lesion-challenge

    مرحله ۰: نصب

    در نوت‌بوک حاضر، فرض بر این است که سرور نصب‌شده و مراحل زیر به اجرا درمی‌آید:
    (https://github.com/reshamas/fastai_deeplearn_part1/blob/master/tools/paperspace.md)

    مرحله ۱: بررسی داده‌ها

    مهم‌ترین بخش بررسی داده، اجتناب از بررسی کاملاً دقیق داده‌هاست. عده زیادی به فرضیه‌سازی پرداخته و اطلاعات بی‌فایده‌ای را پیش از ساخت مدل ارائه می‌کنند.
    زمانِ اختصاص داده شده: ۵ دقیقه

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

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

     

    تشخیص سرطان پوست

    اندازه‌های ستون و ردیف با توجه به تعداد تصاویر

     

    مرحله ۲: مدل پایه

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

    Fast.ai به کتابخانه یادگیری عمیقی اطلاق می‌شود بر پایه pytorch ساخته شده است و زمینه را برای استفادۀ آسان از روش‌های نوین فراهم می‌کند. هدف از این کار، توسعه و آموزش مدل‌های یادگیری عمیق است. امکان شخصی‌سازی این کتابخانه با چندین لایه انتزاع نیز وجود دارد. بنابراین، متخصصان و افراد مبتدی که در حوزه یادگیری عمیق فعالیت می‌کنند، گزینه بسیار مناسبی برای پیشبرد اهداف‌شان در اختیار دارند.
    در ابتدا، بگذارید ببینیم چگونه می‌توان با استفاده از fast.ai یک data object ایجاد کرد.

     

    ما از راهبردی استفاده کردیم که جزئیات آن در fast.ai MOOC جِرِمی آموزش داده شده است. افزون بر این، استفاده از یک مدل از پیش آموزش‌دیده و مجموعه‌ای از لایه‌های شبکه عصبی در دستور کار ما قرار داشت. درحالی‌که بقیه بخش‌های مدل در حالت بلوکه قرار دارد، مجموعه فوق‌الذکر آموزش داده می‌شود. فراموش نکنید که هدف از این بخش این است که به‌سرعت یک مدل پایه بسازیم. ما از دستۀ ConvLearner متعلق به fast.ai برای افزودن مجموعه به مدل از پیش آموزش‌دیده استفاده کردیم. این دسته نقش مهمی در انتقال data object و مدل resNext دارد و از این پارامترها برای افزودنِ مجموعه‌ای از لایه‌های شبکه عصبی استفاده می‌کند. این لایه‌ها فرصتِ پیش‌بینی دسته‌ها را به مدل می‌دهند. دستۀ ConvLearner یکی از دستاوردهای بی‌نظیر fast.ai است زیرا توسعه مدل‌های پایه را آسان می‌کند. اکنون می‌توان نتایج مدل پایه را مشاهده کرد.
    این فرایند آموزشی جزئیات خوبی درباره لایه‌های اضافه‌شده به انتهای مدل عرضه می‌کند. به‌طور خلاصه می‌توان گفت که fast.ai توانست این موارد را برای هر بیماری در دادگان بیفزاید:

     

    تشخیص سرطان پوست

    دقت ما پس از دوره ۷۸.۴ درصد بود.

     

    مرحله ۳: درک متریک ارزیابی

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

    تشخیص سرطان پوست

    Accuracy vs Balanced Accuracy

     

    تشخیص سرطان پوست

    تصویر تشخیص سرطان پوست با یادگیری عمیق – دقت Balanced multiclass accuracy فقط ۵۴.۱ درصد است.

     

     

    سه کد برای ارزیابی Balanced multiclass accuracy:

    مرحله ۴: یافتن سرعت یادگیری بهینه

    سرعت یادگیری یکی از مهم‌ترین پارامترها در مدل‌های یادگیری عمیق به شمار می‌رود و غالباً مستلزم زمان و آزمایش صحیح است تا به‌درستی پیش برود. کتابخانه fast.ai ازجمله نخستین کتابخانه‌هایی است که روشی سریع و نظام‌مند برای یافتن سرعت یادگیری بهینه برای مدل عرضه می‌کند. این کتابخانه از روشی استفاده می‌کند که در مقاله سال ۲۰۱۵ تحت عنوان «سرعت یادگیری چرخه‌ای برای آموزش شبکه‌های عصبی» معرفی شد. این روش به‌تدریج سرعت یادگیری را افزایش می‌دهد.تشخیص سرطان پوست

    مرحله ۵: داده‌افزایی

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

     

    به خاطر داشته باشید که هدف پیشین‌مان این بود که هر چه سریع‌تر مدل را آموزش دهیم. این مؤلفه precompute = True به مدل دستور می‌دهد تا از عمل داده‌افزایی اجتناب کند. این کار به تسریع زمان آموزش منجر می‌شود. برای اینکه بتوانید از عمل داده‌افزایی استفاده کنید، باید این تنظیمات را اِعمال کنید: precompute = false و سپس اقدام به آموزش نمایید. پارامتر cycle_len تعداد دوره‌های هر چرخه را مشخص می‌کند. ازاین‌رو، تعداد دوره‌ها تا زمان شروع مجدد SGDR تعیین می‌گردد.

     

    تشخیص سرطان پوست

    تصویر تشخیص سرطان پوست با یادگیری عمیق – افزایش دقت تا ۷۹.۶ درصد

    مرحله ۶: ارتقای دقت و تقویت سرعت یادگیری متغیر

    وزن‌های مدل موجود تقریباً بی‌عیب و نقص هستند و شاید به تنظیم دقیق نیاز نداشته باشند. اما این مورد برای دیتاستی که با ImageNet فرق دارند، صِدق نمی‌کند. بنابراین، باید وزن‌ها را در مدل موجود به‌روزرسانی کنیم تا به نتایج دلخواه برسیم. Learn.unfreeze() به مدل دستور می‌دهد که وزن‌های هر لایه را به‌روزرسانی کند. ازآنجاکه نیاز داریم همه وزن‌های لایه را به‌روزرسانی کنیم، زمان آموزش به‌طور چشمگیری افزایش پیدا می‌کند.
    وقتی لایه‌های موجود در مدل را از حالت بلوکه در بیاوریم، می‌توانیم از روشی به نام تقویت سرعت یادگیری متغیر استفاده کنیم. این کار بسیار حائز اهمیت است زیرا نخستین گروه از لایه‌ها غالباً در شناسایی لبه‌ها ایفای نقش می‌کنند و نیاز به تغییر گسترده ندارند. از سوی دیگر، احتمال دارد لایه‌های پیچشی بعدی ویژگی‌های دیگری مثل مردمک چشم را جستجو کنند. این ویژگی در دیتاست جدید ما موجود نیست. افزایش سرعت یادگیری در گروه‌های بعدی این فرصت را به لایه‌ها می‌دهد تا تخصص لازم را در ویژگی‌های پیچیده به دست آورند؛ البته ویژگی‌هایی که در دیتاست جدید وجود دارند. در عکس زیر، cycle_mult پارامتری است که تعداد بعدی چرخه‌های آموزش را تکثیر کرده و دوره‌های بیشتری را برای آموزشِ مدل در اختیارمان می‌گذارد. به مثال زیر توجه داشته باشید:
    lrn.fit(lr,4,cycle_len=1,cycle_mult=2) results in 15epochs because 1+1*2+2*2 + 4*2= 15.

    تشخیص سرطان پوست

    تشخیص سرطان پوست

     

    مرحله ۷: افزایش اندازه تصویر و آموزش مجدد

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

    شما چه روشی را برای بهبود نتایج پیشنهاد می‌کنید؟

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    افتتاح دانشکده مهندسی سیستم های هوشمند و علوم داده در دانشگاه خلیج فارس بوشهر

    مقاله قبلی

    با GPT-3 اولین هوش مصنوعی عمومی AGI در دنیا آشنا شویم

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    بیشتر در آموزش

    1 اظهار نظر

    1. بعد از اینکه تمام این مراحل رو انجام دادیم، چطور میتونیم بهش عکس ورودی بدیم و احتمال سرطان رو بگیریم؟

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *