DEV Community

Patcharapon Praykasin
Patcharapon Praykasin

Posted on • Edited on

การทำ Deblur รูปภาพโดยใช้ Super resolution Model NAFNET

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

ซึ่ง Model NAFNET นั้นทำได้มากกว่า Deblur การทำ Denoise ก็สามารถทำได้ซึ่งวันนี้เราจะมาลองทำ Deblur กันก่อนโดยจะใช้ Google Colab ในการรันโคด

ขั้นตอนที่ 1 Import เข้าไปใน Google Drive

from google.colab import drive
drive.mount('/gdrive')
Enter fullscreen mode Exit fullscreen mode

ซึ่งก่อนที่จะทำขั้นตอนต่อไปเราต้องเช็คให้ดีว่าเรา mount drive แล้วหรือยัง

ในส่วนของภาพนี้จะเห็นได้ว่ายังไม่ได้ทำการ mount drive ดังนั้นเราจึงต้องกดไปที่ icon ตามรูปก่อน

Image description

ซึ่งหลังจากกดหรือ mount drive แล้วจะเป็นตามรูปด้านล่าง

Image description

ขั้นตอนที่ 2 ทำการเข้าไปใน Folder ของเราใน Google Drive

Image description

%cd drive/MyDrive/AIBlog/
Enter fullscreen mode Exit fullscreen mode

ขั้นตอนที่ 3 ทำการ Clone ข้อมูลของ Model NAFNET จาก github

!git clone https://github.com/megvii-research/NAFNet.git
%cd NAFNet/
Enter fullscreen mode Exit fullscreen mode

หลังจากรันโคดแล้วจะขึ้นตามรูปด้านล่าง
Image description
และมี Folder ของ NAFNET เพิ่มขึ้นมาตามนี้

Image description

ขั้นตอนที่ 4 ติดตั้ง libraly ตามที่อยู่ในไฟล์ requirements.txt
ซึ่งในไฟล์ requirements.txt จะประกอบไปด้วย
addict
future
lmdb
numpy
opencv-python
Pillow
pyyaml
requests
scikit-image
scipy
tb-nightly
tqdm
yapf

!pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

หลังจากรันแล้วจะเริ่มติดตั้ง library ตามรูปด้านล่าง

Image description
ขั้นตอนที่ 5 รันไฟล์ python ที่ชื่อ setup.py โดยไม่ใช้ cuda

!python setup.py develop --no_cuda_ext
Enter fullscreen mode Exit fullscreen mode

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

ดังนั้นในส่วนนี้เราจะโหลดข้อมูล Pre-trained Models มาจากเจ้าของ NAFNET ที่เทรนให้แล้วมาก่อนโดยใช้ gdown หรือโหลดจาก Google Drive นั่นเอง

import gdown
gdown.download('https://drive.google.com/uc?id=14D4V4raNYIOhETfcuuLI3bGLB-OYIv6X', "./experiments/pretrained_models/", quiet=False)
Enter fullscreen mode Exit fullscreen mode

หลังจากรันโคดแล้วจะทำการโหลดตามรูปด้านล่าง

Image description
และมี File ชื่อ NAFNet-REDS-width64.pth อยู่ใน Folder NAFNET/experiments/pretrained_models/ ตามรูป

Image description

ขั้นตอนที่ 7 นำรูปที่เราต้องการจะทำ Deblur มาลดเบลอ
โดยรูปที่เราต้องการจะนำมาใส่จะอยู่ใน path ของ input_path
--input_path ./demo/test1.jpg

และรูปที่ลบเบลอแล้วจะมาอยู่ใน path ของ output_path
--output_path ./demo/deblur_test1.png

!python basicsr/demo.py -opt options/test/REDS/NAFNet-width64.yml --input_path ./demo/test1.jpg --output_path ./demo/deblur_test1.png
Enter fullscreen mode Exit fullscreen mode

หลังจากรันแล้วรูปที่ได้จะอยู่ใน Folder demo ตามรูป

Image description

ขั้นตอนที่ 8 แสดงผลลัพธ์ของรูปออกมาเปรียบเทียบกัน

import cv2
import matplotlib.pyplot as plt
blurImg = cv2.imread('./demo/test1.jpg')
deblurImg = cv2.imread('./demo/deblur_test1.png')

blurImg = cv2.cvtColor(blurImg, cv2.COLOR_BGR2RGB)
deblurImg = cv2.cvtColor(deblurImg, cv2.COLOR_BGR2RGB)

plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(blurImg)
plt.title('Blur Image')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(deblurImg)
plt.title('Deblur Image')
plt.axis('off')
Enter fullscreen mode Exit fullscreen mode

ผลลัพธ์ของโคดที่นำรูปมาเปรียบเทียบกัน

Image description

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

Reference
https://github.com/megvii-research/NAFNet

Top comments (0)