Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
726,04 KB
Nội dung
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆNTỬ BỘ MÔN TỰ ĐỘNG -o0o - THỊGIÁCMÁYTÍNH Bài tập lớn Nhậndiệnkítự GVHD: TS Nguyễn Trọng Tài SVTH: Trần Bá Phong - 1412895 Nguyễn Hữu Tài - 1413371 TP HỒ CHÍ MINH, THÁNG 12 NĂM 2017 Tóm Tắt Bài tập lớn tập trung vào giải thuật Convolution Neural Network (CNN) để nhậndiệnkítựKítự bao gồm từ 0-9, a-z A-Z OpenCV dùng để tiền xử lý ảnh ngõ vào trước cho vào mạng neural Mục Lục Giới thiệu Lý thuyết 2.1 Deep neural network 2.2 Convolution neural network 2.3 Thuật toán cải thiện hiệu Giải thuật 11 3.1 Tạo ảnh huấn luyện 11 3.2 Cấu trúc mạng CNN 13 3.3 Hàm cost 15 3.4 Thuật toán 16 Kết 24 Tài liệu tham khảo 26 Giới thiệu Nhậndiệnkítự dùng phổ biến rộng rãi ngày nay, đặc biệt ứng dụng vào OCR(Optical Character Recognition) Với OCR, người không cần phải đánh văn hay nhập liệu từ văn hay đoạn văn, thay vào OCR giúp trích xuất liệu hình ảnh quét văn tự động tạo văn y chang máytính Có nhiều phương pháp để nhậndiệnkítự bao gồm PCA(Principal Component analysis), LDA(Linear Discriminant Analysis), DNN(Deep Neural Network) hay CNN(Convolutional Neural Network) Trong báo cáo này, CNN dùng làm phương pháp cho nhậndiệnkí độ xác cao khả nhận dạng nhiều vật thể Thuật toán phát triển nghiên cứu nhiều giới việc dùng phương pháp vào nhậndiệnkítự hướng đắn Lý thuyết 2.1 Deep neural network Neuron network mô mạng thần kinh neural giống não người Mỗi neuron tiếp nhận tín hiệu từ neuron khác xử lý đặc trưng theo neuron xuất kết cho neuron khác để tiếp tục xử lý Hình Mạng neuron điển hình lớp Mạng neuron gồm lớp Lớp ngõ vào, lớp ẩn lớp ngõ Ngõ vào gồm đơn vị (unit), lớp ẩn gồm unit lớp ngõ có unit () Ta đặt “activation” unit i lớp j, ( ) ma trận hệ số chuyển từ lớp j sang lớp j+1 Ta có giá trị nút sau: ( ) ( ) ( ) ℎ( ) = = ( = ( = ( ( ) ( ) ( ) ( ) = ( + + + ( ) ( ) ( ) ( ) + + + + ( ) ( ) ( ) ( ) + + + + ( ) ( ) + ( ) ( ) ) ) ) ( ) ) Để có giá trị , ta cần phải dùng thuật tốn backpropagation để tính đạo hàm hàm cost sau dùng gradient descent để tính theta Hàm cost cho mạng neural có cơng thức sau: ( )=− () + Ta kí hiệu ℎ () log ℎ ( () + 1− () log − ℎ () () , ) ngõ kth vector y Số hạng tổng tất node ngõ từ k = -> K Số hạng thứ dùng cho regularization Tổng lặp tất theta mạng neuron, tổng thứ lặp lại phần tử theta để cộng lại Thuật toán backpropagation Forward propagation Hình Mạng neuron sâu Ta dùng forward propagation backpropagation Ta làm theo bước sau = = = ( ) = = ( ) = = ( ) Backpropagation Thuật toán backpropagation làm minimize hàm cost Đặt () = “sai số” node j lớp l Với node output y ( lớp hình trên) ( ) = ( ) = ( ( ) − ) ( ) .∗ ∗ (1 − ) ( ) = ( () , ( ) ) ( ) = .∗ () ( , ∗ (1 − ) ) Kết hợp lại , ta có thuật toán backpropagation: Đưa chuỗi thử { (x(1), y(1)), …., (x(m), y(m))} () Đặt Δ , = for t = : m Đặt a(1) = x Dùng thuật tốn forward propagation để tính a(l) Từ y(t) tính ngược lại () () TínhΔ , = Δ , + () , () () ( , ( ) ) ,…., ( ) () ( )= ∗ Δ , Thuật tốn backpropagation giúp ta tính đạo hàm hàm ( ) Sau ta dùng gradient descent để tính giá trị theta 2.2 Convolution neural network Convolution ảnh nghĩa tích chập Tích chập ảnh với theo cách sau 7 8 * -1 -1 -1 = -5 -10 -4 -2 -3 -2 -2 -4 -3 -7 -16 Để tích chập hình ảnh với nhau, lấy hình ảnh thứ di chuyển tâm điểm hình vị trí (2,2) áp vào hình 1, nhân hình lại với Ví dụ: -5 = * + 0*0 + 1*(-1) + 1*1 + 5*0 + 8*(-1) + 2*1 + 7*0 + 2*(-1) Sau đó, ta di chuyển sang trái bước, nhân hai hình lại với kết -4 Cứ đến hết hình ảnh Ta kết hình bên phải Một mạng CNN điển hình Hình Mạng CNN Lenet-5 Một mạng CNN điển hình có lớp Convolution, lớp Pooling, lớp Full-Connected lớp ngõ Lớp Convolution dùng mặt nạ ảnh có kích thước (nw,nh,nc,nc0), nw nh chiều rộng chiều cao ảnh ngõ vào, nc chiều sâu ngõ vào, nc0 chiều sâu mặt nạ Lớp Convolution giảm kích cỡ ảnh ngõ vào theo công thức ( ℎ1, 1) = [ ℎ+2 − + 1, +2 − + 1] Với nh, nw chiều rộng chiều cao ngõ vào, p số padding(padding tức thêm vào bên ảnh ngõ vào), f kích thước mặt nạ, s stride (stride số trượt mặt nạ ảnh) Lớp Pooling có chức làm giảm kích cỡ ngõ vào giống lớp Convolution, đồng thời trích xuất đặc trưng ảnh Như hình, avg pool lấy trung bình giá trị ảnh mà chọn Thơng thường, lớp pooling phổ biến lớp max pooling, tức lấy giá trị lớn ngõ vào, loại bỏ giá trị nhỏ Lớp Full Connected(FC) bên phần Deep Neural Network, ngõ vào FC phải lấy tất pixels ảnh ngõ vào trải thành cột Lớp FC cuối có tổng ngõ với số lớp cần nhận dạng Lớp FC áp dụng forward propagation back-propagation để học weights lớp 2.3 Thuật toán cải thiện hiệu a Bộ liệu Train/Test Khi sử dụng mạng neural network làm phương pháp nhận diện, ta phải có liệu tập huấn luyện tập kiểm tra tập chia theo 90%/10% tổng liệu Có để ta kiểm tra độ xác thuật toán, kiểm tra bias variance, sau hiệu chỉnh thơng số hệ thống b Bias Variance Bias Variance thuật ngữ sai số thuật tốn Khi thuật tốn dự đốn khơng xác tượng bias xảy ra, thuật toán dự đoán xác tập liệu huấn luyện tượng variance xảy Hình Hiện tượng bias Khi tượng bias xảy hình ta thấy đường dự đốn khơng chia xác vùng miền đỏ đen Hình HIện tượng variance Khi tượng variance xảy ta thấy đường dự đốn xác vùng miền Tuy nhiên, cho giá trị vào chưa dự đốn ta thực tập huấn luyện chưa thực tổng qt Hình Dự đốn hợp lý Khi thuật tốn khơng chịu bias variance cho ta kết hợp lý nhất, gọi just right Mặc dù với mẫu thử có vài sai số tổng quan cho tất mẫu liệu c Regularization Regulariazation phương pháp để tránh High variance Regularization áp dụng vào hàm Cost hệ số weights mạng CNN DNN 10 Hình 62 thư mục chứa ảnh huấn luyện Sau có ảnh huấn luyện, ta chạy file load_data.py để lấy ảnh huấn luyện lưu vào file, toàn hệ số ảnh tối ưu hóa Đoạn code load_data def load_data(): global count for i in ['A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','white', ['a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w_','x','y','z', 0,1,2,3,4,5,6,7,8,9] for z in all_directories: output_vector = np.zeros((63,1)) path = parent_path + '/' + z if z.startswith(str(i)) and os.path.isdir(path): total_files = len(os.listdir(path)) if total_files