SKILL.md
Computer Vision Guide
A skill for conducting computer vision research, covering model architectures, dataset preparation, training pipelines, evaluation metrics, and common experimental protocols for image classification, object detection, and segmentation tasks.
Core Tasks and Architectures
Computer Vision Task Taxonomy
Image Classification:
Input: Single image
Output: Class label(s)
Models: ResNet, EfficientNet, ViT, ConvNeXt
Object Detection:
Input: Single image
Output: Bounding boxes + class labels
Models: YOLO (v5-v9), Faster R-CNN, DETR, RT-DETR
Semantic Segmentation:
Input: Single image
Output: Per-pixel class label
Models: U-Net, DeepLab, SegFormer, Mask2Former
Instance Segmentation:
Input: Single image
Output: Per-pixel labels distinguishing individual objects
Models: Mask R-CNN, Mask2Former, SAM
Image Generation:
Input: Text prompt or noise
Output: Generated image
Models: Stable Diffusion, DALL-E, Imagen
Model Architecture Evolution
CNNs (Convolutional Neural Networks):
LeNet (1998) -> AlexNet (2012) -> VGG (2014) -> ResNet (2015)
-> EfficientNet (2019) -> ConvNeXt (2022)
Vision Transformers:
ViT (2020) -> DeiT (2021) -> Swin Transformer (2021)
-> BEiT (2021) -> DINOv2 (2023)
Trend: Transformers are competitive with CNNs at scale.
Hybrid architectures combining convolutions and attention are common.
Dataset Preparation
Building a Research Dataset
import os
from pathlib import Path
def organize_image_dataset(source_dir: str,
split_ratios: dict = None) -> dict:
"""
Organize images into train/val/test splits.
Args:
source_dir: Directory containing class subdirectories
split_ratios: Dict with 'train', 'val', 'test' ratios
"""
if split_ratios is None:
split_ratios = {"train": 0.7, "val": 0.15, "test": 0.15}
import random
random.seed(42)
stats = {}
for class_dir in sorted(Path(source_dir).iterdir()):
if not class_dir.is_dir():
continue
images = list(class_dir.glob("*.jpg")) + list(class_dir.glob("*.png"))
random.shuffle(images)
n = len(images)
n_train = int(n * split_ratios["train"])
n_val = int(n * split_ratios["val"])
stats[class_dir.name] = {
"total": n,
"train": n_train,
"val": n_val,
"test": n - n_train - n_val
}
return stats
