Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit
Trong hướng dẫn này, mình sẽ xây dựng một ứng dụng web tương tác sử dụng PyTorch và Streamlit để áp dụng kỹ thuật Style Transfer. Đây là một cách thú vị để tạo ra hình ảnh nghệ thuật từ những bức ảnh thông thường bằng cách kết hợp phong cách của một hình ảnh nghệ thuật với nội dung của hình ảnh gốc. Hướng dẫn này cũng minh họa cách Streamlit giúp tạo ra các ứng dụng web đẹp mắt chỉ với các tập lệnh Python đơn giản.

Ứng dụng này sẽ sử dụng mô hình học sâu được huấn luyện trước để chuyển đổi phong cách của hình ảnh. Code sử dụng dựa trên Fast Neural Style từ kho chính thức của PyTorch.
Code mẫu cho ứng dụng có thể được tìm thấy tại:
GitHub Repository
Cài đặt môi trường sử dụng PyTorch và Streamlit
Bước 1: Tạo môi trường ảo và cài đặt các thư viện cần thiết:
pip install streamlit pip install torch torchvision
Bước 2: Tải các mô hình đã huấn luyện trước:
python download_saved_models.py
Sau khi tải xong, di chuyển thư mục saved_models vào thư mục neural_style.
Bài viết này được đăng tại [free tuts .net]
Bước 3: Chạy ứng dụng Streamlit:
streamlit run main.py
Chức năng trong PyTorch
Để tối ưu hóa hiệu suất, ứng dụng chia hàm stylize() gốc thành hai hàm riêng biệt:
Hàm tải mô hình:
@st.cache
def load_model(model_path):
print('Tải mô hình...')
with torch.no_grad():
style_model = TransformerNet()
state_dict = torch.load(model_path)
# Loại bỏ các khóa không cần thiết
for k in list(state_dict.keys()):
if re.search(r'in\d+\.running_(mean|var)$', k):
del state_dict[k]
style_model.load_state_dict(state_dict)
style_model.to(device)
style_model.eval()
return style_model
Hàm áp dụng chuyển đổi phong cách:
@st.cache
def stylize(style_model, content_image, output_image):
content_image = utils.load_image(content_image)
content_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Lambda(lambda x: x.mul(255))
])
content_image = content_transform(content_image)
content_image = content_image.unsqueeze(0).to(device)
with torch.no_grad():
output = style_model(content_image).cpu()
utils.save_image(output_image, output[0])
Triển khai ứng dụng Streamlit trong PyTorch
Ứng dụng web được triển khai trong 30 dòng mã sau:
import streamlit as st
from PIL import Image
import style
st.title('Ứng Dụng Chuyển Đổi Phong Cách PyTorch')
# Chọn hình ảnh và phong cách
img = st.sidebar.selectbox(
'Chọn hình ảnh',
('amber.jpg', 'cat.png')
)
style_name = st.sidebar.selectbox(
'Chọn phong cách',
('candy', 'mosaic', 'rain_princess', 'udnie')
)
# Đường dẫn tệp
model= "saved_models/" + style_name + ".pth"
input_image = "images/content-images/" + img
output_image = "images/output-images/" + style_name + "-" + img
# Hiển thị hình ảnh gốc
st.write('### Hình ảnh gốc:')
image = Image.open(input_image)
st.image(image, width=400)
# Nút kích hoạt chuyển đổi
clicked = st.button('Chuyển đổi phong cách')
if clicked:
model = style.load_model(model)
style.stylize(model, input_image, output_image)
# Hiển thị hình ảnh kết quả
st.write('### Hình ảnh kết quả:')
image = Image.open(output_image)
st.image(image, width=400)
Kết bài
Ứng dụng Style Transfer được triển khai với Streamlit và PyTorch mang lại trải nghiệm đơn giản và dễ sử dụng. Công cụ này không chỉ thể hiện sức mạnh của học sâu mà còn cho thấy cách xây dựng ứng dụng web hiệu quả để tích hợp các mô hình AI. Chúc bạn thành công và sáng tạo thêm nhiều ứng dụng thú vị!

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng