Con trăn phân loại hình ảnh CNN
Trong bài viết này, tôi sẽ chỉ cho bạn cách tạo Mạng thần kinh chuyển đổi (CNN) của riêng bạn để phân loại hình ảnh bằng ngôn ngữ lập trình Python và đó là thư viện máy ảnh Show Nếu bạn không muốn đọc bài viết này và muốn có một video đại diện cho nó, bạn có thể xem video dưới đây. Nó đi… Ngày nay không thiếu các ứng dụng điện thoại thông minh thực hiện một số loại nhiệm vụ Thị giác máy tính. Thị giác máy tính là một lĩnh vực của Học sâu tập trung vào vấn đề cơ bản trong việc đào tạo máy tính để xem như con người. Cách chúng ta nhìn nhận thế giới không phải là một kỳ tích dễ dàng sao chép chỉ trong một vài dòng mã. Chúng tôi liên tục nhận ra, phân đoạn và suy luận các đối tượng và khuôn mặt vượt qua tầm nhìn của chúng tôi. Tiếp nhận thông tin trong tiềm thức, bản thân mắt người đã là một điều kỳ diệu. Computer Vision đề cập đến việc nghiên cứu hiện tượng thị giác và nhận thức của con người bằng cách giải quyết một số 'nhiệm vụ', chỉ kể tên một số
Nghiên cứu đằng sau những nhiệm vụ này đang phát triển với tốc độ cấp số nhân, trong thời đại kỹ thuật số của chúng ta. Khả năng tiếp cận hình ảnh có độ phân giải cao thông qua điện thoại thông minh là chưa từng có và cách nào tốt hơn để tận dụng lượng dữ liệu dư thừa này hơn là nghiên cứu nó trong bối cảnh Học sâu Trong bài viết này, chúng tôi sẽ giải quyết một trong những nhiệm vụ Thị giác máy tính được đề cập ở trên, Phân loại hình ảnh Phân loại hình ảnh cố gắng kết nối một hình ảnh với một tập hợp các nhãn lớp. Đây là một vấn đề học tập có giám sát, trong đó một tập hợp dữ liệu đào tạo được gắn nhãn trước được cung cấp cho thuật toán học máy. Thuật toán này cố gắng. để tìm hiểu các đặc điểm trực quan có trong các hình ảnh đào tạo được liên kết với từng nhãn và phân loại các hình ảnh không được gắn nhãn cho phù hợp. Đó là một nhiệm vụ rất phổ biến mà hôm nay chúng ta sẽ khám phá bằng cách sử dụng Thư viện mã nguồn mở Keras dành cho học sâu Nửa đầu của bài viết này được dành để tìm hiểu cách xây dựng Mạng thần kinh chuyển đổi và nửa sau đi sâu vào việc tạo CNN trong Keras để dự đoán các loại hình ảnh thực phẩm khác nhau. Nhấp vào đây để bỏ qua phần triển khai Keras Bắt đầu nào Kiến trúc CNN được tạo thành từ một số lớp riêng biệt. Trong mọi trường hợp, các lớp lấy đầu vào là âm lượng 3D, biến đổi âm lượng này thông qua các phương trình vi phân và xuất ra âm lượng 3D. Một số lớp yêu cầu điều chỉnh siêu tham số và một số thì không 0. Lớp đầu vào
1. Lớp tích chập
2. Lớp ReLu (Kích hoạt)
3. Lớp tổng hợp
4. Lớp kết nối đầy đủ
Chúng ta hãy đi qua từng cái một Các lớp kết hợp bao gồm các ma trận có trọng số được gọi là Bộ lọc, đôi khi được gọi là hạt nhân Các bộ lọc trượt trên hình ảnh từ trái sang phải, chỉ lấy đầu vào là một vùng con của hình ảnh (trường tiếp nhận). Chúng ta sẽ xem cách kết nối cục bộ này giữa các nút và trọng số được kích hoạt sẽ tối ưu hóa toàn bộ hiệu suất của mạng thần kinh như thế nào Bộ lọc có chiều rộng và chiều cao. Nhiều CNN mạnh mẽ sẽ có các bộ lọc có kích thước khác nhau. 3 x 3, 5 x 5, trong một số trường hợp là 11 x 11. Các kích thước này xác định kích thước của trường nhìn tiếp nhận Độ sâu của bộ lọc bằng số lượng bộ lọc trong lớp tích chập Các bộ lọc sẽ kích hoạt khi phép nhân theo từng phần tử cho kết quả cao, giá trị dương. Điều này thông báo cho mạng về sự hiện diện của một thứ gì đó trong ảnh, chẳng hạn như một cạnh hoặc vệt màu Các giá trị của bản đồ tính năng xuất ra có thể được tính bằng công thức tích chập sau $$G[m,n] = (f * h)[m,n] = \sum_j\sum_kh[j, k]f[m - j, n - k]$$ trong đó hình ảnh đầu vào được ký hiệu là f, . Toán tử $*$ là một dạng phép nhân ma trận đặc biệt Nếu bạn muốn xem một tích chập ví dụ được thực hiện bằng tay, hãy xem cái này Tính toán này xảy ra cho mọi bộ lọc trong một lớp. Các bản đồ tính năng xuất ra có thể được coi là một ngăn xếp tính năng Lọc siêu tham số Các bộ lọc có các siêu tham số sẽ tác động đến kích thước của âm lượng đầu ra cho mỗi bộ lọc 1. sải bước. khoảng cách bộ lọc di chuyển tại một thời điểm. Bộ lọc có sải chân 1 sẽ di chuyển qua hình ảnh đầu vào, mỗi lần 1 pixel 2. đệm. lược đồ đệm bằng 0 sẽ 'đệm' các cạnh của âm lượng đầu ra bằng các số 0 để bảo toàn thông tin không gian của hình ảnh (thêm về điều này bên dưới) Xem xét Hình 5. , với kích thước hình ảnh đầu vào là $$(n - f + 1) * (n - f + 1)$$ Trong đó $n$ là kích thước hình ảnh đầu vào và $f$ là kích thước của bộ lọc. Chúng ta có thể cắm các giá trị từ Hình 5 và xem hình ảnh kết quả có kích thước 3 $$(n - f + 1) = (5-3) + 1 = 3$$ Kích thước của bản đồ tính năng kết quả sẽ có kích thước nhỏ hơn so với hình ảnh đầu vào ban đầu. Điều này có thể gây bất lợi cho các dự đoán của mô hình, vì các tính năng của chúng tôi sẽ tiếp tục đi qua nhiều lớp tích chập hơn. Làm thế nào để chúng tôi đảm bảo rằng chúng tôi không bỏ lỡ bất kỳ thông tin quan trọng nào? Khi chúng tôi kết hợp sải chân và phần đệm vào quy trình, chúng tôi đảm bảo rằng khối lượng đầu vào và đầu ra của chúng tôi vẫn giữ nguyên kích thước - do đó duy trì sự sắp xếp không gian của các tính năng trực quan. Kích thước âm lượng đầu ra có thể được tính như một hàm của Kích thước âm lượng đầu vào $$\frac{W - F + 2P}{S + 1}$$ Ở đâu
Trong biểu diễn đồ họa bên dưới, kích thước đầu vào thực ($W$) là 5. Lược đồ không đệm của chúng tôi là $P = 1$, sải chân $S = 1$ và trường tiếp nhận của $F = 3$ chứa các trọng số mà chúng tôi sẽ sử dụng để thu được các tích chấm của mình. Chúng ta có thể thấy cách không đệm xung quanh các cạnh của ma trận đầu vào giúp duy trì hình dạng đầu vào ban đầu. Nếu chúng tôi loại bỏ phần đệm bằng 0, đầu ra của chúng tôi sẽ có kích thước 3. Khi quá trình tích chập tiếp tục, âm lượng đầu ra cuối cùng sẽ bị giảm đến mức bối cảnh không gian của các tính năng bị xóa hoàn toàn. Đây là lý do tại sao zero-padding lại quan trọng trong tích chập Nhắc lại hình ảnh bát hoa quả. Giả sử chúng tôi thay đổi kích thước hình ảnh để có hình dạng 224x224x3 và chúng tôi có một lớp tích chập, trong đó kích thước bộ lọc là cửa sổ Bây giờ với hình ảnh bát trái cây của chúng ta, chúng ta có thể tính $\frac{(224 - 5)}{2 + 1} = 73$ Vì độ sâu của lớp tích chập là 64, khối lượng đầu ra của lớp tích chập sẽ có kích thước là Mỗi trong số 341.056 nơ-ron được kết nối với một vùng có kích thước Bây giờ, nếu muốn tính tổng số tham số có trong lớp chập đầu tiên, chúng ta phải tính $341,056 \times 75 = 25,579,200$. Làm thế nào chúng ta có thể xử lý tất cả các thông số này? Chia sẻ tham số Nhớ lại rằng các nút của các lớp Convolutional không được kết nối đầy đủ. Các nút được kết nối thông qua các vùng cục bộ của âm lượng đầu vào. Khả năng kết nối giữa các vùng này cho phép chia sẻ các tính năng đã học trên các vị trí không gian của âm lượng đầu vào. Các trọng số được sử dụng để phát hiện màu vàng ở một vùng của đầu vào cũng có thể được sử dụng để phát hiện màu vàng ở các vùng khác. Chia sẻ thông số giả định rằng một tính năng hữu ích được tính toán ở vị trí $X_1,Y_1$ có thể hữu ích để tính toán ở vùng khác $X_n,Y_n$ Trong ví dụ của chúng tôi ở trên, một lớp tích chập có độ sâu là 64. Cắt độ sâu này thành 64 ma trận 2 chiều duy nhất (mỗi ma trận có độ bao phủ 75x75) cho phép chúng tôi hạn chế trọng số và độ lệch của các nút tại mỗi lát cắt. Nói cách khác, chúng ta sẽ báo cho các nút trong một lát cắt tất cả đều có cùng trọng số và độ lệch. Các lát khác có thể có trọng lượng khác nhau. Điều này dẫn đến 64 bộ trọng số duy nhất. Số tham số mới ở lớp tích chập đầu tiên hiện là $64\times 5\times 5\times 3 = 4.800$. Giảm đáng kể các thông số. Khi chúng tôi đào tạo mạng của mình, độ dốc của từng bộ trọng số sẽ được tính toán, dẫn đến chỉ có 64 bộ trọng số được cập nhật Dưới đây là một đại diện đồ họa của các tính năng tích hợp. Hãy nghĩ về các lớp tích chập này như một chồng các bản đồ đặc trưng, trong đó mỗi bản đồ đặc trưng trong ngăn xếp tương ứng với một vùng con nhất định của hình ảnh đầu vào ban đầu Các mô hình Keras bao gồm khả năng tương tác tự động với mô hình trong quá trình đào tạo. Chúng ta sẽ sử dụng một số kỹ thuật gọi lại
Dừng sớm được sử dụng ở đây sẽ giám sát việc mất xác thực và đảm bảo rằng nó đang giảm dần. Nếu chúng tôi đang theo dõi độ chính xác của xác thực, chúng tôi sẽ theo dõi sự gia tăng của số liệu. Độ trễ cũng được sử dụng để đảm bảo rằng Dừng sớm không được kích hoạt khi có dấu hiệu đầu tiên về việc mất xác thực không giảm. Chúng tôi sử dụng tham số 'kiên nhẫn' để gọi độ trễ này. Tóm tắt
Cuối cùng, thay vì CNN có thể được sử dụng để phân loại hình ảnh không?Mạng thần kinh chuyển đổi (CNN hoặc ConvNet) là một loại con của Mạng thần kinh chủ yếu được sử dụng cho các ứng dụng trong nhận dạng hình ảnh và giọng nói . Lớp chập tích hợp của nó làm giảm kích thước cao của hình ảnh mà không làm mất thông tin của nó. Đó là lý do tại sao CNN đặc biệt phù hợp cho trường hợp sử dụng này.
Thuật toán CNN nào là tốt nhất để phân loại hình ảnh?Mạng tích chập rất sâu để nhận dạng hình ảnh quy mô lớn( VGG-16 ) VGG-16 là một trong những mạng trước phổ biến nhất .
CNN có tốt hơn ANN không?Nói chung, CNN có xu hướng trở thành một cách mạnh mẽ và chính xác hơn để giải các bài toán phân loại . ANN vẫn chiếm ưu thế đối với các sự cố trong đó bộ dữ liệu bị hạn chế và không cần thiết phải nhập hình ảnh.
Cái nào tốt hơn để phân loại hình ảnh CNN hoặc RNN?Mặc dù RNN phù hợp để xử lý dữ liệu tạm thời hoặc dữ liệu tuần tự, CNN phù hợp để xử lý dữ liệu không gian (hình ảnh) . Mặc dù cả hai mô hình đều hoạt động hơi giống nhau bằng cách đưa ra độ thưa thớt và sử dụng lại các nơ-ron và trọng số giống nhau theo thời gian (trong trường hợp của RNN) hoặc trên các phần khác nhau của hình ảnh (trong trường hợp của CNN). |