Cac phuương pháp khử nhiễu xử lý ảnh

Đối với lĩnh vực Xử lý ảnh (cùng đa dạng các ứng dụng bao gồm trích xuất thông tin, nhận dạng đối tượng, phân tích hình ảnh y tế, v.v.), một trong những bước chính là khử nhiễu (hay còn gọi là denoising). Mục đích của khử nhiễu là cải thiện chất lượng của hình ảnh bằng cách loại bỏ pixel hoặc mẫu không mong muốn xuất hiện do quá trình quét hoặc chụp. Nếu bước khử nhiễu được thực hiện tốt, đây là tiền đề để có được hình ảnh sạch / chất lượng cao, giúp cải thiện chất lượng của quá trình sau trích xuất.

Nhiễu hình ảnh có thể bắt nguồn từ các điều kiện bên trong (tức là cảm biến) và bên ngoài (tức là môi trường). Sự hiện diện của nhiễu gây ra một số tác động tiêu cực đến việc phát triển các ứng dụng thực tế.

Nhiều cách tiếp cận đã được xây dựng nhằm khắc phục tình trạng nhiễu ảnh. Trong số đó, mô hình tổng hợp (generative models) là chủ đề được nghiên cứu rộng rãi nhất trong Học máy và đặc biệt là Học sâu. Theo đó, sự xuất hiện của Mạng đối nghịch tạo sinh (Generative Adversarial Networks – GAN) được coi là một bước đột phá lớn. 

GAN bao gồm hai phần: mô hình tổng quát (generative model) và mô hình phân biệt (discriminator model). Đối với bài toán về thị giác máy tính chẳng hạn như khử nhiễu ảnh, U-Net được chọn làm “xương sống” của mô hình tổng quát. Kiến trúc U-Net giống như một mạng mã hóa CNN theo sau là một mạng giải mã CNN. Mô hình lần đầu tiên được sử dụng trong phân đoạn ảnh y sinh. 

Bài viết này sẽ giải thích từng bước với một nghiên cứu điển hình, bắt đầu từ việc tạo tập dữ liệu nhiễu, chuyển qua triển khai mô hình học sâu và cuối cùng là phân tích kết quả.

Ứng dụng của khử nhiễu ảnh

Như đã đề cập, khử nhiễu ảnh rất hữu ích đối với việc giải quyết nhiều bài toán khác nhau trong lĩnh vực thị giác máy tính, chẳng hạn như khôi phục ảnh, theo dõi trực quan, phân đoạn ảnh, phân loại ảnh, hiểu hình ảnh, nhận dạng đối tượng và phân tích hình ảnh y tế. Rõ ràng, việc thu được hình ảnh gốc hoặc nội dung hình ảnh chất lượng cao là yếu tố quan trọng để nâng cao hiệu suất của các tác vụ này.

Ví dụ, trong hiểu tài liệu (hay trích xuất thông tin từ ảnh chụp tài liệu), chất lượng hình ảnh có thể suy giảm do quét, chụp ảnh, do một số can thiệp của con người hoặc tài liệu cũ, điều này gây ra không ít thách thức cho các nhà phát triển và cả doanh nghiệp khi đưa công nghệ vào ứng dụng. 

Một số ví dụ về sự cố khi quét, chụp ảnh, tài liệu cũ:

Cac phuương pháp khử nhiễu xử lý ảnh
Nguồn ảnh: La Javaness R&D

Tạo tập dữ liệu

Trường hợp được phân tích dưới đây sử dụng bộ dữ liệu ảnh thẻ ID. Tất cả hình ảnh này được chuyển đổi sang thang độ xám.

Cac phuương pháp khử nhiễu xử lý ảnh
Một phần của tập dữ liệu với 40 hình ảnh thang độ xám. (Hình ảnh được thu thập từ Internet và được sử dụng để minh họa)
Nguồn ảnh: La Javaness R&D

Để đào tạo mô hình, cần ghép cặp hình ảnh (Noisy-Ground Truth), tức là các cặp hình ảnh chất lượng thấp và chất lượng cao dựa trên cùng một tấm hình. Tuy nhiên, trong tình huống không có hình ảnh nhiễu từ thực tế, để có được các hình ảnh để ghép nối, ta có thể tạo dữ liệu tổng hợp bằng cách thêm yếu tố nhiễu nhân tạo vào hình ảnh.

Tạo nhiễu ảnh

Phương pháp 1 – Thêm các mẫu thực

Tạo bộ dữ liệu nhiễu tổng hợp từ hình ảnh sạch là một bước quan trọng để thuật toán đạt kết quả tốt, bởi phù hợp với các phương pháp dựa trên học tập.

Với cách làm trên, hình ảnh nhiễu tổng hợp thường khác với các hình ảnh nhiễu thực tế. Để giải quyết vấn đề này, ý tưởng là thu thập một lượng “mẫu” (nhiễu thực) và thêm chúng vào hình ảnh. Bắt đầu với một hình ảnh chất lượng cao trong tập dữ liệu được tạo ở bước trước, phương pháp này sẽ thay đổi độ mờ và độ sáng của ảnh, sau đó thêm một số “mẫu” đã thu thập vào đó. Dưới đây là các ví dụ về mẫu được thu thập từ hình ảnh thực tế:

Cac phuương pháp khử nhiễu xử lý ảnh
Nguồn ảnh: La Javaness R&D

Ta sử dụng bộ imgaug (một thư viện để tăng cường hình ảnh trong các thí nghiệm học máy) và fastai để tạo nhiễu (ví dụ: độ mờ, độ sáng và màu sắc ảnh).

