Object detection with deep learning has revolutionized computer vision, enabling machines to identify and locate multiple objects in images or videos. This technique forms the foundation for various applications, from autonomous vehicles to facial recognition systems.

Deep learning architectures like CNNs, R-CNN, , and SSD have significantly improved object detection accuracy and efficiency. These models learn hierarchical features from raw image data, eliminating the need for manual feature engineering and paving the way for end-to-end trainable systems.

Fundamentals of object detection

  • Object detection forms a crucial component of computer vision, enabling machines to identify and locate multiple objects within images or video frames
  • In the context of image processing, object detection algorithms analyze pixel patterns and spatial relationships to recognize and localize objects of interest
  • This foundational technique underpins various advanced computer vision applications, from autonomous vehicles to facial recognition systems

Definition and objectives

Top images from around the web for Definition and objectives
Top images from around the web for Definition and objectives
  • Simultaneous identification and localization of multiple objects within an image or video frame
  • Outputs include bounding boxes around detected objects and their corresponding class labels
  • Aims to achieve high accuracy in object classification and precise localization
  • Handles varying object sizes, orientations, and partial occlusions in complex scenes

Object detection vs classification

  • Classification assigns a single label to an entire image, while detection identifies and localizes multiple objects
  • Detection provides spatial information (bounding boxes) in addition to object labels
  • Classification typically uses global image features, whereas detection relies on local and contextual features
  • Object detection models often incorporate classification as a subtask within their architecture

Applications in computer vision

  • Autonomous vehicles use object detection for identifying pedestrians, vehicles, and road signs
  • Facial recognition systems employ detection to locate and analyze facial features
  • Retail analytics utilize object detection for customer behavior analysis and inventory management
  • Medical imaging benefits from detection algorithms for identifying tumors or abnormalities in scans
  • Security and surveillance systems leverage detection for identifying suspicious objects or behaviors

Deep learning architectures

  • Deep learning has revolutionized object detection in computer vision, enabling end-to-end trainable models with superior performance
  • These architectures automatically learn hierarchical features from raw image data, eliminating the need for hand-crafted feature engineering
  • Deep learning-based object detection models have significantly improved accuracy and efficiency across various applications

Convolutional Neural Networks (CNNs)

  • Fundamental building blocks of modern object detection architectures
  • Utilize convolutional layers to extract hierarchical features from input images
  • Employ pooling layers for spatial dimension reduction and translation invariance
  • Contain fully connected layers for high-level reasoning and final predictions
  • often leverages pre-trained CNN backbones (ResNet, VGG) for feature extraction

R-CNN family of models

  • Region-based (R-CNN) introduced a two-stage detection approach
  • improved efficiency by processing the entire image through a CNN before region proposals
  • introduced the Region Proposal Network (RPN) for end-to-end trainable object detection
  • extended Faster R-CNN to perform in addition to object detection
  • R-CNN models generally achieve high accuracy but may have slower inference times compared to single-stage detectors

YOLO architecture

  • You Only Look Once (YOLO) pioneered single-stage object detection
  • Divides the image into a grid and predicts bounding boxes and class probabilities for each grid cell
  • Processes the entire image in a single forward pass, enabling real-time detection
  • and later versions incorporate multi-scale predictions and for improved performance
  • Trades some accuracy for significantly faster inference speeds compared to two-stage detectors

SSD architecture

  • (SSD) uses a single network for both classification and localization
  • Employs multiple feature maps at different scales for detecting objects of various sizes
  • Utilizes (similar to anchor boxes) to handle different object aspect ratios
  • Performs to eliminate duplicate detections
  • Achieves a balance between speed and accuracy, suitable for real-time applications

Training object detection models

  • Training object detection models involves preparing large datasets of annotated images
  • The process requires careful consideration of , loss functions, and optimization strategies
  • Transfer learning techniques often accelerate training and improve performance, especially with limited data

Dataset preparation

  • Collect diverse images containing objects of interest in various contexts and lighting conditions
  • Annotate images with coordinates and corresponding class labels
  • Ensure balanced representation of different object classes and sizes within the dataset
  • Split the dataset into training, validation, and test sets for model development and evaluation
  • Consider using publicly available datasets (COCO, ) for benchmarking or pre-training

