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
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
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
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 Haar có độ chính xác thấp nhất nhưng thời gian huấn luyện vẫn cao hơn kỹ thuật Zoning. Như vậy kỹ thuật Zoning có hiệu quả cao nhất.
Thí nghiệm khảo sát sự ảnh hưởng từ việc thay đổi các giá trị tham số trong hai kỹ thuật wavelet Haar và tiếp cận cấu trúc. Thí nghiệm cho thấy với kỹ thuật wavelet Haar, khi tăng kích thước ma trận chuẩn hóa lên thì thời gian huấn luyện cũng tăng lên nhưng độ chính xác lại giảm xuống. Còn đối với kỹ thuật tiếp cận cấu trúc thì khi số lượng vùng được phân càng nhiều thì độ chính xác càng cao nhưng thời gian huấn luyện lại tăng lên rõ rệt.
4.3.5. Kết quả và phân tích các thí nghiệm hiện tại
a. Thí nghiệm đánh giá hiệu quả kỹ thuật Diagonal based trước và sau khi cải tiến
Trong phần thí nghiệm này, hiệu quả của kỹ thuật Diagonal based sẽ được đánh giá thông qua hai bước tiến hành, bước thứ nhất là trên bộ dữ liệu MyCharacter và bước thứ hai là trên bộ dữ liệu MNIST. Các yếu tố để thực hiện thí nghiệm bao gồm kích thước ma trận chuẩn hóa: 90 × 60 điểm ảnh và sử dụng hàm Radial Basis Function làm hàm nhân SVM.
Biểu đồ 4.1. Kết quả trên MyCharacter của Diagonal based
Thời gian huấn luyện
34.47 36.18 33.5 34 34.5 35 35.5 36 36.5
Trước cải tiến Sau cải tiến
g
iâ
y
Thời gian kiểm tra
5.17 5.26 5.1 5.15 5.2 5.25 5.3
Trước cải tiến Sau cải tiến
g iâ y Độ chính xác 92.74 92.9 92.65 92.7 92.75 92.8 92.85 92.9 92.95
Trước cải tiến Sau cải tiến
Trường hợp 2: Sử dụng bộ dữ liệu MNIST
Biểu đồ 4.2. Kết quả trên MNIST của Diagonal based
Kết quả thí nghiệm ở cả hai bộ dữ liệu MyCharacter và MNIST đều cho thấy sau khi cải tiến, độ chính xác có tăng lên song không đáng kể. Ngoài ra, thời gian huấn luyện và thời gian kiểm tra cũng tăng không đáng kể. Điều đó chứng tỏ có thể hướng cải tiến trên không đạt được mức cải tiến đáng kể và cần thiết.
Như vậy qua thí nghiệm cho thấy kỹ thuật Diagonal có ưu điểm là cho kết quả chính xác cao, nhưng nhược điểm là phụ thuộc vào số lượng mẫu huấn luyện và
Thời gian huấn luyện
20.6 26.3 0 5 10 15 20 25 30
Trước cải tiến Sau cải tiến
p
h
ú
t
Thời gian kiểm tra
118.93 129.86 110 115 120 125 130 135
Trước cải tiến Sau cải tiến
g iâ y Độ chính xác 98.09 98.1 98.085 98.09 98.095 98.1 98.105
Trước cải tiến Sau cải tiến
số lớp. Nếu số lượng mẫu huấn luyện ít và số lớp cần phân quá nhiều sẽ dẫn đến độ chính xác thấp xuống, đây cũng là nhược điểm chung của các kỹ thuật dựa trên hướng tiếp cận thống kê điểm ảnh (chủ yếu thường thấy là hướng tính tổng số điểm ảnh màu đen trong một vùng).
b. Thí nghiệm đánh giá hiệu quả của kỹ thuật Twelve Direction
Mục tiêu thí nghiệm này là đánh giá hiệu quả kỹ thuật Twelve Direction thông qua việc xem xét độ chính xác trong một số trường hợp cụ thể như sau, sử dụng hàm nhân SVM là Radial Basis Function.
Ảnh hưởng của mối tương quan giữa số lượng lớp cần phân và số lượng mẫu huấn luyện
Thí nghiệm này sử dụng hai bộ dữ liệu là MNIST (gồm có 60000 mẫu huấn luyện và 10000 mẫu kiểm tra nhưng chỉ có 10 lớp) và MyCharacter (gồm có 6200 mẫu huấn luyện và 620 mẫu kiểm tra nhưng có tới 62 lớp). Kích thước ma trận chuẩn hóa được lựa chọn là 16 × 16, tất cả các mẫu đều được xử lý tìm xương ký tự trước theo thuật toán của Wu và Tsai đề xuất năm 1992.
Biểu đồ 4.3. Thí nghiệm Twelve Direction trên MyCharacter và MNIST Dựa vào kết quả của thí nghiệm, ta có thể thấy khi số lượng mẫu huấn luyện không nhiều thì thời gian huấn luyện và thời gian kiểm tra nhanh. Mặc khác, khi số lớp cần phân nhiều hơn thì lượng mẫu ít hơn sẽ là không đủ để đạt độ chính xác cần thiết, trong trường hợp này bộ MyCharacter cho độ chính xác thấp hơn bộ MNIST. Điều đó cũng minh chứng rằng kỹ thuật Diagonal based đòi hỏi nhiều mẫu huấn luyện tương ứng với số lượng lớp cần phân (nghĩa là khi số lớp cần phân nhiều, thì số mẫu huấn luyện phải không được quá ít thì mới đạt được độ chính xác cần thiết).
Thời gian huấn luyện
0.05 19.2 0.01 0.1 1 10 100 MyCharacter MNIST g iờ
Thời gian kiểm tra
0.258 24.8 0.1 1 10 100 MyCharacter MNIST p h ú t Độ chính xác 42.096 72.82 0 20 40 60 80 MyCharacter MNIST %
Ảnh hưởng của việc tìm xương ký tự trong ảnh
Mục đích của thí nghiệm này là nhằm xem xét sự ảnh hưởng của việc tìm xương ký tự đối với kết quả của bộ nhận dạng. Thí nghiệm sử dụng bộ dữ liệu MyCharacter và kích thước ma trận chuẩn hóa được chọn là 16 × 16.
Biểu đồ 4.4. Tìm xương ký tự đối với Twelve Direction
Với kết quả thí nghiệm có được, ta có thể thấy việc tìm xương ký tự khiến cho thời gian huấn luyện cũng như thời gian kiểm tra không chênh lệch nhiều so với khi không tìm xương ký tự. Bên cạnh đó, việc có tìm xương theo thuật toán Wu và Tsai trong trường hợp này, rút trích đặc trưng bằng kỹ thuật Twelve Direction, khiến cho độ chính xác nhận dạng bị giảm xuống.
Thời gian huấn luyện
169.42 172.17 168 169 170 171 172 173
Có tìm xương Không tìm xương
g
iâ
y
Thời gian kiểm tra 15.48 14.98 14.6 14.8 15 15.2 15.4 15.6
Có tìm xương Không tìm xương
g iâ y Độ chính xác 42.096 48.87 38 40 42 44