เหตุใดจึงทำให้ภาพเป็นปกติด้วยการลบภาพของชุดข้อมูลหมายความว่าแทนที่จะเป็นรูปภาพปัจจุบันหมายถึงการเรียนรู้อย่างลึกซึ้ง?


88

มีความแตกต่างบางอย่างเกี่ยวกับวิธีทำให้รูปภาพเป็นปกติ แต่ส่วนใหญ่ดูเหมือนจะใช้สองวิธีนี้:

  1. ลบค่าเฉลี่ยต่อแชนเนลที่คำนวณเหนือรูปภาพทั้งหมด (เช่น VGG_ILSVRC_16_layers )
  2. ลบตามพิกเซล / ช่องคำนวณเหนือภาพทั้งหมด (เช่นCNN_S , ดูเครือข่ายอ้างอิงของ Caffe ด้วย )

วิธีธรรมชาติของฉันจะทำให้ภาพแต่ละภาพเป็นปกติ รูปภาพที่ถ่ายในเวลากลางวันจะทำให้เซลล์ประสาทยิงมากกว่าภาพในเวลากลางคืนและในขณะที่มันอาจแจ้งให้เราทราบถึงเวลาที่เรามักจะสนใจเกี่ยวกับคุณสมบัติที่น่าสนใจอื่น ๆ ในขอบ ฯลฯ

Pierre Sermanetอ้างถึงใน 3.3.3 ว่าการฟื้นฟูความคมชัดในท้องถิ่นนั้นน่าจะเป็นแบบต่อภาพ แต่ฉันไม่ได้เจอสิ่งนี้ในตัวอย่าง / แบบฝึกหัดที่ฉันเคยเห็น ฉันเคยเห็นคำถาม Quora ที่น่าสนใจและโพสต์ของ Xiu-Shen Weiแต่พวกเขาดูเหมือนจะไม่สนับสนุนแนวทางทั้งสองข้างต้น

ฉันพลาดอะไรไปแน่ ๆ ? นี่เป็นปัญหาการปรับสีให้เป็นมาตรฐานหรือมีกระดาษที่อธิบายว่าทำไมคนจำนวนมากถึงใช้วิธีนี้?


ฉันไม่ทราบคำตอบ แต่คุณลองแต่ละวิธีหรือไม่ มีความแตกต่างในการแสดงบ้างไหม?
user112758

@ user112758 - การนำพวกเขาไปใช้นั้นค่อนข้างเจ็บปวด (โดยเฉพาะอย่างยิ่งสำหรับพิกเซล) และประสบการณ์ของฉันคือการทำให้ปกติต่อภาพทำงานได้ดี แต่ข้อมูลของฉันไม่ใช่ตัวแทน ฉันจะลองทดสอบกับการทำให้เป็นมาตรฐาน แต่ฉันอยากรู้ว่ามีแรงบันดาลใจที่อยู่เบื้องหลังขั้นตอนการทำให้เป็นมาตรฐานที่แปลก (ในใจของฉัน)
Max Gordon

ตกลงบางทีคุณสามารถถามคำถามนี้ได้ในประเด็นปัญหาคาเฟอีนใน Google caffe กลุ่ม GitHub ฉันเดาว่าจะมีผู้เชี่ยวชาญมากขึ้นในหัวข้อนี้
user112758

คำตอบ:


58

การลบชุดข้อมูลหมายถึงการทำหน้าที่ "จัดกึ่งกลาง" ข้อมูล นอกจากนี้คุณต้องการแบ่งโดย sttdev ของคุณสมบัติหรือพิกเซลนั้นเช่นกันหากคุณต้องการทำให้ค่าคุณลักษณะแต่ละค่าเป็นมาตรฐาน z-normal

เหตุผลที่เราทำทั้งสองสิ่งเหล่านี้เป็นเพราะในกระบวนการฝึกอบรมเครือข่ายของเราเราจะทวีคูณ (น้ำหนัก) และเพิ่ม (อคติ) อินพุตเริ่มต้นเหล่านี้เพื่อทำให้การเปิดใช้งานนั้นเป็นไปตามการไล่ระดับสี ฝึกโมเดล

