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

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ố

  1. Phát hiện đối tượng
  2. Phân loại hình ảnh
  3. Tái tạo hình ảnh
  4. Nhận dạng khuôn mặt
  5. Phân đoạn ngữ nghĩa

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

  • các giá trị pixel thô của hình ảnh được biểu thị dưới dạng ma trận 3D
  • Kích thước $W$ x $H$ x $D$, trong đó độ sâu tương ứng với số lượng kênh màu trong hình ảnh

1. Lớp tích chập

  • Ch.đổi. Các lớp sẽ tính toán đầu ra của các nút được kết nối với các vùng cục bộ của ma trận đầu vào
  • Các sản phẩm chấm được tính giữa một tập hợp trọng số [thường được gọi là bộ lọc] và các giá trị được liên kết với một vùng cục bộ của đầu vào

2. Lớp ReLu [Kích hoạt]

  • Khối lượng đầu ra của Conv. lớp được đưa vào chức năng kích hoạt theo nguyên tố, thường là Đơn vị tuyến tính chỉnh lưu [ReLu]
  • Lớp ReLu sẽ xác định xem nút đầu vào có 'kích hoạt' hay không khi cung cấp dữ liệu đầu vào
  • Việc 'kích hoạt' này báo hiệu liệu các bộ lọc của lớp tích chập có phát hiện ra một tính năng trực quan hay không
  • Hàm ReLu sẽ áp dụng hàm $max[0,x]$, lấy ngưỡng ở 0
  • Kích thước của khối lượng được giữ nguyên

3. Lớp tổng hợp

  • Chiến lược lấy mẫu xuống được áp dụng để giảm chiều rộng và chiều cao của âm lượng đầu ra

4. Lớp kết nối đầy đủ

  • Khối lượng đầu ra, tôi. e. 'các tính năng được tích hợp', được chuyển đến Lớp nút được kết nối đầy đủ
  • Giống như các mạng thần kinh thông thường, mọi nút trong lớp này được kết nối với mọi nút trong khối lượng các tính năng được chuyển tiếp
  • Xác suất của lớp được tính toán và được xuất ra trong một mảng 3D có kích thước. [$1$x$1$x$K$], trong đó $K$ là số lớp

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à 5 x 5 và kích thước bộ lọc là 3 x 3. Chúng ta có thể tính toán kích thước của hình ảnh thu được bằng công thức sau

$$[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

  • $W$ là kích thước của Âm lượng đầu vào,
  • $F$ kích thước trường tiếp thu của các bộ lọc lớp Convolutional,
  • $P$ là lượng đệm không được sử dụng xung quanh đường viền của ma trận đầu ra,
  • và $S$ là bước tiến của bộ lọc

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ổ 5 x 5, sải chân = 2 và phần đệm = 1. Trong lớp tích chập này, độ sâu [i. e. số lượng bộ lọc] được đặt thành 64

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à [73x73x64] - tổng cộng là 341.056 nơ ron trong lớp tích chập đầu tiên

Mỗi trong số 341.056 nơ-ron được kết nối với một vùng có kích thước [5x5x3] trong hình ảnh đầu vào. Một khu vực sẽ có trọng số $5\times 5\times 3=75$ tại một thời điểm. Ở độ sâu 64, tất cả các nơ-ron được kết nối với vùng này của đầu vào, nhưng với các giá trị trọng số khác nhau

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

  • EarlyStopping - theo dõi hiệu suất của mô hình và dừng quá trình đào tạo để tránh đào tạo quá mức
  • ModelCheckpoint - lưu các trọng số tốt nhất cho mô hình vào một tệp sau mỗi kỷ nguyên
  • PlotLossesKeras - từ thư viện _livelossplot_, hiển thị đồ thị về tổn thất và độ chính xác cũng như cập nhật sau mỗi kỷ nguyên

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

  • Dừng sớm theo dõi chỉ số hiệu suất để tránh tập luyện quá sức
  • tham số màn hình được đặt thành val_loss. Cuộc gọi lại này sẽ giám sát việc mất xác thực ở cuối mỗi kỷ nguyên
  • tham số chế độ được đặt thành min vì chúng tôi đang tìm cách giảm thiểu tổn thất xác thực
  • tham số kiên nhẫn chỉ định khoảng thời gian trì hoãn trước khi tạm dừng quá trình đào tạo
  • mô hình này sẽ đào tạo tối đa 100 kỷ nguyên, tuy nhiên, nếu tổn thất xác thực không giảm trong 10 kỷ nguyên liên tiếp - quá trình đào tạo sẽ tạm dừng

Cuối cùng, thay vì PlotLossesKeras, bạn cũng có thể sử dụng hàm gọi lại Tensorboard tích hợp sẵn. Thay vì vẽ đồ thị trong sổ ghi chép này, bạn sẽ phải chạy lệnh đầu cuối để khởi chạy Tensorboard trên máy chủ cục bộ. Điều này sẽ cung cấp nhiều thông tin hơn và linh hoạt hơn so với các lô từ PlotLossesKeras

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].

Chủ Đề