Hình ảnh cắt ngẫu nhiên python

Xin chào các bạn đã quay trở lại với chuỗi bài viết về Machine Learning của CLB AI – KHMT. Ở các bài viết trước các bạn đã được khám phá và tiếp cận với các thuật toán cơ bản trong Machine Learning. Quay lại với bài viết này, mình sẽ đề cập đến một vấn đề, một vấn đề không thể thiếu trước khi huấn luyện mô hình. That main is data [dữ liệu]

“Ẩn trong đống dữ liệu [hiện có] là kiến ​​thức có thể thay đổi cuộc sống của bệnh nhân hoặc thay đổi thế giới” – Atul Butte , Trường Y Stanford

Có thể thấy, dữ liệu đã chứng minh được tầm quan trọng của mình trong khoa học và cuộc sống. Với Deep Learning, một lĩnh vực trong thời gian qua đã được áp dụng để đạt được những giải pháp hiệu quả trong cuộc sống như xe tự hành, mô hình nhận diện, trợ lý ảo,… Tuy nhiên, đối với một mô hình Deep Learning . Vấn đề nan giải ở đây – “Deep learning là một framework ngốn dữ liệu”. Hoặc với máy học, một tệ nạn điều chỉnh có thể sẽ xảy ra khi dữ liệu bạn đưa vào tồn tại quá nhiều điểm phù hợp – từ dữ liệu đào tạo đến dữ liệu không nhìn thấy.
Sau khi có quá ít dữ liệu cho mô hình đào tạo việc làm, chúng ta phải làm sao. [1]

  • Không sử dụng DeepLearning nữa. [Cái này nhìn dễ mà khó nhỉ]
  • Change kiến ​​trúc mạng
  • Chuyển giao học tập – sử dụng lại kiến ​​thức của các ứng dụng có nhiều dữ liệu
  • Thiếu thì bổ sung – một câu trả lời trực quan đó là chúng ta phải tìm cách bổ sung dữ liệu

Vì vậy ta phải thêm dữ liệu bằng cách nào?

  • Thu thập thêm dữ liệu. Sử dụng tiền để mua dữ liệu, ngồi và lấy dữ liệu trên mạng hoặc phải tự mình đi thu thập dữ liệu. v. v. Các bạn thấy đó, tốn thời gian, công sức và cả tiền nữa
  • tổng hợp dữ liệu. Đối chiếu với một số bài toán dữ liệu có thể được mô phỏng thông qua đồ họa máy tính. Như ảnh chiều sâu, ảnh ở góc nhìn khác nhau,. v. v
  • Tăng cường dữ liệu. Là kỹ thuật đơn giản nhất bằng cách xử lý đơn giản dữ liệu có sẵn bằng cách cho phép tính toán trực tuyến hoặc phi tuyến [như tạo dữ liệu qua mạng GAN]

Có thể thấy việc tăng cường dữ liệu là cách tiếp cận “dễ” và “rẻ” nhất. Hầu hết các ứng dụng Deep Learning, các chủ đề từ tín hiệu 1D, 2D, 3D, ứng dụng bên thị giác tới máy, giọng nói, ngôn ngữ tự nhiên. v. v. đều sử dụng kỹ thuật tăng cường trong quá trình đào tạo. Trong bài viết này, mình sẽ đề cập đến

  • , ,
  • ,

Tăng cường dữ liệu là gì?

Tăng cường dữ liệu [Tăng cường dữ liệu] là một kỹ thuật được sử dụng để mở rộng kích thước của tập huấn luyện bằng cách tạo thêm dữ liệu đã được sửa đổi từ lệnh cấm dữ liệu đầu tiên.
Lấy một mẫu từ tệp dữ liệu, sửa đổi nó bằng cách nào đó, thêm nó vào tệp dữ liệu ban đầu – và bây giờ tệp dữ liệu của bạn lớn hơn một mẫu. [2]

Tăng cường dữ liệu giúp giải quyết vấn đề “không đủ dữ liệu”, giải quyết các điểm quá phù hợp và giúp mô hình hoạt động tốt hơn với dữ liệu mẫu đa dạng.
Data Agumentation thường được sử dụng khi xây dựng mô hình Deep Learning. Và chắc chắn rằng, nó cũng hỗ trợ tốt trong việc tăng cường dữ liệu khi xử lý các vấn đề về Machine Learning như âm thanh, hình ảnh, văn bản,… hay bất kỳ loại xử lý dữ liệu nào.

