Upscale Images using Super- Resolution Convolutional Neural Network (SRCNN)
Vũ Uy - Bùi Huy Giáp
Table of contents:
Dự án sử dụng CNN - Convolutional Neural Network để tạo AI Upscale và nâng cao chất lượng hình ảnh
Mục tiêu: Cải thiện chất lượng hình ảnh (Upscaling)
Ứng dụng:Tạo ảnh nền (wallpaper) chất lượng cao, phục hồi ảnh sau khi bị nén.
Giới thiệu
Convolutional neural networks là thuật toán thường được sử dụng trong nhận dạng hình ảnh hoặc xử lí ngôn ngữ. Cấu trúc của nó được dựa trên hệ thống nơ ron thần kinh trong não người, vì thế chúng rất hữu ích khi dụng trong việc nhận biết những đặc điểm trong xử lí ảnh
Tại sao lại là CNN?
Phương pháp dùng CNN khi xử lí hình ảnh bởi tính gọn nhẹ của nó. Lấy ví dụ một tấm ảnh với resolution 1920x1080 ta sẽ có đến hơn 2 triệu pixel và 3 color channel (RGB), điều này dẫn tới lượng data cần xử lí sẽ vô cùng lớn bởi data sẽ đc flatten về một mảng 1 chiều, từ đó có thể gây ra mất mát một số đặc trưng của hình ảnh gốc/đầu vào.
Về SRCNN (Super Resolution)
Super-Resolution Convolutional Neural Network (SRCNN) dù là kĩ thuật sử dụng trong deep learning nhưng nó khá cổ điển và không hề "deep" như ta nghĩ. Với 3 phần đơn giản, patch extraction and representation, non-linear mapping, and reconstruction
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Thực hiện:
1. Get image from the Internet
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Download images to make dataset
Script dùng để download và lưu trữ raw images
Lúc này mỗi bức ảnh sẽ có độ phân giải khoảng 4k
Disclaimer: Hình ảnh được lấy từ unsplash là nguồn ảnh chất lượng cao thường dùng làm wallpaper và có [giấy phép tự do]''(https://unsplash.com/license) sử dụng
2.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Preprocess Images
Sau khi chạy đoạn code trên, 2000 ảnh 4k download về (Rawdata) sẽ được resize xuống còn 720p (1280 x 720). Những tấm ảnh này sẽ được chia làm 2 tệp train và test.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Ở Project này, chúng ta sẽ chia rawdata thành 2 phần
- 1500 train_images
- 500 test images
3. Create Patches (Dataset)
-
Với 1500 train images ta sẽ cắt nhỏ mỗi image thành nhiều mảng(patches) khác nhau. Resize những mảng này để tạo input cho model.
-
Chuyển đổi rawdata là các ảnh độ phân giải gốc từ định dạng RGB sang YCbCr
-
Lợi ích
- Mắt người nhạy cảm với độ sáng (channel Y) hơn màu
- Giảm channel xuống(3 1), giúp quá trình tạo dataset dễ dàng hơn.
- Thời gian train sau này cũng được giảm bớt do độ lớn training data được giảm.
- Mô hình chính xác hơn do phải xử lí ít chiều data hơn
-
Hạn chế:
- Định dạng nén ảnh jpeg được sử dụng trong dataset đã downsample channel Cr và Cb nên chất lượng màu của hình ảnh sẽ luôn thấp
- Model không thể xử lý tình trạng nhiễu màu của hình ảnh
Trong đó:
- INPUT_SIZE : Độ lớn patch đầu vào(input) 33x33
- PADDING: Là phần viền ngoài của input.
- OUTPUT_SIZE: Độ lớn patch đầu ra 21x21
- STRIDE: Khoảng cách giữa những input lấy vào để tạo ra ouput. 14
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
4. Build SRCNN Model
Required Pakages
Train the model
Optimizer: Adam [3]
Loss Function: MSE [4] (Mean Squared Error)
Evaluation
Load trực tiếp các hình ảnh trong dataset test vào model tạo các hình ảnh prediction.
Sử dụng các metric: PSNR và SSIM so với ảnh gốc và ảnh low-resolution để xác định độ hiệu quả của model.
5. Kết quả
PSNR:
- Low-res: 31.84
- Prediction: 32.6
SSIM:
- Low-res: 0.86
- Prediction: 0.88
Điều học được
- Biết tạo evironment cho python dependencies
- Hiểu rõ hơn về cách CNN hoạt động cũng như cách áp dụng vào các bài toán thị giác máy tính thực tế
- Biết tạo script download và preprocess dataset
- Hiểu được hạn chế của mô hình SRCNN và cách để cải tiến
- Biết cách tận dụng tài nguyên máy (multi-thread, GPU computing)
- Biết cách port mô hình keras qua Tensorflow.js, tạo web app bằng Vite và WASM backend cũng như hiểu rõ được hạn chế của model web frontend
- Phải biết kiểm soát rủi ro
Hướng cải tiến
- Sử dụng dataset bitmap hoặc png thay vì jpeg
- Tạo patches kích thước lớn hơn
- Sử dụng model CNN sâu hơn, lớn hơn, có các layer Residual
- Sử dụng GAN để tăng độ thực tế của output
- Kết hợp nhiều model khác nhau như model giảm nhiễu hình ảnh, model bỏ jpeg artifact,…
References
[1] Giới thiệu- Upscale ảnh với một mạng CNN đơn giản
[2] Image Super-Resolution Using Deep Convolutional Networks
[3] Adam
[4] MSE