การแนะนำ

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

แต่ฉันแน่ใจว่าคุณตระหนักดีว่ามีไม่กี่ครั้งที่สิ่งต่าง ๆ จะตรงกันทั้งทางทฤษฎีและปฏิบัติ เมื่อเร็ว ๆ นี้ "กระดาษ" (โดย Luo, Wenjie และคณะ) ได้รับการตีพิมพ์ซึ่งแสดงให้เห็นว่าเขตข้อมูลที่เปิดกว้างไม่ได้เติบโตเป็นเส้นตรงกับจำนวนชั้นการบิดงอนอกจากนี้ยังมีจำกัดอย่างรุนแรง นอกจากนี้ ฟิลด์รับสัญญาณยังขึ้นอยู่กับปัจจัยอื่นๆ เช่น รูปแบบการเริ่มต้น ดังนั้นวิธีแก้ปัญหาคืออะไร?

กราฟมาช่วยชีวิต

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

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

วงกลมแสดงถึงขอบเขตซึ่งมีเวกเตอร์คุณลักษณะที่สอดคล้องกันซึ่งแสดงถึงขอบเขตนั้น ขอบมีความคล้ายคลึงกันระหว่างภูมิภาค

การแบ่งส่วนความหมาย

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

การแบ่งส่วนทำงานอย่างไร? ให้เรายกตัวอย่างง่ายๆ สมมติว่ามีรูปภาพที่ประกอบด้วยสีแดง น้ำเงิน เขียวเท่านั้นดังที่แสดงในภาพ

รูปที่ 1 และถือว่าสีเหล่านี้เป็นตัวแทนของวัตถุบางอย่าง ตอนนี้สมมติว่าใครต้องการแบ่งส่วนภาพออกเป็นวัตถุสามชิ้นที่แสดงด้วยสี คุณจะต้องใช้เวกเตอร์ฟีเจอร์ใดในการทำเช่นนี้ เหมาะสมสำหรับสีนี้เท่านั้นก็เพียงพอแล้ว ถ้าเราพูดในแง่ของเวกเตอร์คุณลักษณะ แล้วเวกเตอร์คุณลักษณะแต่ละอันจะมีความลึก 3; สำหรับสีแดง [0,0,1] สำหรับสีน้ำเงิน [1,0,0] สำหรับสีเขียว [0, 1, 0] อย่างที่คุณเห็นคุณสมบัติเหล่านี้เพียงพอที่จะแบ่งภาพออกเป็น 3 ภูมิภาค ตอนนี้ให้พิจารณาภาพในชีวิตจริงดังที่ให้ไว้ในรูปที่ 2 คุณจะสามารถทำงานให้สำเร็จโดยใช้เพียงสีได้หรือไม่? ไม่มีสิทธิ์. เราต้องการการแสดงคุณลักษณะของวัตถุแต่ละชิ้นที่อยู่ในรูปภาพเพื่อแยกวัตถุออกจากวัตถุอื่นๆ และนำวัตถุที่คล้ายกันเข้ามาใกล้มากขึ้น นี่คือจุดที่ตัวเข้ารหัสเข้ามาในรูปภาพ โดยจะแปลงการแสดงภาพสีไปเป็นการแสดงพื้นที่แฝงซึ่งคุณลักษณะของวัตถุเดียวกันอยู่ใกล้กว่าและวัตถุที่แตกต่างกันอยู่ห่างจากกัน แน่นอนว่าตัวเข้ารหัสจำเป็นต้องได้รับการฝึกอบรม เมื่อเรามีคุณสมบัติในพื้นที่แฝงซึ่งแยกวัตถุที่แตกต่างกันออกไป เราจำเป็นต้องเผยแพร่ข้อมูลไปยังระดับพิกเซล และนี่คือจุดที่ตัวถอดรหัสเข้ามามีบทบาท

ให้เราเข้าใจว่ากราฟมีประโยชน์อย่างไรในการแบ่งส่วนความหมาย กราฟจะเข้ามามีบทบาทเมื่อมีการแยกเวกเตอร์ฟีเจอร์โดยใช้ตัวเข้ารหัส พิจารณาภาพในรูปที่ 2 รูปภาพเรียงลำดับตามภาพจริง ความจริงภาคพื้นดิน การแบ่งส่วนโดยใช้ FCN การแบ่งส่วนโดยใช้ GCU ตามลำดับจากบนลงล่าง ในภาพนี้ ความน่าจะเป็นของหมอนและระดับเตียงจะใกล้เคียงกันมากเมื่อใช้ FCN ดังนั้นคุณจะเห็นได้ในรูปที่ 2 หมอนและเตียงถูกผสานเข้าด้วยกัน

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

สิ่งหนึ่งที่ชัดเจนที่อาจเกิดขึ้นได้คือการแบ่งส่วนภาพมากเกินไปเมื่อแบ่งเป็นขอบเขต แต่ภูมิภาคที่แบ่งส่วนเกินจะรวมตัวกันอีกครั้งหลังจากปฏิบัติการเพิ่มเติมเช่นการโน้มน้าวใจ

ตอนนี้คำถามคือวิธีการแปลงการแสดงรูปภาพตามตารางเป็นการแสดงกราฟิกนี้และเรียนรู้พารามิเตอร์ของการแสดงกราฟิกและคำตอบคือหน่วยการบิดกราฟ (GCU)

หน่วยกราฟ Convolution (GCU)

เช่นเดียวกับการบิดที่ทำงานบนโครงสร้างคล้ายกริด GCU ทำงานบนโครงสร้างคล้ายกราฟ GCU มี 3 ขั้นตอนหลักๆ

  1. การฉายภาพกราฟ:ในขั้นตอนนี้ การแสดงภาพที่มีลักษณะคล้ายเส้นตารางจะถูกแปลงเป็นการแสดงภาพกราฟิก กราฟถูกกำหนดพารามิเตอร์โดยพารามิเตอร์ต่อไปนี้:
  • V: จำนวนจุดยอดในกราฟซึ่งแสดงถึงจำนวนพื้นที่ที่จะแบ่งภาพ
  • W: แสดงเวกเตอร์ซึ่งเป็นตัวแทนของภูมิภาค รูปร่างคือ (d, V) โดยที่ d คือมิติของเวกเตอร์คุณลักษณะ
  • ความแปรปรวน: คือความแปรปรวนในแต่ละมิติของพิกเซลทั้งหมดที่กำหนดให้กับจุดยอดใดจุดหนึ่ง รูปร่างคือ (d, V) โดยที่ d คือมิติของเวกเตอร์คุณลักษณะ

Vเป็นค่าคงที่ และ W และ ความแปรปรวน ได้รับการเรียนรู้ระหว่างการฝึก สมมติว่ามีแผนผังคุณลักษณะ 2 มิติของรูปภาพที่มีความสูง H และความกว้าง W และแต่ละองค์ประกอบมีขนาด d ความน่าจะเป็นของเวกเตอร์คุณลักษณะแต่ละตัวที่เป็นของจุดยอดแต่ละจุดจะถูกคำนวณ ซึ่งส่งผลให้เกิดเมทริกซ์ความน่าจะเป็น Q สมการด้านล่างใช้ในการคำนวณความน่าจะเป็น:

โดยที่ xᵢⱼ เป็นเวกเตอร์คุณลักษณะของแถว iᵗʰ และคอลัมน์ jᵗʰ ของแผนผังคุณลักษณะ 2-D wₖ คือคุณลักษณะที่แสดงถึงขอบเขต kᵗʰ (จุดยอด) และ σₖ คือความแปรปรวนตามทุกมิติของจุดสุดยอด k ขณะนี้ การเข้ารหัสคุณลักษณะของจุดยอดทั้งหมดคำนวณโดยการใช้ค่าเฉลี่ยถ่วงน้ำหนักของส่วนที่เหลือ มากกว่าคือส่วนที่เหลือน้อยกว่าคือการมีส่วนร่วมในการคำนวณคุณลักษณะที่เข้ารหัส มีการใช้สมการที่ระบุด้านล่าง:

โดยที่ zₖ เป็นคุณลักษณะที่เข้ารหัส เมทริกซ์คำคุณศัพท์คำนวณโดย ZᵀZ ซึ่งให้ความคล้ายคลึงโคไซน์ระหว่างจุดยอดที่ต่างกัน มีการคำนวณทั้งหมด 3 รายการในขั้นตอนนี้

  • เมทริกซ์ความน่าจะเป็น Q, รูปร่าง ( HW, d)
  • คุณลักษณะที่เข้ารหัส Z รูปร่าง (d, V)
  • Adjacency matrix A, รูปร่าง ( V, V)- การแสดงความคล้ายคลึงกันระหว่างบริเวณต่างๆ ดังนั้นจึงจับการขึ้นต่อกันในระยะยาวในภาพ

2.การบิดกราฟ:ขั้นตอนนี้คล้ายคลึงกับขั้นตอนการบิดไปข้างหน้า กล่าวคือ การบิดเสร็จสิ้นบนกราฟที่สร้างขึ้น ใช้สมการที่ให้ไว้ด้านล่าง:

โดยที่ W g คือเมทริกซ์น้ำหนักของรูปร่าง (d, dₒᵤₜ) ดังที่คุณเห็นว่ามีเมทริกซ์ Adjacency หรือ A ในสมการ การขึ้นต่อกันระยะยาวจะถูกพิจารณาเมื่อคำนวณคุณลักษณะที่เข้ารหัสใหม่ ดังนั้นคุณสมบัติที่เข้ารหัสใหม่จึงขึ้นอยู่กับภูมิภาคทั้งหมด (A) และคุณสมบัติที่เข้ารหัสในปัจจุบัน (Z) หากต้องการอ่านเกี่ยวกับการบิดของกราฟ โปรดดูที่ "บทความ" และ "สิ่งนี้" บทความเหล่านี้มีการให้ข้อมูลที่เข้าใจง่ายและเพียงพอ

