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ị!