Chuyển đến nội dung chính

Hướng dẫn Toàn diện về Data Augmentation

Tìm hiểu các kỹ thuật, ứng dụng và công cụ data augmentation cùng hướng dẫn thực hành với TensorFlow và Keras.
Đã cập nhật 5 thg 6, 2026  · 15 phút đọc

Mô hình chỉ tốt khi dữ liệu huấn luyện tốt, nhưng việc thu thập những bộ dữ liệu lớn và đa dạng đòi hỏi nhiều công sức.

Data augmentation mang đến một giải pháp: bằng cách tạo ra các phiên bản đã chỉnh sửa từ dữ liệu hiện có, bạn có thể mở rộng tập huấn luyện một cách nhân tạo, giảm overfitting và xây dựng các mô hình có khả năng khái quát tốt hơn.

Hướng dẫn này trình bày các kỹ thuật data augmentation cốt lõi cho ảnh, văn bản và âm thanh. Bạn cũng sẽ tìm thấy cái nhìn tổng quan về các công cụ độc lập phổ biến để bổ sung vào quy trình làm việc.

Data Augmentation là gì?

Data augmentation là kỹ thuật tăng kích thước tập huấn luyện một cách nhân tạo bằng cách tạo các bản sao đã được chỉnh sửa của một tập dữ liệu dựa trên dữ liệu hiện có. Kỹ thuật này bao gồm việc thực hiện những thay đổi nhỏ với tập dữ liệu hoặc dùng học sâu để tạo các điểm dữ liệu mới.

Dữ liệu tăng cường so với dữ liệu tổng hợp

Data augmentation và tạo dữ liệu tổng hợp là các kỹ thuật khác nhau nhưng bổ trợ trong máy học:

  • Dữ liệu tăng cường: Tạo các phiên bản đã chỉnh sửa của dữ liệu hiện có để tăng tính đa dạng của tập dữ liệu. Ví dụ, trong xử lý ảnh, áp dụng các phép biến đổi như xoay, lật, hoặc điều chỉnh màu sắc lên ảnh hiện có có thể giúp mô hình khái quát tốt hơn.
  • Dữ liệu tổng hợp: đề cập đến dữ liệu được tạo ra một cách nhân tạo, cho phép các nhà nghiên cứu và nhà phát triển kiểm thử và cải thiện thuật toán mà không làm lộ rủi ro về quyền riêng tư hay bảo mật của dữ liệu thực tế.

Lưu ý: kỹ thuật augmentation không chỉ giới hạn ở ảnh. Bạn cũng có thể tăng cường cho âm thanh, video, văn bản và các loại dữ liệu khác.

Vì sao data augmentation quan trọng?

Data augmentation giúp mô hình máy học hoạt động tốt hơn bằng cách tận dụng tối đa dữ liệu hiện có. Nó ngăn overfitting, cải thiện độ chính xác và tạo tính đa dạng trong dữ liệu huấn luyện, điều đặc biệt quan trọng khi tập dữ liệu nhỏ hoặc mất cân bằng. Bằng cách mô phỏng các biến thiên trong thế giới thực, nó làm cho mô hình vững vàng và tin cậy hơn—mà không cần thu thập dữ liệu tốn kém. Tóm lại, đây là một cách đơn giản nhưng mạnh mẽ để giúp mô hình học và khái quát hiệu quả.

Khi nào bạn nên dùng data augmentation?

  1. Để ngăn mô hình bị overfitting.
  2. Tập huấn luyện ban đầu quá nhỏ.
  3. Để cải thiện độ chính xác của mô hình.
  4. Để giảm chi phí vận hành cho việc gán nhãn và làm sạch dữ liệu thô.

Hạn chế của data augmentation

  • Thiên lệch trong tập dữ liệu gốc sẽ tiếp tục tồn tại trong dữ liệu đã tăng cường.
  • Đảm bảo chất lượng cho data augmentation tốn kém.
  • Cần nghiên cứu và phát triển để xây dựng hệ thống cho các ứng dụng nâng cao. Ví dụ, tạo ảnh độ phân giải cao bằng GAN có thể gặp nhiều thách thức.
  • Việc tìm ra cách tiếp cận data augmentation hiệu quả có thể khó khăn.

