Bộ dữ liệu Dataset-5 là bộ dữ liệu captcha màu phức tạp nhất với kích thước
100×40chứa 4 kí tự được tạo bởi hỗn hợp 2 bộ kí tự bào gồm: a. Các số từ 2 đến 8
b. Các chữ cái thường trong bảng chữ cái tiếng Anh được loại bỏ các chữ : i,l,o Bộ dữ liệu là ảnh màu các kí tự trong ảnh có độ đậm nhạt khác nhau với các phương pháp làm nhiễu tổng hợp từ các bộ dữ liệu trước bao gồm gạch ngang ngẫu nhiên trên ảnh, điểm chấm ngẫu nhiên và các kí tự bố trí khơng theo quy chuẩn nào với khoảng cách ngẫu nhiên và xếp chồng kí tự lên nhau, chính những điều đó tạo ra độ phức tạp lớn nhất cho bộ dữ liệu Dataset-5.
Bộ dữ liệu Dataset-5 được xây dựng bằng chương trình sinh captcha sử dụng thư viện "captcha" của python để tạo bộ dữ liệu huấn luyện với 11792 mẫu và tập dữ liệu kiểm tra với 2039 mẫu khác với tập huấn luyện.
Phương thức sử dụng dữ liệu
Các bộ dữ liệu Dataset-1, Dataset-3, Dataset-4, Dataset-5 có tên mỗi file dữ liệu là nhãn captcha của dữ liệu đó. Nên khi sử dụng 4 bộ dữ liệu trên chúng ta có tập nhãn chính là tập tên file. Khi đó chúng ta có được tập dữ liệu và nhãn tương ứng dùng để huấn luyện mơ hình hoặc dùng để test kết quả đều được.
Riêng bộ dữ liệu Dataset-2 có cấu trúc tên tệp là số thứ tự lần lượt tương ứng với vị trí của các dịng trong 1 tệp văn bản chứ lần lượt các nhãn tương ứng với từng ảnh. Khi sử dụng chúng ta chỉ cần thực hiện đọc tập nhãn vào và xử lý tương ứng nhãn với từng ảnh captcha trong bộ dữ liệu này để thực hiện các bước xử lý trong mơ hình.
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
3.2 Mơ hình sử dụng và các tham số
3.2.1 Tham số mơ hình
Với 5 bộ dữ liệu captcha được nêu trên, thực hiện các chương trình thực nghiệm tương ứng đều xoay quay phương pháp sử dụng mơ hình CNN để nhằm mục tiêu phân loại và nhận dạng captcha tự động. Với hàm kích hoạt là hàm ReLU với cơng thức (2.22) là lựa chọn tối ưu trong điều kiện nhận dạng thực tế.
Dưới đây là lần lượt thơng số các mơ hình CNN được sử dụng tương ứng với từng bộ dữ liệu thực nghiệm với:
conv f1 ×f2×k : Lớp tích chập sử dụngk bộ lọc kích thước f1 ×f2
pool x×y : Lớp POOL sử dụng max-pooling với bộ lọc kích thước x×y
FCx : Lớp kết nối đầy đủ (Fully Connected) sử dụng x neural trên 1 lớp ẩn.
Network x : Mơ hình tương ứng với bộ dữ liệu Dataset-x.
Network-1 Network-2 Network-3,4,5
stride = 1 stride =1 stride = 1
padding = 2 padding = 1 padding = 2
conv 5×5×20 conv 3×3×1 conv 5×5×32
pool 2×2 conv 3×3×3 pool 2×2
conv 5×5×50 FC 30 conv 5×5×2 pool 2×2 FC 10 pool 2×2 FC 500 softmax conv 5×5×1 FC32 pool 2×2 softmax FC 1024 FC1 softmax
Bảng 3.1: Các tham số mạng CNN dùng trong thực nghiệm
Qua quá trình thực nghiệm với mỗi bộ dữ liệu dựa trên một số tham số phổ biến . Đối với tham số bộ lọc thường là3×3 hoặc5×5nên đối với bộ dữ liệu có kích thước ảnh đầu vào khơng nhỏ như bộ dữ liệu Dataset-1, Dataset-3, Dataset-4, Dataset-5 chúng ta có thể chọn thơng số bộ lọc là 5×5 sẽ cho kết quả nhận diện khá tốt. Tuy nhiên với bộ dữ liệu Dataset-2 do kích thước ký tự sau khi cắt khá nhỏ nên chỉ áp
dụng phù hợp với bộ lọc kích thước 3×3 và không áp dụng thủ tục max-pooling để không bị mất thông tin ảnh. Với bộ dữ liệu Dataset-3,4,5 do đầu vào là một hình ảnh với nội dung chứa nhiều ký tự, nên với lớp tích chập đầu tiên sử dụng 32 bộ lọc khác nhau để lấy được nhiều thơng tin nhất có thể, sau đó số lượng các bộ lọc giảm xuống nhanh để đơn giản hóa đặc trưng giúp giảm độ phức tạp của thông tin đầu vào.
3.2.2 Độ đo
Các kết quả của thực nghiệm sử dụng độ đo<để đánh giá tính chính xác của mơ hình CNN được sử dụng. Giá trị < được tính theo cơng thức:
<= T
A ×100 (3.1)
Trong đó:
T: là số lượng ảnh có nhãn dự đốn giống nhãn thật của ảnh.
A: là số lượng ảnh dùng để kiểm tra.
3.3 Kết quả thực nghiệm
3.3.1 Ngôn ngữ lập trình, thư viện
Để thực hiện nội dung thực nghiệm của luận văn, học viên đã sử dụng ngơn ngữ lập trình chính là Python với các bộ thư viện hỗ trợ chính cho q trình xử lý, huấn luyện và nhận dạng captcha tự động bao gồm:
1. Thư viện Tensorflow
TensorFlow [11] là một nền tảng nguồn mở đầu cuối để sử dụng trong lĩnh vực học máy nói chung được phát triển bởi google. Nó có một hệ sinh thái tồn diện, linh hoạt gồm các công cụ, thư viện và tài nguyên cộng đồng hỗ trợ các nhà nghiên cứu thúc đẩy công nghệ tiên tiến trong học máy và các nhà phát triển dễ dàng xây dựng và triển khai các ứng dụng hỗ trợ học máy. Tensorflow có cung cấp 1 bộ API hỗ trợ Python giúp linh hoạt trong quá trình sử lý với ngơn ngữ lập trình.
Đặc biệt TensorFlow có thể chạy trên nhiều CPU và GPU [8] (với nhiều mở rộng CUDA tùy chọn cho việc tính tốn đa năng trên các GPU). Giúp tăng cường hiệu năng tính tốn khá ấn tượng so với các bộ API chỉ hỗ trợ đơn CPU hoặc GPU
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
là một kỹ sư nghiên cứu deep learning tại google. Nó là một open source cho neural network được viết bởi ngôn ngữ python.
Keras được coi là một thư viện ‘high-level’ với phần ‘low-level’ (còn được gọi là backend) có thể là TensorFlow, CNTK, hoặc Theano. Keras có cú pháp đơn giản hơn TensorFlow rất nhiều. Với mục đích giới thiệu về các mơ hình nhiều hơn là các sử dụng các thư viện deep learning. Do là ngôn ngữ bậc cao của Tensorflow nên Keras cũng hỗ trợ tính tốn trên nhiều CPU và GPU và cả TPU.
3. Thư viện PyTorch
PyTorch [23] là một framework được xây dựng dựa trên python cung cấp nền tảng tính tốn khoa học phục vụ lĩnh vực Deep learning. Pytorch tập trung vào 2 khả năng chính:
a. Một sự thay thế cho bộ thư viện numpy để tận dụng sức mạnh tính tốn của GPU.
b. Một platform Deep learning hỗ trợ trong nghiên cứu, mang lại sự linh hoạt và tiện lợi.
4. Thư viện Pillow
Python Imaging Library với phiên bản mới nhất hiện nay là pillow là thư viện miễn phí cho ngơn ngữ lập trình Python có thêm hỗ trợ mở, thao tác và lưu nhiều định dạng tệp hình ảnh khác nhau. Pillow cung cấp một số thủ tục tiêu chuẩn cho thao tác hình ảnh. Bao gồm các:
a. thao tác trên mỗi điểm ảnh. a. mặt nạ và các phương pháp xử lý.
c. lọc hình ảnh, chẳng hạn như làm mờ, đường viền, làm mịn hoặc tìm cạnh. d. tăng cường hình ảnh, chẳng hạn như làm sắc nét, điều chỉnh độ sáng, độ
tương phản hoặc màu sắc.
e. thêm văn bản vào hình ảnh và v.v.
5. Thư viện OpenCV
OpenCV là một thư viện mã nguồn rất mạnh mẽ cho thị giác máy tính (computer vision), xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong hoạt động thời gian thực. OpenCV có hỗ trợ cho nhiều ngơn ngữ như C/C++,MATLAB và trong đó có cả Python với tính năng hết sức đa dạng các thao tác kĩ thuật xử lý với hình ảnh trong Python
Opencv hỗ trợ rất nhiều thao tác ứng dụng với python:
a. Nhận dạng ảnh. b. Xử lý hình ảnh/video.
c. Phục hồi hình ảnh/video. d. Thực tế ảo v.v.
6. Thư viện captcha
Đây là bộ thư viện của python với tính năng đơn giản là hỗ trợ sinh ra captcha dưới nhiều định dạng khác nhau và cơ động sử dụng font chữ và các mẫu nhiễu. Học viên đã sử dụng bộ thư viện này để xây dựng chương trình sinh bộ captcha Dataset-5 dùng trong thực nghiệm.
3.3.2 Kết quả đạt được với các mẫu dữ liệu
Thơng qua q trình thực nghiệm với 5 bộ dữ liệu Dataset-1, Dataset-2, Dataset-3, Dataset-4, Dataset-5 bằng các phương pháp và mơ hình CNN với tham số khác nhau học viên đã đạt được các kết quả hiệu suất cụ thể với việc sử dụng mơ hình CNN kết hợp với các bước tiền xử lý để nhận dạng tự động captcha. Kết quả tốt nhất với từng bộ dữ liệu như sau:
1. Dataset-1
a. Tập huấn luyện: 9500 mẫu
b. Tập kiểm tra: 500 mẫu (Tính hiệu suất)
Bộ dữ liệu Dataset-1 là bộ dữ liệu đơn giản nhất trong 5 bộ với mơ hình CNN đơn giản và các bước tiền xử lý cục bộ tách từng ký tự. Chương trình thực nghiệm của học viên với bộ dữ liệu Dataset-1 có độ đo<theo công thức (3.1) đạt 100%.
2. Dataset-2
a. Tập huấn luyện: 5297 mẫu b. Tập kiểm tra: 740 mẫu
Bộ dữ liệu Dataset-2 với lượng nhiễu dày và có 2 loại nhiễu khác nhau nên quá trình tiền xử lý nhiễu vẫn chưa hoàn toàn khử sạch nhiễu gây ra một số hiện tượng các số như số 6 khơng khử sạch nhiễu có thể bị nhận dạng nhầm thành 8 hoặc 5bij nhận nhầm thành 6.
Tuy nhiên mơ hình CNN kết hợp với thao tác tiền xử lý khử nhiễu đã hoạt động khá tốt cho kết quả độ đọ <theo công thức (3.1) với kết quả trung bình các lần
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
3. Dataset-3
a. Tập huấn luyện: 99225 mẫu b. Tập kiểm tra: 2201 mẫu
Bộ dữ liệu Dataset-3 với nền sạch nhưng bị làm nhiễu bằng một gạch ngang đậm ngẫu nhiên thường kéo dài qua cả chuỗi kí tự trong captcha làm liền mạch các kí tự gây khó khăn rất nhiều nếu sử dụng phương pháp tách chữ như bộ Dataset-1 và Dataset-2.Do đó để nhận dạng tự động bộ dữ liệu này thì tiếp cận theo phương pháp nhận dạng tồn bộ ký tự trong ảnh sẽ đem lại hiệu quả khá đáng kể so với phương pháp tách từng ký tự thông qua thực nghiệm. Kết quả độ đọ< theo công thức (3.1) với kết quả trung bình các lần đo là 86%.
4. Dataset-4
a. Tập huấn luyện: 9800 mẫu b. Tập kiểm tra: 200 mẫu
Bộ dữ liệu Dataset-4 là bản nâng cấp độ khó của bộ kí tự Dataset-3 với kí tự được làm đậm và dính với nhau nhiều hơn, bên cạnh đó các kí tự được làm méo và đường gạch ngang ngẫu nhiên cũng bị làm méo làm cho lượng thông tin nhiễu bên trong ảnh captcha tăng lên nhiều. Với lưỡng dữ liệu trong tập huấn luyện chỉ bằng 1/10 lượng dữ liệu trong tập huấn luyện của Dataset-3 quá trình thưc nghiệm cho độ đo < theo cơng thức (3.1) với kết quả trung bình các lần đo là 39%, thấp hơn khá nhiều so với bộ dữ liệu Dataset-3.
5. Dataset-5
a. Tập huấn luyện: 13300 mẫu b. Tập kiểm tra: 700 mẫu
Bộ dữ liệu Dataset-5 là ảnh màu đặc biệt các kí tự trong ảnh lại có độ đậm nhạt khác nhau nên bước tiền xử lý đầu tiên của thực nghiệm đưa ảnh về ảnh xám và chuyển sang ảnh nhị phân mất mát rất nhiều thông tin thậm chí có hình ảnh bị mất thơng tin hồn tồn do ngưỡng chuyển ảnh nhị phân không phù hợp. Bên cạnh đó các nhiễu cũng rất phức tạp làm cho mơ hình hoạt động khơng tốt với bộ dữ liệu Dataset-5. Mặc dù bổ sung khá nhiều bước tiền xử lý giúp cho ảnh captcha về dạng dễ nhận dạng hơn nhưng kết quả cuối cùng cũng chưa tốt với độ đọ< theo công thức (3.1) với kết quả trung bình các lần đo chỉ là 1,8%.
3.3.3 Mơ tả q trình thực nghiệm
Q trình thực nghiệm trên một số mơ hình và phương pháp nhằm chọn ra phương pháp nhận dạng tối ưu nhất đối với từng bộ dữ liệu và tập trung xây dựng và cải thiện theo phương án đó. Do đó trong phần này sẽ mô tả cụ thể các bước nhận dạng tối ưu với từng bộ dữ liệu.
1. Các bước thực nghiệm trên bộ dữ liệu Dataset-1
Do bộ dữ liệu captcha Dataset-1 khá đơn giản với ít nhiễu nên cách tiếp cận hợp lý nhất là thực hiện tách từng kí tự trong hình ảnh sau đó nhận dạng từng kí tự một và trả ra kết quả captcha. Quá trình thực hiện theo các bước như sau:
Đầu tiên sau khi đọc xong hình ảnh cần chuyển ảnh sang ảnh nhị phân đen trắng bằng phương pháp OTSU và giãn nở ảnh để dễ dàng nhận dạng được các vùng liên thơng như hình 3.8:
Hình 3.8: Giãn nở ký tự trong captcha để dễ phát hiện vùng liên thơng
Tiếp đó tìm các thành phần liên thơng chứa các điểm điểm ảnh cùng màu trong hình 3.9 và tách ra thành các ảnh riêng biệt để lưu lại làm dữ liệu huấn luyện.
Hình 3.9: Phát hiện thành phần liên thơng
Lúc này sẽ có một số trường hợp xảy ra do một số captcha bị làm nhiễu bằng cách có 2 kí tự xếp dính vào nhau ví dụ như mẫu captcha hình 3.10.
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
Hình 3.10: Một mẫu captcha có 2 ký tự dính liền nhau
Khi xử lý cắt vùng liên thơng sẽ có kết quả nhận ln cả vùng có 2 ký tự như hình 3.11 :
Hình 3.11: Vùng nhận dạng liên tục nhận 2 ký tự vào 1 ảnh cắt, chưa tốt
Để xử lý vấn đề này có thể khắc phục được bằng cách sau, do khi 2 kí tự bị liền nhau thì khi nhận khung,chiều dài chắc chắn sẽ tăng lớn hơn chiều cao khung cắt khi đó ta chỉ cần đặt mức điều kiện nếu chiều dài lớn hơn "1.25× chiều cao" thì thưc hiện chia đơi khung thành 2 khung mới để tách kí tự. Khi đó ta sẽ có được kết quả nhận đủ 4 khung ký tự trong ảnh như hình 3.12 .
Hình 3.12: Kết quả sau khi dùng thủ thuật cắt đôi vùng nhận các ký tự liền nhau
Sau khi đã tách được từng ký tự ra khỏi ảnh, các dữ liệu đó sẽ được đưa vào mơ hình CNN đươc xây dựng bằng thư viện Tensorflow và chạy nền dưới Keras để huấn luyện và kiểm tra. Kết quả thu được rất tốt với hiệu suất nhận dạng đúng toàn bộ các captcha ngẫu nhiên trong tập kiểm tra .
2. Các bước thực nghiệm trên bộ dữ liệu Dataset-2
Do bộ dữ liệu Dataset-2 có cấu trúc gồm 2 loại dữ liệu khác nhau như hình 3.13. Nên bước đầu tiên, cần tìm cách để phân loại được 2 loại dữ liệu này để có phương án tiền xử lý hợp lý với mỗi loại.
Trong bước này, bằng cách dựa trên biểu đồ hình ảnh. Hình ảnh làm nhiễu bằng điểm chấm chứa rất nhiều điểm màu đen thuần túy (giá trị 0) trong đó, vì vậy cần tìm giá trị ngưỡng cho số điểm ảnh đen sẽ có hiệu quả phân loại. Ta sẽ phân loại được ảnh nhiễu chấm là loại 1, ảnh nhiễu gạch là loại 2.
Hình 3.13: 2 kiểu dữ liệu trong bộ dữ liệu Dataset-2
Sau khi phân loại được dữ liệu cần thực hiện tách từng kí tự trong captcha ra để nhận dạng bằng mơ hình CNN.
Đầu tiên sau khi phân loại dữ liệu trong bộ dữ liệu Dataset-2 cần phải khử nhiễu đối với từng loại captcha. Các bộ lọc khác nhau hoạt động tốt hơn trên các loại ảnh khác nhau. Sau khi thử nghiệm các bộ lọc khác nhau với 2 loại dữ liệu captcha phương