Data augmentation techniques

  • Random horizontal flipping to increase robustness to object orientation
  • Random cropping and scaling to improve detection of objects at different sizes
  • Color jittering (brightness, contrast, saturation adjustments) for lighting invariance
  • Mixup and CutMix techniques to create new training samples by combining existing images
  • , which combines multiple images into a single training sample

Loss functions for object detection

  • Combination of classification loss (typically cross-entropy) and localization loss (often L1 or L2)
  • addresses class imbalance by down-weighting well-classified examples
  • or for better bounding box regression
  • Objectness loss to distinguish between foreground and background regions
  • Total loss is often a weighted sum of individual loss components, with weights determined empirically

Transfer learning approaches

  • Fine-tuning pre-trained CNN backbones on large datasets () for feature extraction
  • Freezing early layers and only training later layers or detection-specific components
  • Progressive unfreezing of layers during training to adapt the entire network gradually
  • Domain adaptation techniques for transferring knowledge between different datasets or domains
  • Few-shot learning approaches for adapting models to new object classes with limited examples

Performance evaluation

  • Evaluating object detection models requires metrics that consider both classification accuracy and localization precision
  • These metrics help compare different models and track improvements during the development process
  • Understanding performance evaluation is crucial for selecting appropriate models for specific applications

Intersection over Union (IoU)

  • Measures the overlap between predicted and ground truth bounding boxes
  • Calculated as the area of intersection divided by the area of union of the two boxes
  • IoU threshold (typically 0.5) determines whether a detection is considered correct
  • Higher IoU thresholds indicate more precise localization
  • Used as a key component in other evaluation metrics like mAP

Mean Average Precision (mAP)

  • Combines precision and recall across all object classes
  • Calculated by averaging the Average Precision (AP) for each class
  • AP is the area under the precision-recall curve for a specific class
  • mAP@0.5 uses an IoU threshold of 0.5 for considering correct detections
  • mAP@0.5:0.95 averages mAP over multiple IoU thresholds for a more comprehensive evaluation

Precision-Recall curves

  • Visualize the trade-off between precision and recall at various confidence thresholds
  • Precision measures the accuracy of positive predictions
  • Recall indicates the proportion of actual positives correctly identified
  • Area under the PR curve correlates with Average Precision (AP)
  • Ideal curves have high precision across all recall values, forming a rectangular shape

Advanced techniques

  • Advanced techniques in object detection aim to address specific challenges and improve overall performance
  • These methods often focus on enhancing the model's ability to handle objects of varying scales and shapes
  • Implementing these techniques can significantly boost detection accuracy and efficiency

Anchor boxes and priors

  • Predefined bounding box shapes and sizes used as references for object detection
  • Help models handle objects with different aspect ratios and scales
  • Anchor boxes are typically determined using k-means clustering on the training dataset
  • Improve the model's ability to detect objects of various shapes and sizes
  • Can be adapted during training to better fit the specific object distribution in the dataset

Non-Maximum Suppression (NMS)

  • Post-processing technique to eliminate duplicate detections of the same object
  • Selects the detection with the highest confidence score for each group of overlapping boxes
  • Iteratively suppresses lower-scoring detections that have high IoU with the selected box
  • Soft NMS applies a decay function to confidence scores instead of hard thresholding
  • Crucial for producing clean, non-redundant detection results

Feature pyramid networks

  • Hierarchical representation of features at multiple scales
  • Combines low-resolution, semantically strong features with high-resolution, semantically weak features
  • Enables detection of objects at various scales using a single network
  • Top-down pathway augments high-level features with spatial information from lower levels
  • Lateral connections merge features from different levels of the feature hierarchy

Challenges in object detection

  • Object detection faces several challenges that impact model performance and generalization
  • Addressing these challenges is crucial for developing robust and reliable detection systems
  • Ongoing research in computer vision aims to overcome these limitations through novel architectures and techniques

Scale and aspect ratio variations

  • Objects in real-world scenes appear at various sizes and aspect ratios
  • Small objects often pose difficulties due to limited pixel information
  • Large objects may exceed the receptive field of the network
  • Multi-scale training and testing help address scale variations
  • Anchor boxes with diverse aspect ratios improve detection of objects with different shapes

Occlusion and overlapping objects

  • Partially obscured objects challenge detection and localization accuracy
  • Overlapping objects can lead to missed detections or incorrect bounding boxes
  • Attention mechanisms help focus on relevant parts of partially occluded objects
  • Part-based models can detect objects based on visible components
  • Contextual information aids in inferring the presence of occluded objects

Real-time performance constraints

  • Many applications require fast inference times (autonomous vehicles, video surveillance)
  • Trade-off between accuracy and speed often necessary for real-time operation
  • Model compression techniques (pruning, quantization) reduce computational requirements
  • Efficient architectures (, ) designed for mobile and embedded devices
  • Hardware acceleration (GPUs, TPUs) crucial for achieving real-time performance

State-of-the-art models

  • State-of-the-art object detection models push the boundaries of accuracy and efficiency
  • These models often incorporate novel architectural designs and training strategies
  • Comparing top-performing models helps in selecting the most suitable approach for specific applications

Faster R-CNN vs YOLO

  • Faster R-CNN represents two-stage detectors, while YOLO exemplifies single-stage approaches
  • Faster R-CNN generally achieves higher accuracy, especially for small objects
  • YOLO offers faster inference times, suitable for real-time applications
  • Faster R-CNN uses region proposals, while YOLO divides the image into a grid
  • Recent YOLO versions (v4, v5) have narrowed the accuracy gap while maintaining speed advantages

RetinaNet and focal loss

  • addresses class imbalance in single-stage detectors using focal loss
  • Focal loss down-weights well-classified examples, focusing on hard, misclassified instances
  • Feature Pyramid Network (FPN) backbone enables multi-scale feature extraction
  • Achieves accuracy comparable to two-stage detectors while maintaining single-stage efficiency
  • Particularly effective in datasets with a high foreground-background imbalance

EfficientDet architecture

  • Builds upon EfficientNet backbone for efficient feature extraction
  • Employs bidirectional feature pyramid network (BiFPN) for multi-scale feature fusion
  • Compound scaling method balances network depth, width, and resolution
  • Achieves state-of-the-art performance across various computational budgets
  • Suitable for both high-accuracy and resource-constrained scenarios

Object detection in practice

  • Implementing object detection systems in real-world applications involves considerations beyond model architecture
  • Practical deployment requires strategies for optimizing performance, reducing latency, and adapting to specific hardware constraints
  • Understanding these practical aspects is crucial for developing effective and efficient object detection solutions

Model deployment strategies

  • Cloud-based deployment for scalable processing of large datasets or high-resolution images
  • Edge computing for reduced latency and improved privacy in IoT applications
  • Model quantization to reduce memory footprint and improve inference speed
  • Ensemble methods combining multiple models for improved accuracy and robustness
  • API-based services for easy integration into existing software ecosystems

Hardware acceleration techniques

  • GPU acceleration for parallel processing of convolutional operations
  • Tensor Processing Units (TPUs) designed specifically for machine learning workloads
  • Field-Programmable Gate Arrays (FPGAs) for custom hardware acceleration
  • Neural Processing Units (NPUs) in mobile devices for on-device inference
  • Distributed computing frameworks for processing large-scale datasets across multiple machines

Mobile and embedded applications

  • Model optimization techniques (pruning, knowledge distillation) for resource-constrained devices
  • Lite and Mobile frameworks for deploying models on mobile platforms
  • ONNX (Open Neural Network Exchange) for cross-platform model interoperability
  • Hardware-specific optimizations (ARM NEON, Apple Neural Engine) for improved performance
  • Battery-aware inference scheduling to balance detection accuracy and power consumption

Key Terms to Review (37)

