Nhận xét về mô hình SVM

Một phần của tài liệu Tìm hiểu và nâng cao hiệu quả nhận dạng chữ viết tay rời rạc dựa trên các kỹ thuật lấy đặc trưng và phát triển ứng dụng (Trang 72)

Có thể thấy hiện nay mô hình SVM đang được quan tâm chú ý trong việc nghiên cứu lý thuyết và ứng dụng. Dưới đây là một vài nhận xét về ưu nhược điểm của mô hình SVM.

 Ưu điểm: Với kỹ thuật này, cực trị toàn cục của bài toán phân lớp luôn được tìm ra. Do vậy mô hình SVM đặc biệt thích hợp cho nhận dạng chữ viết tay đòi hỏi độ chính xác.

 Nhược điểm: Do bản chất của thuật toán mà phải cần rất nhiều không gian bộ nhớ cũng như thời gian để có thể huấn luyện được mô hình nhận dạng.

CHƯƠNG 4

CHƯƠNG TRÌNH THỬ NGHIỆM CÁC KỸ THUẬT LẤY ĐẶC TRƯNG 4.1.Giới thiệu về các bộ dữ liệu

Trong các nghiên cứu về nhận dạng chữ viết tay, thông thường người ta sử dụng hai loại bộ dữ liệu là Open test và Close test. Open test là bộ dữ liệu gồm có một phần là dữ liệu huấn luyện, còn một phần là dữ liệu kiểm tra, hai phần này tách biệt với nhau. Còn Close test là bộ dữ liệu vừa được dùng để huấn luyện lại vừa được dùng để kiểm thử. Các bộ dữ liệu dưới đây được thiết kế theo hai phần là để phục vụ cho mục đích sử dụng theo hướng Open test.

Trong đồ án này, các kết quả thí nghiệm đều được thực hiện trên các bộ dữ liệu dưới đây:

4.1.1. Bộ dữ liệu MNIST

Bộ dữ liệu MNIST là bộ dữ liệu được thu thập từ các chữ số viết tay (gồm các chữ số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9) của người dùng thực tế (xấp xỉ khoảng 250 người), do hai nhà nghiên cứu Cortes C. (thuộc phòng thí nghiệm Google Labs, New York) và Burges C.J.C. (thuộc trung tâm nghiên cứu Microsoft Research, Redmond) phát triển. Sau đó, LeCun Y. thuộc Viện nghiên cứu Courant (Đại học New York) đã hoàn thiện bộ dữ liệu này. Bộ dữ liệu MNIST cùng với các hướng dẫn về cách sử dụng cũng như thông tin được công bố quốc tế trên trang web [9]:

http://yann.lecun.com/exdb/mnist/

Cũng giống như nhiều tập dữ liệu Open test khác, nội dung bộ dữ liệu MNIST cũng bao gồm hai phần (những người có chữ viết trong tập dữ liệu huấn luyện và trong tập dữ liệu kiểm tra, theo các tác giả, là phân biệt với nhau):

 Tập dữ liệu huấn luyện (Train set): gồm có 60000 mẫu.

Cụ thể hơn, hai tập tin sau đây chứa dữ liệu để huấn luyện, gồm các ảnh và nhãn lớp gán sẵn cho chúng:

 train-images-idx3-ubyte.gz: chứa dữ liệu ảnh của 60000 mẫu huấn luyện.

 train-labels-idx1-ubyte.gz: chứa nhãn lớp của 60000 mẫu huấn luyện. Kèm theo đó là hai tập tin sau đây chứa dữ liệu để kiểm tra, cũng gồm ảnh và nhãn lớp thật để phục vụ cho đánh giá độ chính xác khi nhận dạng:

 t10k-images-idx3-ubyte.gz: chứa dữ liệu ảnh của 10000 mẫu kiểm tra.

 t10k-labels-idx1-ubyte.gz: chứa nhãn lớp của 10000 mẫu kiểm tra. Hình 4.1 minh họa một vài mẫu ký tự trích trong bộ dữ liệu MNIST:

Hình 4.1. Một số mẫu trích từ bộ dữ liệu MNIST [3]

4.1.2. Bộ dữ liệu MyCharacter

