Tại sao bình thường hóa hình ảnh bằng cách trừ đi hình ảnh của tập dữ liệu, thay vì hình ảnh hiện tại có nghĩa là học sâu?


88

Có một số biến thể về cách bình thường hóa hình ảnh nhưng dường như hầu hết đều sử dụng hai phương pháp sau:

  1. Trừ giá trị trung bình trên mỗi kênh được tính trên tất cả các hình ảnh (ví dụ: VGG_ILSVRC_16_layers )
  2. Trừ theo pixel / kênh được tính trên tất cả các hình ảnh (ví dụ: CNN_S , cũng xem mạng tham chiếu của Caffe )

Cách tiếp cận tự nhiên trong tâm trí tôi để bình thường hóa từng hình ảnh. Một hình ảnh được chụp dưới ánh sáng ban ngày sẽ khiến nhiều nơ-ron phát sáng hơn so với hình ảnh vào ban đêm và trong khi nó có thể cho chúng ta biết thời gian chúng ta thường quan tâm đến các tính năng thú vị hơn ở các cạnh, v.v.

Pierre Sermanet đề cập đến trong 3.3.3 rằng chuẩn hóa độ tương phản cục bộ sẽ dựa trên mỗi hình ảnh nhưng tôi không bắt gặp điều này trong bất kỳ ví dụ / hướng dẫn nào tôi từng thấy. Tôi cũng đã thấy một câu hỏi Quora thú vị và bài đăng của Xiu-Shen Wei nhưng họ dường như không ủng hộ hai cách tiếp cận trên.

Chính xác thì tôi đang thiếu gì? Đây có phải là một vấn đề bình thường hóa màu sắc hay có một bài báo thực sự giải thích tại sao rất nhiều người sử dụng phương pháp này?


Tôi không biết câu trả lời, nhưng bạn đã thử từng phương pháp chưa? Có sự khác biệt nào trong màn trình diễn của họ không?
user112758

@ user112758 - thực hiện chúng hơi khó khăn (đặc biệt là đối với pixel) và kinh nghiệm của tôi là bình thường hóa trên mỗi hình ảnh hoạt động tốt nhưng dữ liệu của tôi không phải là đại diện. Tôi sẽ cố gắng thử nghiệm việc bình thường hóa nhưng tôi tò mò muốn nghe động lực đằng sau những quy trình bình thường hóa kỳ lạ này (trong tâm trí tôi).
Max Gordon

Ok, có lẽ bạn có thể hỏi điều này trong các vấn đề về caffe GitHub của nhóm Google. Tôi đoán sẽ có nhiều chuyên gia về chủ đề này.
user112758

Câu trả lời:


58

Trừ dữ liệu có nghĩa là phục vụ "trung tâm" dữ liệu. Ngoài ra, lý tưởng nhất là bạn muốn chia cho sttdev của tính năng hoặc pixel đó nếu bạn muốn bình thường hóa từng giá trị tính năng thành một điểm z.

Lý do chúng tôi làm cả hai điều đó là vì trong quá trình đào tạo mạng của chúng tôi, chúng tôi sẽ nhân (trọng số) và thêm vào (độ lệch) các đầu vào ban đầu này để gây ra kích hoạt mà sau đó chúng tôi sao lưu với độ dốc đào tạo người mẫu.

Chúng tôi muốn trong quy trình này để mỗi tính năng có một phạm vi tương tự nhau để độ dốc của chúng tôi không vượt quá tầm kiểm soát (và chúng tôi chỉ cần một hệ số nhân tỷ lệ học tập toàn cầu).

Một cách khác mà bạn có thể nghĩ về nó là các mạng học sâu truyền thống chia sẻ nhiều tham số - nếu bạn không mở rộng quy mô đầu vào của mình theo cách dẫn đến các giá trị tính năng có phạm vi tương tự (ví dụ: trên toàn bộ dữ liệu bằng cách trừ trung bình) sẽ không chia sẻ xảy ra rất dễ dàng bởi vì một phần của trọng lượng hình ảnh wlà rất nhiều và phần khác thì quá nhỏ.

Bạn sẽ thấy trong một số mô hình CNN sử dụng làm trắng trên mỗi hình ảnh, điều này phù hợp hơn với suy nghĩ của bạn.


4
Cảm ơn bạn đã trả lời. Tôi quen thuộc với khái niệm định tâm dữ liệu và đảm bảo phạm vi tương tự để có được độ dốc ổn định. Câu hỏi đặt ra là tại sao chúng ta cần phải làm điều này trên toàn bộ tập dữ liệu và tại sao điều này sẽ giúp tương phản với làm trắng trên mỗi hình ảnh? Tôi muốn một tài liệu tham khảo đơn giản cho thấy bằng cách nào đó điều này cải thiện việc học trước khi tôi chấp nhận câu trả lời. Tôi biết rằng chuẩn hóa hàng loạt là một kỹ thuật cực kỳ mạnh mẽ nhưng tôi không thấy kết nối với toàn bộ chuẩn hóa dữ liệu.
Max Gordon