Anchor boxes: Anchor boxes are predefined bounding boxes used in object detection algorithms to help predict the locations of objects within images. They serve as reference points during the training process, allowing the model to learn how to adjust these boxes to fit objects of various shapes and sizes. This technique is essential for improving accuracy and efficiency in deep learning models designed for object detection.
Backpropagation: Backpropagation is a supervised learning algorithm used for training artificial neural networks by minimizing the error between predicted outputs and actual targets. It works by calculating gradients of the loss function with respect to each weight in the network, allowing the model to adjust its weights in the opposite direction of the gradient, thus reducing errors and improving accuracy. This technique is essential in fine-tuning the parameters of neural networks, especially in complex architectures like convolutional neural networks and in applications such as object detection.
Bounding box: A bounding box is a rectangular box that is drawn around an object in an image to define its position and size. It serves as a crucial element in various computer vision tasks, particularly in object detection, where it helps identify and localize objects within images. The coordinates of the bounding box typically include the top-left and bottom-right corners, allowing algorithms to accurately detect, track, and classify objects in visual data.
COCO Dataset: The COCO (Common Objects in Context) dataset is a large-scale dataset used for object detection, segmentation, and captioning tasks in computer vision. It contains over 330,000 images, with more than 2.5 million labeled instances across 80 object categories, enabling the development and evaluation of machine learning models, particularly in transfer learning and deep learning applications.
Convolutional Neural Networks: Convolutional Neural Networks (CNNs) are a specialized type of artificial neural network designed to process structured grid data, such as images. They use convolutional layers to automatically detect patterns and features in visual data, making them particularly effective for tasks like image recognition and classification. CNNs consist of multiple layers that work together to learn spatial hierarchies of features, which enhances their performance across various applications in computer vision and image processing.
Data augmentation: Data augmentation is a technique used to artificially increase the size of a training dataset by creating modified versions of existing data. This process helps improve the performance and robustness of machine learning models, especially in tasks involving image processing and recognition, where variations in lighting, perspective, and other factors can significantly affect results.
Default boxes: Default boxes are pre-defined bounding boxes of various aspect ratios and scales used in object detection algorithms, particularly in deep learning. They serve as anchor boxes that help the model predict the location and size of objects within an image, enabling the detection of multiple objects at different scales. By providing these default boxes, the network can efficiently learn to adjust them to better fit the actual objects present in an image.
EfficientDet: EfficientDet is a state-of-the-art object detection model that balances accuracy and efficiency by leveraging a compound scaling method. This model is designed to optimize both the architecture and the training process, leading to improved performance on various object detection tasks while requiring fewer computational resources. Its integration of EfficientNet as a backbone enhances feature extraction, making it a popular choice in deep learning for real-time applications.
Fast R-CNN: Fast R-CNN is an advanced object detection algorithm that improves upon the original R-CNN by streamlining the process of identifying and classifying objects in images. It does this by utilizing a single-stage training method that integrates region proposal networks and convolutional neural networks (CNNs) to enhance both speed and accuracy in detecting objects within images. This method allows for faster processing times and reduced computational costs compared to its predecessors.
Faster R-CNN: Faster R-CNN is an advanced deep learning model used for object detection that combines region proposal networks (RPN) with a fast convolutional neural network (CNN). This architecture allows it to quickly and accurately identify objects within images by generating region proposals and then classifying those proposals in a single forward pass, making it more efficient than its predecessors. The integration of RPN enables the model to learn the best object proposals directly from data, improving performance in various applications.
Faster R-CNN vs YOLO: Faster R-CNN and YOLO (You Only Look Once) are two prominent object detection frameworks that utilize deep learning techniques to identify and locate objects within images. While Faster R-CNN employs a two-stage process that involves region proposal generation followed by classification, YOLO takes a more streamlined single-stage approach, processing the entire image in one go for faster inference times. Understanding the strengths and weaknesses of these methods is essential for applying the right technique to specific object detection tasks.
Feature Pyramid Networks: Feature Pyramid Networks (FPN) are a type of deep learning architecture designed to efficiently detect objects at different scales by building a feature pyramid from a single input image. This approach improves object detection by enabling the model to leverage both high-resolution features from earlier layers and semantically rich features from deeper layers, effectively enhancing the network's ability to recognize objects of various sizes and complexities.
Focal loss: Focal loss is a loss function designed to address class imbalance in tasks like object detection and semantic segmentation, particularly when there are many easy-to-classify examples compared to hard-to-classify ones. By down-weighting the loss contribution from easy examples and focusing on hard ones, focal loss helps improve the model's performance on challenging tasks. It adjusts the standard cross-entropy loss by introducing a modulating factor that reduces the relative loss for well-classified examples, allowing the model to learn better from misclassified instances.
Giou loss: GIoU loss, or Generalized Intersection over Union loss, is an advanced loss function used in object detection that measures the overlap between predicted bounding boxes and ground truth boxes. It extends the traditional IoU metric by incorporating the distance between boxes and their size, which helps in better convergence during training of deep learning models. This makes GIoU loss particularly valuable in improving the accuracy of object detection systems.
Gradient descent: Gradient descent is an optimization algorithm used to minimize the cost function in machine learning and artificial intelligence. It works by iteratively adjusting the parameters of a model in the direction of the steepest descent, which is determined by the negative gradient of the cost function. This process is crucial for training models effectively, especially in complex systems like neural networks and deep learning frameworks, where it helps improve accuracy in tasks such as image classification and object detection.
Imagenet: ImageNet is a large visual database designed for use in visual object recognition software research. It provides millions of labeled images organized into thousands of categories, which are essential for training deep learning models, particularly in the fields of computer vision and image processing. The scale and diversity of ImageNet make it a cornerstone for developing algorithms that can generalize well to real-world tasks.
Instance segmentation: Instance segmentation is a computer vision task that involves detecting and delineating each object instance within an image at the pixel level. It combines the tasks of object detection and semantic segmentation, allowing not just for the identification of objects but also for differentiating between multiple instances of the same class. This capability is essential for applications like autonomous driving, where recognizing and precisely locating every object is crucial.
Intersection over Union: Intersection over Union (IoU) is a metric used to evaluate the accuracy of an object detection or segmentation model by measuring the overlap between the predicted bounding box (or segmented region) and the ground truth. It is calculated as the area of overlap between the predicted and actual boxes divided by the area of their union. This metric is crucial in assessing how well models perform in distinguishing objects, especially in tasks like edge detection, semantic segmentation, semi-supervised learning, and object detection using deep learning.
IoU Loss: IoU Loss, or Intersection over Union Loss, is a metric used to evaluate the accuracy of an object detection model by measuring the overlap between the predicted bounding box and the ground truth bounding box. The loss is calculated as one minus the IoU, which quantifies the extent of overlap, making it a crucial component in training deep learning models for object detection tasks. It helps in optimizing the model's performance by providing feedback on how well the predicted boxes align with actual object locations in images.
Mask R-CNN: Mask R-CNN is a deep learning model designed for object detection and instance segmentation, extending the Faster R-CNN framework by adding a branch for predicting segmentation masks on each detected object. This architecture allows it to not only identify objects in an image but also provide precise pixel-wise segmentation, making it highly effective for tasks where distinguishing object boundaries is crucial. Mask R-CNN operates by using a Region Proposal Network (RPN) to suggest candidate object locations and then classifying these proposals while simultaneously generating masks for each object instance.
Mean Average Precision: Mean Average Precision (mAP) is a metric used to evaluate the accuracy of an object detection model by calculating the average precision across different classes. It combines the concepts of precision and recall, providing a comprehensive measure of how well a model identifies and classifies objects in images. mAP is particularly important in scenarios involving multiple classes and is widely used to assess the performance of models in tasks like image retrieval, detection, and classification.
MobileNet: MobileNet is a family of lightweight deep learning models designed for efficient performance on mobile and edge devices while maintaining high accuracy in tasks like image classification and object detection. By utilizing depthwise separable convolutions, MobileNet significantly reduces the number of parameters and computations required, making it suitable for applications where computational resources are limited. This efficiency is crucial for various computer vision tasks, enabling deployment in real-time scenarios.
Mosaic augmentation: Mosaic augmentation is a data augmentation technique used in deep learning for object detection, where multiple images are combined into a single image. This method helps to increase the diversity of training data by creating varied scenes, which can enhance the robustness and generalization capabilities of object detection models. By simulating different conditions and perspectives, mosaic augmentation allows models to learn better from fewer training samples.
Non-maximum suppression: Non-maximum suppression is a technique used in image processing to eliminate extraneous responses and retain only the local maxima in a feature map, particularly after edge detection or keypoint detection. This method helps in refining the detected edges or keypoints by removing non-peak values, thus ensuring that only the strongest responses are preserved, which is crucial for tasks like edge-based segmentation and object detection.
Pascal VOC: Pascal VOC, or the Visual Object Classes Challenge, is a benchmark for evaluating the performance of algorithms in object detection and semantic segmentation. This dataset contains annotated images that serve as a foundation for training and testing models, providing a standard reference point in the fields of computer vision and deep learning. The importance of Pascal VOC lies in its comprehensive set of annotations and challenges, which drive advancements in semantic segmentation and object detection techniques.
Precision-recall curves: Precision-recall curves are graphical representations that illustrate the trade-off between precision and recall for different thresholds in binary classification tasks. Precision measures the accuracy of positive predictions, while recall indicates the ability to find all relevant instances. These curves are particularly useful in scenarios with imbalanced datasets, where one class significantly outnumbers another, providing a clearer understanding of a model's performance in distinguishing objects within various contexts.
PyTorch: PyTorch is an open-source machine learning library widely used for developing deep learning applications. It provides a flexible framework that supports dynamic computation graphs, allowing developers to modify the architecture of neural networks on-the-fly. Its intuitive interface and strong community support make it a popular choice for tasks in computer vision, natural language processing, and more.
Region Proposal Networks: Region Proposal Networks (RPN) are a type of neural network architecture used in object detection that generates candidate object bounding boxes from feature maps produced by a backbone network. They streamline the process of generating region proposals, which are essential for detecting objects within an image, making the detection process more efficient and effective by integrating region proposal generation with deep learning techniques.
RetinaNet: RetinaNet is an object detection model that employs a unique focal loss function to address the class imbalance between foreground and background classes during training. By utilizing a feature pyramid network (FPN) architecture, it effectively detects objects at various scales while maintaining high accuracy. This model is designed to tackle the challenges of detecting small and densely packed objects in images, making it a popular choice in the realm of deep learning for object detection.
Semantic segmentation: Semantic segmentation is a computer vision task that involves classifying each pixel in an image into predefined categories, essentially providing a detailed understanding of the scene by identifying the objects and their boundaries. This approach enables algorithms to distinguish between different objects, making it fundamental for various applications like autonomous driving, medical imaging, and image editing. By assigning class labels to each pixel, semantic segmentation provides rich spatial information that can be leveraged in more complex tasks such as object detection.
ShuffleNet: ShuffleNet is a lightweight convolutional neural network architecture designed for efficient image classification and object detection tasks, particularly in mobile and embedded devices. It employs pointwise group convolution and channel shuffling to reduce computational complexity while maintaining performance, making it ideal for real-time applications in deep learning.
Single Shot Detector: The Single Shot Detector (SSD) is a type of deep learning model used for real-time object detection in images. It simplifies the object detection process by predicting bounding boxes and class probabilities for multiple objects in a single forward pass through the network, making it efficient and fast compared to traditional methods that require multiple stages of processing.
Single Shot Multibox Detector: The Single Shot Multibox Detector (SSD) is an advanced object detection framework that allows for the identification and localization of multiple objects in a single pass through a neural network. It is designed to be fast and efficient, making it suitable for real-time applications by predicting bounding boxes and class scores simultaneously for various object categories. SSD leverages deep learning techniques to process images in a single forward pass, greatly speeding up the detection process while maintaining accuracy.
Tensorflow: TensorFlow is an open-source machine learning framework developed by Google that allows for easy deployment of deep learning models in a variety of contexts. It offers a flexible ecosystem to build and train machine learning models using computational graphs, which makes it particularly useful for tasks such as semantic segmentation, transfer learning, and object detection. The framework's ability to utilize GPUs enhances its performance for large-scale machine learning projects.
Transfer learning: Transfer learning is a machine learning technique where a model developed for one task is reused as the starting point for a model on a second task. This approach leverages the knowledge gained while solving one problem and applies it to different but related problems, making it particularly useful in areas like image processing and computer vision.
YOLO: YOLO, which stands for 'You Only Look Once,' is a popular real-time object detection system that uses a single convolutional neural network (CNN) to predict bounding boxes and class probabilities directly from full images. This method allows for extremely fast and efficient object detection, enabling applications across various fields, such as autonomous vehicles and surveillance systems. YOLO's architecture simplifies the detection process by treating it as a single regression problem, streamlining the workflow and improving speed without sacrificing accuracy.
Yolov3: YOLOv3 (You Only Look Once version 3) is a real-time object detection algorithm that utilizes deep learning techniques to identify and classify objects within images or video streams. It improves upon its predecessors by incorporating a multi-scale prediction strategy, allowing it to detect objects at various sizes and improving accuracy in challenging environments. This algorithm is widely recognized for its balance between speed and accuracy, making it suitable for applications requiring real-time performance.
© 2024 Fiveable Inc. All rights reserved.
AP® and SAT® are trademarks registered by the College Board, which is not affiliated with, and does not endorse this website.