Tăng cường hình ảnh cho mô hình học sâu sử dụng Keras và cân bằng Histogram 

các kỹ thuật tăng cường hình ảnh cho mô hình học sâu

Ở FriData trước, chúng ta đã tìm hiểu về quy trình hoàn chỉnh để phân loại dữ liệu hình ảnh. Theo đó, một trong những cách dễ nhất để cải thiện hiệu suất mô hình là tăng cường hình ảnh với cách tiếp cận đơn giản là thêm dữ liệu sinh tự động vào tập dữ liệu gốc. Bài viết này sẽ đi sâu hơn về các kỹ thuật tăng cường hình ảnh cho mô hình học sâu. Lần lượt các điểm sau sẽ được phân tích trong bài viết:

  • Khái niệm và vai trò của tăng cường dữ liệu hình ảnh
  • Cách sử dụng Keras để tăng cường hình ảnh cơ bản.
  • Khái niệm và ứng dụng của cân bằng histogram 
  • Triển khai kỹ thuật Cân bằng histogram: một cách để sửa đổi tệp keras.preprocessing image.py.

Khái quát về tăng cường hình ảnh

Các mạng thần kinh sâu, đặc biệt là Mạng thần kinh tích chập (CNN) có ưu thế vượt trội khi thực hiện các bài toán phân loại hình ảnh. Các mô hình CNN hiện đại thậm chí đã được chứng minh là vượt quá hiệu suất của con người trong nhận dạng hình ảnh.

Nguồn ảnh: https://www.eff.org/ai/metrics

Tuy nhiên, để giải quyết bài toán phân loại ảnh, việc thu thập dữ liệu đào tạo có thể tốn cả thời gian lẫn tiền bạc. Do đó, nhằm đối mặt với vấn đề chi phí cao của việc thu thập hàng nghìn hình ảnh đào tạo, tăng cường hình ảnh (data augmentation) đã được phát triển để tạo dữ liệu đào tạo từ một tập dữ liệu hiện có. Tăng cường hình ảnh là quá trình lấy các hình ảnh đã có trong tập dữ liệu đào tạo và tiến hành thao tác với chúng để tạo ra nhiều phiên bản thay đổi của cùng một hình ảnh. Điều này vừa cung cấp nhiều hình ảnh hơn để đào tạo, đồng thời vừa cho phép mô hình phân loại được tiếp xúc với đa dạng tình huống, bối cảnh từ  ánh sáng đến màu sắc hơn. Dưới đây là một số ví dụ về các phép tăng cường khác nhau từ thư viện imgaug.

Nguồn ảnh: https://github.com/aleju/imgaug

Ứng dụng Keras trong tăng cường hình ảnh cơ bản

Có nhiều cách để xử lý trước dữ liệu hình ảnh. Trong bài viết này, ta sẽ xem xét một số phương pháp phổ biến nhất mà thư viện học sâu keras cung cấp để tăng cường hình ảnh, sau đó chỉ ra cách thay đổi tệp keras.preprocessing image.py để kích hoạt các phương pháp cân bằng histogram. Ta sẽ sử dụng tập dữ liệu cifar10 đi kèm với keras. Tuy nhiên, ta sẽ chỉ sử dụng hình ảnh của mèo và chó từ tập dữ liệu để giữ cho nhiệm vụ đủ nhỏ để thực hiện trên CPU. 

Tải và định dạng dữ liệu

Điều đầu tiên là tải tập dữ liệu cifar10 và định dạng hình ảnh để chuẩn bị cho CNN. Ta cũng sẽ xem xét một vài hình ảnh để đảm bảo dữ liệu đã được tải đúng cách. Tham khảo code tại đây.

Hình ảnh cifar10 chỉ có 32 x 32 pixel, vì vậy chúng có thể bị vỡ khi phóng to. Tuy nhiên CNN không biết những hình ảnh này bị nhiễu vỡ, tất cả những gì nó nhìn thấy là DỮ LIỆU.

Áp dụng augmentation vào ảnh đầu vào bằng ImageDataGenerator

Việc bổ sung dữ liệu hình ảnh với keras là rất đơn giản. Đầu tiên, ta cần tạo một trình tạo ảnh bằng cách gọi hàm ImageDataGenerator () và chuyển cho nó một danh sách các tham số mô tả những thay đổi mà ta muốn thực hiện trên ảnh. Sau đó, ta sẽ gọi hàm fit () trên trình tạo hình ảnh, hàm này sẽ áp dụng các thay đổi cho các hình ảnh theo từng đợt. Theo mặc định, các sửa đổi sẽ được áp dụng ngẫu nhiên, vì vậy không phải mọi hình ảnh sẽ được thay đổi mỗi lần. Bạn cũng có thể sử dụng keras.preprocessing để xuất các tệp hình ảnh tăng cường vào một thư mục nhằm xây dựng một tập dữ liệu khổng lồ về các hình ảnh đã thay đổi.

Ta sẽ xem xét một số tính năng tăng cường trực quan thú vị hơn ở đây. Bạn có thể xem mô tả về tất cả các tham số ImageDataGenerator () cũng như danh sách các phương thức khác có sẵn trong keras.preprocessing trong tài liệu keras.

Xoay hình ảnh ngẫu nhiên

Tham khảo code tiến hành tại đây.

Lật hình ảnh theo chiều dọc

Tham khảo code tiến hành tại đây.

Dịch chuyển hình ảnh 20% theo chiều dọc hoặc chiều ngang 

Tham khảo code tại đây.

Chuyển đổi màu

Chuyển đổi màu của bức ảnh bằng cách thêm giá trị vào 3 kênh màu RGB. Việc này liên quan tới ảnh chụp đôi khi bị nhiễu khiến màu bị ảnh hưởng.

Thêm nhiễu

Thêm nhiễu vào bức ảnh. Nhiễu thì có nhiều loại như nhiễu ngẫu nhiên, nhiễu có mẫu, nhiễu cộng, nhiễu nhân, nhiễu do nén ảnh, nhiễu mờ do chụp không lấy nét, nhiễu mờ do chuyển động…

Kỹ thuật cân bằng histogram

Cân bằng histogram (histogram equalization) là việc điều chỉnh histogram về mức cân bằng, làm cho phân bổ  giá trị pixel không bị co cụm tại một khoảng hẹp mà được “kéo dãn” ra. Kết quả có thể rất ấn tượng, đặc biệt đối với hình ảnh thang độ xám. Dưới đây là một số ví dụ:

Nguồn ảnh: https://www.bruzed.com/200
Nguồn ảnh: http://www-classes.usc.edu/engr/ee-s/569/qa2/Histogram%20Equalization.htm

Trong bài viết này, ta sẽ xem xét ba kỹ thuật nâng cao hình ảnh để cải thiện độ tương phản trong ảnh. Những cách tiếp cận này đôi khi còn được gọi là “Kéo giãn histogram” vì chúng lấy sự phân bố cường độ pixel và kéo giãn sự phân bố để phù hợp với phạm vi giá trị rộng hơn, do đó tăng mức độ tương phản giữa phần sáng nhất và phần tối nhất của hình ảnh.

Cân bằng histogram (Histogram Equalization)

Cân bằng histogram làm tăng độ tương phản trong hình ảnh bằng cách phát hiện sự phân bố mật độ pixel trong ảnh và vẽ các mật độ pixel này trên histogram. Sự phân bố của histogram này sau đó được phân tích và nếu có phạm vi độ sáng pixel hiện không được sử dụng, histogram sẽ được “kéo dài” để bao phủ các phạm vi đó và sau đó được “chiếu ngược” lên hình ảnh để tăng tổng thể độ tương phản của ảnh.

Kéo giãn tương phản (Contrast Stretching)

Kéo giãn tương phản sử dụng phương pháp phân tích sự phân bố mật độ pixel trong một hình ảnh và sau đó “thay đổi tỷ lệ hình ảnh để bao gồm tất cả các cường độ nằm trong tỷ lệ phần trăm thứ 2 và 98”.

Cân bằng thích ứng (Adaptive Equalization)

Cân bằng thích ứng khác với cân bằng histogram thông thường ở chỗ: một số histogram khác nhau được tính toán, mỗi histogram tương ứng với một phần khác nhau của hình ảnh; tuy nhiên, nó có xu hướng khuếch đại nhiễu quá mức trong các phần còn lại.

Code đến từ tài liệu của thư viện hình ảnh sci-kit và đã được thay đổi để thực hiện ba phép tăng cường nói trên đối với hình ảnh đầu tiên của tập dữ liệu cifar10. Đầu tiên, ta nhập các mô-đun cần thiết từ thư viện hình ảnh sci-kit (skimage) và sau đó sửa đổi code từ tài liệu hình ảnh sci-kit để xem các phần tăng cường trên ảnh.

Dưới đây là những hình ảnh đã sửa đổi từ ảnh mèo có độ tương phản thấp trong tập dữ liệu cifar10. Có thể thấy, kết quả không quá nổi bật với hình ảnh thang độ xám có độ tương phản thấp, nhưng vẫn giúp cải thiện chất lượng hình ảnh.

Sửa đổi keras.preprocessing để kích hoạt kỹ thuật Cân bằng histogram.