Cac phuương pháp khử nhiễu xử lý ảnh
Hình ảnh nhiễu tổng hợp được tạo ra bằng cách thêm “mẫu” vào ảnh thực
Nguồn ảnh: La Javaness R&D

Tham khảo code để tạo tập dữ liệu nhiễu tổng hợp tại đây.

Phương pháp 2 – Thay đổi ngưỡng thang độ xám

Một phương pháp khác để tạo ra hình ảnh nhiễu là thay đổi ngưỡng nhị phân khi chuyển đổi từ RGB sang thang độ xám. Ví dụ: ngưỡng 128, giúp hình ảnh sắc nét hơn, có thể được sử dụng để tạo ra hình ảnh “chất lượng cao” (như được hiển thị ở bên trái trong hình ảnh bên dưới), trong khi ngưỡng 64, làm cho hình ảnh tối hơn, có thể được sử dụng để tạo ra một hình ảnh “nhiễu” (như hình bên phải).

Cac phuương pháp khử nhiễu xử lý ảnh
Kết hợp hai cách tiếp cận trên, ta có các cặp hình ảnh [nhiễu, chất lượng cao] để đào tạo
Nguồn ảnh: La Javaness R&D

Đào tạo mạng GAN

Hầu hết các mô hình khử nhiễu hoặc siêu phân giải dựa trên học sâu đều được đào tạo bằng phương pháp GAN. GAN là viết tắt của Generative Adversarial Nets và được phát minh bởi Ian Goodfellow. Ở đây, ta đào tạo hai mô hình cùng một lúc: một mô hình generator và một mô hình discriminator. Generator sẽ phân biệt hình ảnh nào là thật hay được tạo ra. Trình tạo (G) cố gắng đánh lừa discriminator (D) bằng cách tạo ra những hình ảnh mới tương tự như những hình ảnh trong tập dữ liệu. Bộ tạo (G) trả về một hình ảnh và discriminator trả về một số duy nhất (thường là xác suất, 0 đối với ảnh giả và 1 đối với ảnh thật).

Ta huấn luyện cả bộ D và G chống lại nhau bằng cách tối đa hóa hàm mục tiêu đối với bộ D và tối thiểu hóa nó đối với bộ G. E(D,G) là loss function (hàm mất mát) cho D và G

Cac phuương pháp khử nhiễu xử lý ảnh

Để thực hiện tối ưu hóa, ta cần:

Cac phuương pháp khử nhiễu xử lý ảnh
Cac phuương pháp khử nhiễu xử lý ảnh
Mô hình mạng GAN với D và G
Nguồn ảnh: La Javaness R&D

Bởi mạng GAN thường phức tạp (có hai phần), có các hàm max-min (non-monotonic loss functions) và khá nhạy cảm với các siêu tham số, do đó, thường cần phải khởi tạo mạng GAN bằng cách đào tạo trước G và D.

Đi sâu vào chi tiết đào tạo. Bước đầu tiên là đào tạo trước mô hình G. Như đã đề cập trước đó, ta sử dụng U-Net làm xương sống của trình tạo:

Cac phuương pháp khử nhiễu xử lý ảnh
Nguồn ảnh: La Javaness R&D

U-Net có bộ mã hóa Resnet34 (Resnet34 forward), tiếp theo là bộ giải mã Resnet34 (Resnet34 backward) và hai mạng được kết nối bằng một số kết nối tắt (skip connections). Mạng Resnet34 forward hoạt động như một phần khái quát của thông tin, trong khi mạng Resnet34 backward hoạt động như một sự tái tạo lại thông tin. Kết nối tắt cung cấp thêm attention để giúp quá trình xây dựng lại. Ta đào tạo U-Net trong đó đầu vào mạng Resnet34 forward là hình ảnh nhiễu và đầu ra mạng Resnet34 backward là hình ảnh sạch tương ứng của nó. Loss function là hàm MSE (Mean Squared Error) trên pixel ảnh. Ta cố gắng tái tạo lại một hình ảnh rõ tới từng pixel.

Bước thứ hai là đào tạo trước cho mô hình D. Ta sử dụng hình ảnh được tạo bởi trình tạo ở bước trước và hình ảnh trong tập dữ liệu để đào tạo bộ phân loại nhằm phân biệt hình ảnh giả (được tạo) với hình ảnh thực (gốc). Loss function là hàm binary cross-entropy để phân loại nhị phân. Ta quan sát thấy rằng trong hai bước đầu tiên cho đến nay, tất cả các loss function là hàm đơn điệu.

Tham khảo code bước này tại đây.

Bước thứ ba (và cuối cùng) là kết hợp hai mô hình và đào tạo mô hình U-Net thông qua phương pháp GAN. Loss function là một hàm max-min. Ta quan sát thấy rằng loss function không còn đơn điệu nữa, mà có sự cạnh tranh giữa hai mạng G và D. Ta cố gắng tái tạo lại hình ảnh rõ ràng, nhưng không còn ở mức pixel mà sẽ thực tế hơn.

Tham khảo code bước này tại đây.

Kết quả

Sau đây là các ví dụ về hình ảnh có độ phân giải thấp và phiên bản siêu phân giải của chúng có được bằng cách tiếp cận trên.

Hình ảnh nhiễu – Hình ảnh độ phân giải cao

Cac phuương pháp khử nhiễu xử lý ảnh
Cac phuương pháp khử nhiễu xử lý ảnh
Cac phuương pháp khử nhiễu xử lý ảnh
Cac phuương pháp khử nhiễu xử lý ảnh
Nguồn ảnh: La Javaness R&D