Trong bài viết này, mình sẽ tập trung vào các chủ đề cấp cao cho việc tăng cường hình ảnh vì đó là thứ hay được sử dụng nhất. Tuy nhiên, việc tăng cường các loại dữ liệu khác cũng không làm mất đi phần hiệu quả. Đó là lý do tại sao bạn nên biết một số kỹ thuật phổ biến có thể được thực hiện để tăng cường dữ liệu

Kỹ thuật tăng cường dữ liệu

Chúng ta có thể áp dụng các thay đổi khác nhau đối với dữ liệu ban đầu. Ví dụ, đối với hình ảnh, chúng ta có thể sử dụng. [1]

  1. Các biến được phép thay đổi hình học [ Geometry based ] – lật, cắt, xoay hoặc dịch hình ảnh một cách ngẫu nhiên
  2. Chuyển đổi không gian màu [Dựa trên màu] – thay đổi các kênh màu RGB, tăng hoặc giảm bất kỳ màu nào, tăng độ nét, tăng tính tương phản,. v. v
  3. Thêm nhiễu [Noise/occlusion] – thêm nhiễu cho ảnh như nhiễu ngẫu nhiên, nhiễu có mẫu, nhiễu do nén ảnh,. v. v
  4. Xoá ngẫu nhiên [Random crop] – xoá ngẫu nhiên một phần của ban đầu hình ảnh
  5. Biến đổi thời tiết [Weather] thêm các tác dụng của thời tiết như mưa, tuyết, sương mờ, …

Đối chiếu với văn bản có. [3]

  1. Xáo trộn từ / câu [ Xáo trộn ]
  2. Thay thế từ [ replace ] – thay thế từ bằng từ đồng nghĩa
  3. Cây cú pháp [Cây cú pháp]. diễn giải câu sao cho đúng ngữ pháp bằng cách sử dụng các từ liên quan nhau
  4. Còn rất nhiều phương pháp khác được mô tả kỹ trong bài viết về Tăng cường dữ liệu trong NLP


Các vấn đề của tăng cường dữ liệu

Tính phụ thuộc dữ liệu và ứng dụng

Vấn đề là có quá nhiều cách tăng cường thức, vậy đâu sẽ là cách chọn ra chất lượng tốt nhất ? . v. và ứng dụng tương ứng].
Nghĩa là mỗi bộ dữ liệu sẽ có cách thức riêng để nâng cao sao cho ra kết quả tốt nhất.

Không hạn chế khi muốn nhận dạng bóng tròn, thì ta xoay kiểu gì nó vẫn ra kết quả bóng. Tuy nhiên, hãy thử với việc nhận dạng chữ số, với việc xoay theo chiều ngang số 8 vẫn là 8, nhưng 6 sẽ thành 9 và sẽ không ra số gì theo chiều dọc

Sự đa dạng của sự tăng cường

Với danh sách các công thức tăng cường thương mại được kể trên. Bản thân mỗi lần tăng cường lại có các yếu tố điều khiển riêng. Ta can phan loại thành

  • Các phương pháp tăng cường. lật, xoay, cắt ngẫu nhiên, v. v
  • Các yếu tố điều khiển tăng cường. Mỗi lần tăng cường sẽ có các yếu tố điều khiển riêng. Ví dụ rotate thì bao nhiêu độ, scale thì scale up down bao nhiêu lần, crop random thì random trong khoảng bao nhiêu …
  • Tần suất sử dụng từng phương thức tăng cường?
  • Cách tăng cường tốt nhất là một bộ các phương pháp tăng cường
  • Cách tăng cường cho từng giai đoạn đào tạo/kỷ nguyên có thể khác nhau. Kỷ nguyên đầu tiên ở tốc độ học tập lớn có thể khác với các kỷ nguyên cuối cùng ở tốc độ học tập nhỏ
  • Cách tăng cường cho từng lớp, tần suất sử dụng tăng cường có thể khác nhau
  • Cách tăng cường cũng có thể bị ảnh hưởng bởi cấu trúc mạng. Tức là tăng cường độ lợi khác nhau cho từng mạng

Các phương pháp hay nhất cùng mẹo và thủ thuật

Việc phụ thuộc vào dữ liệu và ứng dụng, kiến ​​trúc mạng, sự đa dạng kể về đồng nghĩa với việc bạn cần phải thử khá nhiều, và chắc chắn sẽ tốn rất nhiều thời gian cho việc đi tìm cách tăng cường tốt nhất.

