Hướng dẫn 2d convolution in python - Tích chập 2d trong python

Kết hợp từ đầu

Hướng dẫn 2d convolution in python - Tích chập 2d trong python

Nội dung chính ShowShow

  • Kết hợp từ đầu
  • Động lực trên kho lưu trữ
  • Ai cần cái này?
  • Giải trình
  • Ý tưởng trong Nutshell
  • Cách sử dụng
  • Ví dụ với ma trận và kernel của bạn
  • Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng:
  • Chạy thử nghiệm
  • Làm thế nào để bạn thực hiện một tích chập 2D trong Python?
  • Làm thế nào để bạn thực hiện tích chập trong 2D?
  • Làm thế nào để bạn tạo một hình ảnh chập?
  • Làm thế nào để convolve làm việc python?

Động lực trên kho lưu trữ

Ai cần cái này?

Ai cần cái này?

Giải trình
Feel free to use it as you wish.

Ý tưởng trong Nutshell

  • Giải trình
    • Ý tưởng trong Nutshell
    • Cách sử dụng
  • Cách sử dụng
    • Ví dụ với ma trận và kernel của bạn
    • Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng:
  • Chạy thử nghiệm
  • Làm thế nào để bạn thực hiện một tích chập 2D trong Python?

Giải trình

Ý tưởng trong Nutshell

Cách sử dụng
This GIF (source) below perfectly presents the essence of the 2D convolution: green matrix is the Image, yellow is the Kernel and red coral is the Feature map:

Cách sử dụng

  • Ví dụ với ma trận và kernel của bạn or input data is some matrix;
  • Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng: is a small matrix that we multiply with sub-matrices of an Image;
    • Chạy thử nghiệm is the size of the step of the slide. For example, when the stride equals 1, we move on 1 pixel on every step, when 2, then we move on 2 pixels and so on. This picture can help you figure it out;
    • Làm thế nào để bạn thực hiện một tích chập 2D trong Python? is just the border of the Image that allows us to keep the size of initial Image and Feature map the same. In the GIF above we see that the shape of Image is 5x5 but the Feature map is 3x3. The reason is that when we use Kernel, we can't put its center in the corner, because if we do, there is a lack of pixels to multiply on. So if we want to keep shape, we use padding and add some zero border of the image. This GIF can help you figure it out;
    • Làm thế nào để bạn thực hiện tích chập trong 2D? is just the gap between kernel cells. So, the regular dilation is 1 and each cell is not distanced from its neighbor, but when we set the value as 2, there are no cells in the 1-cell neighborhood — now they are distanced from each other. This picture can help you figure it out.
  • Làm thế nào để bạn tạo một hình ảnh chập? or output data is the matrix obtained by all the calculations discussed earlier.

Làm thế nào để convolve làm việc python?

Cách sử dụng

Ví dụ với ma trận và kernel của bạn

Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng:

matrix = np.array([[1, 4, 4, 2, 1, 0, 0, 1, 0, 0, 3, 3, 3, 4], 
                   [0, 2, 0, 2, 0, 3, 4, 4, 2, 1, 1, 3, 0, 4],
                   [1, 1, 0, 0, 3, 4, 2, 4, 4, 2, 3, 0, 0, 4],
                   [4, 0, 1, 2, 0, 2, 0, 3, 3, 3, 0, 4, 1, 0],
                   [3, 0, 0, 3, 3, 3, 2, 0, 2, 1, 1, 0, 4, 2],
                   [2, 4, 3, 1, 1, 0, 2, 1, 3, 4, 4, 0, 2, 3],
                   [2, 4, 3, 3, 2, 1, 4, 0, 3, 4, 1, 2, 0, 0],
                   [2, 1, 0, 1, 1, 2, 2, 3, 0, 0, 1, 2, 4, 2],
                   [3, 3, 1, 1, 1, 1, 4, 4, 2, 3, 2, 2, 2, 3]])

Chạy thử nghiệm

kernel = np.array([[0, 1, 3, 3, 2], 
                   [0, 1, 3, 1, 3],
                   [1, 1, 2, 0, 2],
                   [2, 2, 3, 2, 0],
                   [1, 3, 1, 2, 0]])

Làm thế nào để bạn thực hiện một tích chập 2D trong Python?

Làm thế nào để bạn thực hiện tích chập trong 2D?

Làm thế nào để bạn tạo một hình ảnh chập?

Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng:

Làm thế nào để convolve làm việc python?

import imageio
import matplotlib.pyplot as plt
import numpy as np


gaussian_blur = np.array([
    [1, 2, 1],
    [2, 4, 2],
    [1, 2, 1]
]) / 16


image = imageio.imread('files/pic.jpg')
plt.imshow(image)

Kernel là một ma trận nhỏ mà chúng ta nhân với các ma trận phụ của hình ảnh; I'm going to make this picture blurry:
I'm going to make this picture blurry:

filtered_image = apply_filter_to_image(image, gaussian_blur)
plt.imshow(filtered_image)

Stride là kích thước của bước của slide. Ví dụ: khi sải chân bằng 1, chúng ta di chuyển trên 1 pixel trên mỗi bước, khi 2, thì chúng ta di chuyển trên 2 pixel, v.v. Hình ảnh này có thể giúp bạn tìm ra nó;

Đệm chỉ là đường viền của hình ảnh cho phép chúng ta giữ kích thước của hình ảnh ban đầu và bản đồ tính năng giống nhau. Trong GIF ở trên, chúng ta thấy rằng hình ảnh của hình ảnh là 5x5 nhưng bản đồ tính năng là 3x3. Lý do là khi chúng ta sử dụng kernel, chúng ta không thể đặt trung tâm của nó vào góc, bởi vì nếu chúng ta làm, thì thiếu pixel để nhân lên. Vì vậy, nếu chúng tôi muốn giữ hình dạng, chúng tôi sử dụng đệm và thêm một số đường viền bằng không của hình ảnh. GIF này có thể giúp bạn tìm ra nó;

Chạy thử nghiệm

python -m unittest tests.py

Trích dẫn

Trong tích chập 2D, chúng tôi di chuyển một số ma trận nhỏ được gọi là kernel qua hình ảnh 2D (một số ma trận) và nhân phần yếu tố của nó lên trên mỗi ma trận phụ, sau đó tổng hợp các phần tử của ma trận phụ thu được thành một pixel của bản đồ tính năng được gọi là bản đồ. Chúng tôi di chuyển nó từ bên trái sang phải và từ trên xuống dưới. Vào cuối chập, chúng ta thường bao phủ toàn bộ bề mặt hình ảnh, nhưng điều đó không được đảm bảo với các tham số phức tạp hơn. GIF này (nguồn) dưới đây trình bày hoàn hảo bản chất của tích chập 2D: Ma trận màu xanh lá cây là hình ảnh, màu vàng là hạt nhân và san hô đỏ là bản đồ tính năng:

@misc{Convolution from scratch,
    author = {Detkov, Nikita},
    title = {Implementation of the generalized 2D convolution with dilation from scratch in Python and NumPy},
    year = {2020},
    publisher = {GitHub},
    journal = {GitHub repository},
    howpublished = {\url{https://github.com/detkov/Convolution-From-Scratch}},
}

Hãy làm rõ nó và đưa ra một định nghĩa cho mọi thuật ngữ được sử dụng:

Làm thế nào để bạn thực hiện một tích chập 2D trong Python?

Để bắt đầu phương thức tích chập 2D, chúng tôi sẽ có tiêu đề phương thức sau: def convolve2d (hình ảnh, kernel, padding = 0, sải bước = 1): sao cho hình ảnh và kernel được chỉ định bởi người dùng và đệm mặc định xung quanh hình ảnh là 0 và Stride mặc định là 1.def convolve2D(image, kernel, padding=0, strides=1): Such that the image and kernel are specified by the user and the default padding around the image is 0 and default stride is 1.def convolve2D(image, kernel, padding=0, strides=1): Such that the image and kernel are specified by the user and the default padding around the image is 0 and default stride is 1.

Làm thế nào để bạn thực hiện tích chập trong 2D?

Con chập 2D là một hoạt động khá đơn giản trong tim: bạn bắt đầu với một hạt nhân, chỉ đơn giản là một ma trận nhỏ của trọng lượng. Hạt nhân này trượt qua dữ liệu đầu vào 2D, thực hiện phép nhân phần tử theo phần đầu vào hiện tại, và sau đó tổng kết các kết quả thành một pixel đầu ra duy nhất.

Làm thế nào để bạn tạo một hình ảnh chập?

Để thực hiện tích chập trên một hình ảnh, nên thực hiện các bước sau ....

Lật mặt nạ (theo chiều ngang và chiều dọc) chỉ một lần ..

Trượt mặt nạ vào hình ảnh ..

Nhân các phần tử tương ứng và sau đó thêm chúng ..

Lặp lại quy trình này cho đến khi tất cả các giá trị của hình ảnh đã được tính toán ..

Làm thế nào để convolve làm việc python?

Phương thức Convolve () này trả về tích chập tuyến tính của hai mảng hoặc vectơ đơn, và toán tử toán học này thường được sử dụng trong xử lý tín hiệu như trong trường hợp này, các giao dịch không có mảng và mảng hoạt động như một tín hiệu sử dụng hai tín hiệu khác nhau (mỗi chiều một chiều) để có được ...returns the linear convolution of two single-dimensional arrays or vectors, and this mathematical operator is generally used in signal processing as in this case, the numpy deals with array and arrays act as a signal was using two different signals (each of one dimensional) to obtain discrete ...returns the linear convolution of two single-dimensional arrays or vectors, and this mathematical operator is generally used in signal processing as in this case, the numpy deals with array and arrays act as a signal was using two different signals (each of one dimensional) to obtain discrete ...