SMO (Sequential Minimal Optimization - thuật toán tối thiểu tuần tự) là một thuật toán đơn giản để giải bài toán quy hoạch toàn phƣơng (QP - Quadratic Programing) một cách nhanh chóng mà không cần lƣu trữ ma trận Gram và cũng
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn không cần phải giải bài toán QP ở mỗi bƣớc. Thuật toán này phân rã bài toán QP tổng quát thành các bài toán con, sử dụng định lý của Osuma để đảm bảo sự hội tụ. Khác với các thuật toán trƣớc, SMO chỉ giải các bài toán tối ƣu với kích thƣớc nhỏ nhất. Tại mỗi bƣớc lặp, SMO chọn hai nhân tử Lagrange để giải, tìm các giá trị tối ƣu cho hai nhân tử này và cập nhật lại các tham số của SVM. Ƣu điểm của thuật toán này là có thể tối ƣu hai nhân tử Lagrange bằng giải pháp phân tích, vì vậy không cần phải giải bài toán QP. Hơn nữa, SMO không đòi hỏi lƣu trữ ma trận Gram, vì vậy các bài toán huấn luyện SVM với số lƣợng mẫu lớn có thể lƣu trữ ở bộ nhớ trong của một một máy tính cá nhân bình thƣờng. Thuật toán SMO thực hiện hai công việc chính: Giải bài toán tối ƣu cho hai nhân tử Lagrange bằng phƣơng pháp phân tích và chọn hai nhân tử để tối ƣu bằng phƣơng pháp lựa chọn heuristic.
2.2.3.1. Tối ưu hai nhân tử Lagrange
Không mất tính tổng quát, giả sử đang tối ƣu hai phần tử a ai, j từ một tập các phƣơng án trƣớc đó: a1old,aold2 ,a3,...,al(để khởi tạo, có thể đặt aold = 0).
Vì 1 1 0 i i i y a = = å ta có:
1 1 2 2 1 1old 2 2old ons
y a y a y a y a C t
é + = + = ù
ê ú
ë û
Cố định các ai khác, hàm mục tiên trở thành hàm hai biến và có thể đƣợc viết lại:
2 2 1 2 1 1 1 1 1 2 2 2 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 3 1 ons ( 2 2 2 ( ) ons ) T T T D T i i i i L C t y y x x y y x x y y x x y x y x y x C t a a a a a a a a a = = + + - + + æ ö÷ ç ÷ + çç ÷ + + ÷ çèå ø Đặt K11 = x x K1T 1, 22 = x x KT2 2, 12 = x xT1 2 và h = 2K12- K11- K22. Tiếp tục cố định 1
a , hàm mục tiêu sẽ trở thành hàm một biến theo a2:
2
2 2 1 2 2 2
1
( ( ) ) ons
2
old old old
D
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn Trong đó 1 1 ( , ) old old i k k k i i k E y a K x x b y =
= å + - . Vì hàm mục tiêu chứa 1old 2old
E - E nên không cần phải tính b trong mỗi bƣớc lặp.
Lấy đạo hàm cấp một và cấp hai theo a2:
2 2 1 2 2
2 2
2 2
( ( old old) old)
D D L y E E L ha ha a h a ¶ = + - - ¶ ¶ = ¶ Cho đạo hàm cấp một bằng 0, ta có: 2 2 1 2 2 ( old old) old y E E a a h - = +
Vì a2 cũng phải thỏa mãn ràng buộc 0£ a2 £ C nên giá trị mới của a2 phải cắt xén để đảm bảo một đáp án khả thi: 2 Low £ a £ Hight Trong đó: - Nếu y1 ¹ y2 thì 2 1 1 2 ax(0, ) min( , ) old old old old Low m Hight C C a a a a = - = - + - Ngƣợc lại: 1 2 1 2 ax(0, ) min( , ) old old old old Low m C Hight C a a a a = - - = + Và giá trị a1 tính đƣợc từ a2 nhƣ sau: 1 1old y y1 2( 2old 2) a = a + a - a
2.2.3.2. Tối ưu theo phương pháp heuristic
Việc chọn hai nhân tử αi, αj cho bài toán tối ƣu trong thuật toán SMO đƣợc thực hiện nhƣ sau:
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn - Ở vòng lặp ngoài, luân phiên duyệt qua tất cả các mẫu và các véc tơ tựa (các
mẫu có 0 < αi< C) (ƣu tiên duyệt qua các véc tơ tựa, nếu không tìm thấy mới - duyệt toàn bộ mẫu) để chọn ra một mẫu vi phạm điều kiện KKT.
- Với αi đƣợc chọn, vòng lặp trong tìm kiếm một mẫu αj sao cho |Ej - Ei| cực đại. Đầu tiên nó duyệt qua các véc tơ tựa, nếu không tìm đƣợc mới duyệt qua toàn bộ mẫu.
2.2. Nhận dạng phiếu điểm với SVM
2.2.1. Đặc trưng của phiếu điểm
Trƣớc tiên, một vài điều kiện cần phải đƣợc áp đặt lên việc ghi phiếu để quá trình phân đoạn cũng nhƣ nhận dạng diễn ra thuận lợi đó là:
- Viết rõ ràng, không đứt đoạn, không chồng chéo.
- Điểm đƣợc viết đúng vị trí, đúng ô, không đè lên các đƣờng bao quanh ô, không dập xóa lên phiếu.
Đặc trƣng chung của các mẫu phiếu điểm là phần trên cùng gồm tên phiếu điểm, các thông tin mô tả của phiếu điểm (tên lớp, đợt thi, môn thi,…). Phần tiếp theo là điểm của sinh viên đƣợc ghi trong một bảng gồm nhiều hàng, mỗi hàng là thông tin điểm của một sinh viên. Các cột mô tả số báo danh, số điểm hoặc số phách, số điểm.
Mẫu phiếu điểm thi viết: Phiếu điểm thi viết gồm các cột thông tin: Số phách, điểm số, điểm chữ, ghi chú. Giáo viên sau khi chấm bài thi sẽ ghi điểm vào các phiếu này.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Hình 2.3. Mẫu phiếu điểm thi viết
Mẫu phiếu điểm thƣờng xuyên: Phiếu điểm thƣờng xuyên gồm các cột thông tin: số thứ tự, mã sinh viên, họ tên, ngày sinh, điểm chuyên cần, điểm bài 1, điểm bài 2, điểm bài 3, điểm bài 4, điểm trung bình.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Hình 2.4. Mẫu phiếu điểm thường xuyên
2.2.2. Nhận dạng phiếu điểm
Sau khi đã có ảnh của phiếu điểm đƣợc quét đúng cách, việc nhận dạng phiếu điểm thực hiện lần lƣợt các bƣớc nhƣ sau:
Tiền xử lý: Ảnh của phiếu điểm sau khi quét thƣờng có nhiễu, một phần nhiệm vụ của bƣớc này sẽ là lọc nhiễu. Sau đó ảnh phải đƣợc biến đổi về ảnh nhị phân để tạo điều kiện cho phân đoạn ở bƣớc tiếp theo.
Phân đoạn và trích chọn đặc trƣng: Tách ảnh đã qua tiền xử lý thành các hàng, mỗi hàng bao gồm các cột. Sau đó từ các cột sẽ tách ra kí tự cần nhận dạng, rồi trích chọn đặc trƣng của nó.
Huấn luyện và nhận dạng: Xây dựng các support vector nhận dạng từ các
phiếu điểm. Trƣớc khi nhận dạng, quá trình huấn luyện đƣợc thực hiện trƣớc dựa trên một tập mẫu có sẵn.
Hậu xử lý: Tổng hợp các kí tự đƣợc nhận dạng riêng lẻ thành dữ liệu để cập nhật vào cơ sở dữ liệu.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
2.2.2.1. Tiền xử lý
Giai đoạn này góp phần làm tăng độ chính xác phân lớp của hệ thống nhận dạng [1], tuy nhiên nó cũng làm cho tốc độ nhận dạng của hệ thống chậm lại. Vì vậy, tùy thuộc vào chất lƣợng ảnh quét vào của từng phiếu điểm cụ thể để chọn một hoặc một vài chức năng trong khối này. Nếu cần ƣu tiên tốc độ xử lý và chất lƣợng của máy quét tốt thì có thể bỏ qua giai đoạn này. Khối tiền xử lý bao gồm một số chức năng: Nhị phân hóa ảnh, lọc nhiễu, chuẩn hóa kích thƣớc ảnh, làm trơn biên chữ, làm đầy chữ, làm mảnh chữ và xoay văn bản.
Nhị phân hóa ảnh
Nhị phân hóa ảnh là một kỹ thuật chuyển ảnh đa cấp xám sang ảnh nhị phân. Trong bất kỳ bài toán phân tích hoặc nâng cao chất lƣợng ảnh nào, nó cũng cần thiết để xác định các đối tƣợng quan trọng. Nhị phân hóa ảnh phân chia ảnh thành 2 phần: phần nền và phần chữ. Hầu hết các phƣơng pháp nhị phân hóa ảnh hiện nay đều lựa chọn một ngƣỡng thích hợp theo cƣờng độ sáng của ảnh và sau đó chuyển tất cả các giá trị độ sáng lớn hơn ngƣỡng đó thành một giá trị độ sáng (ví dụ “trắng”) và tất cả các giá trị bé hơn ngƣỡng thành một giá trị độ sáng khác (“đen”).
Hình 2.5. Nhị phân hóa ảnh
Lọc nhiễu [2]
Nhiễu là một tập các điểm sáng thừa trên ảnh. Khử nhiễu là một vấn đề thƣờng gặp trong nhận dạng, nhiễu có nhiều loại (nhiễu đốm, nhiễu vệt, nhiễu đứt nét...).
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn Để khử các nhiễu đốm (các nhiễu với kích thƣớc nhỏ), có thể sử dụng các phƣơng pháp lọc (lọc trung bình, lọc trung vị...). Tuy nhiên, với các nhiễu vệt (hoặc các nhiễu có kích thƣớc lớn) thì các phƣơng pháp lọc tỏ ra kém hiệu quả, trong trƣờng hợp này sử dụng phƣơng pháp khử các vùng liên thông nhỏ tỏ ra có hiệu quả hơn.
Chuẩn hóa kích thƣớc ảnh
Hình 2.7.Chuẩn hóa kích thước ảnh các số “4” và “6”.
Việc chuẩn hóa kích thƣớc ảnh dựa trên việc xác định trọng tâm ảnh, sau đó xác định khoảng cách lớn nhất từ tâm ảnh đến các cạnh trên, dƣới, trái, phải của hình chữ nhật bao quanh ảnh. Thông qua khoảng cách lớn nhất đó, có thể xác định đƣợc một tỷ lệ co, giãn của ảnh gốc so với kích thƣớc đã xác định, từ đó hiệu chỉnh kích thƣớc ảnh theo tỷ lệ co giãn này. Nhƣ vậy, thuật toán chuẩn hóa kích thƣớc ảnh luôn luôn đảm bảo đƣợc tính cân bằng khi co giãn ảnh, ảnh sẽ không bị biến dạng hoặc bị lệch.
Làm trơn biên chữ
Đôi khi do chất lƣợng quét ảnh quá xấu, các đƣờng biên của chữ không còn giữ đƣợc dáng điệu trơn tru ban đầu mà hình thành các đƣờng răng cƣa giả tạo. Trong các trƣờng hợp này, phải dùng các thuật toán làm trơn biên để khắc phục.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Hình 2.8. Làm tròn biên chữ
Làm đầy chữ
Chức năng này đƣợc áp dụng với các ký tự bị đứt nét một cách ngẫu nhiên. Ảnh đứt nét gây khó khăn cho việc tách chữ, dễ bị nhầm hai phần liên thông của ký tự thành hai ký tự riêng biệt, tạo nên sai lầm trong quá trình nhận dạng.
Làm mảnh chữ
Đây là một bƣớc quan trọng nhằm phát hiện khung xƣơng của ký tự bằng cách loại bỏ dần các điểm biên ngoài của các nét. Tuy nhiên, quá trình làm mảnh chữ rất nhạy cảm với việc khử nhiễu.
Hình 2.9. Làm mảnh chữ.
Điều chỉnh độ nghiêng của văn bản
Do trang tài liệu quét vào không cẩn thận hoặc do sự cố in ấn, các hàng chữ bị lệch so với lề chuẩn một góc α, điều này gây khó khăn cho công đoạn tách chữ, đôi khi không thể tách đƣợc. Trong những trƣờng hợp nhƣ vậy, phải tính lại tọa độ điểm ảnh của các chữ bị sai lệch. Có nhiều kỹ thuật để điều chỉnh độ nghiêng, kỹ thuật phổ biến nhất dựa trên cơ sở biểu đồ chiếu (projection profile) của ảnh tài liệu; một số kỹ thuật dựa trên cơ sở các phép biến đổi Hough và Fourier.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Hình 2.10.Hiệu chỉnh độ nghiêng của phiếu điểm 2.2.2.2. Phân đoạn và trích chọn đặc trưng
Khối này có nhiệm vụ tách từng ký tự ra khỏi phiếu điểm. Chỉ khi nào phiếu điểm đƣợc tách và cô lập từng dòng (ứng với thông tin điểm của từng sinh viên) và cô lập đúng từng ký tự đơn ra khỏi tổng thể hệ thống mới có thể nhận dạng đúng ký tự đó.
Trích chọn đặc trƣng đóng vai trò cực kỳ quan trọng trong một hệ thống nhận dạng. Trong trƣờng hợp đơn giản nhất, ảnh đa cấp xám hoặc ảnh nhị phân đƣợc sử dụng cho việc nhận dạng. Tuy nhiên, trong hầu hết các hệ nhận dạng, để giảm độ phức tạp và tăng độ chính xác của các thuật toán phân lớp thì đòi hỏi các đặc trƣng đƣợc trích chọn phải rút gọn lại càng nhỏ càng tốt nhƣng vẫn phải đảm bảo đƣợc thông tin của ký tự. Với mục tiêu này, một tập các đặc trƣng đƣợc trích chọn cho mỗi lớp sao cho có thể phân biệt đƣợc với các lớp khác.
Hình 2.11. Tách thông tin phiếu điểm 2.2.2.3. Huấn luyện và nhận dạng
Tập dữ liệu huấn luyện sau khi qua các khâu tiền xử lý và trích chọn đặc trƣng sẽ đƣợc đƣa vào máy huấn luyện phân lớp SVM. Sau khi kết thúc quá trình huấn luyện, hệ thống sẽ lƣu lại giá trị các tham số của hàm quyết định phân lớp để phục vụ cho việc nhận dạng sau này
2.2.2.4. Hậu xử lý
Đây là công đoạn cuối của quá trình nhận dạng phiếu điểm. Có thể hiểu hậu xử lý là bƣớc ghép nối các kí tự, điểm đã nhận dạng và chuyển vào cơ sở dữ liệu lƣu trữ điểm của sinh viên, đồng thời phát hiện ra các lỗi nhận dạng sai bằng cách
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn kiểm tra giá trị số báo danh, số phách, điểm số dựa trên các miền giá trị của chúng. Việc phát hiện ra các lỗi, các sai sót trong nhận dạng ở bƣớc này góp phần đáng kể vào việc nâng cao chất lƣợng nhận dạng phiếu điểm.
2.3. Kết luận
SVM đƣợc đánh giá là một hƣớng tiếp cận nhận diện chữ viết tay đạt độ chính xác cao. Hạn chế lớn nhất của SVM là tốc độ phân lớp chậm, tùy thuộc vào số lƣợng các support vector. Mặt khác, giai đoạn huấn luyện SVM đòi hỏi bộ nhớ lớn, do đó các bài toán huấn luyện với số lƣợng mẫu lớn sẽ gặp trở ngại trong vấn đề lƣu trữ. Dù vậy, SVM vẫn đƣợc đánh giá là phƣơng pháp học máy tiên tiến đã đóng góp nhiều thành công trong các lĩnh vực khai phá dữ liệu cũng nhƣ trong lĩnh vực nhận dạng. Chƣơng tiếp theo trình bày về hệ thống mô phỏng phân lớp với SVM, nhận dạng phiếu điểm với SVM.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
CHƢƠNG 3
THIẾT KẾ CHƢƠNG TRÌNH VÀ KẾT QUẢ THỬ NGHIỆM 3.1. Phân lớp với SVM
Xét ví dụ của bài toán phân lớp nhị phân ở chƣơng 2. Có 2 tập hợp những điểm màu đỏ và điểm màu xanh nhƣ hình vẽ; ở đó ta phải tìm một đƣờng ngăn cách sao cho các điểm đỏ và các điểm xanh nằm ở hai bên khác nhau.
Hình 3.1. Chương trình mô phỏng phân lớp
Chƣơng trình phân lớp các điểm màu đƣợc xây dựng trên ngôn ngữ lập trình C#, .NetFramework 4.0, thƣ viện OpenCLTemplate.dll, Cloo.dll. dựa trên thuật toán phân lớp nhị phân với SVM đã trình bày ở chƣơng 2. Module xây dựng các support vector nhƣ sau:
float[] features = new float[] { 1, 2, 3 }; float classification = 4;
TrainingUnit u = new TrainingUnit(features, classification); float[] features2 = new float[] { 1, 2, 3 };
float classification2 = 2;
TrainingUnit u2 = new TrainingUnit(features2, classification2); float[] features3 = new float[] { 1, 2, 3 };
float classification3 = 1;
TrainingUnit u3 = new TrainingUnit(features3, classification3); TrainingSet TSet = new TrainingSet();
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
TSet.addTrainingUnit(u); TSet.addTrainingUnit(u2); TSet.addTrainingUnit(u3);
MultiClassSVM SVM = new MultiClassSVM(TSet);
Tiến hành phân lớp ta đƣợc kết quả nhƣ sau:
Hình 3.2. Mô phỏng phân lớp nhị phân với SVM
Phân nhiều lớp: Giả sử ta có 3 tập hợp điểm màu đỏ, màu xanh lá cây và màu xanh dƣơng, chƣơng trình sẽ tiến hành phân 3 tập hợp điểm này thành 3 vùng khác nhau.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Hình 3.4. Phân nhiều lớp với SVM (sau khi phân lớp)
3.2. Nhận dạng phiếu điểm
Nhƣ đã trình bày ở các phần trên, một trong những ứng dụng hiệu quả của SVM đó là nhận dạng chữ viết tay. Qua tìm hiểu, nghiên cứu về kỹ thuật SVM, tác giả xây dựng chƣơng trình mô phỏng nhận dạng chữ số, chữ số viết tay trên các phiếu điểm.
Input: Tập dữ liệu huấn luyện gồm các chữ số từ 0 đến 9, các phiếu điểm. Output: Nhận dạng giá trị điểm trên các phiếu điểm.
Tập dữ liệu huấn luyện: là ảnh của những chữ số viết tay đã đƣợc nhị phân hóa, có kích thƣớc 32x32
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn
Phiếu điểm cần nhận dạng: Là những ảnh scan của các phiếu điểm đang
đƣợc sử dụng tại trƣờng Đại học Công nghệ thông tin và truyền thông, Đại học Thái Nguyên.
Hình 3.6. Phiếu điểm cần nhận dạng
Chƣơng trình mô phỏng nhận dạng phiếu điểm đƣợc xây dựng dựa trên ngôn ngữ lập trình C#, .NetFramework 4.0, thƣ viện AForge.NET (AForge.NET là