1x1 convolution là gì

Tôi hiện đang làm Hướng dẫn học tập sâu Udacity. Trong Bài học 3, họ nói về tích chập 1x1. Phép chập 1x1 này được sử dụng trong Mô-đun khởi động của Google. Tôi đang gặp khó khăn để hiểu thế nào là tích chập 1x1.

Tôi cũng đã thấy bài viết này của Yann Lecun.

Ai đó có thể vui lòng giải thích điều này cho tôi?

Giả sử rằng tôi có một lớp đối lưu tạo ra một tenxơ hình trong đó:(N,F,H,W)(N,F,H,W)

  • NN là cỡ lô
  • FF là số lượng bộ lọc tích chập
  • H,WH,W là kích thước không gian

Giả sử đầu ra này được đưa vào một lớp đối lưu với các bộ lọc 1x1, không đệm và sải chân 1. Sau đó, đầu ra của lớp đối lưu 1x1 này sẽ có hình dạng .F1F1(N,F1,H,W)(N,F1,H,W)

Vì vậy, các bộ lọc đối chiếu 1x1 có thể được sử dụng để thay đổi kích thước trong không gian bộ lọc. Nếu thì chúng ta đang tăng chiều, nếu chúng ta đang giảm chiều, trong chiều của bộ lọc.F1>FF1>FF1

Thật vậy, trong bài viết Google Inception , Deep Deep with Convolutions , họ tuyên bố (in đậm là của tôi, không phải của các tác giả gốc):

Một vấn đề lớn với các mô-đun trên, ít nhất là ở dạng ngây thơ này, đó là ngay cả một số lượng nhỏ các kết cấu 5x5 có thể rất đắt ở trên một lớp chập với một số lượng lớn bộ lọc.
Điều này dẫn đến ý tưởng thứ hai về kiến ​​trúc được đề xuất: áp dụng một cách thận trọng việc giảm kích thước và dự đoán bất cứ nơi nào các yêu cầu tính toán sẽ tăng quá nhiều nếu không. Điều này dựa trên sự thành công của các nhúng: ngay cả các nhúng nhúng có chiều thấp có thể chứa nhiều thông tin về một bản vá hình ảnh tương đối lớn ... các kết cấu 1x1 được sử dụng để tính toán giảm trước các kết cấu 3x3 và 5x5 đắt tiền. Bên cạnh việc được sử dụng như là sự cắt giảm, chúng còn bao gồm việc sử dụng kích hoạt tuyến tính được chỉnh lưu khiến chúng có mục đích kép.

Vì vậy, trong kiến ​​trúc Inception, chúng tôi sử dụng các bộ lọc tích chập 1x1 để giảm tính chiều trong kích thước bộ lọc. Như tôi đã giải thích ở trên, các lớp đối lưu 1x1 này có thể được sử dụng chung để thay đổi kích thước không gian của bộ lọc (tăng hoặc giảm) và trong kiến ​​trúc Inception, chúng ta thấy các bộ lọc 1x1 này có hiệu quả như thế nào để giảm kích thước, rõ ràng trong không gian kích thước bộ lọc , không phải là không gian kích thước không gian.

Có lẽ có những cách hiểu khác về bộ lọc đối lưu 1x1, nhưng tôi thích cách giải thích này, đặc biệt là trong bối cảnh kiến ​​trúc Google Inception.

Một tích chập 1x1 chỉ đơn giản là ánh xạ một pixel đầu vào với tất cả các kênh của nó thành một pixel đầu ra, không nhìn vào bất cứ thứ gì xung quanh nó. Nó thường được sử dụng để giảm số lượng kênh độ sâu, vì nó thường rất chậm để nhân khối lượng với độ sâu cực lớn. input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth) input (256 depth) -> 4x4 convolution (256 depth)

Cái dưới cùng chậm hơn khoảng 3,7 lần.

Về mặt lý thuyết, mạng lưới thần kinh có thể 'chọn' đầu vào 'màu sắc' để xem xét việc sử dụng này, thay vì lực lượng vũ phu nhân lên mọi thứ.

Lý do chính khiến tôi không hiểu được các kết quả 1x1 là vì tôi không hiểu thực sự hoạt động như thế nào. Yếu tố chính là cách tính toán một tổ hợp của nhiều kênh / bộ lọc hoạt động. Để hiểu điều này, tôi thấy câu trả lời này cũng hữu ích:anyany

https://datascience.stackexchange.com/questions/9175/how-do-sub resultent-convolution-layers-work

Cụ thể, Loại 2.2 là mô tả chính xác về tích chập ở đó.

Một câu trả lời hữu ích khác:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Câu trả lời này giải thích cách bạn có một bộ lọc riêng cho từng kết hợp kênh vào / ra . Sau khi tính toán từng giá trị này, các kết quả sẽ được tính tổng qua trục kênh đầu vào với số giá trị của kênh đầu ra .

Đây là video tôi tìm thấy giúp tôi hiểu cách thức tích chập 1x1 hoạt động.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Đây là những điều chính tôi đã rút ra từ nó:

  • Đầu vào cho tích chập 1x1 thường là các tích chập trước đó có kích thước x . Nhưng nếu có các bộ lọc trong lớp kết hợp cuối cùng, bạn sẽ nhận được ma trận hình . Một tích chập 1x1 thực sự là một vectơ có kích thước , kết hợp trên toàn bộ hình ảnh, tạo ra bộ lọc đầu ra một x . Nếu bạn có các giá 1x1, thì đầu ra của tất cả các cấu hình 1x1 là kích thước .mmnnf1f1(m,n,f1)(m,n,f1)f1f1mmnnf2f2(m,n,f2)(m,n,f2)
  • Vì vậy, tích chập 1x1, giả sử , có thể được xem là trình các bộ lọc thông qua các bộ lọc . Nó cho phép mạng đào tạo cách giảm kích thước hiệu quả nhất.f2

Tôi sẽ cố gắng giải thích bằng trực giác và ngắn gọn hơn bằng hình ảnh minh họa!

Một đối số 1 ​​* 1 (còn gọi là mạng trong mạng )?

giả sử bạn nhập là (n_H, n_W, n_c_prev). Bạn có thể nghĩ (1 * 1 * n_c_prev) là một nơron duy nhất (mạng được kết nối đầy đủ - tại sao N / w trong N / w ) lại lấy số (n_c_prev) trong đầu vào nhân chúng với (1 * 1 * n_c_prev ) và sau đó thêm và sau đó lấy ReLu & output (n_H, n_W) và nếu bạn có nhiều bộ lọc (n_c) thì đầu ra sẽ là (n_H, n_W, n_C).

Vì vậy, bạn có thể sử dụng lớp gộp để giảm kích thước không gian (n_H, n_W) và có thể sử dụng đối số 1 * 1 để giảm n_c_prev (tức là số lượng kênh) giúp tiết kiệm rất nhiều tính toán. Ví dụ

1x1 convolution là gì

Vì vậy, một mang đi

  • Bạn có thể sử dụng lớp chập 1x1 để giảm n_C nhưng không phải n_H, n_W.
  • Bạn có thể sử dụng lớp gộp để giảm n_H, n_W và n_C.

Nói cách khác,

