Đây là mã nguồn cho bài báo "MNet: A multi-scale network for visible watermark removal", một phương pháp tiên tiến để loại bỏ các hình mờ có thể nhìn thấy khỏi hình ảnh.
Dự án này giải quyết bài toán loại bỏ hình mờ có thể nhìn thấy, một nhiệm vụ đầy thách thức do sự đa dạng về hình dạng, màu sắc và kết cấu của hình mờ. Các phương pháp trước đây thường gặp vấn đề về chất lượng khôi phục nền thấp hoặc tích tụ lỗi trong các kiến trúc nhiều giai đoạn.
MNet đề xuất một hướng tiếp cận mới: một mạng một giai đoạn, đa quy mô hiệu quả. Kiến trúc này giúp đơn giản hóa quá trình tối ưu hóa và tránh được các vấn đề trên, đồng thời tạo ra kết quả hình ảnh chất lượng vượt trội so với các phương pháp tiên tiến nhất (SOTA).
MNet là một mô hình học đa nhiệm, thực hiện đồng thời hai tác vụ chính thông qua hai nhánh xử lý song song:
- Nhánh Khôi phục Nền (Background Restoration): Thay vì dự đoán trực tiếp toàn bộ ảnh nền, MNet dự đoán một "ảnh chống hình mờ" (anti-watermark image). Việc này giúp giảm độ khó của bài toán và cải thiện chất lượng khôi phục một cách đáng kể.
- Nhánh Dự đoán Mặt nạ (Mask Prediction): Xác định chính xác vị trí của hình mờ trên ảnh, giúp cho việc tái tạo được chính xác và giữ nguyên các vùng không bị ảnh hưởng.
Các đặc điểm kiến trúc cốt lõi bao gồm:
- Kiến trúc Đa quy mô: Sử dụng nhiều lớp U-Nets hoạt động trên các phiên bản ảnh có tỷ lệ khác nhau để nắm bắt cả chi tiết cục bộ và ngữ cảnh toàn cục.
- Hợp nhất Đặc trưng (Feature Fusion): Tích hợp các cơ chế hợp nhất đặc trưng trong lớp (Intra-layer) và chéo lớp (Cross-layer) để tăng cường luồng thông tin hiệu quả giữa các U-Nets.
- Hiệu suất Vượt trội: Đạt kết quả SOTA (State-of-the-art), vượt qua các phương pháp trước đó trên các bộ dữ liệu tiêu chuẩn (LOGO-H, LOGO-L, LOGO-Gray).
- Chất lượng Hình ảnh Cao: Tạo ra các hình ảnh được khôi phục sắc nét, rõ ràng và có chất lượng thị giác cao, ít bị mờ hay còn sót lại chi tiết thừa.
- Kiến trúc Hiệu quả: Chứng minh rằng một mạng một giai đoạn được thiết kế tốt có thể hiệu quả hơn các kiến trúc hai giai đoạn phức tạp.
- Linh hoạt: Kiến trúc cho phép thay đổi số lượng U-Nets trong mỗi lớp để tinh chỉnh hiệu suất và độ phức tạp.
Chắc chắn rồi! Dưới đây là nội dung đã được cập nhật lại với chỉ mục bắt đầu từ mục số 4, giữ nguyên toàn bộ hướng dẫn chi tiết như trước.
Bạn có thể truy cập web để có thể trải nghiệm ngay.
Hoặc có thể chạy thủ công bằng CLI.
Hoặc có thể thiết lập web để thao tác.
Cách này phù hợp nếu bạn muốn kiểm tra nhanh khả năng của mô hình trên một ảnh.
-
Clone repository (Nếu bạn chưa có mã nguồn):
git clone https://github.com/Lam-Hung-ai/MNET_experiment.git cd MNet_experiment -
Cài đặt PyTorch: Truy cập trang chủ của PyTorch và làm theo hướng dẫn để cài đặt phiên bản phù hợp với hệ điều hành và phần cứng (CPU hoặc GPU) của bạn.
-
Cài đặt các thư viện phụ thuộc:
pip install -r requirements.txt
Tải file trọng số của mô hình từ link sau và đặt vào thư mục weight ở gốc của dự án.
- Link tải: Google Drive
- Đường dẫn lưu file:
MNet_experiment/weight/model_best.pth.tar
Sử dụng lệnh sau để chạy mô hình trên ảnh mẫu. Kết quả sẽ được lưu trong thư mục results.
python inference.py -w weight/model_best.pth.tar -i example_images/COCO_val2014_000000014338-Jules_Logo-175.pngCách này sẽ khởi chạy một giao diện web cho phép bạn tải ảnh lên và nhận kết quả một cách trực quan.
- Thực hiện lại Bước 1 và Bước 2 của phần 4.1 Chạy bằng CLI để đảm bảo bạn đã có môi trường Python và file trọng số.
- Quan trọng: Sao chép file trọng số
model_best.pth.tartừ thư mụcweightở gốc vào thư mụcweb/backend/weight/.
-
Di chuyển vào thư mục
backend:cd web/backend -
Khởi động server FastAPI bằng
uvicorn. Server sẽ chạy tại địa chỉhttp://localhost:8000.uvicorn main:app --host 0.0.0.0 --port 8000
Để terminal này chạy.
-
Mở một terminal mới và di chuyển vào thư mục
frontend:cd web/frontend -
Cài đặt các gói phụ thuộc cho frontend (chỉ cần làm lần đầu):
pnpm dev -H 0.0.0.0
-
Khởi động giao diện người dùng:
pnpm dev
-
Mở trình duyệt và truy cập vào địa chỉ
http://localhost:3000để bắt đầu trải nghiệm.
- Tải bộ dữ liệu 10khigh trên HuggingFace
- Tải trọng sô model như bước 4.2
- Thực thi chương trình với các đường dẫn tùy chỉnh
cd evaluate
python evaluate.py \
--weight '/home/lamhung/paper/xử lý ảnh/MNet_experiment/weight/model_best.pth.tar' \
--image '/home/lamhung/paper/xử lý ảnh/MNet/10khigh/val_input_256' \
--ground_truth_dir '/home/lamhung/paper/xử lý ảnh/MNet/10khigh/val_target_256' \
--restoration_image_dir '/home/lamhung/paper/xử lý ảnh/MNet_experiment/evaluate/results'
- Bạn hãy thay đổi các đường dẫn:
- --weigh: đường dẫn tới file trọng số model
- --image: đường dẫn tới thư mục chứa ảnh có watermark
- --ground_truth_dir: đường dãn tới thư mục chứa những ground truth image của bộ dữ liệu 10khigh
- --restoration_image_dir: đường dẫn tới thư mục chứa những hình ảnh xóa watermark của model
- Kết quả đánh giá chất lượng ảnh của model MNet bằng markdown:
| Model | PSNR (dB) | SSIM | LPIPS |
|---|---|---|---|
| MNet | 41.8502 | 0.9928 | 0.0090 |
Cảm ơn Huang, Wenhong and Dai, Yunshu and Fei, Jianwei and Huang, Fangjun với bài báo "MNet: A multi-scale network for visible watermark removal"
Cảm ơn Xiaodong Cun, Chi-Man Pun với bộ dữ liệu SplitNet
@article{huang2025mnet,
title={MNet: A multi-scale network for visible watermark removal},
author={Huang, Wenhong and Dai, Yunshu and Fei, Jianwei and Huang, Fangjun},
journal={Neural Networks},
volume={183},
pages={106961},
year={2025},
publisher={Elsevier}
}