Điều đáng nói là mặc dù Data Augmentation là một công cụ mạnh mẽ nhưng bạn nên sử dụng nó một cách thận trọng. Mình sẽ viết ra một vài quy tắc chung mà mình có thể sử dụng được khi đến với nó. [3]

  • Chọn phương pháp tăng cường sức mạnh phù hợp với mục đích của bạn. Hãy tưởng tượng rằng bạn đang cố gắng phát hiện một khuôn mặt trên hình ảnh. Bạn chọn Random Crop làm kỹ thuật tăng cường và đột nhiên… bạn biết điều gì rồi đấy. Không có khuôn mặt nào trên ảnh vì nó đã bị xóa theo một cách ngẫu nhiên. Hãy thật sự logic khi lựa chọn các kỹ thuật tăng cường dữ liệu
  • Không nên tích hợp quá nhiều phần mở rộng trong cùng một lúc. You can only to make a data test có sự khác biệt với việc cấm dữ liệu ban đầu là thành công rồi
  • Hãy luôn hiển thị dữ liệu được tăng cường [hình ảnh và văn bản] trong sổ ghi chép của bạn, hãy nghe mẫu âm thanh đã chuyển đổi trước khi bắt đầu đào tạo. Dễ mắc sai lầm, đó là lý do tại sao tốt hơn hết là bạn nên kiểm tra lại kết quả
  • Định lượng thời gian cho quá trình tăng cường và kiểm tra lượng tài nguyên có được để áp dụng các tính toán liên quan.

Các thư viện trong việc tăng cường dữ liệu

máy tăng cường

Chuyển sang các thư viện, Augmentor là một gói Python Mục đích vừa là một công cụ tăng cường dữ liệu vừa là một thư viện với các chức năng xử lý hình ảnh cơ bản

Cài đặt Augmentor thông qua pip khá dễ dàng

pip install Augmentor 

Augmentor bao gồm một số lớp cho các chức năng chuyển đổi hình ảnh có chức năng, chẳng hạn như cắt, xoay, lật,. v. v

Augmentor cho phép người dùng chọn một tham số xác định cho các hoạt động chuyển đổi. Tham số kiểm tra tần suất hoạt động này đã được áp dụng. Do đó, Augmentor như được hình thành một đường dẫn liên kết các hoạt động tăng cường với nhau

Điều này có nghĩa là mỗi lần một hình ảnh được truyền qua ống dẫn, một hình ảnh hoàn toàn khác sẽ được trả lại. Tùy thuộc vào số lượng tác vụ trong đường ống và tham số hiệu suất, một lượng dữ liệu rất lớn về hình ảnh mới có thể được tạo ra. Về cơ bản, đây là một cách tăng cường dược liệu khá tốt

Chúng ta có thể làm gì với hình ảnh bằng Augmentor? . Các tính năng chính của Augmentor đó là

  1. Perspective skewing – nhìn hình ảnh từ một góc độ khác
  2. Biến dạng đàn hồi – thêm các biến dạng vào hình ảnh
  3. Xoay – đơn giản là xoay ảnh
  4. Shearing/Cropping – cắt xén và nghiêng ảnh
  5. Phản chiếu – áp dụng nhiều kiểu đảo ngược với nhau

Augmentor là một thư viện tốt. Bạn có thể sử dụng nó với các framework khác nhau của DeepLearning [TF, Keras, PyTorch, MxNet]

Thật không may, Augmentor không phải là một tính năng nhanh và linh hoạt. Có những thư viện sẵn có với nhiều chức năng chuyển đổi hơn và có thể thực hiện tăng cường theo cách nhanh hơn và hiệu quả hơn. Đó là lý do tại sao Augmentor có thể là ít phổ biến nhất trong thư viện Deep Learning

Cách sử dụng đơn giản của Augmentor

import Augmentor 
#Gọi nó 
p = Augmentor.Pipeline["/path/to/images"] 

#Tạo ống dẫn  
p.rotate[probability=0.7, max_left_rotation=10, max_right_rotation=10] 

#Bổ sung tác vụ 
p.zoom[probability=0.3, min_factor=1.1, max_factor=1.6] 

#Xây dựng hình ảnh tăng cường từ mẫu 
p.sample[10000]

ImgAug

ImgAug cũng là một thư viện để tăng cường hình ảnh. Tuy nhiên, nó khá khác với Augmentors chỉ tập trung vào các biến cho phép thay đổi cấu hình học, ImgAug lại có tính năng chính hơi kỳ lạ là khả năng thực thi các phép tăng cường trên nhiều CPU lõi. Nếu các bạn muốn hiểu rõ hơn về điều đó, có thể xem thêm ở hướng dẫn

Có thể cài đặt ImgAug một cách dễ dàng thông qua pip hoặc conda

pip install imgaug

Cách sử dụng ImgAug

Giống như các thư viện tăng cường hình ảnh khác , ImgAug rất dễ sử dụng. Để xác định một đường ống dẫn tăng cường, hãy sử dụng tuần tự các phương pháp và sau đó chỉ cần xếp hạng các hoạt động chuyển đổi khác nhau như trong các thư viện khác nhau

from imgaug import augmenters as iaa

seq = iaa.Sequential[[
     iaa.Crop[px=[0, 16]],
     iaa.Fliplr[0.5],
     iaa.GaussianBlur[sigma=[0, 3.0]]]]

for batch_idx in range[1000]:
     images = load_batch[batch_idx]
     images_aug = seq[images=images]

Autoaugment/DeepAugment

Autoaugment đã giúp cải thiện hiệu suất tốt nhất của mô hình hiện tại trên các tệp dữ liệu như CIFAR-10, CIFAR-100, ImageNet và các bộ dữ liệu khác

Tuy nhiên, AutoAugment khó sử dụng vì nó không cung cấp các mô-đun điều khiển, điều này ngăn người dùng chạy nó cho tệp dữ liệu của riêng họ

Qua đó, chúng ta hãy xem xét kỹ hơn về DeepAugment , một giải pháp thay thế nhanh hơn và linh hoạt hơn cho AutoAugment. DeepAugment không có mối liên hệ chặt chẽ nào với AutoAugment ngoài ý tưởng chung và được phát triển bởi một nhóm người. Bạn có thể cài đặt nó qua pip

pip install deepaugment

Điều quan trọng là chúng ta phải biết cách sử dụng DeepAugment để có được chiến lược tăng cường tốt nhất cho hình ảnh của mình. Để làm được điều đó, bạn cần tìm hiểu qua kho lưu trữ chính thức của Github

Nhìn chung, cả AutoAugment và DeepAugment đều không được sử dụng phổ biến. Tuy nhiên, có thể sẽ khá hữu ích khi chạy chúng nếu bạn không biết kỹ thuật tăng cường nâng cao nào sẽ tốt nhất cho dữ liệu của mình. Bạn chỉ nên nhớ rằng sẽ mất nhiều thời gian vì sẽ đào tạo nhiều mẫu người

Tăng cường dữ liệu trong bài toán Scene Text

Văn bản tổng hợp

SynthText là một thế hệ phương pháp được giới thiệu tại hội nghị CVPR2016 với tên đầy đủ là “Dữ liệu tổng hợp để bản địa hóa văn bản trong hình ảnh tự nhiên” [4]

Đây là phương pháp tạo ra ảnh chứa văn bản [từ, câu, văn bản] dạng Văn bản đồ họa bằng cách đặt các từ có nghĩa [các trường hợp từ] vào các hình ảnh với bối cảnh tự nhiên [hình ảnh cảnh tự nhiên], đặc biệt nó không

Một vài hình ảnh trong tập dữ liệu SynthText

Nhóm nghiên cứu đã thành lập bộ dữ liệu trước với 800000 hình ảnh. Hiện tại, SynthText đã chạy với bộ từ điển của nhiều ngôn ngữ khác nhau, trong đó có cả Tiếng Việt. Bạn có thể tìm hiểu thông tin chi tiết về mã nguồn và cách chạy tại GitHub

SRNet

Dẫn lời tác giả Niwhskal “SRNet – một mạng thần kinh giải quyết vấn đề chỉnh sửa văn bản trong hình ảnh. Nó đánh dấu sự khởi đầu của một lĩnh vực nghiên cứu có thể tự động hóa các cơ chế chỉnh sửa nâng cao trong tương lai. ” [5] Có thể thấy SRNet là một phương pháp tăng cường dữ liệu khi nó có thể chỉnh sửa văn bản trong bất kỳ hình ảnh nào trong khi vẫn duy trì ngữ cảnh, kiểu chữ và màu sắc

L – Nguồn ;

Phương pháp này chính là định dạng Chỉnh sửa văn bản trong tự nhiên, thực hiện các trường hợp từ đa dạng trong khi bố cục cấu hình ảnh không thay đổi so với ảnh gốc. Để hiểu về SRNet, bạn có thể tìm hiểu một vài bản gốc và mã nguồn được lưu trữ tại GitHub

Lời kết

Cảm ơn các bạn đã đọc đồng hành cùng mình xuyên suốt bài viết. Mong rằng qua bài viết này mình đã giúp các bạn hiểu thêm về Tăng cường dữ liệu – một cách tiến gần đến “dễ”, “rẻ” cho việc tăng cường dữ liệu. Bên cạnh đó cũng đề cập đến 2 phương pháp [SynthText và SRNet] có thể hỗ trợ các bạn trong việc sử dụng dữ liệu đa dạng cho bài toán Scene Text Detection từ cuộc thi Tempo Run của CLB AI – KHMT

Chủ Đề