Bài toán phân tích ảnh bằng deep learning
Bài này sẽ giới thiệu về convolutional neural network, sẽ được dùng khi input của neural network là ảnh. Mọi người nên đọc trước bài neural network và xử lý ảnh trước khi bắt đầu bài này. Show Thiết lập bài toánGần đây việc kiểm tra mã captcha để xác minh không phải robot của google bị chính robot vượt qua Robot vượt qua kiểm tra captchaThế nên google quyết định cho ra thuật toán mới, dùng camera chụp ảnh người dùng và dùng deep learning để xác minh xem ảnh có chứa mặt người không thay cho hệ thống captcha cũ. Bài toán: Input một ảnh màu kích thước 64*64, output ảnh có chứa mặt người hay không. Convolutional neural networkConvolutional layerMô hình từ những bài trước Mô hình neural network.Mỗi hidden layer được gọi là fully connected layer, tên gọi theo đúng ý nghĩa, mỗi node trong hidden layer được kết nối với tất cả các node trong layer trước. Cả mô hình được gọi là fully connected neural network (FCN). Vấn đề của fully connected neural network với xử lý ảnhNhư về xử lý ảnh, thì ảnh màu 64*64 được biểu diễn dưới dạng 1 tensor 64*64*3. Nên để biểu thị hết nội dung của bức ảnh thì cần truyền vào input layer tất cả các pixel (64*64*3 = 12288). Nghĩa là input layer giờ có 12288 nodes. Input layer và hidden layer 1Giả sử số lượng node trong hidden layer 1 là 1000. Số lượng weight W giữa input layer và hidden layer 1 là 12288*1000 = 12288000, số lượng bias là 1000 => tổng số parameter là: 12289000. Đấy mới chỉ là số parameter giữa input layer và hidden layer 1, trong model còn nhiều layer nữa, và nếu kích thước ảnh tăng, ví dụ 512*512 thì số lượng parameter tăng cực kì nhanh => Cần giải pháp tốt hơn !!! Nhận xét:
\=> Áp dụng phép tính convolution vào layer trong neural network ta có thể giải quyết được vấn đề lượng lớn parameter mà vẫn lấy ra được các đặc trưng của ảnh. Convolutional layer đầu tiênBài trước phép tính convolution thực hiện trên ảnh xám với biểu diễn ảnh dạng ma trận Tuy nhiên ảnh màu có tới 3 channels red, green, blue nên khi biểu diễn ảnh dưới dạng tensor 3 chiều. Nên ta cũng sẽ định nghĩa kernel là 1 tensor 3 chiều kích thước k*k*3. Phép tính convolution trên ảnh màu với k=3.Ta định nghĩa kernel có cùng độ sâu (depth) với biểu diễn ảnh, rồi sau đó thực hiện di chuyển khối kernel tương tự như khi thực hiện trên ảnh xám. Tensor X, W 3 chiều được viết dưới dạng 3 matrix.Khi biểu diễn ma trận ta cần 2 chỉ số hàng và cột: i và j, thì khi biểu diễn ở dạng tensor 3 chiều cần thêm chỉ số độ sâu k. Nên chỉ số mỗi phần tử trong tensor là x_{ijk}. y_{11} = b + (x_{111}*w_{111} + x_{121}*w_{121} + x_{131}*w_{131} + x_{211}*w_{211} + x_{221}*w_{221} + x_{231}*w_{231} + x_{311}*w_{311} + x_{321}*w_{321} + x_{331}*w_{331}) + (x_{112}*w_{112} + x_{122}*w_{122} + x_{132}*w_{132} + x_{212}*w_{212} + x_{222}*w_{222} + x_{232}*w_{232} + x_{312}*w_{312} + x_{322}*w_{322} + x_{332}*w_{332}) + (x_{113}*w_{113} + x_{123}*w_{123} + x_{133}*w_{133} + x_{213}*w_{213} + x_{223}*w_{223} + x_{233}*w_{233} + x_{313}*w_{313} + x_{323}*w_{323} + x_{333}*w_{333}) = -25 Thực hiện phép tính convolution trên ảnh màuNhận xét:
Các quy tắc đối với và toàn hoàn tương tự như ở bài trước. Với mỗi kernel khác nhau ta sẽ học được những đặc trưng khác nhau của ảnh, nên trong mỗi convolutional layer ta sẽ dùng nhiều kernel để học được nhiều thuộc tính của ảnh. Vì mỗi kernel cho ra output là 1 matrix nên k kernel sẽ cho ra k output matrix. Ta kết hợp k output matrix này lại thành 1 tensor 3 chiều có chiều sâu k. Convolutional layer đầu tiênOutput của convolutional layer đầu tiên sẽ thành input của convolutional layer tiếp theo. Convolutional layer tổng quátGiả sử input của 1 convolutional layer tổng quát là tensor kích thước H * W * D. Kernel có kích thước F * F * D (kernel luôn có depth bằng depth của input và F là số lẻ), stride: S, padding: P. Convolutional layer áp dụng K kernel. \=> Output của layer là tensor 3 chiều có kích thước: \displaystyle (\frac{H-F+2P}{S} + 1) * (\frac{W-F+2P}{S} + 1) * K Lưu ý:
Pooling layerPooling layer thường được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Kích thước dữ liệu giảm giúp giảm việc tính toán trong model. Gọi pooling size kích thước K*K. Input của pooling layer có kích thước H*W*D, ta tách ra làm D ma trận kích thước H*W. Với mỗi ma trận, trên vùng kích thước K*K trên ma trận ta tìm maximum hoặc average của dữ liệu rồi viết vào ma trận kết quả. Quy tắc về stride và padding áp dụng như phép tính convolution trên ảnh. max pooling layer với size=(3,3), stride=1, padding=0Nhưng hầu hết khi dùng pooling layer thì sẽ dùng size=(2,2), stride=2, padding=0. Khi đó output width và height của dữ liệu giảm đi một nửa, depth thì được giữ nguyên . Sau pooling layer (2*2). Source: http://cs231n.github.io/convolutional-networks/Có 2 loại pooling layer phổ biến là: max pooling và average pooling. Trong một số model người ta dùng convolutional layer với stride > 1 để giảm kích thước dữ liệu thay cho pooling layer. Fully connected layerSau khi ảnh được truyền qua nhiều convolutional layer và pooling layer thì model đã học được tương đối các đặc điểm của ảnh (ví dụ mắt, mũi, khung mặt,…) thì tensor của output của layer cuối cùng, kích thước H*W*D, sẽ được chuyển về 1 vector kích thước (H*W*D) Sau đó ta dùng các fully connected layer để kết hợp các đặc điểm của ảnh để ra được output của model. Visualise convolutional neural networkMô hình convolutional neural network: Input image -> Convolutional layer (Conv) + Pooling layer (Pool) -> Fully connected layer (FC) -> Output. Ví dụ mô hình convolutional neural network. Source: https://www.easy-tensorflow.com/tf-tutorials/convolutional-neural-nets-cnnsCó thể xem chi tiết trong từng layer ở đây. Chi tiết các layer trong convolutional neural network với input là số 7Mạng VGG 16VGG16 là mạng convolutional neural network được đề xuất bởi K. Simonyan and A. Zisserman, University of Oxford. Model sau khi train bởi mạng VGG16 đạt độ chính xác 92.7% top-5 test trong dữ liệu ImageNet gồm 14 triệu hình ảnh thuộc 1000 lớp khác nhau. Giờ áp dụng kiến thức ở trên để phân tích mạng VGG 16. Kiến trúc vgg16 conv: convolutional layer, pool: pooling layer, fc: fully connected layerPhân tích:
Bài sau mình sẽ giới thiệu về keras và hướng dẫn dùng keras để áp dụng convolutional neural vào các ứng dụng như nhận diện số viết, dự đoán góc di chuyển trong ô tô tự lái. |