本流程將引導您完成在 Mac mini M2 上設定環境、準備資料、選擇模型並開始訓練一個基本的超解析度模型。
先決條件:
步驟 1:設定 Python 環境與安裝 TensorFlow
安裝 Homebrew (如果尚未安裝):
Homebrew 是 macOS 的套件管理器,可以簡化安裝過程。打開「終端機」應用程式,並執行以下指令:
/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
按照螢幕上的指示完成安裝。
安裝 Python:
建議使用 pyenv 來管理 Python 版本,這樣可以為不同專案設定不同的 Python 環境。
brew install pyenv
pyenv install 3.10.0 # 您可以選擇一個較新的穩定版本,例如 3.10 或 3.11
pyenv global 3.10.0 # 設定全域 Python 版本
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\\n eval "$(pyenv init -)"\\nfi' >> ~/.zshrc # 或 ~/.bash_profile,取決於您的 shell
source ~/.zshrc # 或 source ~/.bash_profile
驗證 Python 版本:
python --version
建立虛擬環境 (推薦):
為您的專案建立一個獨立的虛擬環境,以避免套件衝突。
python -m venv sr_env
source sr_env/bin/activate
當您想離開虛擬環境時,執行 deactivate
。
安裝 TensorFlow for macOS (with Metal support):
Apple 提供了 TensorFlow 的特定版本,可以利用 Metal API 進行 GPU 加速。
pip install tensorflow-macos
pip install tensorflow-metal
驗證安裝及 GPU 是否可用:
import tensorflow as tf
print("TensorFlow version:", tf.__version__)
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
if tf.config.experimental.list_physical_devices('GPU'):
print("TensorFlow is using GPU (Metal)!")
else:
print("TensorFlow is NOT using GPU. Check installation.")
如果看到 "Num GPUs Available: 1" 或類似訊息,且確認 TensorFlow is using GPU (Metal)!,則表示設定成功。
安裝其他必要套件:
pip install numpy matplotlib opencv-python Pillow scikit-image
numpy
: 數值運算。matplotlib
: 用於繪圖和視覺化。opencv-python
(cv2): 用於影像處理。Pillow
(PIL): 影像處理庫。scikit-image
: 影像處理,包含 PSNR/SSIM 等評估指標。步驟 2:選擇或準備資料集
超解析度模型需要成對的低解析度 (LR) 和高解析度 (HR) 影像進行訓練。
使用現有資料集:
DIV2K: 常用於超解析度研究的高品質資料集。 (https://data.vision.ee.ethz.ch/cvl/DIV2K/)
Flickr2K: 包含 2K 張 Flickr 影像。
Set5, Set14, BSD100: 常用於測試和評估。
您可以下載這些資料集,並自行製作 LR 影像 (例如,對 HR 影像進行降採樣)。
自行製作資料集:
範例:使用 OpenCV 製作 LR 影像
import cv2
import os
import glob
def create_lr_images(hr_folder, lr_folder, scale_factor=2):
if not os.path.exists(lr_folder):
os.makedirs(lr_folder)
hr_images = glob.glob(os.path.join(hr_folder, "*.png")) # 假設是 PNG 格式
hr_images.extend(glob.glob(os.path.join(hr_folder, "*.jpg")))
for hr_path in hr_images:
hr_img = cv2.imread(hr_path)
if hr_img is None:
print(f"無法讀取影像: {hr_path}")
continue
hr_height, hr_width = hr_img.shape[:2]
lr_height, lr_width = hr_height // scale_factor, hr_width // scale_factor
# 確保縮小後的尺寸至少為 1x1
if lr_height < 1 or lr_width < 1:
print(f"影像太小無法縮放: {hr_path}")
continue
lr_img = cv2.resize(hr_img, (lr_width, lr_height), interpolation=cv2.INTER_CUBIC)
filename = os.path.basename(hr_path)
lr_save_path = os.path.join(lr_folder, filename)
cv2.imwrite(lr_save_path, lr_img)
print(f"已儲存 LR 影像: {lr_save_path}")
# 使用範例
# create_lr_images("path/to/your/hr_images", "path/to/your/lr_images", scale_factor=2)
步驟 3:選擇超解析度模型架構
對於初學者,可以從一些經典且相對簡單的模型開始: