هدف این پروژه طبقهبندی ارقام دستنویس به منظور تشخیص رقم مربوطه است. برای این منظور میتوان از هریک از روشهای طبقهبندی استفاده کرد. در این پروژه انتظار میرود چند روش برای طبقهبندی ارقام که به نظر مناسبتر هستند بررسی و مقایسه شوند. برای این منظور میتوان از مجموعه دادگان فارسی و یا انگلیسی استفاده کنید.
۱. مقدمه
تعاملات انسانها از قدیم با روشهای مختلفی از جمله گفتار، نوشتار می باشد و با پیدایش فناوریهای جدید صفحه کلیدها و موبایل ها نیز باعث افزایش تعاملات شده اند و اما در سال های اخیر با پیشرفت فناوری، این ارتباطات به شیوه های نوین از جمله نوشتن بر روی صفحات لمسی رسیده است. تشخیص کاراکترها یا OCR یکی از نرم افزارهای موفق در حوزه شناسای خودکار الگوها است و تشخیص اعداد دست نوشته یکی از زیر بخش های جالب توجه و مهمی از تشخیص کاراکترهای می باشد که کاربردهای زیادی نیز همچون، دسته بندی نامه های پستی، خواندن خودکار مبالغ چک های بانکی، شناسایی خودکار اطلاعات ثبت شده در فرم ها، خواندن نوشته ها از روی صفحه های لمسی و خواندن اعداد از روی تصاویر دست نوشته می باشد. برای انجام تشخیص اعداد فارسی روش های متفاوتی وجود دارد از جمله استفاده از روش های آماری shadow coding، مدل مخفی مارکوف [1]، [2]SVM، نزدیک ترین همسایگی یا K-NN و یا روش های شبکه های عصبی، ژنتیک [3] و فازی را می توان نام برد که همه آنها در مسئله دقت و سرعت انجام کار از اهمیت ویژه ای برخوردار هستند در این راستا از روش هایی مانند PCA برای کاهش حجم داده مورد استفاده قرار می گیرد. از جمله نکات قابل تحقیق این است که از کجا معلوم اعداد موجود در یک عکس، دستنوشته و یا پرینت شده هستند [4]، در این راستا محقیق سعی به تفکیک این دو حالت دارند.همچنین، طرز نوشتن افرادی که در شهرهای مختلف هستند چقدر با هم متفاوت است؟ و نوشتار اعداد فارسی با زبان های دیگر مانند عربی و هندی چقدر با هم متفاوت هستند و چه تاثیری بر روی شناسایی الگو دارد [5]. حوزه دیگری که می تواند مورد اهمیت قرار بگیرد تشخیص درشت نویسی و یا مورب نویسی اعداد است که در زبان فارسی تقریباً کاری در این حوزه انجام نشده است.
شکل 1 نمایش اعداد فارسی
در زبان فارسی 13 نوع نمایش اعداد دستنویس وجود دارد. در شکل 1 نمونه ای از آنها نشان داده شده است. در این زبان اعداد صفر، چهار و شش هستند که به دو صورت نوشته می شوند [2]. پس باید برای آن 13 دسته ایجاد کرد و کار تشخیص را برای هر دسته انجام داد.
برای انجام تشخیص اعداد فارسی نیاز به پایگاه داده ای می باشد که مشتمل بر یک سری اعداد دست نوشته فارسی باشد. پایگاه های داده زیادی برای انجام این کار وجود دارد. که در جدول 1 یک مجموعه ای از پایگاه داده های معروف نشان داده شده است.
برای این منظور، در طی انجام تشخیص اعداد، ابتدا نویز های عکس ها را برطرف می کنند و بعد آن ها را نرمال سازی می کنند. یعنی، اندازه همه آنها را به یک اندازه خاص به عنوان مثال 64×64 تبدیل می کنند. بعد از آن با استفاده از یکی و یا ترکیبی از روش های مطرح، سعی به آموزش دادن و یا جمع آوری اطلاعات و تولید ویژگی برای حل مسئله می کنند. در نهایت، مدل آموزش دیده را با داده های آزمونی، مورد آزمون قرار می دهند تا بتوانند میزان دقت کار را بسنجند.
نام پایگاه داده | dpi | نمونه های آزمایشی | نمونه های آزمونی | مجموعه نمونه ها |
---|---|---|---|---|
CENPARMI | 166 | 4000 | 2000 | 60000 |
CEDAR | 300 | 18468 | 2711 | 21179 |
MNIST | Normalized into 20*20 | 7291 | 2007 | 9298 |
جدول 1- مجموعه ای از پایگاه های داده های مهم
در ادامه این مقاله، با یک سری از روش های مطرح و طرز کار آنها تحت عنوان کارهای مرتبط توضیحاتی داده خواهد شد. آزمایشات و نتیجه آنها و مقایسه روش ها نیز به عنوان موضوع بعدی ارائه خواهد شد. در نهایت نیز نتیجه گیری از کار را خواهیم داشت.
۲. کارهای مرتبط
همان طور که می دانید روش SVM یکی از روش های مطرح در حوزه شناسایی الگو می باشد. لذا، از این روش در شناسایی اعداد فارسی نیز استفاده شده است. چیزی که در اینجا مهم است ایده ای است که برای بدست آوردن ویژگی ها استفاده می شود. هدف اصلی این ویژگی ها این است که بتوان یک شی یا نمونه را به وسیله این ویژگی ها اندازه گیری کرد تا آنهایی که اندازه شان به هم نزدیک تر است بتواند در یک دسته قرار بگیرند. مقالات مختلف ایده های مختلفی را برای بدست آوردن ویژگی ها استفاده می کنند. برای نمونه روش مطرح شده در [2]، برای هر عددی که در عکس وجود دارد 4 دیدگاه مختلف تعریف می شود و از روی هر دیدگاه 16 ویژگی استخراج کرده است. بنابراین در کل برای هر عکس 64 ویژگی خواهد داشت. با این ویژگی ها یک SVM چندگانه آموزش داده می شود تا بتواند اعداد را با دقت 94.14% تشخیص دهد.
این روش ابتدا عکس ها را بعد از برطرف کردن نویزها با استفاده از روش دورنیابی نزدیک ترین همسایگی به عکس های 64×64 تبدیل می کند تا عکس ها نرمال شوند. در مرحله بعد، دیدگاه های بالا، پائین، چپ و راست ایجاد می شود. می دانید که عکس مورد نظر یک عکس 64×64 است. ماتریس عکس نیز یک ماتریس 64×64 خواهد بود که ارزش رنگ در آن نوشته شده است. از این ماتریس 1/4 آن انتخاب می شود. یک ماتریس 16×16 را ایجاد می کند. از روی این ماتریس، از هر طرف، بالا، پائین، چپ و راست، تعداد خانه های سفید تا به مرز خانه سیاه برسد، شمارش می شود. پس نموداری مانند شکل 2 را تولید خواهد کرد که از اتصال تعداد نقاط سفید در هر جهت از عکس منحنی ایجاد کرده اند. اگر از روی این منحنی مشتق بگیرید شکل 3 را برای دیدگاه های بالا، پائین، چپ و راست ایجاد می کند. مقدارهای مشتق ویژگی های این مسئله می شود. حال 64 ویژگی استخراج شده را با 13 تا SVM برای هر عدد ایجاد می شود و نتیجه نهایی برای تشخیص عدد نیز بیشترین مقدار بین این 13 تا SVM خواهد بود.
شکل 2 a: عکس اصلی، b: عکس نرمال شده، c-f: دیدگاه مختلف از بالا و پائین، چپ و راست
شکل 3 نمودار های مشتق گرفته شده از منحنی های دیدگاه های مختلف شکل 2
حوزه دیگری که بسیار قابل رقابت با روش SVM است روش دیاگراف تکرار 1 می باشد. این روش نشان می دهد که چگالی رنگ مشکی در عکس به چه میزان است. این روش در [6] مورد بررسی قرار گرفته است. این مرجع، ابتدا عکس ها را به اندازه های 40×40 نرمال سازی می کند. بعد، ماتریس عکس های که برای مثال عدد 5 را مشخص می کنند را با هم رنگهای مشکی با هم جمع، همچنین رنگهای سفید را با هم جمع و رنگ سیاه را از سفید و یا سفید را از سیاه تفریق می کنند. در نهایت یک ساختاری که نشان دهنده ساختار عدد 5 باشد را ایجاد می کند. شکل 4 نشان دهنده این حالت می باشد که از مجموعه ای از عکس ها که برای عدد 5 هستند ایجاد شده است. همچنین، این کار را بر روی اعداد دیگر نیز اعمال می کنند و برای تشخیص از روش شباهت 2 استفاده می کنند تا بتوانند یک عدد را تشخیص دهند. اگر بخواهید روش بدست آوردن دیاگرام تکرار را فرموله کنید می توانید از فرمولD_i(x,y)=\frac{1}{N_i} \sum\limits_{n=0}^N_i (f_n(x,y)*2-1)*100 که در آن x,y = 0,…,39 می باشد، استفاده کنید. همچنین فرمول تشابه نیز می تواند به صورت زیر باشد.
شکل 4 دیاگرام تکرار برای 300 نمونه از عدد 5، حالت سیاه و سفید آن نیز در سمت بالا سمت راست نشان داده شده است
همان طور که مشخص است، این روش ها نیاز دارند تا در لحظه انجام تشخیص، این الگو ها را تولید کنند و این می تواند یکی از معایب این روش باشد. لذا، همه این عملیات با حجم بسیار زیادی از داده های آموزشی باید در سیستم معمولی مانند یک موبایل و یا تبلت ها اجرا شود. این کار هزینه انجام کار را بالا خواهد برد. لذا سعی می شود تا با استفاده از روش های کاهش سایز آموزشی زمان انجام کار را بالا ببرند.
برای کاهش سایز در پایگاه داده باید دو کار انجام شود. اول باید بٌعد را کاهش دهند و دوم باید سایز را کاهش دهند [7]. در کاهش بٌعد سعی می شود تا در ابتدا ویژگی هایی که اهمیت کمی دارند را شناسایی و از مجموعه ویژگی ها حذف کنند. برای انجام این کار از روش های مختلفی مانند PCA، EMG، random projection و ... استفاده می شود. همچنین، می توان برای این کار با استفاده از روش های ترکیبی نتیجه بهتری گرفت.
در کاهش سایز سعی می شود تا نمونه های آموزشی را کاهش دهند. اکثر نمونه ها دو گروه از نمونه های آموزشی را از مجموعه خود حذف می کنند. 1) نمونه هایی که خیلی از کلاس خود دور هستند. 2) نمونه هایی که خیلی به مرکز کلاس خود نزدیک هستند. برای انجام این کار از روش هایی مانند K-means و یا روش های مختلف داده کاوی استفاده می کنند تا نمونه ها را به چندین کلاس تقسیم کنند. در نهایت، در [7] با استفاده از روش کاهش سایز PCA توانسته برای روش دیاگرام تکرارها به دقت 97% برسد و اگر انجام نمی داد در زمانی دو برابر به دقت 97.7% می رسید.
یکی از پر طرفدار ترین روش های تشخیص الگو و آموزش دادن به سیستم ها روش شبکه های عصبی است. برای نمونه [8] بعد از حذف نویز و نرمال سازی، عکس نرمال شده را به عکسی به ضخامت یک پیکسل تبدیل می کند و سعی می کند تا عکس نازک سازی شود و اسکلت تصویر مشخص شود، دوباره عکس مورد نظر را به سایز دو برابر تبدیل می کند. این عمل باعث می شود تا میزان کلفتی و نازکی پهنای دست نوشته تاثیری بر روی روش نداشته باشد. حال کل ماتریس عکس را به 16 خانه n*n تقسیم می کنند و از مقدار داخل آنها میانگین گرفته می شود. حاصل 16 عدد است که نشان دهنده ویژگی ها خواهد بود. با استفاده از روش شبکه های عصبی با وزن دهی به نرون ها و بایاس کردن مقدار اولیه و استفاده از تابع سیگموئید دو قطبی مانند تانژانت سیگموئید سعی به شناسایی اگو می کند و تا 97.2% دقت در شناسایی اعداد دارد. لازم به توضیح است که اگر از روش projection استفاده می شد به درصد دقت 99% می رسید [9]. البته اگر ویژگی ها با استفاده از روش ژنتیک استخراج می شد و با استفاده از روش های شبکه عصبی پرسپترون انجام می شد به دقت 98.1% می رسید [10].
یکی دیگر از ویژگی هایی که می توان در شناسایی اعداد از آن تاثیر گرفت، جهت حرکت قلم و یا جهت شکستگی ها می باشد. از این ویژگی بیشتر در حوزه های SVM، شبکه های عصبی [8] و مدل مخفی مارکوف [1] مورد استفاده قرار می گیرد. برای مشخص کردن جهت حرکت قلم ابتدا اسکلت عکس را استخراج می کنند. جهت قلم می تواند 4 سمت شمال، جنوب، شرق و غرب باشد. همچنین 4 جهت نیز با چرخش 45 درجه این جهت ها وجود خواهد داشت. اگر این جهت ها را در جهت چرخش عقربه ساعت شماره گذاری کنید در نتیجه، 8 سمت خواهید داشت. در شکل 5 دنباله مشاهدات برای عدد 1 نشان داده شده است. در روش مطرح در [1] از مدل مخفی مارکوف، روش جهت حرکت قلم استفاده گردیده تا تشخیص اعداد را انجام دهد. با توجه به اینکه براساس جهت حرکت قلم طراحی شده، برای هر رقم به ازای هر روش نوشتن از لحاظ جهت حرکت قلم یک مدل مخفی ایجاد شده است. هر مدل حداکثر 8 حالت انتقال و هر کدام آنها 8 مشاهده دارند که همان جهت حرکت قلم است. احتمالات انتقال بین حالتها و مشاهدات با توجه به شکلهای استاندارد و غیراستاندارد هر رقم تعیین می شود. در این مدلها ویژگی هدایت شوندگی دیده می شود، به این معنی که در مسیر حرکت بین حالتها امکان بازگشت به حالت قبلی وجود ندارد و مدل را مجبور به طی کردن یک مسیر مشخص می کند، که این ویژگی به تشخیص دقیق تر مدل کمک بسیاری کرده است. و در نهایت این روش دارای دقت 96.76% در تشخیص اعداد می باشد.
شکل 5 چند نمونه دنباله مشاهدات برای رقم 1
البته اگر روش شناسایی جهت حرکت قلم را با روش قطعه بندی انجام بدهید به میزان دقت 94.4% می رسید [11]. در روش قطعه بندی سعی می شود تا بعد از بدست آوردن اسکلت اعداد، بخش های مختلف اسکلت را از هم جدا کنند و هر بخش را جداگانه مورد بررسی قرار بدهند که این کار می تواند در شناسایی اعداد فارسی موثر واقع گردد.
روش مطرح دیگری که در این حوزه باقی می ماند روش های آماری مانند بیز است. در [12] از مدل مخروطی گوسی برای تشخیص اعداد لاتین استفاده کرده است و به دقت 94% دست یافته است. در این روش از مدل مخروطی گوسی در دو مرحله استفاده شده است. ابتدا برای تعیین زیر کلاسهای مربوط به هر عدد و سپس برای تخمین وفقی تابع چگالی احتمال هر زیر کلاس در قالب یک دسته بندی کننده بیز. اگر این روش را با ترکیب روش های HMM و SVM استفاده کنید، در این صورت به میزان دقت 98% خواهید رسید [13].
روش های یادگیری نیمه نظارتی نیز از جمله روش هایی هستند که مورد توجه قرار می گیرند. روشهای نیمهنظارتی دستهای از روشهای یادگیری ماشین است که در آن از دادههای بدون برچسب و دادههای برچسبدار به صورت همزمان برای بهبود دقت یادگیری استفاده میشود. در این نوع آموزش تعداد کمی از داده ها برچسب دارند و مابقی بدون برجسب مورد استفاده قرار خواهد گرفت. این روش ها اکثراً بر روی شبکه های عصبی اعمال می شوند. این در حالی است که خود شبکه های عصبی عضو روش های نظارتی هستند. این روش دو بخش عمده دارد. در بخش اول پیش آموزش بدون نظارت مطرح می شود. در این بخش وزن های لایه ها با استفاده از آموزش بدون نظارت لایه ها مقدار دهی اولیه می شود. در بخش دوم، fine-tuning نام دارد که وزنهای عمومی که با برچسب ها آموزش دیده اند بر روی روش های نظارتی به صورت انتشار عقبگرد اعمال می شود. همه روش هایی که به این صورت عمل می کنند را روش نیمه نظارتی می گویند. داده های بدون برچسب نیز داده هایی هستند که بیشترین احتمال را برای یک کلاس داشته باشند و کلاس آنها نیز درست پیش بینی شده باشد. این روش می تواند همه مدل های شبکه های عصبی را با روش های آموزش به خوبی ترکیب کند. این روش در [14]، به صورت کامل مطرح شده و از نمونه های MNIST استفاده کرده تا شناسایی اعداد را داشته باشد. این کار را با چندی روش مقایسه کرده است و همه آنها را با تعداد نقاط آموزشی 100 تا، 600، 1000 و 3000 انجام داده است و برای تست نیز از 1000 نمونه استفاده کرده است که در جدول 2 میزان خطای کلاس بندی نشان داده شده است که در [14] روش های dropNN، +PL و روش +PL+DAE مطرح شده است. عمومآً برای جلوگیری از overfitting از روش drop کردن استفاده می شود که آموزش نظارتی مورد استفاده قرار میگیرد. در +PL به شبکه های عصبی آموزش بدون برچسب نیز اضافه کرده است و در +PL+DAE به آموزش بدون برچسب بدون نظارت DAE اضافه می شود. DAE را در بخش اول یعنی در پیش آموزش بدون نظارت استفاده می کنند.
روش | 100 | 600 | 1000 | 3000 |
---|---|---|---|---|
NN | 25.81 | 11.44 | 10.7 | 6.04 |
SVM | 23.44 | 8.85 | 7.77 | 4.21 |
CNN | 22.98 | 7.68 | 6.45 | 3.35 |
TSVM | 16.81 | 6.16 | 5.38 | 3.45 |
DBN-rNCA | - | 8.7 | - | 3.3 |
EmbedNN | 16.86 | 5.97 | 5.73 | 3.59 |
CAE | 13.47 | 6.3 | 4.77 | 3.2 |
MTC | 12.03 | 5.13 | 3.64 | 2.57 |
dropNN | 21.89 | 8.57 | 6.59 | 3.72 |
+PL | 16.15 | 5.03 | 4.30 | 2.80 |
+PL+DAE | 10.49 | 4.01 | 3.46 | 2.69 |
جدول 2 میزان خطای روش های مختلف که برای تشخیص اعداد است و با 100، 600، 1000 و 30000 نقطه آموزشی
۳. آزمایشها
برای انجام آزمایش در ابتدا باید پایگاه داده اعداد دستنویس فارسی را در نظر گرفت که ما در این آزمایش از اعداد فارسی موجود در مرجع [6] استفاده خواهیم کرد. در این پایگاه داده 60000 داده آموزشی وجود دارد که برای هر یک از اعداد صفر تا نه 6000 نمونه وجود دارد. همچنین، 20000 نمونه برای تست وجود دارد که برای هر کدام از اعداد صفر تا نه، 2000 نمونه وجود دارد.
روش کار مدنظر، متناسب با روش ارائه شده در [2] می باشد. همان طور که در روش مربوطه نیز ذکر شد، در ابتدا داده ها باید نرمال سازی شوند. در ابتدا همه عکس ها را به عکس های 64*64 تبدیل می کنیم. برای انجام این کار در مطلب از دستور {[Data{i} = imresize(Data{i}, [64 64استفاده می کنیم که {Data{i نمونه های یا عکس ها می باشد. در شکل 6 نمونه ای از نمونه های آموزشی، قبل (بالایی) و بعد (پائینی) از نرمال سازی نشان داده شده است.
شکل 6 نمونه ای از نمونه های مجموعه داده های آزمایشی که عدد 6 را نشان نمی دهد.
۳.۱. بدست آوردن ویژگی ها
اگر به عکس ها توجه کنید، هر عکس، به دلیل خاکستری بودن رنگ، برای هر رنگ یک عدد بین 0 تا 255 در نظر گرفته می شود. در هر عکس 64 ستون و 64 سطر وجود دارد. می توان هر عکس را از چهار دیدگاه بالا، پایین، چپ و راست نگاه کرد و نقاط سفید را برای هر چهار دیدگاه شمرد تا به اولین عنصر غیر رنگ سفید برسیم. به دلیل اینکه رنگ عکس ها را معکوس کرده ایم نوشته ها سفید و ضمینه سیاه خواهد شد. این کار را برای دیدگاه های چپ و راست بر روی 64 سطری که وجود دارد، بر روی سطرهای ضرایب 8 انجام داده می شود. همچنین، برای دیدگاه های بالا و پائین بر روی 64 تا ستونی که وجود دارد، ستون های ضرایب 8 این کار بر روی آنها انجام می شود. اگر به شکل 6 توجه کنید، مشاهده می کنیم که، در سطر اول از چپ به راست 11 خانه صفر وجود دارد و همچنین 43 خانه صفر نیز از راست به چپ داریم. به علاوه در ستون اول از دیدگاه های بالا و پایین نیز به ترتیب 13 و 35 خانه صفر وجود دارد.
شکل 7 دیدگاه های بالا و پائین و چپ و راست از نمونه مورد بررسی در شکل 6.
در شکل 7 نمونه های برداشت شده از شکل 6 نشان داده می شود. بعد از بدست آوردن همه این اطلاعات، از هر یک از نمونه ها، در هر دیدگاهش، شیب بین نقطه هایش را باید بدست آورد.
پس برای هر دیدگاه 15 ویژگی خواهیم داشت، بنابراین در کل برای هر نمونه 60 ویژگی تعریف خواهد شد. در شکل ها 8 یک نمونه از حاصله ویژگی ها، از دیدگاه های به ترتیب از چپ به راست شکل، بالا، پاویین، راست و چپ برای اعداد 0 تا 9 نشان داده می شود.برای انجام اینکار از نرم افزار متلب استفاده شده است. در قطعه کد زیر می توان دیدگاه ها را از نمونه ها بدست آورد.
for Fleft = 1:16
CFCount = 1;
while (CFCount<65 && 0 == IMaGeF((Fleft)*4,CFCount))
Left(i,Fleft) = Left(i,Fleft)+1;
CFCount = CFCount+1;
end
if Fleft>2
MLeft(i,Fleft-1) = Left(i,Fleft) - Left(i,Fleft-1);
end
end
% Right cal
for Fleft = 1:16
CFCount = 1;
while (CFCount<65 && 0 == IMaGeF((Fleft)*4,65-CFCount))
Right(i,Fleft) = Right(i,Fleft)+1;
CFCount = CFCount+1;
end
if Fleft>2
MRight(i,Fleft-1) = Right(i,Fleft) - Right(i,Fleft-1);
end
end
% TOP cal
for Fleft = 1:16
CFCount = 1;
while ( CFCount<65 && 0 == IMaGeF(CFCount,(Fleft)*4))
TOP(i,Fleft) = TOP(i,Fleft)+1;
CFCount = CFCount+1;
end
if Fleft>2
MTOP(i,Fleft-1) = TOP(i,Fleft) - TOP(i,Fleft-1);
end
end
% Down cal
for Fleft = 1:16
CFCount = 1;
while (CFCount<65 &&0 == IMaGeF(65-CFCount,(Fleft)*4))
DOWN(i,Fleft) = DOWN(i,Fleft)+1;
CFCount = CFCount+1;
end
if Fleft>2
MDOWN(i,Fleft-1) = DOWN(i,Fleft) - DOWN(i,Fleft-1);
end
end
%end hadi
که در این کد متغیر IMaGeF نمونه های ما می باشد.
شکل 8 دیدگاه های بالا و پائین و چپ و راست یک نمونه از هر یک از مجموعه نمونه های اعداد صفر تا یک.
ویژگی های هر نمونه را با استفاده کد ذیل در متغیر MALLDATA قرار می دهیم.
MALLDATA = zeros(TotalRec,60);
MALLDATA(1:end,1:15) = MTOP(1:end,1:end);
MALLDATA(1:end,16:30) = MDOWN(1:end,1:end);
MALLDATA(1:end,31:45) = MRight(1:end,1:end);MALLDATA(1:end,46:60) = MLeft(1:end,1:end);
و با استفاده از کد زیر با استفاده از روش SVM سعی می کنیم تا نمونه ها را یاد بگیریم.
for i=0:9
Group = MakesGroups_SVM(i,labels);
svmStruct(i+1) = svmtrain(MALLDATA,Group, 'kernel_function', 'polynomial');
end;
برای انجام عمل آموزش با توابع خطی و چند جمله ای و گوسی استفاده شد که در گوسی و خطی آموزش روند آموزش دچار مشکل می شد و به جواب نمی رسید. ولی در تابع چند جمله درجه 3 به جواب با دقت 90.87% دست پیدا کردیم. برای انجام عمل تست نیز از تابع ذیل استفاده شده است که از بین 20000 نمونه 1867 نمونه را درست تشخیص نداده است. در این مجموعه، از هر کلاس 2000 نمونه وجود دارد.
DT_lables = zeros(10,TotalRec);
for i =1:10
DT_lables(i,1:end) = svmclassify(svmStruct(i),MALLDATA);
end;
در کلاس های 0 تا 9 به ترتیب 205، 145، 216، 279، 338، 238، 186، 55، 53، 152 مورد نادرست تشخیص داده شده است. همان طور که ملاحظه می شود در این کلاس ها، کلاس 8 از همه کلاس ها کمترین خطا را دارد. اگر بخواهیم این خطاها را بهتر تحلیل کنیم، باید به جدول 3 بیشتر توجه کنیم.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | NON | sum | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 27 | 8 | 4 | 8 | 69 | 12 | 17 | 5 | 10 | 45 | 205 |
1 | 73 | 0 | 1 | 0 | 1 | 18 | 1 | 0 | 0 | 3 | 48 | 145 |
2 | 13 | 26 | 0 | 32 | 11 | 12 | 3 | 3 | 0 | 6 | 110 | 216 |
3 | 11 | 7 | 124 | 0 | 36 | 9 | 3 | 1 | 1 | 2 | 85 | 279 |
4 | 14 | 21 | 16 | 57 | 0 | 68 | 16 | 7 | 2 | 25 | 112 | 338 |
5 | 83 | 27 | 4 | 1 | 1 | 0 | 17 | 28 | 20 | 17 | 40 | 238 |
6 | 14 | 22 | 7 | 0 | 3 | 4 | 0 | 5 | 3 | 62 | 66 | 186 |
7 | 5 | 4 | 8 | 0 | 0 | 3 | 4 | 0 | 0 | 4 | 27 | 55 |
8 | 2 | 2 | 0 | 1 | 0 | 6 | 0 | 0 | 0 | 30 | 12 | 53 |
9 | 10 | 21 | 6 | 2 | 1 | 4 | 33 | 0 | 10 | 0 | 65 | 152 |
sum | 225 | 157 | 174 | 97 | 61 | 193 | 89 | 61 | 41 | 159 | 610 | 1867 |
جدول3 جدول خطا ها
در جدول 3 میزان هر خطا و نوع اشتباه در تشخیص را نشان می دهد. در این جدول ستون ها کلاس های بدست آمده اند و سطر ها کلاس های واقعی نمونه ها هستند. به عنوان نمونه در ستون 0 با سطر 1 نشان می دهد که در کلاس 0 ای که تشخیص داده شده 73 مورد را صفر را، یک تشخیص داده است. همچنین، در ستون 1 و سطر صفر، 27 مورد 1 را به اشتباه صفر تشخیص داده است. همان طور که ملاحظه می شود، 83نمونه صفر، عدد 5 تشخیص داده می شوند و بعد از آن عدد 1 می باشد. همچنین، عدد 2 با عدد 3، 3 با 4، 4 با 3، 5 با 1 و صفر، 6 با 9، 7 و 8 با 5 و 9 با 6 هستند که بیشترین اشتباه ها را دارند. در این دسته از کلاس ها به غیر از کلاس های 0 تا 9 یک دسته با NON نیز وجود دارد که این کلاس نشان می دهد که این دسته را نمی تواند تشخیص دهد که از چه نوعی است.
همچنین شما می توانید کد ها و نمونه ها را از اینجا دریافت کنید.
۴. مراجع
[1] ا. ابراهمی مقدم, و. فاضلی نیا, ل. رشیدی و م. وفایی جهان, “تشخیص دست نویس رقم لاتین توسط مدل مخفی مارکوف,” در اولین همایش ملی مهندسی رایانه و مدیریت فناوری اطلاعات, 1393.
[2] J. Sadri, C. Suen and T. Bui, "Application of support vector machines for recognition of handwritten Arabic/Persian digits," in Proceedings of Second Iranian Conference on Machine Vision and Image Processing, 2003.
[3] م. اشکواری و م. کبانی, “تشخیص اعداد دست نویس فارسی با استفاده از تکنیک PCA و شبکه عصبی,” در همایش منطقه ای علوم کامپیوتر، مهندسی کامپیوتر و فناوری اطلاعات, خرداد 1391.
[4] J. Franke and M. Oberlander, "Writing style detection by statistical combination of classifiers in form reader applications," in Second International Conference on Document Analysis and Recognition, 1993.
[5] C. Tanprasert and S. Sae Tang, "Thai type style recognition," in IEEE International Symposium on Circuits and Systems.
[6] H. Khosravi and E. Kabir, "Introducing a very large dataset of handwritten Farsi digits and a study on their varieties," Pattern Recognition Letters, vol. 28, pp. 1133-1141, 2007.
[7] M. A. Shayegan and S. Aghabozorgi, "A New Dataset Size Reduction Approach for PCA-Based Classification in OCR Application," Mathematical Problems in Engineering, pp. 1-14, 2014.
[8] ع. جعفرنژاد, “ارائه یک سیستم کارآمد برای شناسایی اعداد دست نویس با استفاده از شبکه عصبی,” در اولین کنفرانس ملی رویکردهای نویس در مهندسی کامپیوتر و بازیابی اطلاعات ایران, 15 مهر 1392.
[9] M. A. Abu-Zanona and B. M. El-Zaghmour, "Current Arabic ( Hindi ) Hand Written Numbers Segmentaion and Recognition Advance ImageProcessing and Neural Network," Journal of Emerging Trends in Computing and Information Sciences, vol. 3, no. 6, pp. 936-941, 2012.
[10] م. ل. افراسیابی, ز. فرهمندپور و ح. ختن لو, “تشخیص اعداد دست نویس عربی با استفاده از ترکیب الگوریتم ژنتیک و شبکه عصبی,” در سومین کنفرانس مهندسی برق و الکترونیک ایران, 22 تیر 1390.
[11] م. زیارت بان, ک. فائز, س. مظفری و م. ازوجی, “ارائه یک روش ساختاری جدید مبتنی بر قطعه بندی تصویر نازک شده برای شناسایی اعداد دست نویس فارسی/عربی,” در سویمن کنفرانس ماشین بینایی و پردازش تصویر ایران, 1383.
[12] م. ر. ارباب شیرانی و م. ت. صادقی, “بازشناسی خودکار اعداد دست نویس لاتین با استفاده از مدل گوسی دو مرحله ای,” در پانزدهمین کنفرانس مهندسی برق ایران.
[13] ع. برومند نیا و ا. امیری, “تشخیص اعداد فارسی (عربی) با استفاده از ساختار ترکیبی SVM/HMM,” در اولین کنفرانس ملی محاسبات نرم و فناوری اطلاعات.
[14] D.-H. Lee, "Pseudo-Label : The Simple and Effcient Semi-Supervised Learning Method for Deep Neural Networks," in Challenges in Representation Learning (WREPL), Atlanta, Georgia, USA, 2013.
۵. پیوندهای مفید
Frequency Diagram
similarity