Bên cạnh bộ dữ liệu MNIST thì đồ án này còn sử dụng một bộ dữ liệu khác tự tạo, gọi là bộ dữ liệu MyCharacter, bao gồm các chữ cái thường, chữ cái hoa và chữ số. Tất cả đều là ký tự viết tay trong ngôn ngữ tiếng Anh, được viết bằng mouse trên màn hình máy tính. Bộ dữ liệu này gồm hai phần:

 Phần 1: tổng cộng 6200 mẫu, trong đó:

Chữ cái viết thường gồm 26 ký tự (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z): 2600 mẫu, mỗi ký tự 100 mẫu.

Chữ cái viết hoa gồm 26 ký tự (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z): 2600 mẫu, mỗi ký tự 100 mẫu.

Chữ số gồm 10 ký tự (0, 1, 2, 3, 4, 5, 6, 7, 8, 9): 1000 mẫu, mỗi ký tự được lấy 100 mẫu.

 Phần 2: tổng cộng 620 mẫu, trong đó:

Chữ cái viết thường gồm 26 ký tự: 260 mẫu, mỗi ký tự 10 mẫu. Chữ cái viết hoa gồm 26 ký: 260 mẫu, mỗi ký tự 10 mẫu. Chữ số gồm 10 ký tự: 100 mẫu, mỗi ký tự 10 mẫu.

Một số vấn đề cần lưu ý về bộ dữ liệu MyCharacter:

 Việc nhận dạng chữ số 0 và chữ O (cũng như chữ o) không có tính khả quan khi xếp chung trong cùng một bộ nhận dạng, nhất là khi đây là bộ dữ liệu viết tay, do hai ký tự này rất giống nhau, vì vậy để phân biệt chúng, ta sẽ quy ước như sau:

Chữ số 0 sẽ được viết là .

Chữ O cũng như chữ o sẽ viết là .

 Đối với chữ s và chữ S, để phân biệt, chúng sẽ được viết là: (adsbygoogle = window.adsbygoogle || []).push({});

Chữ s (thường): .

Chữ S (hoa): .

Tất cả các mẫu dữ liệu trong bộ dữ liệu MyCharacter đều được lưu trữ dưới dạng tập tin có định dạng Portable Network Graphic có phần mở rộng .png, tên tập tin được đánh số liên tục từ 1 đến 6200 cho phần 1 và từ 1 đến 620 cho phần 2. Việc đánh thứ tự riêng cho mỗi phần là để thuận tiện cho việc mở rộng tập dữ liệu cũng như việc sử dụng. Nói cách khác, có thể coi MyCharacter là tập dữ liệu thuộc loại

Open test, trong đó phần 1 là phần dữ liệu để huấn luyện, phần 2 là phần dữ liệu để kiểm tra.

Hình 4.2 là hình minh họa một số mẫu được trích trong bộ dữ liệu ký tự viết tay MyCharacter:

4.2.Môi trường và công cụ cài đặt 4.2.1. Môi trường cài đặt 4.2.1. Môi trường cài đặt

Tất cả các thí nghiệm nghiên cứu cũng như chương trình ứng dụng trong đồ án này đều được cài đặt trên môi trường phát triển sau:

 Công cụ lập trình Microsoft Visual Studio 2010.

 Ngôn ngữ lập trình: C#.

 Biên dịch trên nền: .NET Framework 4.0 Client Profile.

4.2.2. Giới thiệu bộ công cụ CSharp-2.6

Bộ công cụ sử dụng cho việc thực hiện thuật toán SVM là CSharp-2.6, được cải tiến từ bộ công cụ tổng hợp libsvm-3.17 của Chih-Chung Chang và Chih-Jen Lin. Đây là bộ công cụ được viết trên nền ConsoleApplication chưa được biên dịch, bao gồm tổng cộng tám tập tin sau:

 SupportClass.cs: chứa các lệnh giúp người dùng sử dụng được ứng dụng này trong chương trình cmd.exe của Microsoft.

 svm.cs: chứa toàn bộ nhân của thuật toán. Ở trong tập tin này, bài toán Quy hoạch toàn phương được giải bằng cách dùng heuristic chứ không giải đúng. Điều này giúp làm giảm độ phức tạp và giảm đòi hỏi đối với máy tính.

 svm_model.cs: là lớp lưu trữ các thông số của mô hình huấn luyện sau khi quá trình huấn luyện kết thúc.

 svm_node.cs: là lớp biểu diễn thông số từng chiều của một vector đặc trưng, không phải là toàn bộ tất cả các chiều của vector đặc trưng.

 svm_parameter.cs: là lớp lưu trữ các thông số về loại hình phân lớp hay hồi quy, loại hàm nhân được lựa chọn (Radial Basis Kernel, Polynomial Kernel, Sigmoidal Kernel, Linear Kernel).

 svm_predict.cs: chứa các lệnh phục vụ cho quá trình kiểm tra và nhận dạng, sau khi đã có mô hình huấn luyện.

 svm_problem.cs: tính toán các thông số về tập các vector đặc trưng.

 svm_train.cs: chứa các lệnh phục vụ cho quá trình huấn luyện tạo nên mô hình huấn luyện.

