Visualizing Kernels and Feature Maps in Deep Learning Model (CNN)

Sopitanon I
6 min readOct 20, 2020

--

Convolution เป็นแนวคิดเพื่อเพิ่มประสิทธิภาพให้แก่ Neural Network Model

CNN (Convolutional Neural Network) เป็นโครงสร้างภายใน Deep Learning Model ที่ใช้แนวคิดของ Convolution ในการทำงานกับข้อมูล 2 มิติ

ซึ่ง CNN ประกอบด้วย Kernel และผลลัพธ์จากทางคณิตศาสตร์ของ Kernel กับ Input Image ที่เรียกว่า Activation Map หรือ Feature Map โดยทั้ง Kernel และ Feature Map นั้นสามารถแสดงผลได้ด้วยภาพ

ในบทความนี้จะเป็นการทำ Create a Model with 2D CNN Layer และวาด Algorithm ของ Model

2D Convolutions Concept

เป็นการนำ Matrix ขนาดเล็กของ Kernel มา Slide ไปบน 2D Input Image (สีฟ้า)โดยขณะที่ทาบ Kernel บน Input Image จะทำการคูณค่าแต่ละ Pixel ของ Input Image กับ Kernel แล้วนำผลลัพธ์ทั้งหมดมาบวกกันเป็น 1 จุด Pixel ของ Feature Map (สีเขียว)

2D Convolutions Concept จะมีการสร้าง Feature Map ขึ้นมาด้วยการนำ Kernel Slide ไปบน Input Image จะใช้ Parameter น้อยกว่า Fully Connected Layer

Padding

เป็นการเสริมกรอบด้วยการเติม 0 (Zero Padding) รอบ ๆ ภาพเดิม เพราะในขณะที่มีการ Slide Kernel จะเห็นได้ว่า Pixel ตรงขอบภาพสีฟ้าจะไม่มีทางอยู่ตรงกลาง Kernel ตอนที่ทาบลงไป เพราะเราไม่สามารถขยาย Kernel ให้เลยออกไปนอกขอบของภาพ จึงทำให้ Feature Map ที่ได้มีขนาดเล็กกว่า Input Image เพื่อจะทำให้ Feature Map มีขนาดเท่ากับ Input Image และ Pixel ที่ขอบภาพอยู่ตรงกลาง Kernel ตอนที่ทาบลงไปจึงต้องมีการทำ Padding

Striding

เป็นกระบวนการในการทำ Convolution โดยการเลื่อนแผ่น Kernel ไปบน Input Image ซึ่งโดย Default ของ Convolution แล้ว Stride จะมีค่าเท่ากับ 1 คือจะมีการเลื่อน Kernel ไปบน Input Image ครั้งละ 1 Pixel การเพิ่มค่า Stride มากขึ้น จะทำให้การเลื่อมกันของ Kernel ตอนที่มีการทาบกับ Input Image และขนาดของ Feature Map ลดลง ถ้ากำหนด Stride เท่ากับ 2 แล้ว Kernel ขนาด 3x3 จะถูก Slide ข้าม Pixel ของ Input Image ขนาด 5x5 ทีละ 2 Pixel ทำให้ได้ Feature Map ขนาด 2x2

Pooling

เป็นวิธีการลดขนาดภาพโดยการทำ Max Pooling หรือ Average Pooling โดย Pooling จะเป็นกระบวนการทำงานภายนอก CNN Layer โดยทำการเลือกตัวแทนของภาพด้วยการหาค่ามากที่สุด หรือค่าเฉลี่ยจาก Pixel ใน Window ตามขนาดที่กำหนด เช่น ขนาด 2x2 ซึ่งจะทำให้มีการลดขนาดของภาพลงได้ครึ่งหนึ่ง

Multi-channel

ใช้จัดการกับ Input Image แบบ 3 Channel เช่นภาพสีในระบบ RGB จะต้องใช้ Kernel จำนวน 3 ตัว ในการ Slide ไปบน Input Image แต่ละ Channel ซึ่งเราเรียก Kernel ทั้ง 3 ตัวว่า Filter (ในที่นี้ 1 Filter ประกอบด้วย 3 Kernel)

Feature Map แต่ละ Version ขนาด 3x3 ที่เกิดจากการ Slide Kernel ไปบน Input Channel ขนาด 5x5 จะถูกนำมารวมกันเป็น Output Channel 1 Channel เพื่อจะส่งต่อไปยัง Neural Network Layer ถัดไป

Output Channel จะถูกนำมาบวกกับ Bias ในขั้นตอนสุดท้ายของกระบวนการทำ Convolution

การสร้าง Output Channel 1 Channel ตามภาพด้านบน จะต้องใช้ Filter 1 Filter ซึ่งแต่ละ Filter ก็จะประกอบด้วยจำนวน Kernel 3 Kernel ดังนั้นถ้าต้องการสร้าง Output Channel หลาย Channel เราจะต้องมีจำนวน Filter หลาย Filter

เริ่มกันเลยครับ !!!

Visualizing CNN

  • import Tensorflow พร้อมกับ Config GPU และ import library
  • เรียนกไฟล์ cat.jpg

Create a Model with 2D CNN Layer

  • ทดลองขยายมิติของภาพจาก 3 มิติเป็น 4 มิติ เพื่อเตรียมนำเข้า Predict Function
  • ทดลอง predict Model โดยใช้ค่า Weight และ Bias แบบสุ่มในตอนเริ่มต้น โดยยังไม่มีการ Train Model ครับ
  • นิยาม visualize_cat Function ที่รับภาพเป็น Matrix โดยขยายภาพเป็น 4 มิติ แล้ว Predict ภาพ ก่อนจะหดให้เหลือ 3 มิติเท่าเดิมเพื่อที่จะนำไป Plot ภาพครับ
  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (3 x 3 x 3 x 3) + 3 = 84 Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,438x1,078 ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 10x10 จำนวน 3 Filter เพื่อนำไป Slide บน Input Image แต่ละ Channel

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (10 x 10 x 3 x 3) + 3 = 903 Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,431x1,071ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 3x3 จำนวน 1 Filter

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (3 x 3 x 3 x 1) + 3 = 28 Parameter

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 20x20 จำนวน 1Filter เพื่อนำไป Slide บน Input Image แต่ละ Channel

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (20 x 20x 3 x 1) + 1= 1201 Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,421x1,061 ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 20x20 จำนวน 1 Filter และเพิ่ม ReLu Activation Function

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (20 x 20x 3 x 1) + 1= 1201 Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,421x1,061 ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 3x3 จำนวน 1 Filter และเพิ่ม Max Pooling ขนาด 5x5

เมื่อเพิ่ม Max Pooling ความละเอียดของภาพต่ำลง เนื่องจากทำการยุบรวมจาก 5x5 ให้เหลือแค่ 1 pixel

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (3 x 3 x 3 x 1) + 1= 28Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,434x1,078 ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution โดยรับ Input Image ขนาด 1440x1080 Pixel แบบ 3 Channel โดยมี Filter ขนาด 3x3 จำนวน 1 Filter เพิ่ม Relu Activation Function และ Max Pooling ขนาด 5x5

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = (3 x 3 x 3 x 1) + 1= 28Parameter
  • ซึ่งจากการนิยาม Model โดยกำหนดจำนวน Filter ไว้ที่ 3 Filter ทำให้ได้ Output Channel ขนาด 1,438x1,078 ทั้งหมด 3 Channel ซึ่งขนาดของ Output Channel จะลดลงจากเดิม 1,440x1,080 Pixel เนื่องมาจากมีการ Slide Kernel ขนาด 3x3 ไปบน Input Image โดยไม่มีการทำ Padding

นิยาม Model แบบ 2D Convolution, ReLu Activation Function และ Max Pooling อย่างละ 2 Layer

  • จากภาพด้านบน Model จะมีจำนวน Parameter = Filter + Bias
    Parameter = [(3 x 3 x 3 x 1) + 1] + [(3 x 3) + 1] = 38 Parameter

ขอบคุณมากๆครับ /\

--

--

Sopitanon I
Sopitanon I

No responses yet