Bạn đã từng nhìn thấy những bức ảnh chụp phong cảnh, cảnh vật thay đổi theo 4 mùa, hay đã từng sử dụng tính năng thêm bộ lọc cho ảnh? Bạn có biết kỹ thuật đằng sau quá trình chuyển ảnh thẻ thành ảnh anime hay từ ảnh mờ sang ảnh nét? Trong thị giác máy tính, phép biến đổi image translation hỗ trợ các tác vụ này. Ta có thể dễ dàng tìm thấy ứng dụng của phép biến đổi này trong việc thay đổi phong cách, tô màu ảnh, làm nét ảnh, sinh dữ liệu phục vụ phân đoạn, hay filter khi chụp ảnh.
Thông thường để huấn luyện một mô hình image translation, ta sẽ cần một bộ dữ liệu lớn với các ảnh được ghép cặp. Tuy nhiên, việc tìm kiếm, xây dựng những bộ dữ liệu như vậy là rất tốn kém hoặc thậm chí không khả thi. Chính điều này làm nảy sinh nhu cầu phát triển một mô hình image translation sử dụng dữ liệu không ghép cặp. Đây chính là lý do CycleGAN ra đời.
Tổng quan về image translation
Image translation là nhiệm vụ chuyển đổi hình ảnh từ một miền (ví dụ: hình ảnh ngựa vằn) sang miền khác (ví dụ: hình ảnh ngựa). Lý tưởng nhất là các đặc trưng khác của hình ảnh — bất kỳ thứ gì không liên quan trực tiếp đến một trong hai miền, chẳng hạn như nền — nên được giữ nguyên. Trên thực tế, khả năng ứng dụng của image translation gần như không giới hạn. Thay đổi phong cách nghệ thuật, chuyển từ bản phác thảo sang ảnh hoặc thay đổi mùa của phong cảnh trong ảnh chỉ là một vài ví dụ.
Mặc dù đã có rất nhiều nghiên cứu về bài toán này, nhưng hầu hết đều sử dụng mô hình đào tạo có giám sát (supervised training), cho phép truy cập vào (x, y) các cặp hình ảnh tương ứng từ hai miền cần chuyển đổi. CycleGAN đã được giới thiệu trong bài báo nổi tiếng năm 2017 của Berkeley, có tiêu đề “Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks”. Điểm đặc biệt là ở chỗ, CycleGAN không yêu cầu dữ liệu đào tạo được ghép cặp, tuy nhiên vẫn cần có bộ ảnh x và y không nhất thiết phải tương ứng trực tiếp với nhau. Nói cách khác, nếu bạn muốn dịch giữa bản phác thảo và ảnh, bạn vẫn cần đào tạo trên một loạt bản phác thảo và một loạt ảnh, nhưng các bản phác thảo sẽ không cần phải là ảnh chính xác trong tập dữ liệu của bạn.
Vì gần như rất khó hoặc không thể tìm thấy dữ liệu được ghép cặp ở hầu hết các miền nên khả năng đào tạo không giám sát của CycleGAN khá hữu ích.
CycleGAN hoạt động như thế nào?
CycleGAN là Mạng đối nghịch tạo sinh (Generative adversarial network – GAN) sử dụng hai bộ tạo (generators – G) và hai bộ phân biệt (discriminators – D).
Ta gọi một trình tạo G và yêu cầu nó chuyển đổi hình ảnh từ miền X sang miền Y. Trình tạo khác được gọi là F và chuyển đổi hình ảnh từ Y sang X.
Cả G và F đều là các trình tạo lấy hình ảnh từ một miền và chuyển nó sang miền khác. G ánh xạ từ X sang Y, trong khi F đi theo hướng ngược lại, ánh xạ Y sang X.
Mỗi trình tạo có một bộ phân biệt tương ứng, cố gắng phân biệt các hình ảnh tổng hợp với các hình ảnh thực.
Hàm mục tiêu (The Objective Function)
Có hai thành phần đối với hàm mục tiêu CycleGAN là adversarial loss và cycle consistency loss. Cả hai đều cần thiết để có được kết quả tốt.
Nếu bạn đã quen thuộc với GAN thì có thể hiểu rõ: cả hai trình tạo đều đang cố gắng “đánh lừa” trình phân biệt tương ứng của chúng để ít có khả năng phân biệt hình ảnh tổng hợp với các phiên bản thực. Ta sử dụng least squares loss để nắm bắt điều này.
Tuy nhiên, chỉ riêng adversarial loss là không đủ để tạo ra hình ảnh tốt, vì nó khiến mô hình bị hạn chế. Nó bắt buộc đầu ra được tạo phải thuộc miền thích hợp, nhưng không bắt buộc đầu vào và đầu ra giống nhau một cách dễ nhận biết. Ví dụ: một trình tạo tạo ra hình ảnh y là ví dụ tuyệt vời về một miền cụ thể, nhưng trông không giống hình ảnh x. Trình tạo đó sẽ hoạt động tốt theo tiêu chuẩn của adversarial loss, mặc dù không mang lại kết quả như mong muốn.
Cycle consistency loss giải quyết vấn đề này. Nó dựa vào ý tưởng rằng nếu bạn chuyển đổi một hình ảnh sang miền khác và ngược lại, bằng cách cung cấp liên tiếp hình ảnh đó qua cả hai trình tạo, bạn sẽ nhận được một thứ tương tự như những gì bạn đã đưa vào. Theo đó, F(G(x)) ≈ x và G(F(y)) ≈ y.
Chúng ta có thể tạo hàm mục tiêu đầy đủ bằng cách đặt các chỉ số loss này lại với nhau và tính trọng số cycle consistency loss bằng một siêu tham số λ. Ta đề xuất đặt λ = 10.
Kiến trúc bộ tạo
Mỗi bộ tạo CycleGAN có ba phần: bộ mã hóa (encoder), bộ chuyển đổi (transformer) và bộ giải mã (decoder). Hình ảnh đầu vào được đưa trực tiếp vào bộ mã hóa, giúp thu nhỏ kích thước hiển thị, đồng thời tăng số lượng kênh. Bộ mã hóa bao gồm ba lớp tích chập. Kết quả sau đó được chuyển đến bộ chuyển đổi, một loạt sáu khối còn lại. Sau đó, nó được mở rộng một lần nữa bởi bộ giải mã, sử dụng hai tổ hợp chuyển vị để phóng to kích thước biểu diễn và một lớp đầu ra để tạo ra hình ảnh cuối cùng ở dạng RGB.
Bạn có thể xem chi tiết ở hình bên dưới. Xin lưu ý rằng mỗi lớp được theo sau bởi một phiên bản chuẩn hóa (batch norm) và hàm kích hoạt ReLU, nhưng những lớp này đã được lược bỏ để đơn giản hóa.
Kiến trúc bộ tạo CycleGAN. Như bạn có thể thấy ở trên, kích thước biểu diễn thu lại trong giai đoạn mã hóa, không đổi trong giai đoạn chuyển đổi và lại mở rộng trong giai đoạn giải mã. Kích thước biểu diễn mà mỗi lớp xuất ra được liệt kê bên dưới nó, về kích thước hình ảnh đầu vào, k. Trên mỗi lớp được liệt kê số lượng bộ lọc, kích thước của các bộ lọc đó và bước tiến. Mỗi lớp được theo sau bởi một phiên bản chuẩn hóa và kích hoạt ReLU.
Vì kiến trúc của bộ tạo hoàn toàn tích chập nên chúng có thể xử lý đầu vào lớn tùy ý sau khi được đào tạo.
Kiến trúc bộ phân biệt
Các bộ phân biệt là PatchGAN, các mạng thần kinh tích chập hoàn toàn xem xét một phần (“patch”) của hình ảnh đầu vào và đưa ra xác suất để patch đó là “thực”. Điều này vừa hiệu quả hơn về mặt tính toán so với việc cố gắng xem xét toàn bộ hình ảnh đầu vào và cũng cho phép bộ phân biệt tập trung vào nhiều đặc trưng ở cấp độ bề mặt hơn, chẳng hạn như kết cấu, thứ thường được thay đổi trong một bài toán chuyển ảnh.
Một kiến trúc mẫu cho bộ phân biệt PatchGAN. PatchGAN là một mạng tích chập hoàn toàn, thu nhận một hình ảnh và tạo ra một ma trận xác suất, mỗi ma trận đề cập đến xác suất của “patch” tương ứng của hình ảnh là “thực” (trái ngược với xác suất được tạo). Kích thước biểu diễn mà mỗi lớp xuất ra được liệt kê bên dưới nó, về kích thước hình ảnh đầu vào, k. Trên mỗi lớp được liệt kê số lượng bộ lọc, kích thước của các bộ lọc đó và bước tiến.
Như bạn có thể thấy trong cấu trúc ví dụ ở trên, PatchGAN giảm một nửa kích thước biểu diễn và tăng gấp đôi số lượng kênh cho đến khi đạt được kích thước đầu ra mong muốn. Trong trường hợp này, cách hiệu quả nhất là để PatchGAN đánh giá các patch có kích thước 70×70 của đầu vào.
Giảm dao động mô hình
Để ngăn mô hình thay đổi mạnh từ lần lặp này sang lần lặp khác, các bộ phân biệt được cung cấp lịch sử các hình ảnh được tạo, thay vì chỉ những hình được tạo bởi các phiên bản mới nhất của trình tạo. Để làm điều này, ta giữ một nhóm để lưu trữ 50 hình ảnh được tạo gần đây nhất. Kỹ thuật giảm dao động mô hình này được tiên phong bởi Shrivastava et al. trong Learning from Simulated and Unsupervised Images through Adversarial Training.
Chi tiết đào tạo khác
Phương pháp đào tạo khá điển hình cho một nhiệm vụ dịch từ hình ảnh sang hình ảnh. Trình tối ưu hóa Adam (Adam optimizer), một loại phổ biến của giảm dần độ dốc, được sử dụng để giúp đào tạo ổn định và hiệu quả hơn. Tỷ lệ học tập được đặt thành 0,0002 trong nửa đầu của quá trình đào tạo và sau đó giảm tuyến tính về 0 trong các lần lặp lại còn lại. Kích thước batch được đặt thành 1, đó là lý do tại sao ta đề cập đến chuẩn hóa thực thể (instance normalization), thay vì batch normalization, trong sơ đồ kiến trúc ở trên.
Ưu điểm và hạn chế
Nhìn chung, kết quả do CycleGAN tạo ra rất tốt — tương đương với dịch hình ảnh sử dụng dữ liệu được ghép cặp trong nhiều tác vụ. Điều này rất ấn tượng, bởi các bài toán image translation có ghép cặp là một hình thức học tập có giám sát hoàn toàn, còn CycleGAN thì không. Khi bài báo CycleGAN xuất hiện, nó đã dễ dàng vượt qua các kỹ thuật dịch hình ảnh không giám sát khác có sẵn vào thời điểm đó. Trong các thí nghiệm “thật và giả”, khoảng 25% trường hợp con người không thể phân biệt hình ảnh được tổng hợp với hình ảnh thực.
CycleGAN có thể được sử dụng để thay đổi phong cách bộ sưu tập, trong đó toàn bộ tác phẩm của một nghệ sĩ được sử dụng để huấn luyện mô hình.
Nếu bạn dự định sử dụng CycleGAN cho một ứng dụng thực tế, điều quan trọng là phải nhận thức được những điểm mạnh và hạn chế của nó. Nó hoạt động tốt trên các tác vụ liên quan đến thay đổi màu sắc hoặc kết cấu, chẳng hạn như image translation từ ngày sang đêm hoặc tác vụ chuyển ảnh thành tranh vẽ như ví dụ trên. Tuy nhiên, các tác vụ yêu cầu thay đổi hình học đáng kể đối với hình ảnh, chẳng hạn như dịch từ mèo sang chó, thường không thành công.
CycleGAN không thành công trong việc thay đổi các yếu tố hình học của ảnh.
Các bản dịch trên dữ liệu đào tạo thường trông đẹp hơn đáng kể so với các bản dịch được thực hiện trên dữ liệu thử nghiệm.