เราต้องการให้แต่ละคุณลักษณะมีช่วงที่คล้ายกันเพื่อให้การไล่ระดับสีของเราไม่อยู่เหนือการควบคุม (และเราต้องการตัวคูณอัตราการเรียนรู้ทั่วโลกเพียงตัวเดียว)

อีกวิธีหนึ่งที่คุณสามารถคิดได้ก็คือเครือข่ายการเรียนรู้แบบลึกจะใช้พารามิเตอร์หลายตัวร่วมกันแบบดั้งเดิม - หากคุณไม่ได้ปรับขนาดอินพุตของคุณในลักษณะที่ทำให้ค่าคุณลักษณะที่มีช่วงคล้ายกัน (เช่น: เหนือชุดข้อมูลทั้งหมด เกิดขึ้นได้ง่ายมากเพราะส่วนหนึ่งของภาพมีน้ำหนักwมากและอีกส่วนหนึ่งมีขนาดเล็กเกินไป

คุณจะเห็นในบางรุ่นของซีเอ็นเอ็นที่ใช้ไวท์เทนนิ่งต่อภาพซึ่งมีมากขึ้นตามแนวความคิดของคุณ


4
ขอบคุณสำหรับคำตอบ ฉันคุ้นเคยกับแนวคิดของการจัดศูนย์กลางของข้อมูลและทำให้แน่ใจว่าช่วงนั้นคล้ายกันเพื่อให้ได้การไล่ระดับสีที่เสถียร คำถามคือสาเหตุที่เราต้องทำเช่นนี้กับชุดข้อมูลทั้งหมดและทำไมสิ่งนี้จะช่วยในทางตรงกันข้ามกับไวท์เทนนิ่งต่อภาพ? ฉันต้องการข้อมูลอ้างอิงแบบง่าย ๆ ที่แสดงให้เห็นว่าวิธีนี้ช่วยปรับปรุงการเรียนรู้ก่อนที่ฉันจะยอมรับคำตอบ ฉันรู้ว่าการปรับสภาพแบทช์เป็นเทคนิคที่ทรงพลังอย่างไม่น่าเชื่อ แต่ฉันไม่เห็นการเชื่อมต่อกับชุดข้อมูลมาตรฐานทั้งหมด
Max Gordon

หากคุณยอมรับการทำแบทช์ให้เป็นมาตรฐานนั้นดีอยู่แล้ว เหตุผลเดียวที่แบทช์ของคุณเป็นมาตรฐานคือเมื่อคุณไม่สามารถใส่ชุดข้อมูลแบบเต็มในหน่วยความจำหรือคุณกำลังแจกจ่ายการฝึกอบรม (มักเป็นปัญหาเดียวกัน) นั่นเป็นเหตุผลที่เรามีแบตช์
lollercoaster

ฉันคิดว่าแบทช์ยังเป็นรากฐานสำหรับการไล่ระดับสีแบบลาดสุ่ม แม้ว่าฉันจะสามารถเก็บทุกอย่างไว้ในหน่วยความจำฉันต้องการที่จะปรับปรุงพารามิเตอร์บ่อยกว่าหลังจากแต่ละยุค
Max Gordon

3
พวกเขาคือ. และคุณสามารถอัพเดทได้บ่อยครั้งตามที่คุณต้องการ - ผลการวิเคราะห์เหมือนกันซึ่งเป็นสิ่งที่ดีและปรับขนาดได้เกี่ยวกับการไล่ระดับสี เหตุผลที่เราใช้การไล่ระดับสีแบบสุ่มสุ่ม (ลำดับการป้อนแบบสับ + การผสม) คือการปีนเขาที่ราบรื่นผ่านพื้นที่ไล่ระดับสี เมื่อพิจารณาเป็นจุดเดียวเราไม่สามารถมั่นใจได้ว่าการอัปเดตของเราจะผลักดันเราไปในทิศทางสูงสุดในท้องถิ่นอย่างไรก็ตามหากคุณเลือกคะแนนมากพอโอกาสนี้จะสูงขึ้น (ตามความคาดหมาย)
lollercoaster

2
สิ่งนี้จะช่วยให้คุณสมบัติต่าง ๆ อยู่ในช่วงที่คล้ายกันได้อย่างไร ถ้าฉันมีสองภาพหนึ่งอยู่ระหว่าง 0 ถึง 255 และอีกหนึ่งตั้งแต่ 0 ถึง 50 ในค่าพิกเซลพูดด้วยค่าเฉลี่ยของ 50 และ stdev ของ 15 normalizing ให้ฉันภาพ 1 ตั้งแต่ -3.3 ถึง 13.6 และภาพที่ 2 ตั้งแต่ -3.3 ถึง 0 พวกเขายังคงไม่อยู่ในระดับเดียวกัน
แดเนียล

9

ก่อนที่จะทำการปรับสภาพแบทช์ค่าเฉลี่ยการลบต่อแชนเนลถูกใช้เพื่อจัดกึ่งกลางข้อมูลรอบศูนย์ค่าเฉลี่ยสำหรับแต่ละช่องสัญญาณ (R, G, B) โดยทั่วไปแล้วสิ่งนี้จะช่วยให้เครือข่ายเรียนรู้เร็วขึ้นเนื่องจากการไล่ระดับสีดำเนินการอย่างสม่ำเสมอสำหรับแต่ละช่อง ฉันสงสัยว่าถ้าคุณใช้การปรับสภาพแบทช์ขั้นตอนต่อการประมวลผลหมายถึงการลบล่วงหน้านั้นไม่จำเป็นจริง ๆ เพราะคุณกำลังทำให้เป็นปกติต่อมินิแบตช์อยู่ดี


1
"ฉันสงสัยว่าถ้าคุณใช้การปรับสภาพแบทช์ขั้นตอนต่อการประมวลผลหมายถึงการลบขั้นต่ำนั้นไม่จำเป็นจริงๆ แต่แบทช์ปกติหมายถึงการทำให้น้ำหนักในเลเยอร์ของเครือข่ายของคุณเป็นปกติ ... ไม่ใช่ภาพอินพุตจริง นี่คือ 2 สิ่งที่แตกต่างกัน
โมนิก้า Heddneck

4

การปรับสภาพภาพตามปกตินั้นเป็นเรื่องปกติและยังเป็นเพียงฟังก์ชั่นที่สร้างขึ้นใน Tensorflow เท่านั้น มันใช้สำหรับเหตุผลที่แน่นอนที่คุณพูดถึง (วัน VS คืนสำหรับภาพเดียวกัน) อย่างไรก็ตามหากคุณจินตนาการถึงสถานการณ์ที่เหมาะสมกว่าที่ควบคุมแสงความแตกต่างสัมพัทธ์ระหว่างภาพแต่ละภาพจะมีค่ามากในอัลกอริทึมและเราไม่ต้องการที่จะลบล้างสิ่งนั้นด้วยการปรับภาพตามปกติต่อภาพ (และต้องการ ทำบรรทัดฐานในบริบทของชุดข้อมูลการฝึกอบรมทั้งหมด)


4

สิ่งนี้เรียกว่าการประมวลผลข้อมูลล่วงหน้าก่อนใช้งาน คุณสามารถประมวลผลได้หลายวิธี แต่มีเงื่อนไขข้อหนึ่งที่คุณควรประมวลผลแต่ละข้อมูลด้วยฟังก์ชั่นเดียวกัน X_preproc = f (X) และ f (.) นี้ไม่ควรขึ้นอยู่กับข้อมูลเองดังนั้นหากคุณใช้อิมเมจปัจจุบันหมายถึงการประมวลผลนี้ ภาพปัจจุบันแล้ว f (X) ของคุณจะเป็นจริง ๆ f (X, ภาพ) และคุณไม่ต้องการมัน

การปรับความคมชัดของภาพที่คุณพูดถึงนั้นมีจุดประสงค์ที่แตกต่างออกไป การปรับความคมชัดของรูปภาพจะช่วยในคุณสมบัติ

แต่ f (.) ด้านบนจะช่วยในการเพิ่มประสิทธิภาพโดยการรักษาคุณสมบัติทั้งหมดให้เป็นตัวเลขซึ่งกันและกัน (โดยประมาณ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.