Các kỹ thuật Data Augmentation

Trong phần này, chúng ta sẽ tìm hiểu về các kỹ thuật data augmentation cho âm thanh, văn bản, hình ảnh và các phương pháp nâng cao. 

Tăng cường dữ liệu âm thanh

  1. Chèn nhiễu: thêm nhiễu Gaussian hoặc nhiễu ngẫu nhiên vào tập dữ liệu âm thanh để cải thiện hiệu năng mô hình. 
  2. Dịch chuyển: dịch âm thanh sang trái (tua nhanh) hoặc sang phải trong một khoảng giây ngẫu nhiên.
  3. Thay đổi tốc độ: kéo giãn chuỗi thời gian theo một tỷ lệ cố định.
  4. Thay đổi cao độ: thay đổi ngẫu nhiên cao độ của âm thanh. 

Tăng cường dữ liệu văn bản

  1. Trộn vị trí từ hoặc câu: thay đổi ngẫu nhiên vị trí của từ hoặc câu. 
  2. Thay thế từ: thay thế từ bằng từ đồng nghĩa.
  3. Thao tác theo cây cú pháp: diễn đạt lại câu bằng cùng các từ.
  4. Chèn từ ngẫu nhiên: chèn thêm từ một cách ngẫu nhiên. 
  5. Xóa từ ngẫu nhiên: xóa từ một cách ngẫu nhiên. 

Tăng cường ảnh

Tìm hiểu thêm về biến đổi và thao tác ảnh với các bài tập thực hành trong lộ trình kỹ năng Image Processing with Python.

  1. Biến đổi hình học: lật, cắt, xoay, kéo giãn và thu phóng ảnh một cách ngẫu nhiên. Cần cẩn trọng khi áp dụng nhiều biến đổi lên cùng một ảnh vì có thể làm giảm hiệu năng mô hình. 
  2. Biến đổi không gian màu: thay đổi ngẫu nhiên các kênh màu RGB, độ tương phản và độ sáng.
  3. Bộ lọc kernel: thay đổi ngẫu nhiên độ nét hoặc làm mờ ảnh. 
  4. Xóa ngẫu nhiên: xóa một phần của ảnh gốc.
  5. Pha trộn ảnh: hòa trộn và kết hợp nhiều ảnh. 

Các kỹ thuật nâng cao

  1. Generative adversarial networks (GAN): dùng để tạo dữ liệu điểm mới hoặc ảnh mới. Không cần dữ liệu hiện có để tạo dữ liệu tổng hợp. 
  2. Neural Style Transfer: chuỗi các lớp tích chập được huấn luyện để phân tách nội dung và phong cách của ảnh.

Ứng dụng của Data Augmentation

Data augmentation có thể áp dụng cho mọi ứng dụng máy học nơi việc thu thập dữ liệu chất lượng gặp khó khăn. Hơn nữa, nó có thể giúp cải thiện độ vững và hiệu năng mô hình trên mọi lĩnh vực nghiên cứu. 

Y tế

Việc thu thập và gán nhãn các bộ dữ liệu ảnh y khoa tốn thời gian và chi phí. Bạn cũng cần chuyên gia lĩnh vực để thẩm định dữ liệu trước khi phân tích. Sử dụng các biến đổi hình học và các phép biến đổi khác có thể giúp bạn huấn luyện các mô hình máy học vững vàng và chính xác. 

Ví dụ, trong bài toán Phân loại Viêm phổi, bạn có thể dùng cắt, thu phóng, kéo giãn ngẫu nhiên và biến đổi không gian màu để cải thiện hiệu năng mô hình. Tuy nhiên, cần cẩn trọng với một số phép tăng cường vì có thể cho kết quả ngược. Chẳng hạn, xoay ngẫu nhiên và phản chiếu theo trục x không được khuyến nghị với dữ liệu ảnh X-quang. 

