Giới thiệu dự án
Sự phát triển vượt bậc của các mô hình sinh đối nghịch (Generative Adversarial Networks - GAN) đã định hình lại toàn bộ lĩnh vực thị giác máy tính và đồ họa kỹ thuật số. Theo thống kê từ các báo cáo thị giác máy tính giai đoạn 2020–2021, hơn 70% các giải pháp xử lý ảnh chân dung thương mại dựa trên nền tảng mạng sinh sâu. Tuy nhiên, các kiến trúc hàng đầu như StyleGAN và StyleGAN2 chủ yếu được thiết kế để sinh ảnh chất lượng cao (High Quality - HQ) từ các phân phối lý tưởng, dẫn đến sự suy giảm hiệu năng nghiêm trọng khi đối mặt với dữ liệu thực tế bị suy thoái (nhiễu hạt, mờ chuyển động, độ phân giải cực thấp hoặc vỡ hình do nén JPEG).
Đồ án tốt nghiệp "QC-StyleGAN2: Mô hình sinh đối nghịch với tùy biến chất lượng đầu ra" do sinh viên Nguyễn Viết Thành Đạt thực hiện dưới sự hướng dẫn của PGS. Phạm Văn Cường (Khoa Công nghệ Thông tin, Học viện Công nghệ Bưu chính Viễn thông) tập trung giải quyết bài toán cốt lõi: kiểm soát và tùy biến chất lượng ảnh đầu ra một cách chủ động, đồng thời tái tạo ảnh có độ phân giải và chất lượng cao từ các nguồn ảnh suy giảm nghiêm trọng.
+-------------------------------------------------------------------------+
| QC-StyleGAN2 |
| |
| [Latent Space W] + [Quality Vector q] ---> [Synthesis Network g] |
| | |
| v |
| [Low-Quality Input x_deg] ---> [PTI Inversion] ---> [High-Quality Output]|
+-------------------------------------------------------------------------+
Mục tiêu của dự án
- Thiết kế kiến trúc QC-StyleGAN2: Mở rộng mạng StyleGAN2 với khả năng điều khiển liên tục mức độ suy thoái hoặc sắc nét của ảnh sinh ra thông qua vector điều kiện chất lượng.
- Xây dựng đường ống suy giảm dữ liệu đa dạng (Synthetic Degradation Pipeline): Tự động hóa các kỹ thuật làm mờ (Gaussian Blur), thêm nhiễu (Gaussian/Poisson Noise), đổi màu (Color Jittering) và nén vỡ điểm ảnh (JPEG Compression Artifacts) trên tập dữ liệu chuẩn Flickr-Faces-HQ (FFHQ).
- Phát triển mạng phân biệt kép (Dual/Pairwise Discriminator): Tăng cường khả năng nhận diện chất lượng tương đối giữa các cặp ảnh thật - giả và sắc nét - suy thoái.
- Ứng dụng Pivotal Tuning Inversion (PTI): Ánh xạ ảnh chất lượng thấp vào không gian tiềm ẩn trung gian $\mathcal{W}$ và tinh chỉnh trọng số mô hình để khôi phục ảnh chân thực, loại bỏ suy thoái mà không làm biến dạng cấu trúc nhận dạng khuôn mặt.
Phạm vi và giới hạn nghiên cứu
- Phạm vi dữ liệu: Tập dữ liệu FFHQ (Flickr-Faces-HQ) kích thước $1024 \times 1024$ pixel.
- Giới hạn kỹ thuật: Tập trung vào khuôn mặt người; yêu cầu phần cứng tính toán hiệu năng cao (GPU NVIDIA với bộ nhớ $\ge 16\text{ GB}$ VRAM).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Các mô hình sinh hiện đại thường tách biệt bài toán sinh ảnh độ phân giải cao và bài toán siêu phân giải/phục chế ảnh (Super-Resolution/Restoration), dẫn đến sự thiếu linh hoạt khi triển khai thực tế.
| Tiêu chí |
ProGAN (2018) |
SRGAN (2017) |
StyleGAN2-ADA (2020) |
QC-StyleGAN2 (Đề xuất) |
| Độ phân giải tối đa |
$1024 \times 1024$ |
$256 \times 256$ / $512 \times 512$ |
$1024 \times 1024$ |
$1024 \times 1024$ |
| Kiểm soát chất lượng |
Không |
Không |
Không |
Có (Đa cấp độ) |
| Khả năng GAN Inversion |
Kém |
Không áp dụng |
Khá |
Xuất sắc (Tích hợp PTI) |
| Khả năng chống Artifacts |
Xuất hiện Blob |
Bị mờ cạnh viền |
Khắc phục Water Droplets |
Khắc phục triệt để Water Droplets & JPEG Artifacts |
| Độ ổn định huấn luyện |
Trung bình |
Khá |
Cao (nhờ ADA) |
Rất cao |
Yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc): Kiến trúc Generator tích hợp vector chất lượng $q$; mạng Discriminator phân biệt được cả tính chân thực và cấp độ suy thoái; cơ chế Weight Demodulation thay thế AdaIN.
- Should Have (Nên có): Thuật toán Pivotal Tuning Inversion (PTI) tối ưu hóa latent code và weights; pipeline sinh dữ liệu suy thoái ngẫu nhiên on-the-fly.
- Could Have (Có thể có): Giao diện trực quan hóa quá trình điều khiển chất lượng; hỗ trợ trích xuất ảnh đa định dạng.
- Won't Have (Chưa thực hiện): Khôi phục toàn thân (Full-body restoration) hoặc xử lý video thời gian thực trên thiết bị biên.
Thiết kế hệ thống
+---------------+ w in W +-------------------------------------------+
| Mapping | --------------->| Synthesis Network g |
| Network f | | |
+---------------+ | +-------------+ +---------------+ |
^ | | Style Block | ----> | Mod/Demod Conv| |
| | +-------------+ +---------------+ |
z in Z +-------------------------------------------+
|
v
+---------------+ q (Quality) Generated Image x_gen
| Quality Cond. | ------------------------------------->|
+---------------+ v
+---------------------------+
| Discriminator D / D_pair |
+---------------------------+
Technology Stack và phiên bản chi tiết
- Ngôn ngữ lập trình: Python 3.8.10
- Deep Learning Framework: PyTorch 1.7.1 kèm CUDA 11.0 và CuDNN 8.0.5
- Thư viện thị giác máy tính: OpenCV 4.5.1, Torchvision 0.8.2, Pillow 8.1.0
- Công cụ tính toán số học & đánh giá: NumPy 1.19.5, SciPy 1.6.0, scikit-image 0.18.1
- Phần cứng thực nghiệm: NVIDIA RTX 3090 (24GB VRAM) / Tesla V100
Kiến trúc chi tiết các module
- Mapping Network ($f$): Gồm 8 lớp Fully Connected (MLP) ánh xạ từ không gian nhiễu Gaussian ban đầu $\mathcal{Z} \subset \mathbb{R}^{512}$ sang không gian tiềm ẩn trung gian $\mathcal{W} \subset \mathbb{R}^{512}$, giúp gỡ rối (disentanglement) các thuộc tính khuôn mặt.
- Synthesis Network ($g$): Gồm chuỗi các khối tích chập từ độ phân giải $4 \times 4$ đến $1024 \times 1024$. Thay vì sử dụng Adaptive Instance Normalization (AdaIN) dễ tạo ra các đốm nước (water-droplet artifacts), mô hình áp dụng cơ chế Weight Demodulation.
- Quality Modulation Module: Vector chất lượng $q$ được mã hóa và đưa vào các khối Style Block để điều chế cường độ đặc trưng chi tiết cao (high-frequency features).
- Mạng phân biệt kép ($D$ và $D_{pair}$):
- $D(x, q)$: Dự đoán xem ảnh $x$ có phải là ảnh thật với mức chất lượng $q$ hay không.
- $D_{pair}(x_{HQ}, x_{LQ})$: Đánh giá mối tương quan phân cấp giữa ảnh chất lượng cao và ảnh suy thoái tương ứng.
Phương pháp luận (Methodology)
Dự án áp dụng quy trình nghiên cứu thực nghiệm lặp (Iterative Empirical Research) kết hợp mô hình Agile trong phát triển mã nguồn:
- Giai đoạn 1: Khảo sát và xây dựng baseline StyleGAN2-ADA trên tập FFHQ.
- Giai đoạn 2: Thiết kế toán học cho cơ chế điều chế chất lượng và lập trình module $D_{pair}$.
- Giai đoạn 3: Huấn luyện đối kháng đa tỉ lệ và tinh chỉnh hàm mất mát (Loss balancing).
- Giai đoạn 4: Tích hợp thuật toán Pivotal Tuning Inversion (PTI) và đánh giá định lượng bằng các chỉ số FID, PPL.
Implementation và kết quả
Quy trình phát triển và thuật toán cốt lõi
Hàm mục tiêu tổng quát của QC-StyleGAN2 được thiết lập theo trò chơi Minimax có điều kiện chất lượng:
$$\min_G \max_D V(D, G) = \mathbb{E}{x \sim p{data}, q \sim p_q}[\log D(x, q)] + \mathbb{E}_{z \sim p_z, q \sim p_q}[\log(1 - D(G(z, q), q))]$$
Để loại bỏ hoàn toàn các lỗi giọt nước trên ảnh sinh ra, kỹ thuật Weight Demodulation được triển khai theo hai bước:
- Điều chế trọng số (Modulation) theo hệ số tỉ lệ $s_i$ từ vector phong cách:
$$w'{ijk} = s_i \cdot w{ijk}$$
- Giải điều chế (Demodulation) chuẩn hóa trọng số về phân phối chuẩn:
$$w''{ijk} = \frac{w'{ijk}}{\sqrt{\sum_{i, k} (w'_{ijk})^2 + \epsilon}}$$
Trong đó $w_{ijk}$ là trọng số gốc của kernel tích chập, $s_i$ là hệ số tỉ lệ của feature map thứ $i$, và $\epsilon = 10^{-8}$ là hằng số chống chia cho 0.
Code Snippet: Lớp Weight Demodulation trong QC-StyleGAN2 (PyTorch)
import torch
import torch.nn as nn
class QCWeightDemodConv2d(nn.Module):
"""
Quality-Controllable Conv2d with Weight Demodulation
Tích hợp điều chế chất lượng trực tiếp vào trọng số tích chập.
"""
def __init__(self, in_channels, out_channels, kernel_size=3, eps=1e-8):
super(QCWeightDemodConv2d, self).__init__()
self.in_channels = in_channels
self.out_channels = out_channels
self.kernel_size = kernel_size
self.eps = eps
self.padding = kernel_size // 2
# Trọng số kernel ban đầu
self.weight = nn.Parameter(
torch.randn(out_channels, in_channels, kernel_size, kernel_size)
)
def forward(self, x, style_and_quality):
"""
x: [Batch, in_channels, Height, Width]
style_and_quality: [Batch, in_channels] - Vector kết hợp giữa W và vector chất lượng q
"""
batch_size = x.shape[0]
# 1. Modulation: w'_{b, j, i, k, l} = s_{b, i} * w_{j, i, k, l}
weights = self.weight.unsqueeze(0) # [1, out_c, in_c, k, k]
styles = style_and_quality.view(batch_size, 1, self.in_channels, 1, 1)
weights = weights * styles # [batch, out_c, in_c, k, k]
# 2. Demodulation: w'' = w' / sqrt(sum(w'^2) + eps)
demod = torch.rsqrt(
torch.sum(weights ** 2, dim=[2, 3, 4], keepdim=True) + self.eps
)
weights = weights * demod # Chuẩn hóa trọng số
# Gộp batch vào tích chập nhóm để tối ưu hóa tính toán trên GPU
x = x.view(1, batch_size * self.in_channels, x.shape[2], x.shape[3])
weights = weights.view(
batch_size * self.out_channels, self.in_channels, self.kernel_size, self.kernel_size
)
out = torch.nn.functional.conv2d(
x, weights, padding=self.padding, groups=batch_size
)
out = out.view(batch_size, self.out_channels, out.shape[2], out.shape[3])
return out
Đánh giá và kiểm thử thực nghiệm
Mô hình được huấn luyện trên 70,000 ảnh từ tập dữ liệu FFHQ với kích thước chuẩn $1024 \times 1024$. Quá trình kiểm thử thực hiện đo đạc hai chỉ số cốt lõi:
- Frechet Inception Distance (FID): Đo khoảng cách phân phối giữa tập ảnh thật và tập ảnh sinh ra (FID càng thấp, ảnh càng sắc nét và tự nhiên).
- Perceptual Path Length (PPL): Đo độ mượt mà của không gian tiềm ẩn khi nội suy giữa các vector tiềm ẩn (PPL càng thấp, tính phân tách và mượt mà càng cao).
| Mức độ chất lượng mô phỏng ($q$) |
FID Baseline (StyleGAN2-ADA) |
FID QC-StyleGAN2 (Đề xuất) |
Cải thiện (%) |
PPL ($\mathcal{W}$) |
| High Quality (Chuẩn 100%) |
3.84 |
3.76 |
+2.08% |
124.5 |
| Medium Degradation (JPEG Q=30, Noise $\sigma=15$) |
18.92 |
9.45 |
+50.05% |
148.2 |
| Severe Degradation (Blur $7\times7$, Noise $\sigma=35$, JPEG Q=10) |
45.30 |
16.12 |
+64.41% |
172.9 |
| Super-Resolution Reconstruction ($128\to1024$ via PTI) |
24.15 |
8.20 |
+66.04% |
131.0 |
So sánh chỉ số FID tại các mức suy thoái khác nhau (Thấp hơn là tốt hơn):
Severe Degradation:
Baseline StyleGAN2: [====================================] 45.30
QC-StyleGAN2: [==============] 16.12 (-64.41%)
Medium Degradation:
Baseline StyleGAN2: [===============] 18.92
QC-StyleGAN2: [=======] 9.45 (-50.05%)
Kết quả đạt được
- Mô hình kiểm soát thành công việc sinh ảnh chân dung từ cấp độ mờ/nhiễu có chủ đích đến cấp độ siêu sắc nét $1024 \times 1024$ mà không làm thay đổi các đặc trưng nhận dạng (Identity Preservation).
- Ứng dụng thành công kỹ thuật Pivotal Tuning Inversion (PTI): Tìm kiếm điểm neo (pivot point) $w_p \in \mathcal{W}$ và tinh chỉnh cục bộ Generator $G$, khôi phục ảnh có độ sắc nét chi tiết (lông mi, lỗ chân lông, tóc) từ ảnh đầu vào $64 \times 64$ bị nén nặng.
Đổi mới và đóng góp
- Cơ chế điều chế chất lượng đa cấp (Quality Conditioning Modulation): Khác với các GAN thông thường chỉ cố gắng sinh ảnh đẹp nhất, QC-StyleGAN2 cho phép đưa một tham số chất lượng liên tục $q \in [0, 1]$ vào quá trình sinh ảnh, tạo ra phân phối dữ liệu đa dạng phục vụ cho việc huấn luyện các mô hình thị giác xuôi dòng (downstream tasks).
- Bộ phân biệt theo cặp (Pairwise Discriminator): Giới thiệu kiến trúc $D_{pair}$ giúp mô hình học được mối quan hệ có thứ tự giữa các trạng thái suy thoái của cùng một khuôn mặt, nâng cao độ ổn định huấn luyện lên 35% so với GAN có điều kiện (cGAN) truyền thống.
- Quy trình tái tạo ảnh suy thoái cao với PTI: Kết hợp giữa không gian tiềm ẩn $\mathcal{W}^+$ và quá trình tối ưu hóa trọng số Generator giúp giải quyết triệt để vấn đề "Distortion-Perception Trade-off" trong bài toán phục chế ảnh chân dung.
- Đóng góp học thuật và mã nguồn: Cung cấp bộ công cụ tiền xử lý, mô phỏng suy thoái ảnh thực tế (Real-world Degradation Pipeline) cho cộng đồng nghiên cứu AI tại Việt Nam.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Hệ thống eKYC & Giám sát an ninh: Nâng cấp chất lượng ảnh chụp chứng minh nhân dân/căn cước công dân cũ, mờ hoặc ảnh trích xuất từ camera giám sát (CCTV) có độ phân giải thấp phục vụ nhận diện danh tính.
- Bảo tồn và phục chế di sản số: Phục chế ảnh tư liệu lịch sử, chân dung gia đình bị ố mờ, trầy xước và suy giảm chất lượng vật lý qua thời gian.
- Tối ưu hóa băng thông truyền tải: Nén ảnh chân dung về kích thước cực nhỏ kèm vector chất lượng, sau đó tái tạo độ phân giải cao tại máy trạm của người dùng cuối.
Chiến lược triển khai và kiến trúc API
Mô hình có thể được đóng gói dạng microservice trong Docker container và phân phối thông qua RESTful API hoặc gRPC:
POST /api/v1/restore-portrait
Headers:
Content-Type: multipart/form-data
Authorization: Bearer <API_TOKEN>
Body:
image: <binary_data>
target_quality: 1.0
inversion_method: "PTI"
iterations: 350
Response:
{
"status": "success",
"processing_time_ms": 1420,
"fid_estimated": 3.76,
"output_image_url": "https://storage.cdn/restored_1024x1024.png"
}
+-------------+ Image + Target Q +-----------------------+
| Client App | -------------------------> | Triton / TorchServe |
| (Web/Mobile)| <------------------------- | (QC-StyleGAN2 + PTI)|
+-------------+ Restored 1024x1024 +-----------------------+
Lộ trình triển khai (Roadmap)
- Quý 1: Đóng gói mô hình core, tối ưu hóa kích thước checkpoint trọng số (model pruning & FP16 quantization).
- Quý 2: Xây dựng Inversion Encoder chuyên dụng (e4e-like) để giảm thời gian chiếu latent từ 30 giây xuống 80ms (real-time inversion).
- Quý 3: Triển khai thử nghiệm pilot trên hệ thống kiểm soát ra vào của các tòa nhà thông minh.
- Quý 4: Mở rộng kiến trúc sang miền ảnh tổng quát (General Scenes & Artworks).
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Chi phí tính toán cao: Quá trình Pivotal Tuning Inversion (PTI) yêu cầu tối ưu hóa gradient ngược trên trọng số mô hình cho từng ảnh đơn lẻ, mất khoảng 20–45 giây trên GPU đơn RTX 3090.
- Phụ thuộc vào miền dữ liệu: Mô hình được huấn luyện trên FFHQ nên bị thiên kiến (bias) đối với ảnh khuôn mặt người; khi đưa vào các đối tượng động vật hoặc phong cảnh, chất lượng tái tạo giảm rõ rệt.
Hướng phát triển trong tương lai
- Phát triển Fast Encoder: Xây dựng mạng Encoder học sâu đưa trực tiếp ảnh suy thoái về vector không gian $\mathcal{W}^+$ trong một lượt forward pass.
- Chuyển giao sang kiến trúc Diffusion: Nghiên cứu kết hợp cơ chế Quality Conditioning vào các mô hình Latent Diffusion Models (LDM) nhằm nâng cao tính đa dạng của chi tiết vi mô.
Đối tượng hưởng lợi
+-------------------------------------------------------------------------+
| Đối Tượng Hưởng Lợi |
| |
| [Sinh viên / Học viên] --> Giáo trình, code mẫu trực quan về GANs |
| [Kỹ sư AI / Developers] --> Source code Weight Demodulation, PTI module|
| [Doanh nghiệp eKYC/App] --> Giảm 40% chi phí phục chế ảnh thủ công |
| [Nhà nghiên cứu] --> Baseline mới về Quality-Controllable GANs |
+-------------------------------------------------------------------------+
- Sinh viên và Học viên Công nghệ: Nguồn tài liệu tham khảo chi tiết về toán học GAN, kỹ thuật giải điều chế trọng số (Weight Demodulation) và các bước xử lý không gian tiềm ẩn.
- Kỹ sư AI & Lập trình viên: Cung cấp cấu trúc mã nguồn chuẩn PyTorch cho các tác vụ custom layer, pipeline huấn luyện đối kháng đa điều kiện và GAN Inversion.
- Doanh nghiệp EdTech & Xử lý ảnh số: Giải pháp tự động hóa giúp cắt giảm đến 40% chi phí nhân sự xử lý đồ họa và tăng độ chính xác của các thuật toán nhận diện khuôn mặt đầu vào.
- Nhà nghiên cứu học máy: Cung cấp phương pháp tiếp cận mới trong việc dung hòa giữa khả năng sinh ngẫu nhiên (Generation) và tính chính xác của dữ liệu phục chế (Restoration).
Câu hỏi thường gặp
1. Cấu hình phần cứng tối thiểu để triển khai và huấn luyện QC-StyleGAN2 là gì?
Để huấn luyện mô hình ở độ phân giải $1024 \times 1024$ với batch size 8, yêu cầu tối thiểu GPU 24GB VRAM (như NVIDIA RTX 3090, RTX 4090, A100). Trong môi trường suy luận (Inference) và chạy Inversion với PTI, hệ thống cần tối thiểu 1 GPU với 8GB–12GB VRAM (như RTX 2080Ti, RTX 3060).
2. QC-StyleGAN2 khắc phục hiện tượng Mode Collapse bằng cách nào?
Mô hình sử dụng cơ chế Minibatch Discrimination kết hợp cùng kỹ thuật tăng cường dữ liệu thích ứng (Adaptive Discriminator Augmentation - ADA) và hàm phạt R1 Regularization, giúp Discriminator không bao giờ áp đảo Generator trong suốt quá trình hội tụ.
3. Vector chất lượng $q$ được biểu diễn như thế nào trong mô hình?
Vector chất lượng $q$ là một vector liên tục gồm các giá trị vô hướng đại diện cho các mức độ suy giảm: độ mờ bán kính $r$, phương sai nhiễu $\sigma^2$, và hệ số chất lượng nén JPEG $Q_{factor}$. Vector này được chiếu qua một mạng embedding nhỏ trước khi đưa vào các Style Block.
4. Tại sao cần sử dụng Pivotal Tuning Inversion (PTI) thay vì chuẩn hóa không gian $\mathcal{W}$ thông thường?
Không gian $\mathcal{W}$ thông thường không thể bao phủ toàn bộ các chi tiết dị biệt ngoài phân phối (Out-of-Distribution - OOD) như vết sẹo, nốt ruồi hoặc nếp nhăn đặc thù của ảnh suy thoái. PTI tìm một điểm neo $w_p \in \mathcal{W}$ gần nhất và tinh chỉnh nhẹ các trọng số của Generator xung quanh điểm neo này, đảm bảo tái tạo chính xác $100%$ nhận dạng khuôn mặt mà không làm vỡ cấu trúc không gian chung.
5. Chi phí triển khai hệ thống phục chế ảnh dùng QC-StyleGAN2 trên hạ tầng Cloud là bao nhiêu?
Sử dụng 1 instance GPU NVIDIA T4 trên AWS (g4dn.xlarge) có chi phí khoảng $0.526/giờ. Sau khi tối ưu hóa inference batching, hệ thống có thể xử lý khoảng 1,200 yêu cầu phục hồi ảnh cơ bản mỗi giờ, đưa chi phí tính toán cho mỗi ảnh về mức dưới $0.0005.
Kết luận
Đồ án "QC-StyleGAN2: Mô hình sinh đối nghịch với tùy biến chất lượng đầu ra" của sinh viên Nguyễn Viết Thành Đạt đã hoàn thành xuất sắc các mục tiêu nghiên cứu đặt ra. Bằng việc cải tiến cấu trúc StyleGAN2 với cơ chế điều chế chất lượng chủ động, mô hình đã giảm chỉ số FID trên ảnh suy thoái từ 45.30 xuống 16.12 (cải thiện 64.41%), giải quyết trọn vẹn điểm nghẽn của các mạng sinh ảnh hiện nay khi làm việc với dữ liệu thế giới thực kém hoàn hảo.
Thành công của đồ án không chỉ khẳng định năng lực ứng dụng toán học và học sâu hiện đại của sinh viên Học viện Công nghệ Bưu chính Viễn thông mà còn mở ra triển vọng ứng dụng lớn trong các hệ thống định danh điện tử, số hóa di sản và an ninh thông tin. Các nhà nghiên cứu và lập trình viên quan tâm có thể tiếp tục phát triển hướng nghiên cứu này thông qua việc xây dựng các bộ Encoder thời gian thực và mở rộng sang xử lý video đa khung hình.