Nếu bạn chấp nhận chuẩn hóa hàng loạt là tốt, thì bạn đã ở đó. Lý do duy nhất khiến bạn bình thường hóa hàng loạt là khi bạn không thể chứa toàn bộ dữ liệu trong bộ nhớ hoặc bạn đang phân phối đào tạo (thường là cùng một vấn đề). Đó là lý do tại sao chúng tôi có các đợt.
lollercoaster

Tôi nghĩ rằng các lô cũng là nền tảng cho việc giảm độ dốc ngẫu nhiên. Ngay cả khi tôi có thể điều chỉnh mọi thứ vào bộ nhớ, tôi vẫn muốn cập nhật các thông số thường xuyên hơn sau mỗi kỷ nguyên.
Tối đa Gordon

3
Họ đang. Và bạn có thể cập nhật thường xuyên theo ý muốn - ý nghĩa phân tích là giống hệt nhau, đó là những gì rất hay và có thể mở rộng về độ dốc. Lý do mà chúng tôi sử dụng giảm dần độ dốc ngẫu nhiên (thứ tự đầu vào xáo trộn + trộn) là để làm phẳng ngọn đồi của chúng tôi leo qua không gian độ dốc. Đưa ra một điểm duy nhất, chúng tôi thực sự không thể chắc chắn rằng bản cập nhật của chúng tôi sẽ đẩy chúng tôi theo hướng cực đại cục bộ, tuy nhiên nếu bạn chọn đủ điểm, khả năng này sẽ cao hơn (theo kỳ vọng).
lollercoaster

2
Làm thế nào điều này giúp có được các tính năng vào một phạm vi tương tự? Nếu tôi có hai hình ảnh, một từ 0 đến 255 và một từ 0 đến 50 trong các giá trị pixel, giả sử với giá trị trung bình là 50 và tiêu chuẩn là 15. Bình thường hóa cho tôi hình ảnh 1 từ -3.3 đến 13.6 và hình ảnh 2 từ -3.3 đến 0. Chúng vẫn không ở cùng tỷ lệ.
Daniel

9

Trước khi chuẩn hóa hàng loạt, phép trừ trung bình trên mỗi kênh đã được sử dụng để định tâm dữ liệu quanh mức trung bình bằng 0 cho mỗi kênh (R, G, B). Điều này thường giúp mạng học nhanh hơn vì độ dốc hoạt động đồng đều cho từng kênh. Tôi nghi ngờ nếu bạn sử dụng chuẩn hóa hàng loạt, bước xử lý tiền trừ trung bình cho mỗi kênh không thực sự cần thiết vì dù sao bạn cũng bình thường hóa cho mỗi lô nhỏ.


1
"Tôi nghi ngờ nếu bạn sử dụng chuẩn hóa hàng loạt, bước xử lý tiền trừ trung bình trên mỗi kênh là không thực sự cần thiết vì dù sao bạn cũng đang chuẩn hóa mỗi lô nhỏ." Nhưng định mức hàng loạt đề cập đến việc bình thường hóa các trọng số trong các lớp của mạng của bạn ... không phải là hình ảnh đầu vào thực tế. Đây là 2 điều khác nhau.
Monica Heddneck

4

Chuẩn hóa trên mỗi hình ảnh là phổ biến và thậm chí là chức năng được xây dựng duy nhất hiện có trong Tensorflow (chủ yếu là do rất dễ thực hiện). Nó được sử dụng cho lý do chính xác mà bạn đã đề cập (ngày VS đêm cho cùng một hình ảnh). Tuy nhiên, nếu bạn tưởng tượng một kịch bản lý tưởng hơn khi điều khiển ánh sáng, thì sự khác biệt tương đối giữa mỗi hình ảnh sẽ có giá trị lớn trong thuật toán và chúng tôi sẽ không muốn xóa sạch điều đó bằng chuẩn hóa mỗi hình ảnh (và sẽ muốn làm bình thường hóa trong bối cảnh của toàn bộ tập dữ liệu đào tạo).


4

Điều này được gọi là tiền xử lý dữ liệu trước khi sử dụng nó. Bạn có thể xử lý theo nhiều cách nhưng có một điều kiện là bạn nên xử lý từng dữ liệu có cùng hàm X_preproc = f (X) và f (.) Này không nên phụ thuộc vào chính dữ liệu, vì vậy nếu bạn sử dụng hình ảnh hiện tại có nghĩa là xử lý hình ảnh hiện tại thì f (X) của bạn sẽ thực sự là f (X, hình ảnh) và bạn không muốn điều đó.

Chuẩn hóa tương phản hình ảnh mà bạn đang nói là cho một mục đích khác. Chuẩn hóa hình ảnh tương phản sẽ giúp trong tính năng.

Nhưng f (.) Ở trên sẽ giúp tối ưu hóa bằng cách giữ tất cả các tính năng bằng số với nhau (tất nhiên là xấp xỉ)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.