- vừa được xem lúc

Xây dựng input pipeline cho dữ liệu dạng ảnh với Tensoflow Keras

0 0 92

Người đăng: Thao Hoang Thu

Theo Viblo Asia

Chào các bạn, trong bài này mình sẽ giới thiệu về API của Keras dùng để tiền xử lý dữ liệu dạng ảnh trong bài toán machine learning.

Thông thường, để load dữ liệu đầu vào, ta phải load từng ảnh rồi convert chúng thành dạng tensor/ numpy array. Hoặc khi muốn thực hiện data augmentation cũng sẽ mất khá nhiều thời gian để làm thủ công. Với Keras Image data preprocessing API, quá trình này trở nên tự động và dễ dàng hơn rất nhiều.

Cụ thể, chúng ta sẽ sử dụng class ImageDataGenerator của Keras

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

Đầu tiên tạo một generator cho dataset:

datagen = ImageDataGenerator( featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, zca_epsilon=1e-06, rotation_range=0, width_shift_range=0.0, height_shift_range=0.0, brightness_range=None, shear_range=0.0, zoom_range=0.0, channel_shift_range=0.0, fill_mode="nearest", cval=0.0, horizontal_flip=False, vertical_flip=False, rescale=1./255, preprocessing_function=None, data_format=None, validation_split=0.0, dtype=None,
)

Giải thích các tham số:

  • featurewise_center/ featurewise_std_normalization (Boolean): tiến hành zerocenter normalization trên toàn bộ dataset (mean = 0, standart deviation = 1). Zero centering cải thiện perfomance và quá trình optimization của mô hình AI.
  • samplewise_center/ samplewise_std_normalization (Boolean): zerocenter normalize từng sample
  • zca_whitening (Boolean): thực hiện ZCA whitening
    • zca_epsilon: giá trị epsilon cho ZCA whitening. Giá trị mặc định là 1e-6.
  • rotation_range (Int): giới hạn độ khi xoay hình (random rotation)
  • width_shift_range/ height_shift_range: dịch chuyển hình theo chiều ngang hoặc chiều dọc (tính theo pixel nếu > 1 hoặc theo tỷ lệ phần trăm so với tổng chiều ngang/ dọc nếu < 1).
  • brightness_range (Tuple hoặc list của 2 số float): range của mức độ thay đổi độ sáng
  • shear_range (Float): Shear Intensity (góc tính theo độ để thực hiện shear theo chiều ngược chiều kim đồng hồ)
  • zoom_range (Float hoặc [lower, upper]): range for random zoom
  • channel_shift_range (Float): range for random channel shifts.
  • fill_mode (một trong 4 mode: {"constant", "nearest", "reflect", "wrap"}, mặc định là 'nearest'): cách để điền vào những pixel trống sau khi shift/ zoom hoặc shear hình ảnh.
    • 'constant': kkkkkkkk|abcd|kkkkkkkk (cval=k)
    • 'nearest': aaaaaaaa|abcd|dddddddd
    • 'reflect': abcddcba|abcd|dcbaabcd
    • 'wrap': abcdabcd|abcd|abcdabcd
  • cval (Float or Int): giá trị hằng số k khi fill_mode = "constant"
  • horizontal_flip/ vertical_flip (Boolean): lật hình random theo chiều ngang/ chiều dọc
  • rescale: rescaling factor. Nếu đặt giá trị 0 hoặc None => không rescale, nếu ngược lại thì nó sẽ chia mỗi giá trị pixel cho giá trị được thiết lập (sau khi tất cả các hình thức transformation khác)
  • preprocessing_function: function mà được apply cho từng sample, nó sẽ được chạy sau khi ảnh được resize và augmented
  • validation_split (Float): tỷ lệ ảnh được giữ lại làm validation. Augmentation sẽ không được áp dụng cho validation set.

Nếu apply ZCA whitening và/ hoặc zerocenter normalization, ta cần fit generator trên vào bộ data để tính toán các số liệu cần thiết:

datagen.fit(x_train)

Đưa dataset vào mô hình theo từng batch và tiến hành̀ data augmentation theo thời gian thực:

model.fit(datagen.flow(x_train, y_train, batch_size=32, subset='training'), validation_data=datagen.flow(x_train, y_train, batch_size=8, subset='validation'), steps_per_epoch=len(x_train) / 32, epochs=epochs)

Tóm lại, API của Keras có những ưu điểm sau:

  • Đơn giản, dễ sử dụng
  • Có thể feed trực tiếp vào mô hình thông qua generator
  • Data augmentation on-the-fly: không lo bị giới hạn về bộ nhớ do augmentation sẽ được tiến hành đồng thời với việc đưa dữ liệu vào mô hình chứ không phải thực hiện và lưu trữ riêng. Đồng thời, hình ảnh đưa vào model qua mỗi iteration sẽ khác đi một chút giúp mô hình generalize tốt hơn, tránh overfit.

Reference:

Bình luận

Bài viết tương tự

- vừa được xem lúc

MOSH: Kẻ hủy diệt SSH

Lời nói đầu. Lời đầu tiên xin được xin chào cả nhà, đã lâu lắm rồi mình không viết blog nay May Fest mà người iu mình thích cái áo viblo quá nên xin phép nổ phát súng trên Viblo về Mosh - thứ khá hay

0 0 126

- vừa được xem lúc

Vòng đời và trạng thái của Thread

A. Giới thiệu.

0 0 117

- vừa được xem lúc

Giải quyết vấn đề N+1 trong quan hệ cha - con vô tận bằng Eager Loading

Vấn đề. Trong khi phát triển ứng dụng, chắc hẳn các bạn đã gặp phải trường hợp đệ quy cha-con trong khi phát triển các dự án, ví dụ như cây thư mục như sau:.

0 0 172

- vừa được xem lúc

Bạn tổ chức thư mục views cho các dự án Laravel như thế nào?

Hầu hết các ứng dụng Laravel có rất nhiều views. Một ứng dụng nhỏ sẽ không xảy ra vấn đề gì cả, tuy nhiều nếu dự án lớn dần theo thời gian, chúng ta sẽ gặp bế tắc trong việc tổ chức và sắp xếp các vie

0 0 189

- vừa được xem lúc

Sự khác nhau giữa những điều tưởng giống nhau - Phần 3

Hôm nay, để tiếp tục cho series so sánh, hãy cùng mình khám phá thêm 2 địa danh mới khá nổi tiếng của Việt Nam mình đó là Cù Lao Chàm và đảo Lý Sơn. .

0 0 99

- vừa được xem lúc

Một số thuật toán sắp xếp

Chắc hẳn ngồi trên ghế giảng đường đại học thì ai cũng sẽ được làm quen với thuật toán. Nghe thì thật là trừu tượng và mơ hồ, nhưng để tối ưu hóa những bài toán đặt ra thì bắt buộc các bạn phải học đế

0 0 156