[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F7ZMAMRCBAR9AFKVNKQ1M":3,"skill-same:01M71F7ZMAMRCBAR9AFKVNKQ1M":91},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":13,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":66,"install":67,"resources":80},"01M71F7ZMAMRCBAR9AFKVNKQ1M","segment-anything-model",null,"Foundation model for image segmentation with zero-shot transfer. Use when you need to segment any object in images using points, boxes, or masks as prompts, or automatically generate all object masks in an image.","gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6","gjbvsjjvgm-sketch","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F278511911?v=4","01M71F3JXKZQ70H2KCHHTXKZDA","01M71F3JY8A79Z3NZBW08TF4JD",0,"MIT","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fmlops\u002Fmodels\u002Fsegment-anything\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"segment anything","model","segment","segment anything model","when","image","for","orchestra","you","Zero-Shot","boxes","as","images","vision","computer","segmentation","Transformers","ZeRO","multimodal","generate","2026-11-10 10:12:30",false,"---\nname: segment-anything-model\ndescription: Foundation model for image segmentation with zero-shot transfer. Use when you need to segment any object in images using points, boxes, or masks as prompts, or automatically generate all object masks in an image.\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ndependencies: [segment-anything, transformers>=4.30.0, torch>=1.7.0]\nmetadata:\n  hermes:\n    tags: [Multimodal, Image Segmentation, Computer Vision, SAM, Zero-Shot]\n\n---\n\n# Segment Anything Model (SAM)\n\nComprehensive guide to using Meta AI's Segment Anything Model for zero-shot image segmentation.\n\n## When to use SAM\n\n**Use SAM when:**\n- Need to segment any object in images without task-specific training\n- Building interactive annotation tools with point\u002Fbox prompts\n- Generating training data for other vision models\n- Need zero-shot transfer to new image domains\n- Building object detection\u002Fsegmentation pipelines\n- Processing medical, satellite, or domain-specific images\n\n**Key features:**\n- **Zero-shot segmentation**: Works on any image domain without fine-tuning\n- **Flexible prompts**: Points, bounding boxes, or previous masks\n- **Automatic segmentation**: Generate all object masks automatically\n- **High quality**: Trained on 1.1 billion masks from 11 million images\n- **Multiple model sizes**: ViT-B (fastest), ViT-L, ViT-H (most accurate)\n- **ONNX export**: Deploy in browsers and edge devices\n\n**Use alternatives instead:**\n- **YOLO\u002FDetectron2**: For real-time object detection with classes\n- **Mask2Former**: For semantic\u002Fpanoptic segmentation with categories\n- **GroundingDINO + SAM**: For text-prompted segmentation\n- **SAM 2**: For video segmentation tasks\n\n## Quick start\n\n### Installation\n\n```bash\n# From GitHub\npip install git+https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything.git\n\n# Optional dependencies\npip install opencv-python pycocotools matplotlib\n\n# Or use HuggingFace transformers\npip install transformers\n```\n\n### Download checkpoints\n\n```bash\n# ViT-H (largest, most accurate) - 2.4GB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_h_4b8939.pth\n\n# ViT-L (medium) - 1.2GB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_l_0b3195.pth\n\n# ViT-B (smallest, fastest) - 375MB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_b_01ec64.pth\n```\n\n### Basic usage with SamPredictor\n\n```python\nimport numpy as np\nfrom segment_anything import sam_model_registry, SamPredictor\n\n# Load model\nsam = sam_model_registry[\"vit_h\"](checkpoint=\"sam_vit_h_4b8939.pth\")\nsam.to(device=\"cuda\")\n\n# Create predictor\npredictor = SamPredictor(sam)\n\n# Set image (computes embeddings once)\nimage = cv2.imread(\"image.jpg\")\nimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\npredictor.set_image(image)\n\n# Predict with point prompts\ninput_point = np.array([[500, 375]])  # (x, y) coordinates\ninput_label = np.array([1])  # 1 = foreground, 0 = background\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_point,\n    point_labels=input_label,\n    multimask_output=True  # Returns 3 mask options\n)\n\n# Select best mask\nbest_mask = masks[np.argmax(scores)]\n```\n\n### HuggingFace Transformers\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import SamModel, SamProcessor\n\n# Load model and processor\nmodel = SamModel.from_pretrained(\"facebook\u002Fsam-vit-huge\")\nprocessor = SamProcessor.from_pretrained(\"facebook\u002Fsam-vit-huge\")\nmodel.to(\"cuda\")\n\n# Process image with point prompt\nimage = Image.open(\"image.jpg\")\ninput_points = [[[450, 600]]]  # Batch of points\n\ninputs = processor(image, input_points=input_points, return_tensors=\"pt\")\ninputs = {k: v.to(\"cuda\") for k, v in inputs.items()}\n\n# Generate masks\nwith torch.no_grad():\n    outputs = model(**inputs)\n\n# Post-process masks to original size\nmasks = processor.image_processor.post_process_masks(\n    outputs.pred_masks.cpu(),\n    inputs[\"original_sizes\"].cpu(),\n    inputs[\"reshaped_input_sizes\"].cpu()\n)\n```\n\n## Core concepts\n\n### Model architecture\n\n```\nSAM Architecture:\n┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐\n│  Image Encoder  │────▶│ Prompt Encoder  │────▶│  Mask Decoder   │\n│     (ViT)       │     │ (Points\u002FBoxes)  │     │ (Transformer)   │\n└─────────────────┘     └─────────────────┘     └─────────────────┘\n        │                       │                       │\n   Image Embeddings      Prompt Embeddings         Masks + IoU\n   (computed once)       (per prompt)             predictions\n```\n\n### Model variants\n\n| Model | Checkpoint | Size | Speed | Accuracy |\n|-------|------------|------|-------|----------|\n| ViT-H | `vit_h` | 2.4 GB | Slowest | Best |\n| ViT-L | `vit_l` | 1.2 GB | Medium | Good |\n| ViT-B | `vit_b` | 375 MB | Fastest | Good |\n\n### Prompt types\n\n| Prompt | Description | Use Case |\n|--------|-------------|----------|\n| Point (foreground) | Click on object | Single object selection |\n| Point (background) | Click outside object | Exclude regions |\n| Bounding box | Rectangle around object | Larger objects |\n| Previous mask | Low-res mask input | Iterative refinement |\n\n## Interactive segmentation\n\n### Point prompts\n\n```python\n# Single foreground point\ninput_point = np.array([[500, 375]])\ninput_label = np.array([1])\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_point,\n    point_labels=input_label,\n    multimask_output=True\n)\n\n# Multiple points (foreground + background)\ninput_points = np.array([[500, 375], [600, 400], [450, 300]])\ninput_labels = np.array([1, 1, 0])  # 2 foreground, 1 background\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_points,\n    point_labels=input_labels,\n    multimask_output=False  # Single mask when prompts are clear\n)\n```\n\n### Box prompts\n\n```python\n# Bounding box [x1, y1, x2, y2]\ninput_box = np.array([425, 600, 700, 875])\n\nmasks, scores, logits = predictor.predict(\n    box=input_box,\n    multimask_output=False\n)\n```\n\n### Combined prompts\n\n```python\n# Box + points for precise control\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375]]),\n    point_labels=np.array([1]),\n    box=np.array([400, 300, 700, 600]),\n    multimask_output=False\n)\n```\n\n### Iterative refinement\n\n```python\n# Initial prediction\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375]]),\n    point_labels=np.array([1]),\n    multimask_output=True\n)\n\n# Refine with additional point using previous mask\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375], [550, 400]]),\n    point_labels=np.array([1, 0]),  # Add background point\n    mask_input=logits[np.argmax(scores)][None, :, :],  # Use best mask\n    multimask_output=False\n)\n```\n\n## Automatic mask generation\n\n### Basic automatic segmentation\n\n```python\nfrom segment_anything import SamAutomaticMaskGenerator\n\n# Create generator\nmask_generator = SamAutomaticMaskGenerator(sam)\n\n# Generate all masks\nmasks = mask_generator.generate(image)\n\n# Each mask contains:\n# - segmentation: binary mask\n# - bbox: [x, y, w, h]\n# - area: pixel count\n# - predicted_iou: quality score\n# - stability_score: robustness score\n# - point_coords: generating point\n```\n\n### Customized generation\n\n```python\nmask_generator = SamAutomaticMaskGenerator(\n    model=sam,\n    points_per_side=32,          # Grid density (more = more masks)\n    pred_iou_thresh=0.88,        # Quality threshold\n    stability_score_thresh=0.95,  # Stability threshold\n    crop_n_layers=1,             # Multi-scale crops\n    crop_n_points_downscale_factor=2,\n    min_mask_region_area=100,    # Remove tiny masks\n)\n\nmasks = mask_generator.generate(image)\n```\n\n### Filtering masks\n\n```python\n# Sort by area (largest first)\nmasks = sorted(masks, key=lambda x: x['area'], reverse=True)\n\n# Filter by predicted IoU\nhigh_quality = [m for m in masks if m['predicted_iou'] > 0.9]\n\n# Filter by stability score\nstable_masks = [m for m in masks if m['stability_score'] > 0.95]\n```\n\n## Batched inference\n\n### Multiple images\n\n```python\n# Process multiple images efficiently\nimages = [cv2.imread(f\"image_{i}.jpg\") for i in range(10)]\n\nall_masks = []\nfor image in images:\n    predictor.set_image(image)\n    masks, _, _ = predictor.predict(\n        point_coords=np.array([[500, 375]]),\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n    all_masks.append(masks)\n```\n\n### Multiple prompts per image\n\n```python\n# Process multiple prompts efficiently (one image encoding)\npredictor.set_image(image)\n\n# Batch of point prompts\npoints = [\n    np.array([[100, 100]]),\n    np.array([[200, 200]]),\n    np.array([[300, 300]])\n]\n\nall_masks = []\nfor point in points:\n    masks, scores, _ = predictor.predict(\n        point_coords=point,\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n    all_masks.append(masks[np.argmax(scores)])\n```\n\n## ONNX deployment\n\n### Export model\n\n```bash\npython scripts\u002Fexport_onnx_model.py \\\n    --checkpoint sam_vit_h_4b8939.pth \\\n    --model-type vit_h \\\n    --output sam_onnx.onnx \\\n    --return-single-mask\n```\n\n### Use ONNX model\n\n```python\nimport onnxruntime\n\n# Load ONNX model\nort_session = onnxruntime.InferenceSession(\"sam_onnx.onnx\")\n\n# Run inference (image embeddings computed separately)\nmasks = ort_session.run(\n    None,\n    {\n        \"image_embeddings\": image_embeddings,\n        \"point_coords\": point_coords,\n        \"point_labels\": point_labels,\n        \"mask_input\": np.zeros((1, 1, 256, 256), dtype=np.float32),\n        \"has_mask_input\": np.array([0], dtype=np.float32),\n        \"orig_im_size\": np.array([h, w], dtype=np.float32)\n    }\n)\n```\n\n## Common workflows\n\n### Workflow 1: Annotation tool\n\n```python\nimport cv2\n\n# Load model\npredictor = SamPredictor(sam)\npredictor.set_image(image)\n\ndef on_click(event, x, y, flags, param):\n    if event == cv2.EVENT_LBUTTONDOWN:\n        # Foreground point\n        masks, scores, _ = predictor.predict(\n            point_coords=np.array([[x, y]]),\n            point_labels=np.array([1]),\n            multimask_output=True\n        )\n        # Display best mask\n        display_mask(masks[np.argmax(scores)])\n```\n\n### Workflow 2: Object extraction\n\n```python\ndef extract_object(image, point):\n    \"\"\"Extract object at point with transparent background.\"\"\"\n    predictor.set_image(image)\n\n    masks, scores, _ = predictor.predict(\n        point_coords=np.array([point]),\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n\n    best_mask = masks[np.argmax(scores)]\n\n    # Create RGBA output\n    rgba = np.zeros((image.shape[0], image.shape[1], 4), dtype=np.uint8)\n    rgba[:, :, :3] = image\n    rgba[:, :, 3] = best_mask * 255\n\n    return rgba\n```\n\n### Workflow 3: Medical image segmentation\n\n```python\n# Process medical images (grayscale to RGB)\nmedical_image = cv2.imread(\"scan.png\", cv2.IMREAD_GRAYSCALE)\nrgb_image = cv2.cvtColor(medical_image, cv2.COLOR_GRAY2RGB)\n\npredictor.set_image(rgb_image)\n\n# Segment region of interest\nmasks, scores, _ = predictor.predict(\n    box=np.array([x1, y1, x2, y2]),  # ROI bounding box\n    multimask_output=True\n)\n```\n\n## Output format\n\n### Mask data structure\n\n```python\n# SamAutomaticMaskGenerator output\n{\n    \"segmentation\": np.ndarray,  # H×W binary mask\n    \"bbox\": [x, y, w, h],        # Bounding box\n    \"area\": int,                 # Pixel count\n    \"predicted_iou\": float,      # 0-1 quality score\n    \"stability_score\": float,    # 0-1 robustness score\n    \"crop_box\": [x, y, w, h],    # Generation crop region\n    \"point_coords\": [[x, y]],    # Input point\n}\n```\n\n### COCO RLE format\n\n```python\nfrom pycocotools import mask as mask_utils\n\n# Encode mask to RLE\nrle = mask_utils.encode(np.asfortranarray(mask.astype(np.uint8)))\nrle[\"counts\"] = rle[\"counts\"].decode(\"utf-8\")\n\n# Decode RLE to mask\ndecoded_mask = mask_utils.decode(rle)\n```\n\n## Performance optimization\n\n### GPU memory\n\n```python\n# Use smaller model for limited VRAM\nsam = sam_model_registry[\"vit_b\"](checkpoint=\"sam_vit_b_01ec64.pth\")\n\n# Process images in batches\n# Clear CUDA cache between large batches\ntorch.cuda.empty_cache()\n```\n\n### Speed optimization\n\n```python\n# Use half precision\nsam = sam.half()\n\n# Reduce points for automatic generation\nmask_generator = SamAutomaticMaskGenerator(\n    model=sam,\n    points_per_side=16,  # Default is 32\n)\n\n# Use ONNX for deployment\n# Export with --return-single-mask for faster inference\n```\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| Out of memory | Use ViT-B model, reduce image size |\n| Slow inference | Use ViT-B, reduce points_per_side |\n| Poor mask quality | Try different prompts, use box + points |\n| Edge artifacts | Use stability_score filtering |\n| Small objects missed | Increase points_per_side |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Batching, fine-tuning, integration\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything\n- **Paper**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2304.02643\n- **Demo**: https:\u002F\u002Fsegment-anything.com\n- **SAM 2 (Video)**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything-2\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fsam-vit-huge\n","# Segment Anything Model (SAM)\n\nComprehensive guide to using Meta AI's Segment Anything Model for zero-shot image segmentation.\n\n## When to use SAM\n\n**Use SAM when:**\n- Need to segment any object in images without task-specific training\n- Building interactive annotation tools with point\u002Fbox prompts\n- Generating training data for other vision models\n- Need zero-shot transfer to new image domains\n- Building object detection\u002Fsegmentation pipelines\n- Processing medical, satellite, or domain-specific images\n\n**Key features:**\n- **Zero-shot segmentation**: Works on any image domain without fine-tuning\n- **Flexible prompts**: Points, bounding boxes, or previous masks\n- **Automatic segmentation**: Generate all object masks automatically\n- **High quality**: Trained on 1.1 billion masks from 11 million images\n- **Multiple model sizes**: ViT-B (fastest), ViT-L, ViT-H (most accurate)\n- **ONNX export**: Deploy in browsers and edge devices\n\n**Use alternatives instead:**\n- **YOLO\u002FDetectron2**: For real-time object detection with classes\n- **Mask2Former**: For semantic\u002Fpanoptic segmentation with categories\n- **GroundingDINO + SAM**: For text-prompted segmentation\n- **SAM 2**: For video segmentation tasks\n\n## Quick start\n\n### Installation\n\n```bash\n# From GitHub\npip install git+https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything.git\n\n# Optional dependencies\npip install opencv-python pycocotools matplotlib\n\n# Or use HuggingFace transformers\npip install transformers\n```\n\n### Download checkpoints\n\n```bash\n# ViT-H (largest, most accurate) - 2.4GB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_h_4b8939.pth\n\n# ViT-L (medium) - 1.2GB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_l_0b3195.pth\n\n# ViT-B (smallest, fastest) - 375MB\nwget https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fsegment_anything\u002Fsam_vit_b_01ec64.pth\n```\n\n### Basic usage with SamPredictor\n\n```python\nimport numpy as np\nfrom segment_anything import sam_model_registry, SamPredictor\n\n# Load model\nsam = sam_model_registry[\"vit_h\"](checkpoint=\"sam_vit_h_4b8939.pth\")\nsam.to(device=\"cuda\")\n\n# Create predictor\npredictor = SamPredictor(sam)\n\n# Set image (computes embeddings once)\nimage = cv2.imread(\"image.jpg\")\nimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\npredictor.set_image(image)\n\n# Predict with point prompts\ninput_point = np.array([[500, 375]])  # (x, y) coordinates\ninput_label = np.array([1])  # 1 = foreground, 0 = background\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_point,\n    point_labels=input_label,\n    multimask_output=True  # Returns 3 mask options\n)\n\n# Select best mask\nbest_mask = masks[np.argmax(scores)]\n```\n\n### HuggingFace Transformers\n\n```python\nimport torch\nfrom PIL import Image\nfrom transformers import SamModel, SamProcessor\n\n# Load model and processor\nmodel = SamModel.from_pretrained(\"facebook\u002Fsam-vit-huge\")\nprocessor = SamProcessor.from_pretrained(\"facebook\u002Fsam-vit-huge\")\nmodel.to(\"cuda\")\n\n# Process image with point prompt\nimage = Image.open(\"image.jpg\")\ninput_points = [[[450, 600]]]  # Batch of points\n\ninputs = processor(image, input_points=input_points, return_tensors=\"pt\")\ninputs = {k: v.to(\"cuda\") for k, v in inputs.items()}\n\n# Generate masks\nwith torch.no_grad():\n    outputs = model(**inputs)\n\n# Post-process masks to original size\nmasks = processor.image_processor.post_process_masks(\n    outputs.pred_masks.cpu(),\n    inputs[\"original_sizes\"].cpu(),\n    inputs[\"reshaped_input_sizes\"].cpu()\n)\n```\n\n## Core concepts\n\n### Model architecture\n\n```\nSAM Architecture:\n┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐\n│  Image Encoder  │────▶│ Prompt Encoder  │────▶│  Mask Decoder   │\n│     (ViT)       │     │ (Points\u002FBoxes)  │     │ (Transformer)   │\n└─────────────────┘     └─────────────────┘     └─────────────────┘\n        │                       │                       │\n   Image Embeddings      Prompt Embeddings         Masks + IoU\n   (computed once)       (per prompt)             predictions\n```\n\n### Model variants\n\n| Model | Checkpoint | Size | Speed | Accuracy |\n|-------|------------|------|-------|----------|\n| ViT-H | `vit_h` | 2.4 GB | Slowest | Best |\n| ViT-L | `vit_l` | 1.2 GB | Medium | Good |\n| ViT-B | `vit_b` | 375 MB | Fastest | Good |\n\n### Prompt types\n\n| Prompt | Description | Use Case |\n|--------|-------------|----------|\n| Point (foreground) | Click on object | Single object selection |\n| Point (background) | Click outside object | Exclude regions |\n| Bounding box | Rectangle around object | Larger objects |\n| Previous mask | Low-res mask input | Iterative refinement |\n\n## Interactive segmentation\n\n### Point prompts\n\n```python\n# Single foreground point\ninput_point = np.array([[500, 375]])\ninput_label = np.array([1])\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_point,\n    point_labels=input_label,\n    multimask_output=True\n)\n\n# Multiple points (foreground + background)\ninput_points = np.array([[500, 375], [600, 400], [450, 300]])\ninput_labels = np.array([1, 1, 0])  # 2 foreground, 1 background\n\nmasks, scores, logits = predictor.predict(\n    point_coords=input_points,\n    point_labels=input_labels,\n    multimask_output=False  # Single mask when prompts are clear\n)\n```\n\n### Box prompts\n\n```python\n# Bounding box [x1, y1, x2, y2]\ninput_box = np.array([425, 600, 700, 875])\n\nmasks, scores, logits = predictor.predict(\n    box=input_box,\n    multimask_output=False\n)\n```\n\n### Combined prompts\n\n```python\n# Box + points for precise control\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375]]),\n    point_labels=np.array([1]),\n    box=np.array([400, 300, 700, 600]),\n    multimask_output=False\n)\n```\n\n### Iterative refinement\n\n```python\n# Initial prediction\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375]]),\n    point_labels=np.array([1]),\n    multimask_output=True\n)\n\n# Refine with additional point using previous mask\nmasks, scores, logits = predictor.predict(\n    point_coords=np.array([[500, 375], [550, 400]]),\n    point_labels=np.array([1, 0]),  # Add background point\n    mask_input=logits[np.argmax(scores)][None, :, :],  # Use best mask\n    multimask_output=False\n)\n```\n\n## Automatic mask generation\n\n### Basic automatic segmentation\n\n```python\nfrom segment_anything import SamAutomaticMaskGenerator\n\n# Create generator\nmask_generator = SamAutomaticMaskGenerator(sam)\n\n# Generate all masks\nmasks = mask_generator.generate(image)\n\n# Each mask contains:\n# - segmentation: binary mask\n# - bbox: [x, y, w, h]\n# - area: pixel count\n# - predicted_iou: quality score\n# - stability_score: robustness score\n# - point_coords: generating point\n```\n\n### Customized generation\n\n```python\nmask_generator = SamAutomaticMaskGenerator(\n    model=sam,\n    points_per_side=32,          # Grid density (more = more masks)\n    pred_iou_thresh=0.88,        # Quality threshold\n    stability_score_thresh=0.95,  # Stability threshold\n    crop_n_layers=1,             # Multi-scale crops\n    crop_n_points_downscale_factor=2,\n    min_mask_region_area=100,    # Remove tiny masks\n)\n\nmasks = mask_generator.generate(image)\n```\n\n### Filtering masks\n\n```python\n# Sort by area (largest first)\nmasks = sorted(masks, key=lambda x: x['area'], reverse=True)\n\n# Filter by predicted IoU\nhigh_quality = [m for m in masks if m['predicted_iou'] > 0.9]\n\n# Filter by stability score\nstable_masks = [m for m in masks if m['stability_score'] > 0.95]\n```\n\n## Batched inference\n\n### Multiple images\n\n```python\n# Process multiple images efficiently\nimages = [cv2.imread(f\"image_{i}.jpg\") for i in range(10)]\n\nall_masks = []\nfor image in images:\n    predictor.set_image(image)\n    masks, _, _ = predictor.predict(\n        point_coords=np.array([[500, 375]]),\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n    all_masks.append(masks)\n```\n\n### Multiple prompts per image\n\n```python\n# Process multiple prompts efficiently (one image encoding)\npredictor.set_image(image)\n\n# Batch of point prompts\npoints = [\n    np.array([[100, 100]]),\n    np.array([[200, 200]]),\n    np.array([[300, 300]])\n]\n\nall_masks = []\nfor point in points:\n    masks, scores, _ = predictor.predict(\n        point_coords=point,\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n    all_masks.append(masks[np.argmax(scores)])\n```\n\n## ONNX deployment\n\n### Export model\n\n```bash\npython scripts\u002Fexport_onnx_model.py \\\n    --checkpoint sam_vit_h_4b8939.pth \\\n    --model-type vit_h \\\n    --output sam_onnx.onnx \\\n    --return-single-mask\n```\n\n### Use ONNX model\n\n```python\nimport onnxruntime\n\n# Load ONNX model\nort_session = onnxruntime.InferenceSession(\"sam_onnx.onnx\")\n\n# Run inference (image embeddings computed separately)\nmasks = ort_session.run(\n    None,\n    {\n        \"image_embeddings\": image_embeddings,\n        \"point_coords\": point_coords,\n        \"point_labels\": point_labels,\n        \"mask_input\": np.zeros((1, 1, 256, 256), dtype=np.float32),\n        \"has_mask_input\": np.array([0], dtype=np.float32),\n        \"orig_im_size\": np.array([h, w], dtype=np.float32)\n    }\n)\n```\n\n## Common workflows\n\n### Workflow 1: Annotation tool\n\n```python\nimport cv2\n\n# Load model\npredictor = SamPredictor(sam)\npredictor.set_image(image)\n\ndef on_click(event, x, y, flags, param):\n    if event == cv2.EVENT_LBUTTONDOWN:\n        # Foreground point\n        masks, scores, _ = predictor.predict(\n            point_coords=np.array([[x, y]]),\n            point_labels=np.array([1]),\n            multimask_output=True\n        )\n        # Display best mask\n        display_mask(masks[np.argmax(scores)])\n```\n\n### Workflow 2: Object extraction\n\n```python\ndef extract_object(image, point):\n    \"\"\"Extract object at point with transparent background.\"\"\"\n    predictor.set_image(image)\n\n    masks, scores, _ = predictor.predict(\n        point_coords=np.array([point]),\n        point_labels=np.array([1]),\n        multimask_output=True\n    )\n\n    best_mask = masks[np.argmax(scores)]\n\n    # Create RGBA output\n    rgba = np.zeros((image.shape[0], image.shape[1], 4), dtype=np.uint8)\n    rgba[:, :, :3] = image\n    rgba[:, :, 3] = best_mask * 255\n\n    return rgba\n```\n\n### Workflow 3: Medical image segmentation\n\n```python\n# Process medical images (grayscale to RGB)\nmedical_image = cv2.imread(\"scan.png\", cv2.IMREAD_GRAYSCALE)\nrgb_image = cv2.cvtColor(medical_image, cv2.COLOR_GRAY2RGB)\n\npredictor.set_image(rgb_image)\n\n# Segment region of interest\nmasks, scores, _ = predictor.predict(\n    box=np.array([x1, y1, x2, y2]),  # ROI bounding box\n    multimask_output=True\n)\n```\n\n## Output format\n\n### Mask data structure\n\n```python\n# SamAutomaticMaskGenerator output\n{\n    \"segmentation\": np.ndarray,  # H×W binary mask\n    \"bbox\": [x, y, w, h],        # Bounding box\n    \"area\": int,                 # Pixel count\n    \"predicted_iou\": float,      # 0-1 quality score\n    \"stability_score\": float,    # 0-1 robustness score\n    \"crop_box\": [x, y, w, h],    # Generation crop region\n    \"point_coords\": [[x, y]],    # Input point\n}\n```\n\n### COCO RLE format\n\n```python\nfrom pycocotools import mask as mask_utils\n\n# Encode mask to RLE\nrle = mask_utils.encode(np.asfortranarray(mask.astype(np.uint8)))\nrle[\"counts\"] = rle[\"counts\"].decode(\"utf-8\")\n\n# Decode RLE to mask\ndecoded_mask = mask_utils.decode(rle)\n```\n\n## Performance optimization\n\n### GPU memory\n\n```python\n# Use smaller model for limited VRAM\nsam = sam_model_registry[\"vit_b\"](checkpoint=\"sam_vit_b_01ec64.pth\")\n\n# Process images in batches\n# Clear CUDA cache between large batches\ntorch.cuda.empty_cache()\n```\n\n### Speed optimization\n\n```python\n# Use half precision\nsam = sam.half()\n\n# Reduce points for automatic generation\nmask_generator = SamAutomaticMaskGenerator(\n    model=sam,\n    points_per_side=16,  # Default is 32\n)\n\n# Use ONNX for deployment\n# Export with --return-single-mask for faster inference\n```\n\n## Common issues\n\n| Issue | Solution |\n|-------|----------|\n| Out of memory | Use ViT-B model, reduce image size |\n| Slow inference | Use ViT-B, reduce points_per_side |\n| Poor mask quality | Try different prompts, use box + points |\n| Edge artifacts | Use stability_score filtering |\n| Small objects missed | Increase points_per_side |\n\n## References\n\n- **[Advanced Usage](references\u002Fadvanced-usage.md)** - Batching, fine-tuning, integration\n- **[Troubleshooting](references\u002Ftroubleshooting.md)** - Common issues and solutions\n\n## Resources\n\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything\n- **Paper**: https:\u002F\u002Farxiv.org\u002Fabs\u002F2304.02643\n- **Demo**: https:\u002F\u002Fsegment-anything.com\n- **SAM 2 (Video)**: https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fsegment-anything-2\n- **HuggingFace**: https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002Fsam-vit-huge\n",{"name":5,"author":48,"license":14,"version":49,"metadata":50,"description":7,"dependencies":57},"Orchestra Research","1.0.0",{"hermes":51},{"tags":52},[53,54,55,56,32],"Multimodal","Image Segmentation","Computer Vision","SAM",[58,59,60],"segment-anything","transformers>=4.30.0","torch>=1.7.0","main","93bbc269671fbb340afa15b36a8766f15dc30df2",".hermes\u002Fskills\u002Fmlops\u002Fmodels\u002Fsegment-anything","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch","2026-04-27 02:51:28",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill segment-anything-model",{"tool":73,"command":74},"bunx","bunx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill segment-anything-model",{"tool":76,"command":77},"pnpm","pnpm dlx skills add gjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6 --skill segment-anything-model","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fmlops\u002Fmodels\u002Fsegment-anything\u002FSKILL.md",true,[81,87],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fadvanced-usage.md","REFERENCE","参考文档",15803,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fmlops\u002Fmodels\u002Fsegment-anything\u002Freferences\u002Fadvanced-usage.md",{"path":88,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Ftroubleshooting.md",11914,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002F.hermes\u002Fskills\u002Fmlops\u002Fmodels\u002Fsegment-anything\u002Freferences\u002Ftroubleshooting.md",[92,130,158,174,193,214],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":112,"publishedAt":43},"01M71G6TJ2RAQ1J0PV3K6D9GQA","writing-plans","Use when you have a spec or requirements for a multi-step task. Creates comprehensive implementation plans with bite-sized tasks, exact file paths, and complete code examples.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[98,101,104,109],{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":102,"categoryName":103,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":110,"categoryName":111,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000036","内容创作者",[113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,31,29,129,27],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","superpowers","paths","test-driven-development","test-driven",{"skillNo":131,"name":128,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":143,"publishedAt":43},"01M71G6R81013R3T7W5VP56GCB","Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Ftest-driven-development\u002FSKILL.md",[135,138,141,142],{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":139,"categoryName":140,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":102,"categoryName":103,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":110,"categoryName":111,"taxonomyType":107,"taxonomyTypeDesc":108},[144,145,121,146,147,113,148,122,149,125,126,150,151,152,153,154,155,156,157,27],"test","test driven development","driven","testing","debugging","refactor","red-green-refactor","cycle","green","systematic","bugfix","implementing","systematic-debugging","test-first",{"skillNo":159,"name":156,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":43},"01M71G6N0Y546JZEDF25E2PMCE","Use when encountering any bug, test failure, or unexpected behavior. 4-phase root cause investigation — NO fixes without understanding the problem first.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[163],{"categoryNo":139,"categoryName":140,"taxonomyType":20,"taxonomyTypeDesc":21},[165,148,153,113,144,121,125,166,126,167,168,169,115,170,128,171,129,172,173,27],"systematic debugging","use","bug","root-cause","problem-solving","problem","fixes","phase","root cause",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":186,"publishedAt":43},"01M71G6J0DXEGY48GH4KVW2SJH","subagent-driven-development","Use when executing implementation plans with independent tasks. Dispatches fresh delegate_task per task with two-stage review (spec compliance then code quality).","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fsubagent-driven-development\u002FSKILL.md",[180,181,182,183],{"categoryNo":102,"categoryName":103,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},{"categoryNo":110,"categoryName":111,"taxonomyType":107,"taxonomyTypeDesc":108},{"categoryNo":184,"categoryName":185,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000037","律师与法务",[121,187,125,146,113,117,118,188,120,122,189,124,190,191,126,115,192,128,129,27],"subagent driven development","code quality","delegation","parallel","delegate","fresh",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":201,"publishedAt":43},"01M71G6EFFBQX6634E6XHB09Y1","requesting-code-review","Pre-commit verification pipeline — static security scan, baseline-aware quality gates, independent reviewer subagent, and auto-fix loop. Use after code changes and before committing, pushing, or opening a PR.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Frequesting-code-review\u002FSKILL.md",[199,200],{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},[202,117,122,203,113,204,124,205,206,207,208,125,209,210,211,126,128,212,213,129],"code review","requesting code review","commit","verification","security scan","pipeline","loop","reviewer","fix","auto","static","auto-fix",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":43},"01M71G6CM8ANSWVFXCN9AAD58Y","plan","Plan mode for Hermes — inspect context, write a markdown plan into the active workspace's `.hermes\u002Fplans\u002F` directory, and do not execute the work.","https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002Fhermes-sovereign-unified-v13.6\u002Fblob\u002Fmain\u002Fhermes_sovereign_data\u002Fskills\u002Fsoftware-development\u002Fplan\u002FSKILL.md",[],[216,113,221,118,121,123,222,125,223,224,225,226,227,228,115,229,230,231,29,232],"directory","markdown","workspace","work","write","implementation","do","active","plan mode","inspect","mode","plan-mode"]