Vì chưa được biên dịch nên để sử dụng được, chương trình cần được biên dịch bằng ngôn ngữ C# trong bộ Microsoft Visual Studio 2010. Chi tiết quá trình như sau:

 Bước 1: Tạo một Project mới dạng ConsoleApplication trong Microsoft Visual Studio 2010.

 Bước 2: Sao chép các lớp SupportClass.cs, svm.cs, svm_model.cs, svm_node.cs, svm_parameter.cs, svm_problem.cs, svm_train.cs vào trong project này. Không sao chép lớp svm_predict.cs.

 Bước 3: Vào Properties của Project, chọn mục Application -> Assembly Name, đặt tên là svm_sample_train.

 Bước 4: Biên dịch, ta thu được tập tin svm_sample_train.exe. Sao chép tập tin này ra một thư mục khác để lưu trữ.

 Bước 5: Xóa lớp svm_train.cs trong Project, sau đó sao chép lớp svm_predict.cs vào Project.

 Bước 6: Vào Properties của Project, chọn mục Application -> Assembly Name, đặt tên là svm_sample_test.

 Bước 7: Biên dịch, ta thu được tập tin svm_sample_test.exe. Sao chép tập tin này ra một thư mục khác để lưu trữ.

Như vây, ta đã kết thúc quá trình biên dịch bộ CSharp-2.6. Quá trình trên cũng có thể được tóm tắt bằng sơ đồ 4.1:

Sơ đồ 4.1. Quá trình biên dịch bộ công cụ CSharp-2.6 (adsbygoogle = window.adsbygoogle || []).push({});

4.2.3. Cách thức sử dụng bộ công cụ CSharp-2.6

a. Một số yêu cầu khi sử dụng

Trước khi sử dụng được bộ công cụ CSharp-2.6 yêu cầu cần phải có đầy đủ bốn tập tin sau đây:

 TrainSet.txt

 TestSet.txt

 svm_sample_train.exe

 svm_sample_test.exe Trong đó:

Tạo Project dạng Console

Chép các tập tin SupportClass.cs, svm.cs, svm_model.cs, svm_node.cs, svm_parameter.cs, svm_problem.cs, svm_train.cs vào Project

Vào Properties -> Application -> Assembly Name, đặt tên

Biên dịch chương trình, chép svm_sample_train.exe vào thư mục khác để lưu

Xóa tập tin svm_train.cs, chép tập tin svm_predict.cs vào

Vào Properties -> Application -> Assembly Name, đặt tên

 Hai tập tin svm_sample_train.exe và svm_sample_test.exe ta có từ việc biên dịch đã nêu ở bên trên.

 Tập tin TrainSet.txt và TestSet.txt phải có định dạng sau: ClassName id1:value1 id2:value2 … idD:valueD

ClassName id1:value1 id2:value2 … idD:valueD ClassName id1:value1 id2:value2 … idD:valueD …

ClassName id1:value1 id2:value2 … idD:valueD

với ClassName là nhãn lớp (với Train set là để tạo mô hình phân lớp, với Test set là để đánh giá lỗi), id là thứ tự chiều (đánh từ 1 đến D chiều) của vector đặc trưng, value là giá trị của vector đặc trưng tại chiều đó.

b. Hướng dẫn sử dụng trong chương trình cmd.exe

Phần hướng dẫn sử dụng này dựa trên việc sử dụng chương trình cmd.exe trong các hệ điều hành Windows (Windows XP, Windows Vista, Windows 7, Windows 8). Trước tiên, phải tiến hành sao chép bốn tập tin ở phần trước đã nêu vào cùng một thư mục chứa tập tin cmd.exe. Quá trình gồm hai giai đoạn:

Giai đoạn huấn luyện

Đầu tiên, trong thư mục ở trên (thư mục chứa cmd.exe và bốn tập tin cần thiết) mở chương trình cmd.exe lên. Gõ lệnh theo cú pháp sau:

svm_sample_train.exe [tùy chọn] TrainFileName

Trong đó [tùy chọn] là:

 -t value: là tùy chọn cho phép lựa chọn hàm nhân của SVM, nhận 0 nếu làm nhân là Linear, 1 nếu là Polynomial, 2 nếu là Radial Basis Function, 3 nếu là Sigmoid (mặc định là 2).

 TrainFileName: là tên tập tin dữ liệu huấn luyện theo định dạng đã trình bày ở trong phần trước.

Như vậy, nếu như muốn chạy ở chế độ mặc định (với hàm nhân Radial Basis Function) thì gõ lệnh:

svm_sample_train.exe TrainSet.txt

Sau đó, đợi đến khi việc huấn luyện được thực hiện xong, khi ấy ta có được tập tin mô hình đã được huấn luyện TrainSet.txt.model. Đây là mô hình chứa các thông số cụ thể của SVM, đặc biệt là chứa tập vector hỗ trợ dùng cho bước kiểm tra dưới đây.

Giai đoạn kiểm tra (adsbygoogle = window.adsbygoogle || []).push({});

Tương tự như giai đoạn huấn luyện, ta cũng mở chương trình cmd.exe lên và gõ dòng lệnh có cú pháp sau đây:

svm_sample_test.exe TestFileName ModelFile OutputFile

Ví dụ như sau khi đã có tập tin model từ việc huấn luyện ở bước liền trước, ta gõ dòng lệnh sau đây:

svm_sample_test.exe TestSet.txt TrainSet.txt.model TestResult.txt

Chờ cho đến khi kết thúc xong quá trình kiểm tra, ta sẽ có được tập tin kết quả chứa nhãn lớp được nhận dạng của các mẫu trong dữ liệu Test set (những nhãn lớp này không nhất thiết giống nhãn lớp của chúng được ghi trong tập tin TestSet.txt). Lúc này trên màn hình hiển thị độ chính xác của quá trình kiểm tra, ghi chép lại các thông số này để phân tích số liệu và đánh giá về sau.

c. Hướng dẫn sử dụng trong ngôn ngữ C#

Trong một chương trình được viết bằng ngôn ngữ C# (ConsoleApplication hoặc WindowsApplication), ta cũng có thể sử dụng bộ công cụ trên mà không cần phải thêm mã nguồn của chúng vào chương trình (vì việc thêm mã nguồn như vậy đôi khi có thể làm cho mã nguồn chính bị xáo trộn hoặc không thực thi được). Các bước được tiến hành tuần tự như sau:

Sử dụng SVM để huấn luyện:

 Tạo một biến kiểu string để chứa tham số đầu vào:

s1 = “-t 1 TrainSet.txt”

 Sau đó dùng câu lệnh sau đây để gọi chương trình svm_sample_train.exe:

System.Diagnostics.Process.Start(“svm_sample_train.exe”, s1);

Sử dụng SVM để kiểm tra:

 Tạo một biến kiểu string để chứa tham số đầu vào:

s2 = “TestSet.txt TrainSet.txt.model TestResult.txt”

 Sau đó dùng câu lệnh sau đây để gọi chương trình svm_sample_train.exe:

System.Diagnostics.Process.Start(“svm_sample_test.exe”, s2);

Cách sử dụng trên đây được dùng trong trường hợp muốn chạy SVM vào cuối chương trình chính hoặc việc chạy này kết thúc vào thời điểm nào thì cũng không ảnh hưởng đến chương trình chính. Trên thực tế, nhiều khi ta phải sử dụng công cụ này trong một đoạn chương trình mà yêu cầu đặt ra là phải đợi cho đến khi thuật toán huấn luyện (hoặc kiểm tra) chạy xong thì mới chạy tiếp các lệnh tiếp theo. Khi đó, chúng ta có thể sử dụng đoạn chương trình thay thế sau đây:

