From 763d5a58ed6b57180e01c7d14372c1127184b581 Mon Sep 17 00:00:00 2001 From: ydking0911 Date: Wed, 28 Jan 2026 13:22:17 -0800 Subject: [PATCH 1/2] fix: use verified preprocessing for v2 model inference and metadata --- app/services/captcha_v2_service.py | 63 +++++----- models/model_metadata_v2.json | 27 +++-- scripts/generate_v2_metadata.py | 181 ++++++++++++----------------- scripts/inference.py | 138 ++++++++++++++++++++++ 4 files changed, 263 insertions(+), 146 deletions(-) create mode 100644 scripts/inference.py diff --git a/app/services/captcha_v2_service.py b/app/services/captcha_v2_service.py index 03ea2b2..bc7aa2f 100644 --- a/app/services/captcha_v2_service.py +++ b/app/services/captcha_v2_service.py @@ -10,11 +10,10 @@ if torch.backends.mps.is_available(): DEVICE = torch.device('mps') -# Paths are relative to project root usually, but let's make them robust +# Paths BASE_DIR = Path(__file__).parent.parent.parent MODEL_PATH = BASE_DIR / "models" / "cnn_best_model.pth" METADATA_PATH = BASE_DIR / "models" / "model_metadata_v2.json" -CLASSES_PATH = BASE_DIR / "models" / "v2_classes.txt" class CaptchaV2Service: _instance = None @@ -26,14 +25,22 @@ def __new__(cls): return cls._instance def __init__(self): - if self._initialized: return + if self._initialized: + return self.model = None - self.classes = [] + self.classes = [ + "Bicycle", "Bridge", "Bus", "Car", "Chimney", + "Crosswalk", "Hydrant", "Motorcycle", "Palm", + "Stair", "Traffic Light" + ] self.transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) + transforms.Normalize( + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225] + ) ]) self.load_model() @@ -41,38 +48,31 @@ def __init__(self): def load_model(self): try: - # Load Classes from metadata + # Load classes from metadata if available if METADATA_PATH.exists(): with open(METADATA_PATH, "r") as f: meta = json.load(f) - self.classes = meta.get("classes", []) + self.classes = meta.get("classes", self.classes) print(f"✅ [V2 Service] Loaded {len(self.classes)} classes from metadata") - - if not self.classes: - # Fallback classes (11 classes as detected in model weights) - self.classes = [ - "Bicycle", "Bridge", "Bus", "Car", "Chimney", - "Crosswalk", "Hydrant", "Motorcycle", "Other", "Palm", "Stair" - ] - print(f"⚠️ [V2 Service] Using fallback 11 classes") - # Load Model: cnn_best_model.pth is EfficientNet-B1 + # Load Model: EfficientNet-B1 with specific classifier structure self.model = models.efficientnet_b1(weights=None) - - # Match the nested classifier structure found in the state_dict (classifier.1.1) num_ftrs = self.model.classifier[1].in_features + + # Match the exact structure used during training self.model.classifier[1] = nn.Sequential( - nn.Identity(), + nn.Dropout(0.2), nn.Linear(num_ftrs, len(self.classes)) ) if MODEL_PATH.exists(): state_dict = torch.load(MODEL_PATH, map_location=DEVICE) + # Handle 'model.' prefix if present new_state_dict = {} for k, v in state_dict.items(): if k.startswith("model."): - new_state_dict[k[6:]] = v + new_state_dict[k.replace("model.", "", 1)] = v else: new_state_dict[k] = v @@ -94,19 +94,26 @@ def predict(self, img_path: Path): Returns the class name (str) or None if prediction fails. """ if not self.model: - # Try reloading if missing (e.g. usage before startup) self.load_model() - if not self.model: return None + if not self.model: + return None try: - img = Image.open(img_path).convert('RGB') - img_tensor = self.transform(img).unsqueeze(0).to(DEVICE) + # Load and preprocess image + image = Image.open(img_path).convert('RGB') + image_tensor = self.transform(image).unsqueeze(0).to(DEVICE) + # Inference with torch.no_grad(): - outputs = self.model(img_tensor) - _, pred_idx = torch.max(outputs, 1) - - return self.classes[pred_idx.item()] + outputs = self.model(image_tensor) + probabilities = torch.nn.functional.softmax(outputs, dim=1) + confidence, predicted_idx = torch.max(probabilities, 1) + + idx = predicted_idx.item() + conf_score = confidence.item() * 100 + result_class = self.classes[idx] + + return result_class except Exception as e: print(f"❌ [V2 Service] Prediction error for {img_path}: {e}") return None diff --git a/models/model_metadata_v2.json b/models/model_metadata_v2.json index f84eba4..163f38a 100644 --- a/models/model_metadata_v2.json +++ b/models/model_metadata_v2.json @@ -1,13 +1,15 @@ { - "accuracy": "72.98%", - "char_accuracy": "72.98%", - "loss": "1.1722", - "loss_value": "1.1722", - "precision": "0.67", - "recall": "0.73", - "f1_score": "0.70", - "type": "EfficientNet-B0 (Re-eval)", - "timestamp": "2026-01-28T01:00:10", + "accuracy": "98.02%", + "char_accuracy": "98.02%", + "precision": "0.98", + "recall": "0.98", + "f1_score": "0.98", + "loss_value": "N/A", + "type": "EfficientNet-B1 (Verified)", + "loss": "CrossEntropy", + "features": "Image Classification", + "preprocessing": "Resize (224x224), Normalization", + "timestamp": "2026-01-28T13:21:02", "classes": [ "Bicycle", "Bridge", @@ -17,9 +19,10 @@ "Crosswalk", "Hydrant", "Motorcycle", - "Other", "Palm", - "Stair" + "Stair", + "Traffic Light" ], - "dataset_path": "/Users/parkyoungdu/Downloads/samples_v2/images" + "total_samples": 10390, + "valid_predictions": 10390 } \ No newline at end of file diff --git a/scripts/generate_v2_metadata.py b/scripts/generate_v2_metadata.py index 58f34f0..c999d04 100644 --- a/scripts/generate_v2_metadata.py +++ b/scripts/generate_v2_metadata.py @@ -5,158 +5,127 @@ from pathlib import Path import torch import torch.nn as nn -from torchvision import models, transforms, datasets +from torchvision import transforms, datasets from torch.utils.data import DataLoader from sklearn.metrics import precision_recall_fscore_support from tqdm import tqdm +# Import the verified predictor from inference.py +import sys +BASE_DIR = Path(__file__).resolve().parent.parent +sys.path.append(str(BASE_DIR)) + +from scripts.inference import RecaptchaPredictor +from app.core.config import get_v2_dataset_path + # Constants DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') if torch.backends.mps.is_available(): DEVICE = torch.device('mps') # Paths -BASE_DIR = Path(__file__).resolve().parent.parent MODELS_DIR = BASE_DIR / "models" MODEL_PATH = MODELS_DIR / "cnn_best_model.pth" -CLASSES_PATH = MODELS_DIR / "v2_classes.txt" OUTPUT_PATH = MODELS_DIR / "model_metadata_v2.json" -# Import app config to get correct dataset path -import sys -sys.path.append(str(BASE_DIR)) -from app.core.config import get_v2_dataset_path - -DATA_DIR = Path(get_v2_dataset_path()) - -def load_classes(): - if not CLASSES_PATH.exists(): - raise FileNotFoundError(f"Classes file not found at {CLASSES_PATH}") - with open(CLASSES_PATH, "r") as f: - return [line.strip() for line in f.readlines()] - -def load_model(num_classes): - if not MODEL_PATH.exists(): - raise FileNotFoundError(f"Model file not found at {MODEL_PATH}") - - print(f"Loading model from {MODEL_PATH}...") - # It's EfficientNet-B1 based on block structure - model = models.efficientnet_b1(weights=None) +def evaluate(predictor): + data_path_str = get_v2_dataset_path() + if not data_path_str: + raise FileNotFoundError("Dataset path not found") - # Match the nested classifier structure found in the state_dict (classifier.1.1) - num_ftrs = model.classifier[1].in_features - model.classifier[1] = nn.Sequential( - nn.Identity(), # 1.0 - nn.Linear(num_ftrs, num_classes) # 1.1 - ) + dataset_root = Path(data_path_str) + if not dataset_root.exists(): + raise FileNotFoundError(f"Dataset not found at {dataset_root}") + + print(f"Evaluating on dataset at {dataset_root}...") - state_dict = torch.load(MODEL_PATH, map_location=DEVICE) + # Get all images with their ground truth categories + all_images = [] + all_labels = [] - # Handle 'model.' prefix if present - new_state_dict = {} - for k, v in state_dict.items(): - if k.startswith("model."): - new_state_dict[k[6:]] = v - else: - new_state_dict[k] = v + for category_dir in dataset_root.iterdir(): + if not category_dir.is_dir() or category_dir.name.startswith('.'): + continue + + category_name = category_dir.name + if category_name not in predictor.classes: + print(f"⚠️ Skipping {category_name} (not in model classes)") + continue - print(f"Sample keys in new_state_dict: {list(new_state_dict.keys())[:5]}") - model.load_state_dict(new_state_dict) - model.to(DEVICE) - model.eval() - return model - -def evaluate(model, classes): - if not DATA_DIR.exists(): - raise FileNotFoundError(f"Dataset directory not found at {DATA_DIR}") - - print(f"Evaluating on dataset at {DATA_DIR}...") - transform = transforms.Compose([ - transforms.Resize((224, 224)), - transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) - ]) - - dataset = datasets.ImageFolder(str(DATA_DIR), transform=transform) - dataloader = DataLoader(dataset, batch_size=32, shuffle=False, num_workers=0) + category_idx = predictor.classes.index(category_name) + + for img_file in category_dir.glob("*.jpg"): + all_images.append(img_file) + all_labels.append(category_idx) + for img_file in category_dir.glob("*.png"): + all_images.append(img_file) + all_labels.append(category_idx) - criterion = nn.CrossEntropyLoss() + print(f"Total images to evaluate: {len(all_images)}") - running_loss = 0.0 + # Predict all_preds = [] - all_labels = [] + running_loss = 0.0 - with torch.no_grad(): - for inputs, labels in tqdm(dataloader, desc="Evaluating"): - inputs = inputs.to(DEVICE) - labels = labels.to(DEVICE) - - outputs = model(inputs) - loss = criterion(outputs, labels) - - running_loss += loss.item() * inputs.size(0) - _, preds = torch.max(outputs, 1) - - all_preds.extend(preds.cpu().numpy()) - all_labels.extend(labels.cpu().numpy()) + criterion = nn.CrossEntropyLoss() + + for img_path, true_label in tqdm(zip(all_images, all_labels), total=len(all_images), desc="Evaluating"): + result = predictor.predict(img_path) + if result and result["class"] in predictor.classes: + pred_idx = predictor.classes.index(result["class"]) + all_preds.append(pred_idx) - total_loss = running_loss / len(dataset) + # Calculate loss (approximate, since we don't have raw logits) + # Skip loss calculation for simplicity or use dummy + else: + all_preds.append(-1) # Invalid prediction # Calculate Metrics - correct = sum(p == l for p, l in zip(all_preds, all_labels)) - accuracy = correct / len(dataset) + valid_preds = [(p, l) for p, l in zip(all_preds, all_labels) if p != -1] + preds_only = [p for p, _ in valid_preds] + labels_only = [l for _, l in valid_preds] - precision, recall, f1, _ = precision_recall_fscore_support(all_labels, all_preds, average='weighted', zero_division=0) + correct = sum(p == l for p, l in zip(preds_only, labels_only)) + accuracy = correct / len(labels_only) if labels_only else 0 + + precision, recall, f1, _ = precision_recall_fscore_support( + labels_only, preds_only, average='weighted', zero_division=0 + ) return { - "loss": total_loss, "accuracy": accuracy, "precision": precision, "recall": recall, - "f1_score": f1 + "f1_score": f1, + "total_samples": len(all_images), + "valid_predictions": len(valid_preds) } def main(): try: print(f"Using device: {DEVICE}") - # Determine actual num_classes from model state_dict first - state_dict = torch.load(MODEL_PATH, map_location=DEVICE) - actual_num_classes = 0 - for k, v in state_dict.items(): - if 'classifier.1.1.weight' in k or 'classifier.1.weight' in k: - actual_num_classes = v.size(0) - break - - if actual_num_classes == 0: - # Fallback to loading from classes file - classes = load_classes() - actual_num_classes = len(classes) - else: - print(f"Detected {actual_num_classes} classes from model weights.") - # We still need class names for metadata, but we'll handle the mismatch if any - classes = load_classes() - if len(classes) != actual_num_classes: - print(f"⚠️ Warning: Classes file has {len(classes)} classes, but model has {actual_num_classes}.") - classes = classes[:actual_num_classes] # Simple truncation for now - - model = load_model(actual_num_classes) + # Use the verified RecaptchaPredictor from inference.py + predictor = RecaptchaPredictor(str(MODEL_PATH), device=str(DEVICE)) - metrics = evaluate(model, classes) + metrics = evaluate(predictor) # Format Metadata metadata = { "accuracy": f"{metrics['accuracy']*100:.2f}%", - "char_accuracy": f"{metrics['accuracy']*100:.2f}%", # Reuse for consistent UI if needed, or omit - "loss": f"{metrics['loss']:.4f}", # Display string - "loss_value": f"{metrics['loss']:.4f}", # Raw value string + "char_accuracy": f"{metrics['accuracy']*100:.2f}%", "precision": f"{metrics['precision']:.2f}", "recall": f"{metrics['recall']:.2f}", "f1_score": f"{metrics['f1_score']:.2f}", - "type": "EfficientNet-B0 (Re-eval)", + "loss_value": "N/A", # Not calculated in this approach + "type": "EfficientNet-B1 (Verified)", + "loss": "CrossEntropy", + "features": "Image Classification", + "preprocessing": "Resize (224x224), Normalization", "timestamp": time.strftime("%Y-%m-%dT%H:%M:%S"), - "classes": classes, - "dataset_path": str(DATA_DIR) + "classes": predictor.classes, + "total_samples": metrics['total_samples'], + "valid_predictions": metrics['valid_predictions'] } # Save diff --git a/scripts/inference.py b/scripts/inference.py new file mode 100644 index 0000000..ac685ad --- /dev/null +++ b/scripts/inference.py @@ -0,0 +1,138 @@ +import torch +import torch.nn as nn +from torchvision import models, transforms +from PIL import Image +from pathlib import Path +import json + +class RecaptchaPredictor: + def __init__(self, model_path, device=None): + """ + reCAPTCHA 모델 추론을 위한 래퍼 클래스. + 모델 로드와 전처리를 자동으로 수행합니다. + + Args: + model_path (str): 학습된 .pth 모델 파일 경로 + device (str): 'cuda', 'mps', 'cpu' 중 선택 (None이면 자동 선택) + """ + self.classes = [ + "Bicycle", "Bridge", "Bus", "Car", "Chimney", + "Crosswalk", "Hydrant", "Motorcycle", "Palm", + "Stair", "Traffic Light" + ] + + # 파일 시스템의 폴더명과 모델 클래스명 간의 매핑 정의 + self.folder_to_class = { + "TLight": "Traffic Light", + "Traffic Light": "Traffic Light", + # 나머지는 이름이 동일하다고 가정 + } + + # 장치 자동 설정 + if device: + self.device = torch.device(device) + elif torch.cuda.is_available(): + self.device = torch.device("cuda") + elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available(): + self.device = torch.device("mps") + else: + self.device = torch.device("cpu") + + # 1. 모델 아키텍처 정의 (EfficientNet-B1) + self.model = models.efficientnet_b1(weights=None) + + # 마지막 분류 레이어 수정 (클래스 11개) + num_ftrs = self.model.classifier[1].in_features + self.model.classifier[1] = nn.Sequential( + nn.Dropout(0.2), + nn.Linear(num_ftrs, len(self.classes)) + ) + + # 2. 가중치 로드 + try: + state_dict = torch.load(model_path, map_location=self.device) + + # 'model.' 접두어 제거 (학습 시 RecaptchaCNN 래퍼 사용으로 인한 키 불일치 해결) + new_state_dict = {} + for k, v in state_dict.items(): + if k.startswith("model."): + new_state_dict[k.replace("model.", "", 1)] = v + else: + new_state_dict[k] = v + + self.model.load_state_dict(new_state_dict) + print(f"✅ Model loaded successfully from {model_path}") + except Exception as e: + print(f"❌ Failed to load model: {e}") + raise e + + self.model.to(self.device) + self.model.eval() # 평가 모드 필수! + + # 3. 전처리 파이프라인 (학습 설정과 동일하게 고정) + self.transform = transforms.Compose([ + transforms.Resize((224, 224)), # config.yaml의 resize 값 (EfficientNet-B1) + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225] + ) + ]) + + def predict(self, image_source): + """ + 이미지 경로 또는 PIL 이미지를 받아 예측 결과를 반환합니다. + + Args: + image_source (str or PIL.Image): 이미지 경로 또는 객체 + + Returns: + dict: 예측 클래스, 신뢰도(Confidence), 클래스 인덱스 + """ + # 이미지 로드 + if isinstance(image_source, str) or isinstance(image_source, Path): + image = Image.open(image_source).convert('RGB') + else: + image = image_source.convert('RGB') + + # 전처리 + image_tensor = self.transform(image).unsqueeze(0).to(self.device) + + # 추론 + with torch.no_grad(): + outputs = self.model(image_tensor) + probabilities = torch.nn.functional.softmax(outputs, dim=1) + confidence, predicted_idx = torch.max(probabilities, 1) + + idx = predicted_idx.item() + conf_score = confidence.item() * 100 + result_class = self.classes[idx] + + return { + "class": result_class, + "confidence": f"{conf_score:.2f}%", + "index": idx + } + +# --- 사용 예시 --- +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Run inference on a single image') + parser.add_argument('--model', type=str, required=True, help='Path to .pth model file') + parser.add_argument('--image', type=str, required=True, help='Path to image file') + args = parser.parse_args() + + # 예측기 생성 + predictor = RecaptchaPredictor(args.model) + + # 예측 실행 + try: + result = predictor.predict(args.image) + print("\n Prediction Result:") + print(f"------------------------") + print(f" Class: {result['class']}") + print(f" Confidence: {result['confidence']}") + print(f"------------------------") + except Exception as e: + print(f"Error during inference: {e}") From a8afd385456764ca9169d24ec6cf425cef49f1b1 Mon Sep 17 00:00:00 2001 From: ydking0911 Date: Wed, 28 Jan 2026 13:30:13 -0800 Subject: [PATCH 2/2] feat: add training_history of ReCaptcha model & fix README.md --- README.md | 45 +++++++++++++------- docs/visualizations/training_history_v4.png | Bin 0 -> 65233 bytes 2 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 docs/visualizations/training_history_v4.png diff --git a/README.md b/README.md index 5228dba..98166cc 100644 --- a/README.md +++ b/README.md @@ -27,22 +27,29 @@ This project underwent three major phases of technical improvement: ![Phase 3 Training History](docs/visualizations/training_history_v3.png) +### Phase 4: Multi-modal Expansion (Image Select ReCAPTCHA) +- **Goal**: Beyond text recognition, expanding to **Object Classification** based challenges. +- **Method**: **EfficientNet-B1** backbone for 3x3 grid image classification. +- **Integration**: Unified both Text and Image CAPTCHA into a single **FastAPI** serving platform. + +![Phase 4 Training History](docs/visualizations/training_history_v4.png) --- -## 🏗️ Architecture: CRNN + CTC +## 🏗️ Integrated Architecture: FastAPI Unified Serving +The system is designed as a modular **FastAPI** application that serves multiple types of CAPTCHA models through a unified inference pipeline. ```mermaid -graph LR - A[Input Image: 50x200] --> B[CNN: Spatial Features] - B --> C[Bridge: Reshape] - C --> D[BLSTM: Seq Modeling] - D --> E[CTC Loss: Alignment] - E --> F[Output: text] +graph TD + A[Client Request] --> B[FastAPI Gateway] + B --> C{Captcha Type?} + C -- "v1 (Text)" --> D[CRNN + CTC Model] + C -- "v2 (Image)" --> E[EfficientNet-B1 Model] + D --> F[Unified Response] + E --> F ``` -- **Backbone**: CNN Layers for visual feature extraction. -- **Sequence**: Bidirectional LSTM for context modeling between characters. -- **Loss**: CTCLoss to handle unaligned sequences (crucial for CAPTCHAs with varying character widths). +- **Inference Service**: Separate service layers for `v1` and `v2`, sharing a consistent preprocessing and logging logic. +- **Scalable Serving**: Models and preprocessing scripts are encapsulated for seamless deployment across local and cloud environments. ## 📊 Experimental Results (Latest Run) @@ -91,12 +98,18 @@ pip install -r requirements.txt ``` ### 3. Deploy to AWS (EC2) -The project is configured for automated deployment to **AWS EC2** via GitHub Actions & SSH. -1. Ensure the following are set in GitHub Secrets: - - `EC2_HOST` (IP or DNS), `EC2_USERNAME` (e.g. `ubuntu`), `EC2_SSH_KEY` (Private Key) - - `DOCKERHUB_USERNAME`, `DOCKERHUB_TOKEN` -2. Push or merge to the **`main`** branch to trigger the CD pipeline. -3. The workflow will build/push an image to Docker Hub and then SSH into your EC2 to restart the container on port **80**. +The project is configured for automated deployment to **AWS EC2** via GitHub Actions & SSH. Both Text and Image CAPTCHA models are bundled into a single Docker image for unified serving. + +1. **Integrated Image**: A single Dockerfile handles model weights, metadata, and dependencies for all versions. +2. **Automated CD**: Push to the `main` branch triggers the GitHub Actions pipeline. +3. **Serving Environment**: The workflow pushes the image to Docker Hub and restarts the container on EC2 port **80**. + +### 4. Unified Model Deployment Pipeline +To ensure consistent inference between development and production, we use a unified deployment script for both model versions. + +- **Standardized Inference**: All models use a `RecaptchaPredictor` pattern (as seen in `scripts/inference.py`) to wrap model loading and preprocessing. +- **Metadata-Driven Dashboard**: `generate_v1_metadata.py` and `generate_v2_metadata.py` extract performance metrics, which are then used to dynamically populate the web dashboard at runtime. + ### 3. Run Experiments ```bash diff --git a/docs/visualizations/training_history_v4.png b/docs/visualizations/training_history_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..f0345d8972346f4dd0528510904b470f59fa655d GIT binary patch literal 65233 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
    (ft{)2Z-nQlN3(2=q_g9E$n6U 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