kaggle-COVID19-Classification.png

Hình ảnh từ ibrahimsobh.github.io | kaggle-COVID19-Classification

Xe tự hành

Dữ liệu cho xe tự hành còn hạn chế, và các công ty đang dùng môi trường mô phỏng để tạo dữ liệu tổng hợp bằng học tăng cường. Cách này giúp bạn huấn luyện và kiểm thử các ứng dụng máy học trong bối cảnh dữ liệu nhạy cảm về bảo mật. 

Autonomous Visualization System from Uber ATG.png

Hình ảnh bởi David Silver | Autonomous Visualization System from Uber ATG

Khả năng dùng dữ liệu tăng cường để mô phỏng là vô tận, vì có thể tạo ra các kịch bản gần với thế giới thực. 

Xử lý ngôn ngữ tự nhiên

Tăng cường dữ liệu văn bản thường được dùng khi dữ liệu chất lượng hạn chế, và ưu tiên là cải thiện chỉ số hiệu năng. Bạn có thể áp dụng mở rộng bằng từ đồng nghĩa, nhúng từ, hoán chuyển ký tự, và chèn/xóa ngẫu nhiên. Những kỹ thuật này cũng hữu ích cho các ngôn ngữ ít tài nguyên. 

Selective Text Augmentation with Word Roles for Low-Resource Text Classification.png

Hình ảnh từ Papers With Code | Selective Text Augmentation with Word Roles for Low-Resource Text Classification.

Các nhà nghiên cứu sử dụng tăng cường văn bản cho mô hình ngôn ngữ trong bối cảnh nhận dạng có lỗi cao, sinh dữ liệu chuỗi-đến-chuỗi và phân loại văn bản. 

Nhận dạng giọng nói tự động

Trong phân loại âm thanh và nhận dạng giọng nói, data augmentation đem lại hiệu quả rõ rệt. Nó cải thiện hiệu năng mô hình ngay cả với các ngôn ngữ ít tài nguyên. 

Noise Injection.png

Hình ảnh bởi Edward Ma | Noise Injection

Chèn nhiễu ngẫu nhiên, dịch chuyển và thay đổi cao độ có thể giúp bạn tạo ra các mô hình chuyển giọng nói thành văn bản hiện đại. Bạn cũng có thể dùng GAN để tạo ra âm thanh chân thực cho các ứng dụng cụ thể.

Hệ quả đạo đức của Data Augmentation

Mặc dù data augmentation là công cụ mạnh mẽ để nâng cao mô hình máy học, nó đặt ra một số vấn đề đạo đức cần cân nhắc kỹ lưỡng:

  1. Khuếch đại thiên lệch: Tăng cường các tập dữ liệu thiên lệch có thể lặp lại và làm trầm trọng thêm bất bình đẳng hiện có, dẫn đến mô hình hoạt động kém với các nhóm ít được đại diện.
  2. Rủi ro về quyền riêng tư: Tạo dữ liệu tổng hợp có thể vô tình giữ lại chi tiết nhạy cảm từ tập dữ liệu gốc, có nguy cơ vi phạm quy định bảo mật.
  3. Tính xác thực dữ liệu: Áp dụng augmentation không phù hợp có thể tạo ra các điểm dữ liệu phi thực tế hoặc gây hiểu nhầm, làm suy giảm hiệu năng và độ tin cậy của mô hình.
  4. Minh bạch: Cần tài liệu hóa rõ ràng các kỹ thuật augmentation và đảm bảo các bên liên quan hiểu dữ liệu được biến đổi hoặc tạo ra như thế nào.
  5. Công bằng và bình đẳng: Đảm bảo dữ liệu tăng cường phản ánh đa dạng quần thể và kịch bản là điều thiết yếu để tránh thiên lệch ngoài ý muốn và đảm bảo mô hình vững vàng.
  6. Tuân thủ quy định: Các tập dữ liệu đã tăng cường phải tuân thủ luật bảo vệ dữ liệu và hướng dẫn đạo đức để tránh rủi ro pháp lý và uy tín.