3.การฉายกราฟใหม่:สุดท้าย กราฟจะถูกแปลงกลับไปเป็นโครงสร้างคล้ายตารางเพื่อให้เห็นภาพหรือดำเนินการเพิ่มเติม สมการได้รับด้านล่าง

สถาปัตยกรรมและการนำไปใช้

สถาปัตยกรรมที่ใช้คือ ResNet 50/101 ที่ได้รับการฝึกไว้ล่วงหน้า การขยายจะถูกเพิ่มไปยังสองชั้นสุดท้าย ดังนั้นเอาต์พุตจะถูกลดขนาดลงเป็น 8 ตามด้วย GCU ในการใช้งานดั้งเดิม เอาต์พุตของ GCU 4 ตัวจะถูกต่อเข้ากับเอาต์พุตของ ResNet ดังแสดงในแผนภาพด้านล่าง

d คือ 1,024 และ dₒᵤₜ คือ 256 ในกรณีนี้ ความลึกของเอาต์พุตหลังจากต่อเข้าด้วยกันจะเป็น 1,024 (จาก ResNet50) + 256x4 = 2048 เอาต์พุตที่ต่อกันจะถูกอัปแซมเพิลโดยใช้การประมาณค่าแบบไบลิเนียร์ ถัดไป เลเยอร์การบิดใช้เพื่อกำหนดพิกเซลให้กับคลาสต่างๆ ฟังก์ชันการสูญเสียที่ใช้เพื่อลดข้อผิดพลาดคือฟังก์ชันการสูญเสีย Negative log-likelihood

การใช้งาน Pytorch โดยฉันมีให้ใช้งาน "ที่นี่" ฉันได้ให้รายละเอียดการดำเนินการด้านล่างแล้ว ชุดข้อมูลที่ใช้คือ ADE20K

  • มีการใช้ ResNet50 แบบขยาย ฝึกล่วงหน้ากับ ADE20K ซึ่งมีให้ใช้งาน ที่นี่ ความลึกของเอาต์พุตของ ResNet50 คือ 2048
  • GCU เป็นไปตาม ResNet50 ในบทความนี้ มีการรวมหน่วย GCU 4 หน่วยเข้าด้วยกัน แต่ฉันใช้ GCU เพียง 1 หน่วยที่มีจุดยอด 16 จุดเนื่องจากพลังการประมวลผลที่จำกัด ฉันได้เขียนโค้ดทั่วไปเพื่อให้คุณสามารถแก้ไขโค้ดสำหรับ 4 GCU ได้อย่างง่ายดาย หากต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน GCU โปรดดูที่ "โพสต์" ถัดไปของฉัน
  • d คือ 2048 และ dₒᵤₜ คือ 256 ในกรณีนี้ ความลึกของเอาต์พุตหลังจากต่อเข้าด้วยกันจะเป็น 2048( จาก ResNet50) + 256= 2304
  • ตามด้วยการดำเนินการอัปแซมปลิงแบบไบลิเนียร์ จากนั้นจึงใช้เลเยอร์การบิด 1 ชั้น
  • รูปภาพจะถูกปรับขนาดเป็นขนาด 512×512 ก่อนส่งเข้าเครือข่าย
  • เนื่องจากการคำนวณมีจำกัด ฉันจึงใช้ขนาดแบทช์ที่ 1 และฝึกฝนมา 120 ยุค โดยแต่ละยุคมีการวนซ้ำ 1,000 ครั้ง
  • SGD ถูกใช้โดยมีโมเมนตัม 0.9 อัตราการเรียนรู้เริ่มต้นด้วย 0.01 และจะลดลงเมื่อการฝึกอบรมดำเนินไป
  • ปัจจุบันรุ่นนี้ใช้ GPU 2 ตัว GPU หนึ่งตัวมีไว้สำหรับ ResNet และอีกตัวหนึ่งมีไว้สำหรับการคำนวณอื่นๆ ทั้งหมด เช่น GCU การอัปแซมปลิง และการโนโวลูชัน

แผนภาพการสูญเสียการฝึกแสดงในรูปที่ 3 หลังจากการฝึกด้วยไฮเปอร์พารามิเตอร์ที่กำหนด ความแม่นยำในการฝึกคือประมาณ 78%

โพสต์นี้อิงจาก "บทความ" โดย Yin Li และ Abhinav Gupta

หากมีข้อสงสัยหรือข้อเสนอแนะใดๆ โปรดส่ง Ping มาให้ฉัน😃 และพบกับฉันบน Twitter และ Linkedin ลาก่อน!!