Spaces:
Paused
Paused
| # Dressify - Deploy to Hugging Face Space | |
| # This script prepares and deploys the outfit recommendation system to HF Spaces | |
| set -e # Exit on any error | |
| # Configuration | |
| SPACE_NAME="${SPACE_NAME:-dressify-outfit-recommendation}" | |
| SPACE_SDK="${SPACE_SDK:-gradio}" | |
| SPACE_HARDWARE="${SPACE_HARDWARE:-cpu-basic}" | |
| SPACE_PRIVATE="${SPACE_PRIVATE:-false}" | |
| # Colors for output | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| BLUE='\033[0;34m' | |
| NC='\033[0m' # No Color | |
| echo -e "${BLUE}π Deploying Dressify to Hugging Face Space${NC}" | |
| echo "==================================================" | |
| # Check if HF CLI is installed | |
| if ! command -v huggingface-cli &> /dev/null; then | |
| echo -e "${YELLOW}β οΈ Hugging Face CLI not found${NC}" | |
| echo "Installing huggingface_hub..." | |
| pip install --upgrade huggingface_hub | |
| fi | |
| # Check if logged in to HF | |
| if ! huggingface-cli whoami &> /dev/null; then | |
| echo -e "${RED}β Not logged in to Hugging Face${NC}" | |
| echo "Please login first:" | |
| echo " huggingface-cli login" | |
| exit 1 | |
| fi | |
| # Get username | |
| USERNAME=$(huggingface-cli whoami) | |
| echo -e "${GREEN}β Logged in as: $USERNAME${NC}" | |
| # Check if models are trained | |
| EXPORT_DIR="models/exports" | |
| if [ ! -f "$EXPORT_DIR/resnet_item_embedder_best.pth" ] || [ ! -f "$EXPORT_DIR/vit_outfit_model_best.pth" ]; then | |
| echo -e "${YELLOW}β οΈ Models not fully trained${NC}" | |
| echo "Training models first..." | |
| if [ ! -f "$EXPORT_DIR/resnet_item_embedder_best.pth" ]; then | |
| echo "Training ResNet..." | |
| ./scripts/train_item.sh | |
| fi | |
| if [ ! -f "$EXPORT_DIR/vit_outfit_model_best.pth" ]; then | |
| echo "Training ViT..." | |
| ./scripts/train_outfit.sh | |
| fi | |
| fi | |
| echo -e "${GREEN}β All models are ready${NC}" | |
| # Create Space configuration | |
| echo -e "${BLUE}π Creating Space configuration...${NC}" | |
| # Update README.md with Space metadata | |
| cat > README.md << EOF | |
| --- | |
| title: Dressify - Production-Ready Outfit Recommendation | |
| emoji: π | |
| colorFrom: purple | |
| colorTo: green | |
| sdk: $SPACE_SDK | |
| sdk_version: "5.44.1" | |
| app_file: app.py | |
| pinned: false | |
| --- | |
| # Dressify - Production-Ready Outfit Recommendation System | |
| A **research-grade, self-contained** outfit recommendation service that automatically downloads the Polyvore dataset, trains state-of-the-art models, and provides a sophisticated Gradio interface for wardrobe uploads and outfit generation. | |
| ## π Features | |
| - **Self-Contained**: No external dependencies or environment variables needed | |
| - **Auto-Dataset Preparation**: Downloads and processes Stylique/Polyvore dataset automatically | |
| - **Research-Grade Models**: ResNet50 item embedder + ViT outfit compatibility encoder | |
| - **Advanced Training**: Triplet loss with semi-hard negative mining, mixed precision | |
| - **Production UI**: Gradio interface with wardrobe upload, outfit preview, and JSON export | |
| - **REST API**: FastAPI endpoints for embedding and composition | |
| - **Auto-Bootstrap**: Background training and model reloading | |
| ## π― Quick Start | |
| 1. **Upload Wardrobe**: Drag & drop multiple clothing images | |
| 2. **Set Context**: Choose occasion, weather, and style preferences | |
| 3. **Generate Outfits**: Get top-N outfit recommendations with compatibility scores | |
| 4. **View Results**: See stitched outfit previews and download JSON data | |
| ## π¬ Research Features | |
| - **Triplet Loss**: Semi-hard negative mining for better embeddings | |
| - **Mixed Precision**: CUDA-optimized training with autocast | |
| - **Transformer Architecture**: ViT encoder for outfit-level compatibility | |
| - **Slot Awareness**: Category-aware outfit composition | |
| ## π Model Performance | |
| - **Item Embedder**: ResNet50 + projection head β 512D embeddings | |
| - **Outfit Encoder**: 6-layer transformer with 8 attention heads | |
| - **Training Time**: ~2-4 hours on L4 GPU (full dataset) | |
| - **Inference**: <100ms per outfit on GPU | |
| ## π Deployment | |
| This Space automatically: | |
| 1. Downloads the Stylique/Polyvore dataset | |
| 2. Prepares training splits and triplets | |
| 3. Trains models if no checkpoints exist | |
| 4. Launches the Gradio UI + FastAPI | |
| ## π References | |
| - **Dataset**: [Stylique/Polyvore](https://huggingface.co/datasets/Stylique/Polyvore) | |
| - **Research**: Triplet loss, transformer encoders, outfit compatibility | |
| --- | |
| **Built with β€οΈ for the fashion AI community** | |
| EOF | |
| echo -e "${GREEN}β Space configuration created${NC}" | |
| # Check if Space already exists | |
| SPACE_ID="$USERNAME/$SPACE_NAME" | |
| if huggingface-cli repo info "$SPACE_ID" &> /dev/null; then | |
| echo -e "${YELLOW}β οΈ Space $SPACE_ID already exists${NC}" | |
| read -p "Do you want to update it? (y/N): " -n 1 -r | |
| echo | |
| if [[ ! $REPLY =~ ^[Yy]$ ]]; then | |
| echo "Deployment cancelled" | |
| exit 0 | |
| fi | |
| fi | |
| # Create or update Space | |
| echo -e "${BLUE}π Creating/updating Space: $SPACE_ID${NC}" | |
| if [ "$SPACE_PRIVATE" = "true" ]; then | |
| PRIVATE_FLAG="--private" | |
| else | |
| PRIVATE_FLAG="" | |
| fi | |
| # Create Space | |
| huggingface-cli repo create "$SPACE_NAME" \ | |
| --type space \ | |
| --space-sdk "$SPACE_SDK" \ | |
| --space-hardware "$SPACE_HARDWARE" \ | |
| $PRIVATE_FLAG | |
| # Push code to Space | |
| echo -e "${BLUE}π€ Pushing code to Space...${NC}" | |
| # Initialize git if not already done | |
| if [ ! -d ".git" ]; then | |
| git init | |
| git add . | |
| git commit -m "Initial commit: Dressify outfit recommendation system" | |
| fi | |
| # Add HF Space as remote | |
| git remote remove origin 2>/dev/null || true | |
| git remote add origin "https://huggingface.co/spaces/$SPACE_ID" | |
| # Push to Space | |
| git push -u origin main --force | |
| echo -e "${GREEN}β Code pushed to Space successfully!${NC}" | |
| # Push models to HF Hub (optional) | |
| read -p "Do you want to push trained models to HF Hub? (y/N): " -n 1 -r | |
| echo | |
| if [[ $REPLY =~ ^[Yy]$ ]]; then | |
| echo -e "${BLUE}π€ Pushing models to HF Hub...${NC}" | |
| # Push ResNet model | |
| python utils/hf_utils.py \ | |
| --action push \ | |
| --checkpoint "$EXPORT_DIR/resnet_item_embedder_best.pth" \ | |
| --model-name "dressify-resnet-embedder" | |
| # Push ViT model | |
| python utils/hf_utils.py \ | |
| --action push \ | |
| --checkpoint "$EXPORT_DIR/vit_outfit_model_best.pth" \ | |
| --model-name "dressify-vit-outfit-encoder" | |
| echo -e "${GREEN}β Models pushed to HF Hub${NC}" | |
| fi | |
| echo "" | |
| echo -e "${GREEN}π Deployment completed successfully!${NC}" | |
| echo "" | |
| echo -e "${BLUE}π Your Space is available at:${NC}" | |
| echo -e " https://huggingface.co/spaces/$SPACE_ID" | |
| echo "" | |
| echo -e "${BLUE}π Next steps:${NC}" | |
| echo "1. Wait for Space to build (usually 5-10 minutes)" | |
| echo "2. Test the outfit recommendation interface" | |
| echo "3. Monitor training progress in the Status tab" | |
| echo "4. Download trained models from the Downloads tab" | |
| echo "" | |
| echo -e "${BLUE}π§ Space Management:${NC}" | |
| echo " View Space: https://huggingface.co/spaces/$SPACE_ID" | |
| echo " Settings: https://huggingface.co/spaces/$SPACE_ID/settings" | |
| echo " Logs: https://huggingface.co/spaces/$SPACE_ID/logs" | |