Một việc rất quan trọng ởđây là việc quyết định cỡ của mạng. Việc định cỡ đầu vào phụ thuộc vào việc định cỡ lưới lấy mẫu xuống. Nếu ta chia ảnh ký tự
thành ma trận có kích thước lớn thì ký tự sẽ được biểu diễn một cách chi tiết. Tuy nhiên, việc này dẫn đến chi phí xử lý các ma trận rất lớn. Ngược lại, nếu ta dùng ma trận kích thước nhỏ để biểu diễn ảnh ký tự sẽ dẫn đến việc mất mát thông tin. Để
cho cân bằng và hợp lý, ta sẽ chuẩn hóa cỡ của ma trận bằng 10*10, tức là ảnh sẽ được biểu diễn bởi 100 phần tử.
Lớp đầu vào gồm 100 nơron nhận giá trị từ 100 thành phần tương ứng của vector đầu vàọ Dữ liệu đầu vào này có được từ việc vector hóa từ ma trận điểm ảnh ký tự bằng phương pháp chia lướị
Lớp đầu ra có số nơron bằng với số mẫu nhập vàọ
3.5.3 Xử lý dữ liệu (phân tích ảnh)
Quá trình phân tích ảnh là quá trình tìm ra đặc tính của ký tự. Các điểm ảnh này chính là giá trị đầu vào cho cả quá trình huấn luyện và quá trình kiểm trạ Quá trình phân tích này dựa trên việc nhận dạng từ ảnh người sử dụng vẽ vào bằng phương pháp tìm các điểm đen RGB(0,0,0) hoặc điểm trắng RGB(255,255,255). Kết quả thu được là ma trận điểm ảnh. Sau đó ma trận này sẽ được ánh xạ thành vector đầu vào có kích thước 100 phần tử. Trước khi đưa vào mạng vector này còn
Hình 3.4 Quá trình ánh xạ từ ma trận điểm sang ma trận giá trị
3.5.4 Huấn luyện mạng nơron Kohonen
Một mạng nơron đã được xây dựng sẽ phải được huấn luyện trên một không gian đầu vào đã được chuẩn bị trước. Khi hoạt động, mạng nơron sẽ đọc giá trị đã
được huấn luyện.
Sự phức tạp của các tham số cho việc huấn luyện mạng: Việc chọn giá trị cho các tham số (tốc độ học, số lần lặp cần thiết, giá trị ngưỡng của lỗi…) được dựa vào kinh nghiệm và qua những lần tiến hành thực nghiệm.
Mục đích của quá trình huấn luyện là hiệu chỉnh trọng số W sao cho giống với vector đầu vào nhất. Thực hiện hiệu chỉnh các vector trọng số ứng với từng ký tự
mẫụ Kết quả thu được một ma trận trọng số W giống với tập vector đầu vàọ Huấn luyện bao gồm các bước:
- Thiết lập các tham sốđầu vàọ
- Tất cả các mẫu đầu vào được lấy mẫu hình ảnh ký tự xuống lưới kích thước 10*10. Ta được một ma trận hai chiều kích thước 10*10 có các giá trị tương
ứng với giá trị các điểm ảnh.
- Chuyển thành các vector đầu vào có kích thước 10*10.
- Đưa các vector đầu vào vào mạng
Hình 3.5 Quá trình huấn luyện mạng Bắt đầu Khởi tạo ngẫu nhiên ma trận trọng số Tính lỗi Lỗi có chấp nhận được không ? Đưa tập huấn luyện và điều chỉnh các trọng số
trên nơron chiến thắng
Tính lại lỗi xem có cải thiện không. Cải thiện lỗi có đáng kể không ? Vượt quá số chu kỳ lớn nhất ? Tốt hơn ma trận trọng số tốt nhất chưa ? Có ma trận trọng số tốt nhất không ? Chỉđịnh ma trận trọng số là ma trận tốt nhất Kết thúc Có Có Có Có Không Không Không Không Có Không
3.5.5 Nhận dạng mạng nơron Kohonen
Quá trình nhận dạng được diễn ra theo các bước sau: - Bước 1: Người sử dụng vẽ ký tự cần nhận dạng.
- Bước 2: Ký tựđược lấy mẫu xuống lưới kích thước 10*10. Ta được một ma trận hai chiều kích thước 10*10 có các giá trị tương ứng với giá trị các điểm ảnh.
- Bước 3: Chuyển ma trận điểm ảnh thành vector đầu vào có kích thước 10*10 bao gồm các giá trị 0.5, - 0.5.
- Bước 4: Vector đầu vào được đưa vào mạng nơron để tìm nơron chiến thắng.
- Bước 5: Thiết lập mảng chứa các ký tự trong tập mẫu, với chỉ số của mảng tương ứng với chỉ số của nơron đầu rạ
- Bước 6: Ánh xạ nơron chiến thắng vào mảng trên để tìm ra ký tự tương ứng với nơron chiến thắng.
- Bước 7: Hiển thị kết quả nhận dạng được tương ứng với ký tựđược vẽ.
3.5.6 Kết luận
Có nhiều phương pháp để giải quyết bài toán nhận dạng ký tự viết tay tiếng Việt. Nếu áp dụng mạng nơron để giải quyết, thông thường người ta hay sử dụng mạng dẫn tiến đa lớp cho việc thực hiện nhận dạng. Nhưng chúng ta sẽ thấy một số
khó khăn trong vấn đề tìm ra số nơron trong từng lớp, nhất là lớp ẩn. Thuật toán lan truyền ngược cũng phức tạp hơn, nhiều công thức tính toán hơn, lại phải xét trên từng lớp mạng. Trong khi đó mạng nơron Kohonen cũng là một loại mạng rất phổ
biến có cấu trúc đơn giản hơn, các bước thực hiện đơn giản, rõ ràng, dễ dàng lựa chọn và hiệu chỉnh các tham số đầu vào, quá trình huấn luyện mạng nhanh, dễ hội tụ.
Vì vậy lựa chọn mạng nơron Kohonen để giải quyết bài toán nhận dạng ký tự
CHƯƠNG 4
MÔ PHỎNG NHẬN DẠNG KÝ TỰ VIẾT TAY TIẾNG VIỆT RỜI RẠC BẰNG MẠNG NƠRON KOHONEN
Chương này trình bày các nội dung chính sau: Giới thiệu về phạm vi chương trình mô phỏng, các bước thực hiện chương trình mô phỏng: Thực hiện chương trình nhận dạng ký tự, xác định các tham số cho mạng, vẽ hình ảnh, lấy mẫu xuống hình ảnh, các tập huấn luyện, lớp mạng cơ bản, lớp mạng nơron Kohonen. Chương trình mô phỏng: Các chức năng của chương trình, kết quả nhận dạng, kết luận.
4.1 Giới thiệu
Trong luận văn này do hạn chế về mặt thời gian và độ phức tạp của nhận dạng chữ viết tay tiếng Việt cho nên tôi chỉ hạn chế mô phỏng nhận dạng ký tự viết tay tiếng Việt rời rạc trực tuyến. Các ký tự tiếng Việt gồm ký tự không dấu {A, B, C, D, Đ, E, G, H, I, K, L, M, N, O, P, Q, R, S, T, U, V, X, Y} và ký tự có dấu {Ă, Â, À, Ả, Ã, Á, Ạ, Ằ, Ẳ, Ẵ, Ắ, Ặ, Ầ, Ẩ, Ẫ, Ấ, Ậ, Ê, È, Ẻ, Ẽ, É, Ẹ, Ề, Ể, Ễ, Ế, Ệ, Ì, Ỉ,
Ĩ, Í, Ị, Ô, Ơ, Ò, Ỏ, Õ, Ó, Ọ, Ồ, Ổ, Ỗ, Ố, Ộ, Ờ, Ở, Ỡ, Ớ, Ợ, Ư, Ù, Ủ, Ũ, Ú, Ụ, Ừ, Ử,
Ữ, Ứ, Ự, Ỳ, Ỷ, Ỹ, Ý, Ỵ}.
Chương trình này được huấn luyện để có thể nhận dạng ký tự viết tay do người sử dụng vẽ chúng , chức năng này tương tự như nhận dạng ký tự viết tay sử
dụng các thiết bị cầm tay PDA (Personal Digital Assistant ). Chương trình gồm một giao diện đơn giản cho phép người sử dụng dùng chuột vẽ ký tự cần nhận dạng và tiến hành nhận dạng.
Khi vẽ ký tự có một hình chữ nhật xung quanh ký tựđó. Mục đích của hình chữ nhật này là để cắt bất kỳ khoảng trắng nào không liên quan đến ký tự làm cho chương trình có khả năng không cần quan tâm đến vị trí của ký tự được viết. Ta có
thể vẽ ký tựở giữa, trên, dưới hay bất kỳ một vị trí khác nhưng chương trình vẫn có khả năng nhận dạng đúng.
Sau khi vẽ ký tự, ký tựđược cắt bỏ khoảng trắng xung quanh mà không liên quan đến ký tự, sau đó được lấy mẫu xuống bởi vì ký tự được vẽ có độ phân giải quá cao mà mạng nơron không hiểu được. Giảm mẫu hình ảnh, hình ảnh được ánh xạ vào một lưới nhỏ có kích thước 10*10. Nhìn vào đây ta có thể thấy được hình
ảnh của ký tự. Nhờ lấy mẫu xuống nên số đầu vào ít hơn khi ký tự đầy đủ kích thước. Đồng thời ký tựđược quy về kích thước cốđịnh, do đó không còn phải quan tâm ký tựđược vẽ lớn, hay nhỏ khi huấn luyện hay khi nhận dạng.
Mẫu được đưa đến mạng nơron Kohonen và nơron chiến thắng được lựa chọn. Chương trình trả về ký tự tương ứng với ký tự người sử dụng vẽ. Số nơron ở đầu ra bằng số ký tự nhận dạng chứa trong tập mẫụ[9]
4.2 Thực hiện chương trình nhận dạng ký tự
Sử dụng ngôn ngữ java để mô phỏng cho việc sử dụng mạng nơron Kohonen
để nhận dạng ký tự viết tay tiếng Việt rời rạc trực tuyến. Có một số lớp được sử dụng cho chương trình này:
¾ Entrỵjava: Khu vực vẽ ký tự cho phép người sử dụng vẽ ký tự nhận dạng.
¾ KohonenNetwork.java: Mạng nơron Kohonen. Thực hiện các phương thức là duy nhất đối với mạng nơron Kohonen. Đây là nơi mạng nơron Kohonen
được huấn luyện.
¾ MainEntrỵjava: Khung chính của ứng dụng, lớp này bắt đầu ứng dụng nhận dạng ký tự viết taỵ
¾ Network.java: Các hàm chung cho mạng nơron không chỉ riêng cho mạng Kohonen. Lớp này để tính chiều dài véctơ, tích vô hướng và các công việc chung khác…
¾ Samplẹjava: Được sử dụng để hiển thị hình ảnh được lấy mẫu xuống trên lưới kích thước 10*10.
¾ SampleDatạjava: Được sử dụng để lưu giữ các tham số của hình ảnh lấy mẫu xuống.
¾ TrainingSet.java: Gồm các vector đầu vào kích thước 100 phần tử để huấn luyện cho mạng nơron.
4.2.1 Xác định các tham số cho mạng
Có rất nhiều loại mạng nơron khác nhaụ Hầu hết được đặt theo tên người sáng tạo ra nó. Các mạng nơron sẽ được sử dụng trong ứng dụng này là một mạng nơron Kohonen. Các ký tự sau khi vẽ, được lấy mẫu xuống và được đưa vào đầu mạng nơron. Có một nơron đầu vào cho mỗi điểm ảnh trong hình ảnh được lấy mẫu xuống. Vì hình ảnh được lấy mẫu xuống có kích thước 10*10 nên có 100 nơron đầu vàọ Số nơron đầu ra bằng số ký tự mẫụ
Ngoài yếu tố đầu vào và đầu ra còn có các kết nối giữa các nơron. Các trọng số này không bằng nhau đối với tất cả các kết nốị Mỗi kết nối được chỉ định một trọng số. Trọng số này là yếu tố duy nhất xác định đầu ra mạng nơron ứng với mỗi mẫu đầu vàọ Để xác định tổng số kết nối phải nhân số nơron đầu vào với số nơron
đầu rạ Mạng có kết nối đầy đủ nghĩa là mỗi đầu vào được kết nối với tất cả các đầu rạ Quá trình đào tạo là quá trình tìm ra các giá trị chính xác cho các trọng số nàỵ
4.2.2 Vẽ hình ảnh
Mặc dù không trực tiếp liên quan đến mạng nơron, quá trình người sử dụng vẽ ký tự là một phần quan trọng của ứng dụng nhận dạng ký tự viết tay tiếng Việt.
Lớp này định nghĩa một số thuộc tính được mô tả như sau:
¾ downSampleBottom: Cạnh dưới của vùng cắt được sử dụng khi lấy mẫu xuống
¾ downSampleLeft: Cạnh trái của vùng cắt, được sử dụng khi lấy mẫu xuống.
¾ downSampleRight: Cạnh phải của vùng cắt, được sử dụng khi lấy mẫu xuống.
¾ downSampleTop: Cạnh trên của vùng cắt, được sử dụng khi lấy mẫu xuống.
¾ entryGraphics: Một đối tượng đồ họa cho phép vẽ hình ảnh lên vùng để vẽ
tương ứng với vùng vẽ ký tự
¾ entryImage: Những hình ảnh ký tự mà người sử dụng vẽ.
¾ lastX: Tọa độ x cuối cùng mà người sử dụng vẽ tại đó.
¾ Tọa độ y cuối cùng mà người sử dụng vẽ tại đó.
¾ pixelMap: Số lượng pixel mà lấy mẫu xuống, điều này được thực hiện từ
entryImagẹ
¾ ratioX: Tỷ lệ lấy mẫu xuống theo chiều x.
¾ ratioY: Tỷ lệ lấy mẫu xuống theo chiều ỵ
¾ sample: Đối tượng sẽ chứa hình ảnh được lấy mẫu xuống.
Hầu hết các ký tự vẽđược xử lý bởi processMouseMotionEvent. Nếu người sử dụng rê chuột để vẽ thì có một đường được nối từ vị trí đặt chuột đầu tiên đến vị
trí hiện tại của chuột. Đường này được vẽ ra màn hình trong khung vẽ ký tự tương
ứng với ký tự vẽ vàọ
4.2.3 Lấy mẫu xuống hình ảnh
Mỗi lần ký tựđược vẽđể huấn luyện hay để nhận dạng nó phải được lấy mẫu xuống.
4.2.3.1 Lưu hình ảnh được lấy mẫu xuống
Hình ảnh được lấy mẫu xuống được lưu trong lớp SampleDatạ Chương trình thực hiện với một lưới kích thước 10*10. Tất cả hình ảnh được lấy mẫu xuống được lưu trong lớp nàỵ Lớp SampleData cũng bao gồm các phương thức để thiết lập và nhận được dữ liệu liên kết với lưới lấy mẫu xuống. Lớp SampleData cũng chứa một phương thức, đặt tên clone, mà sẽ tạo ra một bản sao chính xác của hình ảnh nàỵ
4.2.3.2 Kích thước và vị trí
Tất cả hình ảnh được lấy mẫu xuống trước khi được sử dụng. Điều này giúp cho mạng nơron không bị nhầm lẫn về vị trí và kích thước. Vùng để vẽđủ lớn để có thể vẽ ký tự với các kích thước khác nhaụ Bằng cách lấy mẫu hình ảnh xuống một kích thước phù hợp, do đó không còn quan tâm đến vấn đề ký tự được viết có kích thước như thế nàọ
Khi vẽ một ký tự, đầu tiên chương trình sẽ vẽ một hộp xung quanh biên giới của ký tự. Điều này cho phép loại bỏ tất cả khoảng trắng xung quanh ký tựđược vẽ. Quá trình này được thực hiện bên trong phương thức downsample của lớp Entrỵjavạ Thực hiện cắt hình ảnh này, và cuối cùng lấy mẫu xuống, chúng ta phải lấy các mẫu bit của hình ảnh ký tự. Điều này được thực hiện bằng cách sử dụng một lớp "PixelGrabber".
Để cắt hình ảnh và loại bỏ bất kỳ khoảng trắng xung quanh. Việc cắt được thực hiện bằng cách kéo bốn đường ảo từ trên, bên trái, bên phải và từ dưới của hình ảnh, nếu gặp điểm ảnh nào thì dừng lại không quét nũạ Bằng cách này bốn
đường thẳng sẽ là các cạnh ngoài của hình ảnh. Các phương thức hLineClear và vLineClear cả hai chấp nhận một tham số cho biết dòng quét, và trả về true nếu dòng đó là rõ ràng. Chương trình hoạt động bằng cách gọi hLineClear và vLineClear cho đến khi gặp cạnh ngoài của ký tự. Để tính toán đường biên trên cùng của hình ký tự nhật giới hạn ký tự chương trình bắt đầu từ 0 và tiếp tục xuống dưới hình ảnh. Để tìm đường biên dưới thực hiện quét ngược lại từ dưới đáy hình
ảnh ký tự lên. Các quy trình để xác định giới hạn trái và phải được thực hiện cũng theo cách nàỵ
4.2.3.3 Thực hiện lấy mẫu xuống
Sau khi ký tựđược cắt nó sẽ được lấy mẫu xuống. Hình ảnh có độ phân giải lớn được giảm xuống thành độ phân giải có kích thước 10*10. Tưởng tượng rằng ta vẽ một lưới lên trên ký tự. Phân chia thành các hình vuông với 10 đường ngang và 10 đường xuống. Nếu bất kỳ pixel nào được điền đầy thì trong lưới 10*10 đấy
pixcel tương ứng cũng được điền đầỵ Phần lớn công việc thực hiện quá trình này
được thực hiện bên trong phương thức "DownSampleQuadrant".
Phương thức "downSampleRegion" chấp nhận số lượng vùng cần được tính toán. Đầu tiên tọa độ x, y ban đầu và kết thúc phải được tính toán. Để tính toán tọa
độ x cho vùng đầu tiên phương thức "downSampleLeft" được sử dụng, đây là cạnh bên trái của hình chữ nhật bao quanh ký tự. Sau đó x được nhân với hệ số tỷ lệ x.
Đó là tỷ lệ bao nhiêu pixel cho mỗi hình vuông. Điều này cho phép xác định nơi đặt "startX", và điểm bắt "startY" được tính toán theo cách tương tự. Tiếp theo lặp với mỗi tọa độ x và y thuộc mỗi mình vuông. Nếu có số chẵn pixel thì điền đầy, sau đó phương thức trả lại giá trịđúng. Điều này chỉ ra rằng miền này được điền đầỵ
4.2.4 Các tập huấn luyện
Để huấn luyện mạng phải cung cấp các tập huấn luyện. Dữ liệu huấn luyện này được lưu trong các lớp TrainingSet.
Trong các lớp trainingset lưu các biến sau:
¾ inputCount: Số các yếu tốđầu vào cho mỗi mẫu đào tạo
¾ outputCount: Số lượng các yếu tốđầu ra cho mỗi mẫu đào tạo
¾ input[][]: Mẫu đầu vào huấn luyện
¾ output[][]: Mẫu đầu ra huấn luyện