string s2 = “TestSet.txt TrainSet.txt.model TestResult.txt”; System.Diagnostics.Process p; p = new System.Diagnostics.Process(); p.StartInfo.CreateNoWindow = true; p.StartInfo.FileName = “svm_sample_test.exe”; p.StartInfo.Arguments = s2; p.Start();

while (p.HasExited == false) { ; }

Để chạy được, yêu cầu tập tin svm_sample_test.exe phải nằm trong thư mục chứa tập tin chạy của chương trình, chẳng hạn như là trong thư mục bin. Ta cũng có

thể dùng đường dẫn tuyệt đối như @“C:\Users\dell\svm_sample_test.exe”. Ngoài ra, nếu muốn chương trình chạy mà không hiện cửa sổ thì thêm câu lệnh dưới đây liền sau lệnh khai báo tiến trình p:

p.StartInfo.UseShellExecute = false;

4.3.Các chương trình thử nghiệm

4.3.1. Điều kiện thí nghiệm

Tất cả các thí nghiệm cũng như ứng dụng đọc bảng điểm sinh viên trong khuôn khổ đồ án này được thực hiện trên điều kiện sau:

 Tốc độ bộ vi xử lý: 2.40GHz.

 Dung lượng bộ nhớ trong RAM: 2.92GB.

 Hệ điều hành: Windows 7 SP1 32bit.

4.3.2. Giai đoạn tiền xử lý các bộ dữ liệu (adsbygoogle = window.adsbygoogle || []).push({});

Giai đoạn tiền xử lý thực hiện trên các mẫu huấn luyện và mẫu kiểm tra trải qua các bước sau:

 Lọc mịn ảnh bằng bộ lọc trung bình.

 Nhị phân ảnh bằng thuật toán Otsu.

 Phóng ảnh về kích thước tiêu chuẩn ứng với mỗi kỹ thuật lấy đặc trưng.

 Tìm xương ký tự theo thuật toán Wu và Tsai (1992) (tùy vào thí nghiệm).

4.3.3. Các kỹ thuật trích chọn đặc trưng đã sử dụng

Các thí nghiệm được thực hiện để nhằm đánh giá mức độ hiệu quả của các kỹ thuật rút đặc trưng dưới đây:

 Kỹ thuật Diagonal based.

 Kỹ thuật Twelve Direction.

 Kỹ thuật 40-Point.

 Kỹ thuật Shadow.

 Kỹ thuật Intersection.

 Kỹ thuật Straight line fitting.

 Kỹ thuật Background Directional Distribution.

 Kỹ thuật Dense Distribution.

 Kết hợp kỹ thuật Diagonal based với Dense Distribution.

4.3.4. Kết quả các thí nghiệm trước đây

Dưới đây là một số kết quả đã có được thí nghiệm trước đây:

 Thí nghiệm so sánh ảnh hưởng của hàm nhân SVM đến kết quả. Trong ba hàm nhân Linear, Polynomial và Radial Basis Function thì hàm nhân Radial Basis Function cho hiệu quả tốt nhất. Hàm nhân Polynomial tuy cho kết quả cao hơn song thời huấn luyện quá lâu, lâu hơn hẳn hai hàm còn lại. Trong khi đó, hàm nhân Linear mặc dù cho thời gian huấn luyện thấp nhất song độ chính xác lại không bằng hai hàm còn lại.

 Thí nghiệm so sánh ảnh hưởng của số lượng mẫu huấn luyện đến kết quả. Thí nghiệm này thực hiện trên bộ dữ liệu MNIST với số lượng mẫu lần lượt là 20000, 40000, 60000, sử dụng kỹ thuật wavelet Haar để rút trích đặc trưng và dùng hàm nhân Radial Basis Function. Kết quả thu được là số lượng mẫu huấn luyện càng tăng thì độ chính xác càng cao song kéo theo thời gian huấn luyện càng lớn.

 Thí nghiệm so sánh hiệu quả giữa ba kỹ thuật lấy đặc trưng wavelet Haar, Zoning và kỹ thuật tiếp cận cấu trúc. Kết quả cho thấy kỹ thuật tiếp cận cấu trúc có độ chính xác cao nhất nhưng thời gian huấn luyện là lâu nhất. Kỹ thuật wavelet

Một phần của tài liệu Tìm hiểu và nâng cao hiệu quả nhận dạng chữ viết tay rời rạc dựa trên các kỹ thuật lấy đặc trưng và phát triển ứng dụng (Trang 72)