為訓練預處理影像與音訊

使用 PyTorch 高效訓練 AI 模型

Dennis Lee

Data Engineer, Amazon

準備影像與音訊

影像應用

  • 影像分類辨識物體
  • 資料分片

 

物件偵測應用的畫面,顯示街道上的車輛。此應用在一支拿在街景前的手機上執行。

音訊應用

  • 提供語音指令
  • 範例:「Turn down the volume」

 

視障者可用語音指令操作手機的語音輔助科技圖片。

使用 PyTorch 高效訓練 AI 模型

操作範例影像資料集

print(dataset)
Dataset({
    features: ['img', 'label'],
    num_rows: 1000
})
print(dataset[0]["img"])
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=720x480>
使用 PyTorch 高效訓練 AI 模型

標準化影像格式

  • 統一影像格式:寬、高
  • 標準化像素值:平均值、標準差
  • AutoImageProcessor 載入所有前處理步驟
from transformers import AutoImageProcessor
model = "microsoft/swin-tiny-patch4-window7-224"

image_processor = AutoImageProcessor.from_pretrained(model)
使用 PyTorch 高效訓練 AI 模型

標準化影像格式

dataset = dataset.map(
    lambda examples: {

"pixel_values": [
image_processor(image, return_tensors="pt").pixel_values for image in examples["img"] ]}, batched=True)
print(dataset)
Dataset({
    features: ['img', 'label', 'pixel_values'],
    num_rows: 1000
})
使用 PyTorch 高效訓練 AI 模型

操作範例音訊資料集

print(dataset)
DatasetDict({
    train: Dataset({

features: ['file', 'audio',
'label'], num_rows: 1000 }), ... })
使用 PyTorch 高效訓練 AI 模型

標準化音訊格式

  • 統一樣本數
  • 取樣率:每秒的樣本數
  • 最長時長:音訊秒數上限
sampling_rate = 16000  # 16 kHz

max_duration = 1 # 1 second
max_length = sampling_rate * max_duration
print(f"max_length = {max_length:,} samples")
max_length = 16,000 samples
使用 PyTorch 高效訓練 AI 模型

標準化音訊格式

from transformers import AutoFeatureExtractor

model = "facebook/wav2vec2-base"
feature_extractor = AutoFeatureExtractor.from_pretrained(model)


def preprocess_function(split_data):
audio_arrays = [x["array"] for x in split_data["audio"]]
inputs = feature_extractor(audio_arrays,
sampling_rate=feature_extractor.sampling_rate, max_length=int(feature_extractor.sampling_rate * max_duration),
truncation=True) return inputs
使用 PyTorch 高效訓練 AI 模型

套用前處理函式

  • preprocess_function 套用到 dataset
  • remove_columns:移除 audiofile 欄位
  • batched:以批次處理 dataset 範例
dataset = dataset["train"].map(preprocess_function,

remove_columns=["audio", "file"],
batched=True)
使用 PyTorch 高效訓練 AI 模型

套用前處理函式

print(dataset)
DatasetDict({
    train: Dataset({
        features: ['label', 'input_values'],
        num_rows: 1000
    })
使用 PyTorch 高效訓練 AI 模型

為分散式訓練準備資料

  • DataLoader:在訓練時準備資料以載入與迭代
  • accelerator.prepare():依可用資源放到 CPU 或 GPU
  • 資料分片:每張 GPU 分工處理部分訓練資料,如同分食披薩
  • accelerator.prepare() 可搭配 PyTorch 的 DataLoader(torch.utils.data.DataLoader
from accelerate import Accelerator
from torch.utils.data import DataLoader

dataloader = DataLoader(dataset, batch_size=32, shuffle=True)


accelerator = Accelerator() dataloader = accelerator.prepare(dataloader)
使用 PyTorch 高效訓練 AI 模型

一起來練習吧!

使用 PyTorch 高效訓練 AI 模型

Preparing Video For Download...