Mạng neural trong một vài năm trở lại đây đã được nhiều người quan tâm và đã áp dụng thành công trong nhiều lĩnh vực khác nhau, như tài chính, y tế, địa chất và vật lý. Thật vậy, bất cứ ở đâu có vấn đề về dự báo, phân loại và điều khiển, mạng neural đều có thể ứng dụng được. Ví dụ như khả năng nhận dạng mặt người trong các hệ thống quản lý thông tin liên quan đến con người (quản lý nhân sự ở các công sở, doanh nghiệp; quản lý học sinh, sinh viên trong các trường trung học, đại học và cao đẳng;… ); các ngành khoa học hình sự, tội phạm; khoa học tướng số, tử vi,…
Kết hợp chặt chẽ với logic mờ, mạng neural nhân tạo đã tạo nên cuộc cách mạng thực sự trong việc thông minh hóa và vạn năng hóa các bộ điều khiển kỹ thuật cao cho cả hiện nay và trong tương lai. Ví dụ như ứng dụng tự động điều khiển hệ thống lái tàu, hệ thống dự báo sự cố,…
Mạng neural dựa trên việc mô phỏng cấp thấp hệ thống neural sinh học. Trong tương lai với sự phát triển mô phỏng neural sinh học, chúng ta có thể có loại máy tính thông minh thật sự.
CHƯƠNG 2:
ỨNG DỤNG MẠNG NEURAL NHẬN DẠNG KÍ TỰ 2.1. Giới thiệu
Nhận dạng ký tự là một ứng dụng đang được rất nhiều người quan tâm nhưng nó đầy khó khăn và thử thách.
Điều rất khó của khả năng nhận dạng phù hợp kí tự là các kiểu ngôn ngữ rất phức tạp không theo quy luật do biến đổi trong font, kiểu và kích cỡ.
Với một số phương thức lập trình truyền thống đã ánh xạ ảnh kí tự vào trong ma trận, phân tích ảnh hoặc vector dữ liệu, kiểm tra đưa ra quyết định phù hợp của kết quả. Việc thực thi này trong lập trình truyền thống cần viết mã nguồn vô tận cho mỗi kiểu đối với sự không nhất quán hay sự trênh lệch với các giá trị đầu ra khác nhau. Lý thuyết này không hiện thực.
Sử dụng mạng neural nhân tạo với những mạng làm việc đúng quy tắc từ việc cập nhật lại các trọng số liên kết giữa các nút mạng. Với ưu điểm là mạng có thể nhận dữ liệu từ những phân tích sinh động của các ảnh đầu vào và việc huấn luyện cho các kí tự đầu ra cho mẫu nói cách khác là khả năng thích nghi với môi trường dữ liệu đầu vào sinh động.
2.2. Phát biểu bài toán
Cho bài toán nhận dạng kí tự với đầu vào là trang văn bản trên định dạng file ảnh (*.bmp,*.jmp,…). Yêu cầu là xây dựng chương trình nhận dạng kí tự văn bản trên file ảnh. Sử dụng công cụ là mạng nơron và đầu ra là tập hợp các kí tự lư trữ dưới dạng văn bản.
Giả thiết giai đoạn tiền xử lý đã được thực hiện : ảnh đã được phân ngưỡng, xoay ảnh, lọc nhiễu... Đề tài này chỉ đi sâu nghiên cứu quá trình nhận dạng kí tự của mạng neural.
Ý tưởng bài toán :
Phân tích ảnh cho kí tự: Chia ảnh theo dòng và tách ký tự theo từng vùng giới hạn
Chuyển thành ma trận tuyến tính và đưa vào mạng neural.
Đưa và mạng neural tính giá trị đầu ra.
Hiển thị kí tự của mã Unicode thu được.
Các bước giải quyết bài toán sử dụng mạng neural nhận dạng ký tự: Xây dựng mạng, xử lý dữ liệu(phân tích ảnh), huấn luyện mạng nueral và nhận dạng mạng neural
2.3. Các bước giải quyết giải quyết bài toán
2.3.1. Xây dựng mạng neural.
Chọn mạng đa tầng Feedforward với 3 lớp :
Hình 2.1: Sơ đồ mạng neural thiết kế
500 neural Lớp ẩn 150 neural Lớp đầu vào Điểm ảnh Điểm ảnh Điểm ảnh Điểm ảnh 0 hoặc 1 0 hoặc 1 0 hoặc 1 0 hoặc 1 16 neural Lớp đầu ra
Lớp đầu vào gồm 150 neural nhận giá trị nhị phân(0,1) của 150 thành phần của véctơ tương ứng. dữ liệu được véc tơ hóa từ ma trận điểm ảnh kí tự bằng phương pháp chia lưới.
Lớp ẩn gồm 500 neural, số neural này được quyết định từ những kết quả tối ưu và giá trị lỗi cơ sở trong quá trình huấn luyện.
Lớp đầu ra gồm 16 neural đưa ra giá trị nhị phân(0,1) tương ứng với 16 bít của mã Unicode.
Với những lớp nói ở trên ta đã xây dụng được mạng neural như hình 2.1.
2.3.2. Xử lý dữ liệu (phân tích ảnh).
Quá trình phân tích ảnh để tìm ra đặc tính của kí tự bởi việc kiểm tra điểm ảnh nó là giá trị đầu vào cho cả quá trình huấn luyện và quá trình kiểm tra. Quá trình phân tích này dựa trên việc nhận dạng từ ảnh đầu vào bằng phương pháp tính giá trị màu. Giới hạn của giá trị là điểm đen RGB(0,0,0) hoặc điểm trẳng
RGB(255,255,255). Những ảnh đầu vào được định dạng bitmap(*.bmp). 2.3.2.1. Tách dòng kí tự.
Sự liệt kê các dòng của kí tự trong một ảnh kí tự hay một trang văn bản là một trong yếu tố quan trọng trong quá trình tìm giới hạn của kí tự, khi tìm giới hạn của kí tự tiếp theo chúng ta không cần quét trên toàn bộ ảnh.
Thuật toán:
1. Bắt đầu từ điểm ảnh x, y đầu tiên (0,0), và đặt là dòng 0. 2. Quét đến hết chiều rộng của ảnh trên một giá trị y của ảnh.
3. Nếu là phát hiện điểm đen thì lưu giá trị y là đỉnh của hàng đầu tiên:
Nếu không xét tiếp điểm tiếp theo.
Nếu không thấy điểm đen nào thì tăng y và khởi động lại x để quét dòng ngang tiếp theo.
Bắt đầu từ đỉnh cuả hàng tìm thấy (0,giới hạn trên).
Nếu không phát hiện điểm đen nào thì đánh dấu giá trị y-1 là giới hạn dưới của hàng. Và tăng số dòng, xét dòng tiếp theo.
Nếu vẫn phát hiện thấy điểm đen tăng y và khởi động lại x xét hàng ngang tiếp theo.
5. Bắt đầu từ giới hạn dưới của hàng ngang tìm thấy sau cùng lặp lại từ bước 1 đến bước 4 tìm dòng kế tiếp.
6. Nếu y bằng chiều cao của ảnh thì dừng.
Hình 2.2: Quá trình tách dòng kí tự
2.3.2.2. Tách kí tự.
Thuật toán
1. Bắt đầu từ kí tự đầu tiên của hàng trên cùng với giá trị x đầu tiên. 2. Quét hết chiều rộng với một giá trị y.
Nếu phát hiện điểm đen đánh dấu y như là đỉnh của hàng đầu tiên.
Nếu không xét điểm tiếp theo.
3. Bắt đầu từ giới hạn trên của kí tự phát hiện được và giá trị x đầu tiên.(0,giới hạn trên kí tự) .
4. Quét đến giới hạn dưới của dòng, giữ nguyên x.
Ảnh đầu vào Quá trình tách dòng Giới hạn trên Gới hạn dưới
Nếu phát hiện điểm đen đánh dấu x là phía trái của kí tự.
Nếu không xét điểm tiếp theo.
Nếu không thấy điểm đen nào tăng x và khởi động lại y để xét đường thẳng đứng tiếp theo.
5. Bắt đầu từ phía trái của kí tự tìm thấy và đỉnh của dòng hiện thời, (giới hạn trái kí tự, giới hạn trên dòng).
6. Quét hết chiều rộng của ảnh. Trên cùng một giá trị x.
Nếu không có điểm đen nào thì đánh dấu x-1 là bên phải của kí tự.
Nếu phát hiện điểm đen tăng x và khởi động lại y để xét đường thẳng đứng tiếp theo.
Hình 2.3: Quá trình tách kí tự
2.3.2.3. Tìm giới hạn kí tự.
Trong một số trường hợp quá trình tách kí tự có thể không phải là giới hạn thực tế của kí tự. Ở đây xuất hiện vấn đề không sắp xếp kí tự theo quy luật như sắp xếp dòng kí tự. Tức là đỉnh của một hàng không tất yếu là đỉnh của tất cả và tương tự đáy của của một hàng cũng không là đáy của tất cả các kí tự trên một dòng. Từ đây cần có một thủ tục tìm giới hạn kí tự. Thuật toán x y Quá trình tách kí tự (0,0) Gới hạn phải kí tự Gới hạn trái kí tự f
1. Bắt đầu từ đỉnh của dòng hiện thời và bên trái của kí tự. 2. Quét đến bên phải của kí tự. cùng một giá trị y.
Nếu phát hiện điểm đen thì đánh dấu y và thay đổi lại giới hạn trên.
Nếu không xét điểm tiếp theo.
Nếu không tìm thấy điểm đen nào tăng y và khởi động lại x, xét đường thẳng ngang tiếp theo.
3. Bắt đầu từ giới hạn dưới của dòng và bên trái của kí tự. 4. Quét tới bên phải của kí tự trên một giá trị y.
Nếu phát hiện điểm đen, đánh dấu y là giới hạn dưới của kí tự.
Nếu không phát hiện điểm đen giảm y và khởi động lại x xét đường thẳng ngang tiếp theo.
Hình 2.4: Quá trình tìm giới hạn kí tự Quá trình tìm giới hạn Gới hạn trên ký tự Gới hạn dưới ký tự
2.3.2.4. Ánh xạ vào ma trận
Bước tiếp theo là ta phải ánh xạ ảnh của kí tự vào một ma trận nhị phân hai chiều tương ứng. Một việc rất quan trọng ở đây là việc quyết định cỡ của ma trận. Nếu các điểm ảnh của kí tự được ánh xạ vào ma trận. tuy nhiên việc này dẫn đến việc xử lý các ma trận rất lớn. Để cho cân bằng hợp lý ta sẽ chuẩn hóa cỡ của ma trận bằng 10x15 với 150 phần tử.
Thuật toán:
1. Đối với chiều rộng:
Khởi tạo với 10 phần tử tương ứng.
Ánh xạ điểm đầu (0,y) và điểm cuối (C_rong,y) của ảnh kí tự tương ứng với giá trị đầu (0,y) và giá trị cuối (10,y) của ma trận.
Chia nhỏ chiều rộng thành 10 giá trị tương ứng. 2. Đối với chiều cao:
Khởi tạo với 15 phần tử tương ứng.
Ánh xạ điểm đầu (x,0) và điểm cuối (x,C_cao) của ảnh kí tự tương ứng với giá trị đầu (x,0) và giá trị cuối (x,15) của ma trận.
Chia nhỏ chiều cao thành 15 giá trị tương ứng.
Hình 2.5: Quá trình chia lưới kí tự
0 15 0 10 (0,0) (10,15)
Để đưa giá trị vào mạng neural ta cần chuyển ma trận điểm ảnh sang ma trận giá trị.
Thuật toán:
1. Bắt đầu từ phần tử (0,0).
2. Tăng x giữ nguyên giá trị y cho tới khi bằng chiều rộng của ma trận.
Ánh xạ mỗi phần tử tới một phần tử của mảng tuyến tính.
Nếu là điểm đen thì nhận giá trị bằng 1.
Ngược lạI nhận giá trị bằng 0.
Nếu x = chiều rộng thì khởi động lại x và tăng y. Lặp lại cho tới khi (x,y)=( C_Rong, C_Cao).
Hình 2.6: Quá trình ánh xạ từ ma trận điểm sang ma trận giá trị.
2.3.3. Huấn luyện mạng neural.
Một mạng neural đã đượ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 neural sẽ đọc giá trị đã được huấn luyện.
Một vài vấn đề cẩn thiết cho việc huấn luyện mạng:
Tại sao lại có sự khác nhau của không gian đầu vào? Môi một đầu vào khác nhau giá trị ngẫu nhiên và trong một phạm vi giới hạn không có giá trị luồng nào dự đoán được giữa các giá trị của nó.
Tại sao có sự phức tạp của các tham số cho việc huấn luyện mạng? Các tham số phức tạp là các kí tự thường thường bởi các đặc trưng chồng lấp và kích cỡ dữ liệu cao.
Cái gì cần được sử dụng cho những giá trị của : Tốc độ học.
Hệ số góc Sigmoid. Trọng số kết nối cơ sở.
Có bao nhiêu lần lặp cần thiết cho việc huấn luyện mạng của một tập đầu vào?
Giá trị ngưỡng của lỗi là bao nhiêu được sử dụng để so sánh tương phản trong việc xác định quá trình dừng của việc lặp lại nếu có nhu cầu xuất hiện.
Sự phức của các dữ liệu tham số riêng lẻ cũng là vấn đề khác trong quá trình nhận dạng. Mỗi một kí tự lại có một số lớn đặc tính phân biệt mà cần phải tính toán để nhận dạng nó một cách chính xác. Sự loại bỏ một số đặc tính có thể có kết quả của trong sự tương đồng của các mẫu. Sự tối thiểu của dữ liệu yêu cầu cho nó là một trong những phần phức tạp nhất của không gian đầu vào trong việc nhận dạng.
Thuật toán:
1. Xây dựng mạng tương ứng với mô hình tham số.
2. Khởi tạo giá trị trọng số với giá trị ngẫu nhiên. Nạp file huấn luyện (cả ảnh đầu vào và đầu ra mong muốn).
3. Phân tích ảnh và ánh xạ tất cả kí tự tìm thấy vào các mảng một chiều. 4. Đọc giá trị đầu ra mong muốn từ file và chuyển đổi từng kí tự tới giá
trị nhị phân Unicode và lưu trữ riêng biệt. 5. Với mỗi kí tự:
Tính toán giá trị đầu ra của mạng Feed ForWard.
So sánh với giá trị đầu ra mong muốn tương ứng với từng kí tự và tính toán lỗi.
truyền ngược giá trị từ đầu và với mỗi liên kết điều chỉnh trọng số liên kết.
6. Chuyển sang kí tự tiếp theo và lặp lại “6” cho tới khi hết các kí tự. 7. Tính toán trung bình lỗi cho tất cả các kí tự.
8. Lặp lại từ bước 6 đến 8 cho tới khi đạt số đưa vào của số lần lặp tối đa.
với phạm vi lỗi đạt đến ngưỡng. Nếu như vậy thì bỏ lặp lại.
ngược lại tiếp tục lặp lại.
Hình 2.7: Sơ đồ khối quá trình huấn luyện mạng neural
2.3.4. Nhận dạng ảnh kí tự.
Quá trình nhận dạng của mạng neural đơn giản và dễ hiểu. Khi chương trình chạy sẽ gọi các modun: phân tích ảnh, vector hóa... trong quá trình huấn luyện có thể được sử dụng lại trong quá trình nhận dạng. Những bước cơ sở để nhận dạng ảnh của kí tự có thể tóm tắt bởi sơ đồ hình 2.8 dưới đây:
Bùi Quang Chiến Trang 38
Đ S Đ S BẮT ĐẦU Tính toán đầu ra Dòng đầu tiên Ánh xạ kí tự tới vector Phân tích dòng ảnh
Chuyển từ Unicode sang kí tự
Hết kí tự trên dòng ? Hết Các dòng ? Dòng tiếp theo Kí tự tiếp theo S Đ Đ Đ Đ S S S Cập nhật trọng số BẮT ĐẦU Xây dựng mạng Khởi tạo trọng số
Nạp file huấn luyện
Phân tích ảnh Phát hiện kí tự tiếp theo Các kí tự sẵn sàng ? Các kí tự sẵn sàng ? Đọc đầu ra mong muốn Tính đầu ra của mạng Tính lỗi Các kí tự sẵn sàng ? Lỗi < ngưỡng ? Số lần lặp =max epochs ? Tính trung bình lỗi Vector đầu vào tiếp theo KẾT THÚC Đ S
Thuật toán:
1. Nạp file ảnh.
2. Phân tích ảnh cho các dòng kí tự. 3. Với mỗi dòng tách các kí tự liên tiếp.
Phân tích và xử lý ảnh kí tự cho việc ánh xạ vào một vectơ đầu vào.
Đưa giá trị vecto đầu vào cho mạng neural và tính toán giá trị đầu ra.
Chuyển đổi mã Unicode đầu ra từ nhị phân tới kí tự tương ứng và trả ra dưới dạng textbox.
CHƯƠNG 3:
CÀI ĐẶT CHƯƠNG TRÌNH THỬ NGHIỆM 3.1. Môi trường thử nghiệm.
Phần cứng : Một máy tính pentum IV. Card đồ họa 256 MB. Ram 512 MB .
Phần mềm : Ngôn ngữ sử dụng: C# trong bộ visual studio 2005.
Tập dữ liệu là những ảnh bitmap với số ký tự đầu vào từ 120 đến 160 ký tự của hai loại font: Arial và Tahoma với các kích thước: 8,10,12,14,18,20.
3.2. Giao diện chương trình.
Hình 3.1: Giao diện chương trình thực nghiệm
3.3. Bảng mã ASCII sử dụng trong chương trình
Trong đề tài này chúng ta sử dụng mã Unicode gồm 256 mã được mã hóa bằng 16 bit. Đây cũng là lý do mà số neural đầu ra là 16 neural, tương ứng với 16 bit của mã Unicode.
Dưới đây bảng 3.1 là một số mã ASCII sử dụng trong quá trình thực nghiệm:
Bảng 3.1 Một số mã sử dụng trong quá trình thực nghiệm Kí tự Mã thập phân Mã Hexa A 65 41 B 66 42 C 67 43 D 68 44 E 69 45 F 70 46 G 71 47 H 72 48 I 73 49 J 74 4A K 75 4B L 76 4C M 77 4D N 78 4E O 79 4F P 80 50 Q 81 51