Để khai thác data augmentation một cách có trách nhiệm, người thực hành nên thẩm định dữ liệu đã tăng cường, xử lý thiên lệch và đảm bảo tuân thủ các tiêu chuẩn đạo đức và pháp lý liên quan.

Data Augmentation với Keras và TensorFlow

Trong hướng dẫn này, chúng ta sẽ học cách tăng cường dữ liệu ảnh bằng Keras và TensorFlow. Ngoài ra, bạn sẽ học cách dùng dữ liệu đã tăng cường để huấn luyện một bộ phân loại nhị phân đơn giản. Mã nguồn dưới đây là phiên bản đã chỉnh sửa của ví dụ chính thức của TensorFlow

Chúng tôi khuyến nghị bạn thực hành theo hướng dẫn mã. Mã nguồn kèm kết quả có trong sổ tay DataLab này

Bắt đầu 

Chúng ta sẽ dùng TensorFlow và Keras cho data augmentation và matplotlib để hiển thị ảnh.  

%%capture
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential

Nạp dữ liệu

Bộ sưu tập TensorFlow Dataset rất phong phú. Bạn có thể tìm thấy các tập dữ liệu văn bản, âm thanh, video, đồ thị, chuỗi thời gian và hình ảnh. Trong hướng dẫn này, chúng ta sẽ dùng tập cats_vs_dogs. Kích thước tập dữ liệu là 786,68 MiB, và chúng ta sẽ áp dụng nhiều phép tăng cường ảnh rồi huấn luyện bộ phân loại nhị phân.

Trong đoạn mã dưới đây, chúng ta đã tải 80% dữ liệu cho huấn luyện, 10% cho validation và 10% cho kiểm thử, kèm nhãn và siêu dữ liệu.

%%capture
(train_ds, val_ds, test_ds), metadata = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
    with_info=True,
    as_supervised=True,
)

Phân tích dữ liệu

Có hai lớp trong tập dữ liệu: ‘cat’ và ‘dog’.

num_classes = metadata.features['label'].num_classes
print(num_classes)
2

Chúng ta sẽ dùng iterator để trích xuất bốn ảnh ngẫu nhiên kèm nhãn từ tập huấn luyện và hiển thị bằng hàm `.imshow()` của matplotlib. 

try:
    get_label_name = metadata.features['label'].int2str
    train_iter = iter(train_ds)
    fig = plt.figure(figsize=(7, 8))
    for x in range(4):
        image, label = next(train_iter)
        fig.add_subplot(1, 4, x + 1)
        plt.imshow(image)
        plt.axis('off')
        plt.title(get_label_name(label))
except StopIteration:
    print("Dataset iterator is empty!")

Như bạn thấy, chúng ta nhận được nhiều ảnh chó và một ảnh mèo. 

dogsandcats.png

Data augmentation với keras.Sequential()

Thông thường chúng ta dùng keras.Sequential() để xây dựng mô hình, nhưng cũng có thể dùng nó để thêm các lớp augmentation.  

Thay đổi kích thước và tỉ lệ 

Trong ví dụ này, chúng ta thay đổi kích thước và tỉ lệ ảnh bằng Keras Sequential và các lớp augmentation. Trước tiên, chúng ta đổi kích thước ảnh về 180x180 rồi chuẩn hóa về 1/255. Kích thước ảnh nhỏ sẽ giúp tiết kiệm thời gian, bộ nhớ và tính toán. 

Như bạn thấy, chúng ta đã truyền ảnh qua lớp augmentation thành công, và đầu ra cuối cùng đã được đổi kích thước và chuẩn hóa. 

IMG_SIZE = 180

resize_and_rescale = keras.Sequential([
  layers.Resizing(IMG_SIZE, IMG_SIZE),
  layers.Rescaling(1./255)
])

result = resize_and_rescale(image)
plt.axis('off')
plt.imshow(result);

cat.png

1

Xoay và lật

Hãy áp dụng lật và xoay ngẫu nhiên lên cùng một ảnh. Chúng ta sẽ dùng vòng lặp, subplot và imshow để hiển thị sáu ảnh với biến đổi hình học ngẫu nhiên.

data_augmentation = keras.Sequential([
  layers.RandomFlip("horizontal_and_vertical"),
  layers.RandomRotation(0.4),
])


plt.figure(figsize=(8, 7))
for i in range(6):
  augmented_image = data_augmentation(image)
  ax = plt.subplot(2, 3, i + 1)
  plt.imshow(augmented_image.numpy()/255)
  plt.axis("off")

Lưu ý: nếu bạn gặp cảnh báo “WARNING:matplotlib.image:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).”, hãy thử chuyển ảnh sang numpy và chia cho 255. Cách này sẽ hiển thị kết quả rõ ràng thay vì ảnh bị nhạt màu. 

assortedcats.png

Ngoài các phép tăng cường đơn giản, bạn cũng có thể áp dụng RandomContrast, RandomCrop, CenterCrop và RandomZoom cho ảnh. 

Thêm trực tiếp vào lớp mô hình 

Có hai cách để áp dụng augmentation cho ảnh. Cách thứ nhất là thêm trực tiếp các lớp augmentation vào mô hình.

model = keras.Sequential([
  # Add the preprocessing layers you created earlier.
  resize_and_rescale,
  data_augmentation,
  # Add the model layers
  layers.Conv2D(16, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(64, activation='relu'),
  layers.Dense(1,activation='sigmoid')
])

Lưu ý: data augmentation sẽ không hoạt động trong giai đoạn kiểm thử. Nó chỉ chạy trong Model.fit, không chạy trong Model.evaluate hay Model.predict.

Áp dụng hàm augmentation bằng .map

Cách thứ hai là áp dụng data augmentation cho toàn bộ tập huấn luyện bằng Dataset.map.

aug_ds = train_ds.map(lambda x, y: (data_augmentation(x, training=True), y))

Tiền xử lý dữ liệu 

Chúng ta sẽ tạo một hàm tiền xử lý dữ liệu để xử lý tập train, valid và test. 

Hàm sẽ:

  1. Áp dụng đổi kích thước và chuẩn hóa cho toàn bộ tập dữ liệu.
  2. Nếu shuffle bằng True, sẽ xáo trộn tập dữ liệu.
  3. Chia dữ liệu thành các batch với kích thước 32. 
  4. Nếu augment bằng True, sẽ áp dụng hàm data augmentation cho tất cả các tập. 
  5. Cuối cùng, dùng Dataset.prefetch để chồng chéo việc huấn luyện trên GPU với xử lý dữ liệu.
batch_size = 32
AUTOTUNE = tf.data.AUTOTUNE

def prepare(ds, shuffle=False, augment=False):
  # Resize and rescale all datasets.
  ds = ds.map(lambda x, y: (resize_and_rescale(x), y),
              num_parallel_calls=AUTOTUNE)

  if shuffle:
    ds = ds.shuffle(1000)

  # Batch all datasets.
  ds = ds.batch(batch_size)

  # Use data augmentation only on the training set.
  if augment:
    ds = ds.map(lambda x, y: (data_augmentation(x, training=True), y),
                num_parallel_calls=AUTOTUNE)

  # Use buffered prefetching on all datasets.
  return ds.prefetch(buffer_size=AUTOTUNE)


train_ds = prepare(train_ds, shuffle=True, augment=True)
val_ds = prepare(val_ds)
test_ds = prepare(test_ds)

Xây dựng mô hình

Chúng ta sẽ tạo một mô hình đơn giản với các lớp tích chập và dày đặc. Hãy đảm bảo kích thước đầu vào giống với kích thước ảnh. 

model = keras.Sequential([
    layers.Conv2D(32, (3, 3), input_shape=(180,180,3), padding='same', activation='relu'),
    layers.MaxPooling2D(pool_size=(2, 2)),
    layers.Flatten(),
    layers.Dense(32, activation='relu'),
    layers.Dense(1,activation='softmax')
])

Huấn luyện và đánh giá

Bây giờ chúng ta sẽ biên dịch mô hình và huấn luyện trong một epoch. Bộ tối ưu là Adam, hàm mất mát là Binary Cross Entropy, và chỉ số là accuracy. 

Như có thể thấy, chúng ta đạt 51% độ chính xác trên tập validation trong một lần chạy. Bạn có thể huấn luyện nhiều epoch và tinh chỉnh siêu tham số để có kết quả tốt hơn.

Phần xây dựng và huấn luyện mô hình chỉ nhằm minh họa cách bạn có thể tăng cường ảnh và huấn luyện mô hình.  

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
epochs=1
history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)
582/582 [==============================] - 98s 147ms/step - loss: 0.6993 - accuracy: 0.4961 - val_loss: 0.6934 - val_accuracy: 0.5185
loss, acc = model.evaluate(test_ds)
73/73 [==============================] - 4s 48ms/step - loss: 0.6932 - accuracy: 0.5013

Học cách phân tích ảnh, xây dựng, huấn luyện và đánh giá mạng tích chập bằng cách tham gia khóa Image Processing with Keras

Data augmentation bằng tf.image()

Trong phần này, chúng ta sẽ học cách tăng cường ảnh bằng TensorFlow để kiểm soát chi tiết hơn việc augmentation.

Nạp dữ liệu

Chúng ta sẽ nạp lại tập cats_vs_dogs kèm nhãn và siêu dữ liệu.

%%capture
(train_ds, val_ds, test_ds), metadata = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
    with_info=True,
    as_supervised=True,
)

Thay vì ảnh mèo, lần này chúng ta sẽ dùng ảnh chó và áp dụng các kỹ thuật augmentation khác nhau. 

image, label = next(iter(train_ds))
plt.imshow(image)
plt.title(get_label_name(label));

dog.png

1

Lật trái sang phải

Chúng ta sẽ tạo hàm visualize() để hiển thị sự khác biệt giữa ảnh gốc và ảnh đã tăng cường. 

Hàm này khá đơn giản. Nó nhận ảnh gốc và hàm augmentation làm đầu vào, sau đó hiển thị sự khác biệt bằng matplotlib.

def visualize(original, augmented):
    fig = plt.figure()
    plt.subplot(1,2,1)
    plt.title('Original image')
    plt.imshow(original)
    plt.axis("off")
 
    plt.subplot(1,2,2)
    plt.title('Augmented image')
    plt.imshow(augmented)
    plt.axis("off")

Như bạn thấy, chúng ta đã lật ảnh từ trái sang phải bằng hàm tf.image. Cách này đơn giản hơn keras.Sequential()

flipped = tf.image.flip_left_right(image)
visualize(image, flipped)

dogflipped.png

1

Thang xám

Hãy chuyển ảnh sang thang xám bằng tf.image.rgb_to_grayscale().

grayscaled = tf.image.rgb_to_grayscale(image)
visualize(image,  tf.squeeze(grayscaled))

doggreyscale.png

1

Điều chỉnh độ bão hòa

Bạn cũng có thể điều chỉnh độ bão hòa với hệ số 3. 

saturated = tf.image.adjust_saturation(image, 3)
visualize(image, saturated)

dogsaturation.png

1

Điều chỉnh độ sáng

Điều chỉnh độ sáng bằng cách cung cấp một hệ số độ sáng. 

bright = tf.image.adjust_brightness(image, 0.4)
visualize(image, bright)

dogbrightness.png

1

Cắt giữa ảnh

Cắt ảnh từ trung tâm với tỷ lệ trung tâm là 0,5. 

cropped = tf.image.central_crop(image, central_fraction=0.5)
visualize(image, cropped)

dogzoom.png

1

Xoay 90 độ

Xoay ảnh 90 độ bằng hàm tf.image.rot90().

rotated = tf.image.rot90(image)
visualize(image, rotated)

dogrotate.png

1

Áp dụng độ sáng ngẫu nhiên

Tương tự các lớp Keras, tf.image() cũng có các hàm augmentation ngẫu nhiên. Trong ví dụ dưới đây, chúng ta sẽ áp dụng độ sáng ngẫu nhiên lên ảnh và hiển thị nhiều kết quả. 

Như bạn thấy, ảnh đầu tiên tối hơn, và hai ảnh tiếp theo sáng hơn. 

for i in range(3):
  seed = (i, 0)  # tuple of size (2,)
  stateless_random_brightness = tf.image.stateless_random_brightness(
      image, max_delta=0.95, seed=seed)
  visualize(image, stateless_random_brightness)

dogdark.png

dogbrightness2.png

dogbrightness3.png

Áp dụng hàm augmentation

Tương tự Keras, chúng ta có thể áp dụng hàm data augmentation cho toàn bộ tập dữ liệu bằng Dataset.map()

def augment(image, label):
  image = tf.cast(image, tf.float32)
  image = tf.image.resize(image, [IMG_SIZE, IMG_SIZE])
  image = (image / 255.0)
  image = tf.image.random_crop(image, size=[IMG_SIZE, IMG_SIZE, 3])
  image = tf.image.random_brightness(image, max_delta=0.5)
  return image, label


train_ds = (
    train_ds
    .shuffle(1000)
    .map(augment, num_parallel_calls=AUTOTUNE)
    .batch(batch_size)
    .prefetch(AUTOTUNE)
)

Data Augmentation với ImageDataGenerator

Keras ImageDataGenerator() còn đơn giản hơn. Nó hoạt động tốt nhất khi bạn nạp dữ liệu từ thư mục cục bộ hoặc CSV. 

Trong ví dụ này, chúng ta sẽ tải và nạp một tập CIFAR10 nhỏ từ thư viện tập dữ liệu mặc định của Keras. 

Sau đó, chúng ta sẽ áp dụng augmentation bằng keras.preprocessing.image.ImageDataGenerator(). Hàm này sẽ xoay ngẫu nhiên, thay đổi chiều cao và chiều rộng, và lật ngang ảnh. 

Cuối cùng, chúng ta fit ImageDataGenerator() vào tập huấn luyện và hiển thị sáu ảnh với augmentation ngẫu nhiên. 

Lưu ý: kích thước ảnh là 32x32, nên hiển thị độ phân giải thấp. 