1x1 convolution là gì
  • bạn đang làm gì khi sử dụng bộ lọc CONV 1 * 1? về cơ bản, bạn lấy trọng lượng kích thước "1 * 1 * num_input_channel_of_featureMap" (theo yếu tố * theo sau là +) khối lượng này qua hình ảnh / tính năng Bản đồ kích thước "W H num_input_channel_of_featureMap" và những gì bạn nhận được là một đầu ra có kích thước "W"
  • Bây giờ, bạn có thể sử dụng số "#filters" của loại "1 * 1 * num_input_channel_of_featureMap" và lấy âm lượng "W H #filter" làm đầu ra cuối cùng!
  • Chính xác hơn, bạn đang nhân "1 * 1" 32 trọng lượng khác nhau (Khối lượng 1 * 1) với một lát ở cùng một vị trí trong bản đồ tính năng đầu vào, theo sau là ReLu và lấy một số tương ứng được tạo, được xem là pixel màu xanh lục !
  • 1 * 1 CONV giúp thu nhỏ số lượng kênh và lưu vào các tính toán trong một số mạng (TĂNG CƯỜNG).!
  • Nhưng, tất nhiên, nếu bạn muốn giữ số lượng kênh giống với bản đồ tính năng đầu vào, điều đó cũng tốt, điều duy nhất 1 * 1 CONV thực hiện là áp dụng ReLU Phi tuyến tính cho nó để tìm hiểu các chức năng phức tạp trong NN .

Thêm một ý tưởng về giảm kích thước trong ngữ cảnh của các bộ lọc 1x1:

Lấy ví dụ một lớp fc7 4096x8x8 từ FCN. Điều gì xảy ra nếu lớp tiếp theo (gọi nó là fc8) là 2048x8x8 với kích thước bộ lọc 1? fc7 nằm rất sâu trong mạng, mỗi tính năng trong số 4096 của nó rất phong phú về mặt ngữ nghĩa, nhưng mỗi nơ-ron (ví dụ hình ảnh đầu vào là 250x250x3) có trường tiếp nhận lớn. Nói cách khác, nếu một nơron hoạt động rất mạnh, chúng ta biết rằng ở đâu đó trong trường ngữ nghĩa của nó có một tính năng tương ứng.

Lấy ví dụ một nơron trên cùng bên trái trong fc8 với bộ lọc 1x1. Nó kết nối với tất cả 4096 nơ-ron / tính năng chỉ trong cùng một lĩnh vực tiếp nhận (góc trên bên trái của hình ảnh), mỗi tính năng được kích hoạt bởi một tính năng duy nhất. Một số (hãy cùng 500) trong số họ rất tích cực. Nếu tế bào thần kinh kết quả cũng rất tích cực, điều đó có nghĩa là có lẽ nó đã học được cách xác định 1 hoặc nhiều tính năng trong lĩnh vực tiếp nhận này. Sau khi bạn thực hiện điều này 2048 lần cho các nơ-ron trên cùng bên trái trong fc8, khá nhiều trong số chúng (ví dụ 250) sẽ hoạt động rất mạnh, có nghĩa là chúng 'thu thập' các tính năng từ cùng một lĩnh vực tiếp nhận thông qua fc7 và nhiều khả năng nhiều hơn một.

Nếu bạn tiếp tục giảm kích thước, số lượng tế bào thần kinh giảm sẽ học được số lượng tính năng ngày càng tăng từ cùng một lĩnh vực tiếp nhận. Và vì các tham số không gian 8x8 vẫn giữ nguyên, chúng tôi không thay đổi 'chế độ xem' của mỗi nơ-ron, do đó không làm giảm độ thô của không gian.

Bạn có thể muốn xem 'Mạng đầy đủ kết hợp' của Long, Shelhamer và Darrel.

Hoạt động toán học của tích chập có nghĩa là tính toán tích của hai hàm (liên tục hoặc rời rạc) trên tất cả các vị trí dịch chuyển có thể.

Trong hình ảnh 2 chiều (mức xám), phép tích chập được thực hiện bằng thao tác cửa sổ trượt, trong đó cửa sổ (hạt nhân tích chập 2 chiều) là ma trận .v×vv×v

Các ứng dụng xử lý hình ảnh của các mạng thần kinh - bao gồm các mạng thần kinh tích chập - đã được xem xét trong: [M. Egmont-Petersen, D. de Ridder, H. Handels. Xử lý hình ảnh với các mạng thần kinh - một đánh giá , Nhận dạng mẫu , Tập. 35, số 10, trang 2279-2602, 2002].

Video liên quan