Sau khi sửa đổi thành công một hình ảnh từ tập dữ liệu cifar10, ta sẽ trình bày cách thay đổi tệp keras.preprocessing image.py để thực hiện các kỹ thuật sửa đổi histogram khác nhau. Dưới đây là các bước chung để triển khai chức năng này:

Tổng quan

  • Tìm tệp keras.preprocessing image.py trên máy.
  • Sao chép tệp image.py vào tệp hoặc notebook.
  • Thêm một thuộc tính cho mỗi kỹ thuật cân bằng vào hàm init DataImageGenerator ().
  • Thêm các mệnh đề câu lệnh IF vào phương thức random_transform để các phép tăng cường được triển khai khi ta gọi datagen.fit ().

Một trong những cách đơn giản nhất để thực hiện các thay đổi đối với tệp image.py của keras.preprocessing là sao chép và dán nội dung của tệp vào code. Bạn có thể xem nội dung của tệp image.py trên github tại đây. Tuy nhiên, để chắc chắn rằng bạn đang lấy cùng một phiên bản của tệp mà bạn đã nhập trước đó, tốt hơn nên lấy tệp image.py đã có trên máy của bạn. print (keras .__ file__) sẽ cho ra đường dẫn đến thư viện keras trên máy. Đường dẫn (dành cho người dùng mac) có thể là: /usr/local/lib/python3.5/dist-packages/keras/__init__.pyc

Sau khi điều hướng đến thư viện keras, hãy vào thư mục tiền xử lý. Trong quá trình tiền xử lý, bạn sẽ thấy tệp image.py. Sau đó, bạn có thể sao chép nội dung của nó vào code. Tệp này dài, nhưng đối với người mới bắt đầu, đây có lẽ là một trong những cách dễ dàng nhất để thực hiện các thay đổi đối.

Chỉnh sửa image.py

Ở đầu image.py bạn có thể bổ sung dòng: from ..import backend as K nếu bạn đã bao gồm nó ở trên.

Giờ đây, hãy kiểm tra kỹ để đảm bảo rằng bạn đang nhập các mô-đun scikit-image cần thiết để image.py đã sao chép có thể thấy chúng.

from skimage import data, img_as_float

from skimage import exposure

Bây giờ cần thêm sáu dòng vào phương thức __init__ của lớp ImageDataGenerator để đảm bảo có đủ ba thuộc tính đại diện cho các kiểu tăng cường mà ta sẽ thêm vào. Tham khảo code tại đây.

Hàm random_transform () phản hồi các đối số mà ta đã chuyển vào hàm ImageDataGenerator (). Nếu ta đã đặt các tham số Contra_stretching, adaptive_equalization hoặc histogram_equalization thành True, khi ta gọi ImageDataGenerator (), thì random_transform () sẽ áp dụng mức tăng hình ảnh mong muốn. Tham khảo code tại đây.

Bây giờ ta đã có tất cả các code cần thiết và có thể gọi ImageDataGenerator () để thực hiện các kỹ thuật sửa đổi histogram. Dưới đây là một số hình ảnh ví dụ nếu ta đặt cả ba giá trị thành True. Tham khảo code tại đây.

Đối với hình ảnh có màu, việc kéo giãn độ tương phản thường thu được kết quả tốt hơn so với việc sửa đổi histogram hoặc cân bằng thích ứng.

Đào tạo và đánh giá Keras CNN 

Bước cuối cùng là đào tạo CNN và đánh giá mô hình bằng cách sử dụng model.fit_generator () để đào tạo và xác thực mạng thần kinh trên các hình ảnh tăng cường.

Tham khảo code tại đây.

Nguồn tham khảo: Towards Data Science
Bình luận

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu

Bài viết liên quan

    Cảm ơn bạn đã quan tâm và ủng hộ.

    File hiện tại không thể tải xuống
    Vui lòng liên hệ hỗ trợ.

    VinOCR eKYC
    Chọn ảnh từ máy của bạn

    Chọn ảnh demo dưới đây hoặc tải ảnh lên từ máy của bạn

    Tải lên ảnh CMND/CCCD/Hộ chiếu,...

    your image
    Chọn ảnh khác
    Tiến hành xử lý
    Thông tin đã được xử lý
    Mức độ tin cậy: 0%
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    Xác thực thông tin thẻ CMND/CCCD

    Vui lòng sử dụng giấy tờ thật. Hãy đảm bảo ảnh chụp không bị mờ hoặc bóng, thông tin hiển thị rõ ràng, dễ đọc.

    your image
    Chọn ảnh khác

    Ảnh mặt trước CMND/CCCD

    your image
    Chọn ảnh khác

    Ảnh mặt sau CMND/CCCD

    your image
    Chọn ảnh khác

    Ảnh chân dung

    This site is registered on wpml.org as a development site.