(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()

datagen = keras.preprocessing.image.ImageDataGenerator(rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True,
    validation_split=0.2)

datagen.fit(x_train)

for X_batch, y_batch in datagen.flow(x_train,y_train, batch_size=6):
    for i in range(0, 6):
        plt.subplot(2,3,i+1)
        plt.imshow(X_batch[i]/255)
        plt.axis('off')
    break

lowres.png

Công cụ Data Augmentation

Trong phần này, chúng ta sẽ tìm hiểu các công cụ mã nguồn mở khác mà bạn có thể dùng để thực hiện nhiều kỹ thuật data augmentation và cải thiện hiệu năng mô hình. 

Pytorch

Biến đổi ảnh có trong mô-đun torchvision.transforms. Tương tự Keras, bạn có thể thêm các lớp biến đổi trong torch.nn.Sequential hoặc áp dụng hàm augmentation riêng trên tập dữ liệu. 

Augmentor

Augmentor là gói Python cho tăng cường ảnh và tạo ảnh nhân tạo. Bạn có thể thực hiện Nghiêng phối cảnh, Biến dạng đàn hồi, Xoay, Cắt xiên, Cắt xén và Soi gương. Augmentor cũng có các chức năng tiền xử lý ảnh cơ bản.

Albumentations

Albumentations là công cụ Python nhanh và linh hoạt cho tăng cường ảnh. Nó được dùng rộng rãi trong các cuộc thi máy học, công nghiệp và nghiên cứu để cải thiện hiệu năng của mạng nơ-ron tích chập sâu. 

Imgaug

Imgaug là công cụ mã nguồn mở cho tăng cường ảnh. Nó hỗ trợ đa dạng kỹ thuật augmentation như nhiễu Gaussian, tương phản, độ nét, cắt, biến đổi affine và lật. Công cụ có giao diện ngẫu nhiên hóa đơn giản nhưng mạnh mẽ, kèm hỗ trợ keypoint, hộp giới hạn, bản đồ nhiệt và bản đồ phân đoạn.

OpenCV

OpenCV là thư viện mã nguồn mở lớn cho thị giác máy tính, máy học và xử lý ảnh. Nó thường được dùng để xây dựng ứng dụng thời gian thực. Bạn có thể dùng OpenCV để tăng cường ảnh và video một cách dễ dàng.  

Kết luận

Các hàm tăng cường ảnh do TensorFlow và Keras cung cấp rất tiện lợi. Bạn chỉ cần thêm một lớp augmentation, tf.image(), hoặc ImageDataGenerator() để thực hiện augmentation. Ngoài các framework học sâu, bạn có thể dùng các công cụ độc lập như Augmentor, Albumentations, OpenCV và Imgaug để thực hiện data augmentation.

Trong hướng dẫn này, chúng ta đã tìm hiểu ưu điểm, hạn chế, ứng dụng và kỹ thuật của data augmentation. Bên cạnh đó, chúng ta đã học cách áp dụng tăng cường ảnh trên tập cats_vs_dogs bằng Keras và TensorFlow. Nếu bạn quan tâm đến xử lý ảnh, hãy xem lộ trình kỹ năng Image Processing with Python. Lộ trình sẽ dạy bạn những kiến thức cơ bản về biến đổi và thao tác ảnh, phân tích ảnh y khoa và xử lý ảnh nâng cao bằng Keras.

Câu hỏi thường gặp về Data Augmentation

Data augmentation có nghĩa là gì?

Đó là tập hợp các kỹ thuật để tăng kích thước tập dữ liệu một cách nhân tạo bằng cách chỉnh sửa các bản sao dữ liệu hiện có hoặc tổng hợp các bản sao mới của tập dữ liệu dựa trên tập hiện có. Khi huấn luyện mô hình máy học, nó đóng vai trò như một dạng regularization và giảm overfitting.

Data augmentation có cải thiện độ chính xác không?

Trong hầu hết trường hợp, data augmentation đã cải thiện độ chính xác của mô hình. Nó giảm overfitting và tăng độ chính xác trên tập dữ liệu chưa từng thấy.

Bất lợi của data augmentation là gì?

Bất lợi chính của data augmentation xuất phát từ thiên lệch dữ liệu. Nếu dữ liệu gốc có thiên lệch, dữ liệu tăng cường cũng sẽ mang thiên lệch, dẫn đến kết quả kém tối ưu. 

Ví dụ về data augmentation là gì?

Nếu bạn có 40 ảnh mèo và chó, bằng cách lật ngang và dọc ngẫu nhiên, bạn có thể tạo các bản sao ảnh mới và nhân đôi tập huấn luyện.

Một vài kỹ thuật data augmentation là gì?

Trong trường hợp tăng cường ảnh, bạn có thể lật, cắt, xoay, thu phóng, đổi kích thước, kéo giãn và affine một cách ngẫu nhiên. Ngoài ra, bạn có thể thay đổi độ bão hòa, độ sáng, tương phản, độ nét hoặc thậm chí thêm nhiễu.

Data augmentation trong CNN là gì?

Hiệu năng của các mô hình mạng nơ-ron tích chập (CNN) được cải thiện khi tăng dữ liệu huấn luyện. CNN có tính bất biến với dịch chuyển, góc nhìn, kích thước và chiếu sáng, và hoạt động tốt với data augmentation.

Chủ đề

Khóa học hàng đầu

Courses

Làm việc với Dữ liệu Không gian địa lý trong Python

4 giờ
17.7K
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow