مدل Donut در پایتون مدلی است که می توانید برای استخراج متن از یک تصویر داده شده استفاده کنید. این می تواند در سناریوهای مختلف مانند اسکن رسیدها مفید باشد.

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

من این آموزش را نوشتم زیرا هیچ منبعی پیدا نکردم که دقیقاً چگونه مدل Donut را با مجموعه داده خود تنظیم کنم. بنابراین من مجبور شدم این را از آموزش های دیگر یاد بگیرم (که در این راهنما به اشتراک خواهم گذاشت) و خودم مسائل را کشف کنم.

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

img1
استخراج اطلاعات از رسیدها عکس از این فایل Google Colab با استفاده از عکسی که من گرفته ام گرفته شده است

در اینجا چیزی است که ما پوشش خواهیم داد:

  • چگونه یک مجموعه داده برای تنظیم دقیق پیدا کنیم
  • تنظیم دقیق با Google Colab
  • نحوه تغییر پارامترها
  • تنظیم دقیق به صورت محلی

چگونه یک مجموعه داده برای تنظیم دقیق پیدا کنیم

یافتن مجموعه داده آنلاین

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

سپس باید این مجموعه داده را در Google Drive خود کپی کنید. توجه داشته باشید که این مطلب از این آموزش تحت عنوان “دانلود و تجزیه SROIE” گرفته شده است. این آموزش خواندنی عالی است که الهام‌بخش این مقاله بود، زیرا من می‌خواستم یک آموزش عمیق‌تر برای تنظیم دقیق مدل Donut در Google Colab ایجاد کنم. بنابراین اگر می خواهید نگاهی عمیق تر به تولید مجموعه داده داشته باشید، توصیه می کنم آموزش بالا را بخوانید.

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

حاشیه نویسی مجموعه داده های خود

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

حاشیه نویسی مجموعه داده خود یک راه مطمئن برای ایجاد مجموعه داده ای است که کاملاً متناسب با نیازهای شما باشد.

پیشنهاد می‌کنیم بخوانید:  بیانیه سوئیچ پایتون

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

اطمینان حاصل کنید که مجموعه داده شما همان قالب مجموعه داده ای است که قبلا ارائه کردم. برای جزئیات بیشتر در مورد حاشیه نویسی داده ها با رابط کاربری Sparrow، می توانید مقاله من را در مورد استفاده از مدل Donut برای داده های خود حاشیه نویسی بررسی کنید. توجه داشته باشید که این مقاله فرض می‌کند که می‌توانید مدل Donut را (که در این مقاله خواهید آموخت) تنظیم کنید.

img2
حاشیه نویسی رسید با ابزار حاشیه نویسی داده UI Sparrow

تنظیم دقیق با Google Colab

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

توجه داشته باشید که نسخه‌های پکیج باید دقیقاً همانطور که در Drive ارائه شده است باشند، زیرا نسخه‌های بسته اشتباه ریشه بسیاری از مشکلاتی بود که من خودم در تنظیم دقیق مدل Donut با آن مواجه بودم.

قبل از تنظیم دقیق با استفاده از فایل Google Colab، 2 کار وجود دارد که باید انجام دهید:

داده ها را در Google Drive خود آپلود کنید.

مجموعه داده‌ای را که قبلاً ارائه کرده‌ام در Google Drive خود در پوشه والد به نام آپلود کنید FinetuneData را آماده کرد (ساختار فایل را در تصویر زیر ببینید).

مطمئن شوید که پوشه والد را در پوشه اصلی Google Drive خود اضافه کنید. همچنین این فایل کانفیگ را دانلود کرده و به پوشه اصلی گوگل درایو خود اضافه کنید.

img
چگونه مجموعه داده شما باید در پوشه ریشه Google Drive به نظر برسد

وقتی سلولی را که Google Drive را نصب می‌کند اجرا می‌کنید، ممکن است یک درخواست دریافت کنید، در این صورت می‌توانید آن را بپذیرید و بقیه این پاراگراف را نادیده بگیرید.

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

توجه داشته باشید که اگر قبلاً Google Colab را به Google Drive متصل نکرده‌اید، باید پس از فشار دادن نماد Drive به Google Drive خود وارد شوید و به Colab اجازه دسترسی به Drive را بدهید (هنگامی که می‌خواهید درایو را پیوند دهید باید به طور خودکار نمایش داده شود. )

img3
نماد فایل ها (قرمز). نصب گوگل درایو (آبی)

سرانجام، زمان اجرا خود را مجدداً راه اندازی کنید. پس از تغییر فایل‌ها در Google Colab، همیشه باید زمان اجرا خود را مجدداً راه‌اندازی کنید تا آخرین به‌روزرسانی‌ها را ببینید.

پیشنهاد می‌کنیم بخوانید:  روش خواندن ورودی پایتون به عنوان عدد

نحوه تغییر پارامترها

عالی! اکنون می توانید سلول های نوت بوک را اجرا کنید و باید یک مدل تنظیم شده دریافت کنید. به یاد داشته باشید که می‌توانید پارامترهای Config را نیز تغییر دهید، به‌عنوان مثال، برای مدت طولانی‌تر تمرین کنید، از کارگران بیشتری استفاده کنید و غیره.

img6
نمونه ای از پارامترهای پیکربندی که می توانید تغییر دهید.

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

تنظیم دقیق به صورت محلی

تنظیم دقیق را می توان به صورت محلی نیز اجرا کرد، که در صورت داشتن GPU بیشتر برای شما مرتبط خواهد بود، زیرا آموزش CPU زمان زیادی می برد.

برای اجرای محلی باید:

  1. ابتدا این مخزن GitHub را کلون کنید
  2. مجموعه داده تنظیم دقیق آماده شده را به پوشه ریشه اضافه کنید.
  3. اگر می‌خواهید مدل تنظیم‌شده را ذخیره کنید، خط زیر را به خط 164 train.py، درست در زیر اضافه کنید. trainer.fit (…)

#...
trainer.save_checkpoint(f"{Path(config.result_path)}/{config.exp_name}/{config.exp_version}/model_checkpoint.ckpt")
#...

4. سپس باید فرآیندهای GPU را در PyTorch Lightning Trainer توضیح دهید و خط را اضافه کنید: accelerator=”cpu”:

#train.py file
#... 
trainer = pl.Trainer(
        #Comment out the lines above
        # num_nodes=config.get("num_nodes", 1),
        # devices=torch.cuda.device_count(),
        # strategy="dp",
        # accelerator="gpu",
        accelerator="cpu", #TODO add this line
        plugins=custom_ckpt,
        max_epochs=config.max_epochs,
        max_steps=config.max_steps,
        val_check_interval=config.val_check_interval,
        check_val_every_n_epoch=config.check_val_every_n_epoch,
        gradient_clip_val=config.gradient_clip_val,
        precision=16,
        num_sanity_val_steps=0,
        logger=logger,
        callbacks=[lr_callback, checkpoint_callback, bar],
    )
#...

5. مطمئن شوید که پارامتر max_epochs در فایل Config شما روی -1 تنظیم شده است (در غیر این صورت خطای تقسیم بر 0 دریافت خواهید کرد). شما می توانید زمان آموزش را با تنظیم پارامتر تعیین کنید max_steps.

6. سپس می توانید تنظیم دقیق را اجرا کنید و سپس می توانید با دستور زیر در ترمینال اجرا کنید:

python train.py --config config/train_cord.yaml

جایی که train_cord.yaml فایل پیکربندی است که می خواهید استفاده کنید.

در حال اجرا بر روی CPU

اگر در نهایت روی CPU کار می کنید، با مشکلاتی مواجه خواهید شد مگر اینکه تغییراتی ایجاد کنید:

  1. donut/train.py، تغییر دهید شتاب دهنده پارامتر را به “cpu” (از “gpu”)، و پارامترها را حذف کنید: num_nodes، دستگاه ها، و استراتژی).
  2. سپس در فایل کانفیگ خود (به عنوان مثال train_cord.yaml)، تنظیم max_epochs به -1 و سپس پارامتر را مشخص کنید max_steps. این به این دلیل است که در صورت وجود با خطای تقسیم بر صفر مواجه خواهید شد max_epoch بزرگتر از 0

پس از این تغییرات، اجرای بر روی CPU نیز باید کار کند.

نتیجه

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

کاربردهای مدل Donut بسیار زیاد است و این تنها یکی از راه های استفاده از آن است که امیدوارم مفید واقع شود.

اگر علاقه مند هستید و می خواهید در مورد موضوعات مشابه بیشتر بدانید، می توانید من را در این آدرس بیابید: