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

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

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


نانوت OCR API بسیار جالب دارد موارد استفاده. برای کسب اطلاعات بیشتر با یک متخصص هوش مصنوعی Nanonets صحبت کنید.


معرفی

پیش بینی می شود اندازه بازار تشخیص کاراکتر نوری (OCR) تا سال 13.38 به 2025 میلیارد دلار با رشد سالانه 13.7 درصدی برسد. این رشد با دیجیتالی شدن سریع فرآیندهای کسب و کار با استفاده از OCR برای کاهش هزینه های نیروی کار و صرفه جویی در ساعات کاری گرانبها انجام می شود. اگرچه OCR به عنوان یک مشکل حل شده در نظر گرفته شده است، اما یک جزء کلیدی آن وجود دارد، تشخیص دست خط (OCR) یا تشخیص متن دست نویس (HTR) که هنوز به عنوان یک بیان مسئله چالش برانگیز در نظر گرفته می شود. تنوع زیاد در سبک‌های دست‌نویس بین افراد و کیفیت پایین متن دست‌نویس در مقایسه با متن چاپی، موانع قابل‌توجهی در تبدیل آن به متن قابل خواندن توسط ماشین ایجاد می‌کند. با این وجود، حل این مشکل برای صنایع متعددی مانند مراقبت های بهداشتی، بیمه و بانکداری بسیار مهم است.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم
منبع:- https://www.semanticscholar.org/paper/Handwriting-recognition-on-form-document-using-and-Darmatasia-Fanany/

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

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


آیا می خواهید داده ها را از فرم های دست نویس استخراج کنید؟ سر به نانوت و شروع به ساخت مدل های OCR دست نویس به صورت رایگان کنید!


چالش در تشخیص دست خط

  1. تنوع و ابهام زیاد سکته ها از فردی به فرد دیگر
  2. سبک دست خط یک فرد نیز هر از گاهی متفاوت است و ناسازگار است
  3. کیفیت پایین سند/تصویر منبع به دلیل تخریب در طول زمان
  4. متن در اسناد چاپی در یک خط مستقیم قرار می گیرد در حالی که انسان نیازی به نوشتن یک خط متن در یک خط مستقیم روی کاغذ سفید ندارد.
  5. دست خط شکسته جداسازی و شناخت شخصیت ها را چالش برانگیز می کند
  6. متن در دست خط می تواند چرخش متغیری به سمت راست داشته باشد که برخلاف متن چاپ شده است که در آن تمام متن مستقیماً قرار می گیرد.
  7. جمع آوری یک مجموعه داده با برچسب خوب برای یادگیری در مقایسه با داده های مصنوعی ارزان نیست

موارد استفاده

مراقبت های بهداشتی و دارویی

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

بیمه

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

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم
منبع :- https://www.researchgate.net/figure/mages-of-handwritten-bank-cheques-from-different-countries-a-Brazilian-1-b-American_fig2_226705617

بانکداری

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

کتابخانه های آنلاین

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

مواد و روش ها

روش های تشخیص دست خط را می توان به طور کلی به دو نوع زیر طبقه بندی کرد

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم
  1. روشهای آنلاین :- روش‌های آنلاین شامل یک قلم/قلم دیجیتال می‌شوند و به اطلاعات ضربه‌ای، محل قلم در حالی که متن نوشته می‌شود، مانند شکل سمت راست بالا دسترسی دارند. از آنجایی که آنها اطلاعات زیادی در مورد جریان نوشتار دارند، می توانند با دقت بسیار بالایی طبقه بندی شوند و مرزبندی بین کاراکترهای مختلف در متن بسیار واضح تر می شود.
  2. روش های آفلاین :- روش‌های آفلاین شامل تشخیص متن پس از نوشتن است و از این رو اطلاعاتی در مورد سکته‌ها/جهت‌های درگیر در هنگام نوشتن با اضافه شدن مقداری نویز پس‌زمینه از منبع، یعنی کاغذ، ندارند.

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

تکنیک

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

شبکه های عصبی چند بعدی بازگشتی

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

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

تفاوت بین RNN عمومی و RNN چند بعدی است. در یک RNN عمومی، لایه پنهان می گوید i وضعیت را از لایه پنهان قبلی در زمان i-1 دریافت می کند. در RNN چند بعدی مثلاً یک RNN 2 بعدی، لایه پنهان (i, j) حالات را از چندین لایه پنهان قبلی مانند (i-1, j) و (i, j-1) دریافت می کند و بنابراین زمینه را از هر دو می گیرد. ارتفاع و عرض در یک تصویر که برای درک واضح منطقه محلی توسط یک شبکه بسیار مهم است. این بیشتر برای به دست آوردن اطلاعات نه تنها از لایه‌های قبلی، بلکه از لایه‌های آینده مشابه نحوه دریافت اطلاعات از t-1 و t+1 توسط BI-LSTM گسترش یافته است. به طور مشابه یک لایه مخفی 2 بعدی MDRNN i اکنون می تواند اطلاعات (i-1، j)، (i، j-1)، (i+1، j)، (i، j+1) را دریافت کند، بنابراین زمینه را در همه جهات ثبت می کند.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

کل ساختار شبکه در بالا نشان داده شده است. MDLSTM استفاده می شود که چیزی نیست جز جایگزینی بلوک RNN با یک بلوک LSTM از بحث فوق MDRNN. ورودی به بلوک هایی با اندازه 3×4 تقسیم می شود که اکنون به لایه های MDSTM وارد می شود. شبکه دارای یک ساختار سلسله مراتبی از لایه‌های MDLSTM است که به دنبال لایه‌های پیش‌خور (ANN) پشت سر هم قرار دارند. سپس خروجی نهایی به یک بردار 1 بعدی تبدیل می شود و برای تولید خروجی به تابع CTC داده می شود

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

برای تشخیص دست خط، نواحی تصویر ورودی را برای یک جمله خاص به عنوان ورودی در نظر بگیرید. X=[x1,x2،…،x**T] در حالی که خروجی مورد انتظار به عنوان Y=[y1,y2،…،y**U] . با توجه به X، باید دقیق Y را پیدا کنیم. الگوریتم CTC با گرفتن ورودی X و توزیع بر روی همه Yهای ممکن کار می کند که با استفاده از آن می توانیم خروجی نهایی را پیش بینی کنیم.

CTC از یک کاراکتر پایه استفاده می کند - برای تمایز بین کاراکترهای تکراری و کاراکترهای تکراری در یک منطقه ورودی. به عنوان مثال یک کاراکتر خاص می تواند چندین ناحیه ورودی را در بر بگیرد و بنابراین CTC همان کاراکتر را به طور متوالی خروجی می دهد. مثال: - ورودی james و خروجی CTC jjaammmees است. خروجی نهایی با جمع کردن خروجی های مکرر به دست می آید و از این رو جیمز دریافت می کنیم. اما اکنون برای ارائه کاراکترهای تکراری که می گویند "l" در سلام، باید یک جداسازی در جای خود داشته باشیم و بنابراین همه خروجی ها با خط فاصله (-) از هم جدا می شوند. حال خروجی hello می تواند h-ee-ll-llll-oo باشد که اگر جمع شود به hello تبدیل می شود و نه helo. اطلاعات بیشتر در مورد نحوه عملکرد CTC را می توانید در اینجا مشاهده کنید CTC.

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

  1. رمزگشایی بهترین مسیر :- این رمزگشایی عمومی است که ما تاکنون در مورد آن صحبت کرده ایم. در هر موقعیت خروجی مدل را می گیریم و نتیجه را با بیشترین احتمال پیدا می کنیم.
  2. رمزگشایی جستجوی پرتو :- به جای گرفتن یک خروجی از شبکه در هر بار جستجوی پرتو پیشنهاد می‌کند که مسیرهای خروجی متعدد را با بالاترین احتمالات نگه دارید و زنجیره را با خروجی‌های جدید گسترش دهید و مسیرهایی را با احتمالات کمتر رها کنید تا اندازه پرتو ثابت بماند. نتایج به‌دست‌آمده از این رویکرد نسبت به روش حریصانه دقیق‌تر است
  3. جستجوی پرتو با زبان مدل :- جستجوی پرتو نتایج دقیق تری نسبت به جستجوی شبکه ای ارائه می دهد، اما همچنان مشکل داشتن نتایج معنی دار را حل نمی کند. برای حل این موضوع می‌توانیم از یک مدل زبان به همراه جستجوی پرتو با استفاده از احتمالات مدل و مدل زبان برای تولید نتایج نهایی استفاده کنیم.

جزئیات بیشتر در تولید نتایج رمزگشایی دقیق را می توان در این مورد بررسی کرد مقاله

رمزگذار-رمزگشا و شبکه های توجه

مدل‌های Seq2Seq که دارای شبکه‌های رمزگذار-رمزگشا هستند اخیراً برای حل وظایف تشخیص گفتار، ترجمه ماشینی و غیره محبوب شده‌اند و بنابراین برای حل موارد استفاده از تشخیص دست خط با به کارگیری مکانیزم توجه اضافی گسترش یافته‌اند. بیایید برخی از تحقیقات اساسی در این زمینه را مورد بحث قرار دهیم

اسکن، حضور و خواندن

در این کار مهم Scan, Attend and Read (SAR) نویسندگان استفاده از یک مدل مبتنی بر توجه را برای تشخیص دستخط انتها به انتها پیشنهاد می کنند. سهم اصلی این تحقیق رونویسی خودکار متن بدون تقسیم بندی به خطوط به عنوان یک مرحله پیش پردازش است و بنابراین می تواند کل صفحه را اسکن کند و نتیجه دهد.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

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

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

معماری SAR شامل یک معماری MDLSTM است که به عنوان استخراج کننده ویژگی عمل می کند. ماژول در حال فروپاشی نهایی با خروجی softmax و کاهش CTC با یک ماژول توجه و یک رمزگشا LSTM جایگزین می شود. مدل توجه مورد استفاده ترکیبی ترکیبی از توجه مبتنی بر محتوا و توجه مبتنی بر مکان است که در مقاله بعدی با جزئیات بیشتر توضیح داده شده است. ماژول های رمزگشا LSTM حالت قبلی، نقشه توجه قبلی و ویژگی های رمزگذار را برای تولید کاراکتر خروجی نهایی و بردار حالت برای پیش بینی بعدی می گیرند.

در هم بپیچید، شرکت کنید و املا کنید

این مقاله یک مدل توالی به دنباله مبتنی بر توجه را برای تشخیص کلمات دست‌نویس پیشنهاد می‌کند. معماری پیشنهادی دارای سه بخش اصلی است: یک رمزگذار، متشکل از یک CNN و یک GRU دو جهته، یک مکانیسم توجه اختصاص داده شده به تمرکز بر ویژگی های مربوطه و یک رمزگشا که توسط یک GRU یک جهته تشکیل شده است، که قادر به املای کلمه مربوطه است. شخصیت به شخصیت

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

رمزگذار از یک CNN برای استخراج ویژگی های بصری استفاده می کند. یک معماری VGG-19-BN از پیش آموزش دیده به عنوان استخراج کننده ویژگی استفاده می شود. تصویر ورودی به نقشه ویژگی X تبدیل می‌شود که سپس با تقسیم تمام کانال‌ها به صورت ستونی و ترکیب آنها برای دریافت اطلاعات متوالی، به X تغییر شکل می‌یابد. X' بیشتر با استفاده از یک GRU دو جهته به H تبدیل می شود. GRU یک شبکه عصبی شبیه به LSTM در طبیعت است و می تواند اطلاعات زمانی را بگیرد.

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

  1. توجه مبتنی بر محتوا :- ایده پشت این کار یافتن شباهت بین حالت پنهان فعلی رمزگشا و نقشه ویژگی از رمزگذار است. ما می‌توانیم مرتبط‌ترین بردارهای ویژگی را در نقشه ویژگی رمزگذار پیدا کنیم، که می‌توان از آن برای پیش‌بینی کاراکتر فعلی در مرحله زمانی فعلی استفاده کرد. جزئیات بیشتر در مورد نحوه عملکرد مکانیسم توجه را می توان از اینجا مشاهده کرد توجه
  2. توجه مبتنی بر مکان :- نقطه ضعف اصلی مکانیسم های مکان مبتنی بر محتوا این است که یک فرض ضمنی وجود دارد که اطلاعات مکان در خروجی رمزگذار تعبیه شده است. در غیر این صورت هیچ راهی برای تمایز بین خروجی کاراکترهایی که از رمزگشا تکرار می شوند وجود ندارد. به عنوان مثال یک کلمه Charmander را در نظر بگیرید، کاراکتر a دو بار در آن تکرار می شود و بدون اطلاعات مکان، رمزگشا نمی تواند آنها را به عنوان کاراکترهای جداگانه پیش بینی کند. برای کاهش این موضوع، کاراکتر فعلی و تراز آن با استفاده از خروجی رمزگذار و تراز قبلی پیش‌بینی می‌شود. جزئیات بیشتر در مورد نحوه کار حضور مبتنی بر مکان را می توان مشاهده کرد اینجا کلیک نمایید.

رمزگشا یک GRU چند لایه یک جهته است. در هر مرحله زمانی t ورودی را از مرحله زمانی قبلی و بردار زمینه را از ماژول توجه دریافت می کند. رمزگشایی چند جمله ای و صاف کردن برچسب در آموزش برای بهبود قابلیت تعمیم مورد بررسی قرار می گیرند.

مدل های ترانسفورماتور

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

به آنچه می خوانید توجه کنید

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

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

معماری شبکه از اجزای زیر تشکیل شده است

  1. رمزگذار بصری : - برای استخراج ویژگی های مرتبط و اعمال خود توجه بصری چند سر در مکان های شخصیت های مختلف
  2. رونویس متن :- وظیفه گرفتن ورودی متن، رمزگذاری آن، استفاده از خودتوجهی زبان چند سر و اعمال توجه متقابل بر روی ویژگی های بصری و متنی را انجام می دهد.
رمزگذار تصویری

ستون فقرات Resnet50 برای اضافه کردن ویژگی ها همانطور که در شکل بالا مشاهده می شود استفاده می شود. خروجی نقشه ویژگی سه بعدی از Resnet3 Fc به ماژول رمزگذاری موقتی منتقل می شود که با حفظ همان عرض و بنابراین شکل (fxh, w) به 50d تغییر شکل می دهد. این به یک لایه کاملا متصل وارد می شود تا شکل را به (f, w) کاهش دهد و خروجی حاصل Fc' است. بعلاوه یک TE رمزگذاری موقعیتی به Fc' اضافه می شود تا اطلاعات موقعیت را همانطور که در مقاله Transformer توسط Vaswani ذکر شده حفظ کند. اطلاعات بیشتر در مورد نحوه طراحی معماری ترانسفورماتور قابل مشاهده است اینجا کلیک نمایید. خروجی از یک لایه کاملا متصل عبور داده می شود تا نقشه ویژگی نهایی با شکل (f , w) بدست آید. خروجی نهایی از یک ماژول توجه چند سر با 8 سر عبور داده می شود تا نقشه ویژگی غنی بصری به دست آید

رونویس متن

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

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

تولید متن دست خط

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

ScrabbleGAN

ScrabbleGAN از یک رویکرد نیمه نظارت شده برای ترکیب تصاویر متنی دست نویس پیروی می کند که هم از نظر سبک و هم از نظر واژگان همه کاره هستند. قابلیت تولید تصاویر با طول های مختلف را دارد. مولد همچنین می تواند سبک متن به دست آمده را دستکاری کند که به ما اجازه می دهد تصمیم بگیریم که آیا متن باید خط شکسته باشد یا بگوییم که خط قلم چقدر باید ضخیم و نازک باشد.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

این معماری از یک ژنراتور کاملاً کانولوشن مبتنی بر BigGAN تشکیل شده است. برای هر کاراکتر در ورودی، یک فیلتر مربوطه انتخاب می شود و همه مقادیر به هم متصل می شوند که سپس در یک بردار نویز z ضرب می شود که سبک متن تولید شده را کنترل می کند. همانطور که در بالا مشاهده می شود، مناطق تولید شده برای هر کاراکتر منفرد با هم همپوشانی دارند، بنابراین به تولید متن بازگشتی متصل و همچنین امکان انعطاف پذیری اندازه کاراکترهای مختلف کمک می کند. برای مثال m بیشتر فضا را اشغال می کند در حالی که e و t مساحت محدودی را اشغال می کنند. به منظور حفظ یک سبک برای کل کلمه یا جمله، بردار سبک z برای همه کاراکترها ثابت نگه داشته می شود.

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

خروجی های تولید شده توسط ScrabbleGAN در زیر نشان داده شده است

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

مجموعه داده ها: -

  1. IAM :- مجموعه داده IAM شامل حدود 100 هزار تصویر از کلمات از زبان انگلیسی با کلمات نوشته شده توسط 657 نویسنده مختلف است. مجموعه قطار، تست و اعتبارسنجی شامل کلماتی است که توسط نویسندگان منحصر به فرد نوشته شده است لینک: http://www.fki.inf.unibe.ch/databases/iam-handwriting-database
  2. CVL :- مجموعه داده های CVL شامل هفت سند دست نویس است که توسط حدود 310 شرکت کننده نوشته شده است، که در نتیجه حدود 83 هزار کلمه برش داده می شود، که به مجموعه های قطار و آزمایش تقسیم می شود. https://cvl.tuwien.ac.at/research/cvl-databases/an-off-line-database-for-writer-retrieval-writer-identification-and-word-spotting/
  3. ریمز :- حاوی کلماتی از زبان فرانسه با حدود 60 هزار تصویر و نوشته شده توسط 1300 نویسنده مربوط به حدود 5 نامه نوشته شده توسط هر شخص است. پیوند:- http://www.a2ialab.com/doku.php?id=rimes_database:start

معیارهای :-

نرخ خطای کاراکتر :- به عنوان فاصله لونشتاین محاسبه می شود که مجموع جایگزین های کاراکتر (Sc)، درج ها (Ic) و حذف ها (Dc) است که برای تبدیل یک رشته به رشته دیگر مورد نیاز است، تقسیم بر تعداد کل کاراکترها در رشته حقیقت اساسی (NC)

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

میزان خطای کلمه :- به عنوان مجموع جایگزین‌های کلمه (Sw)، درج‌ها (Iw) و حذف‌هایی (Dw) که برای تبدیل یک رشته به رشته دیگر مورد نیاز است، تقسیم بر تعداد کل کلمات در حقیقت اصلی (Nw) محاسبه می‌شود.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

مدل تشخیص دست خط خود را آموزش دهید

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

داده ها

برای دانلود مجموعه داده IAM ثبت نام کنید اینجا کلیک نمایید. پس از ثبت نام word.tgz را از اینجا کلیک نمایید. این شامل مجموعه داده ای از تصاویر کلمه دست نویس است. فایل حاشیه نویسی word.txt را نیز از اینجا دانلود کنید اینجا کلیک نمایید.

اگر می خواهید از مجموعه داده خود استفاده کنید، باید ساختار داده مجموعه داده IAM را دنبال کنید.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

شکل بالا نشان می دهد که ساختار پوشه مجموعه داده AIM چگونه به نظر می رسد. در اینجا a01، a02 و غیره نشان دهنده پوشه های والد هستند که هر کدام دارای زیرپوشه های داده هستند. هر زیر پوشه دارای مجموعه ای از تصاویر است که نام پوشه به عنوان پیشوند به نام فایل آن اضافه شده است.

علاوه بر این ما به یک فایل حاشیه نویسی برای ذکر مسیرهای فایل های تصاویر و رونویسی های مربوطه نیاز داریم. به عنوان مثال تصویر بالا را با نامگذاری متن در نظر بگیرید، تصویر زیر در فایل حاشیه نویسی word.txt نمایش داده می شود.

a01-000u-01-00 ok 156 395 932 441 100 VBG نامزد

  1. a01-000u-01-00 -> شناسه کلمه برای یک خط به شکل a01-000u
  2. ok/err -> نشانگر کیفیت خروجی تقسیم بندی
  3. 156 -> سطح خاکستری برای دوتایی کردن خط حاوی این کلمه
  4. 395 932 441 100 -> کادر محدود کننده اطراف این کلمه در قالب x,y,w,h
  5. VBG -> برچسب گرامری این کلمه. در اینجا فعل Gerund است
  6. نامزد کردن -> رونویسی برای این کلمه

معماری :-

ما یک معماری مبتنی بر CRNN با از دست دادن CTC آموزش خواهیم داد. یک CNN برای استخراج ویژگی‌های بصری استفاده می‌شود که به یک RNN ارسال می‌شوند و یک تلفات CTC تا انتها با یک رمزگشا حریص برای دریافت خروجی اعمال می‌شود.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

آموزش

ما از کد CRNN استفاده خواهیم کرد اینجا کلیک نمایید برای آموزش مدل خود برای تهیه داده ها مراحل زیر را دنبال کنید

python checkDirs.py

دستور فوق را اجرا کنید و باید خروجی مانند زیر را ببینید

[OK] کلمات/
[OK] words/a01/a01-000u/
[OK] words.txt
[OK] test.png
[OK] words/a01/a01-000u/a01-000u-00-00.png

اکنون آماده اید که تمرین را شروع کنید.

به دایرکتوری root بروید و اجرا کنید

python main.py --train

نتایج

پس از آموزش برای حدود 50 دوره، نرخ خطای کاراکتر (CER) 10.72٪ است در حالی که میزان خطای کلمه (WER) 26.45٪ است و از این رو دقت کلمه 73.55٪ است. برخی از پیش بینی ها در شکل زیر قابل مشاهده است.

چگونه با استفاده از یادگیری ماشینی به راحتی تشخیص دست خط را انجام دهیم

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

خلاصه

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

برای دستیابی به تحقیقات بیشتر در مورد این موضوع می توانید از آن شروع کنید اینجا کلیک نمایید

برای مطالعه بیشتر

تمبر زمان:

بیشتر از هوش مصنوعی و یادگیری ماشین