Transformers documentation
CHMv2
Este modelo se publicó en HF papers el 2026-03-06 y se contribuyó a Hugging Face Transformers el 2026-03-11.
CHMv2
Resumen
El modelo Canopy Height Maps v2 (CHMv2) se propuso en CHMv2: Improvements in Global Canopy Height Mapping using DINOv3. Basándose en nuestros original high-resolution canopy height maps publicados en 2024, CHMv2 ofrece mejoras sustanciales en precisión, detalle y consistencia global al aprovechar DINOv3, el modelo de visión auto-supervisado de Meta.
Puedes encontrar más información aquí, y el código original aquí.
El resumen del artículo es el siguiente:
La información precisa sobre la altura de la copa es esencial para cuantificar el carbono forestal, monitorear la restauración y la degradación, y evaluar la estructura del hábitat, sin embargo, las mediciones de alta fidelidad obtenidas mediante escaneo láser aéreo (ALS) siguen estando disponibles de manera desigual a nivel global. Aquí presentamos CHMv2, un mapa global de altura de la copa a resolución de metros derivado de imágenes satelitales ópticas de alta resolución, utilizando un modelo de estimación de profundidad basado en DINOv3 y entrenado contra modelos de altura de la copa de ALS. En comparación con los productos existentes, CHMv2 mejora sustancialmente la precisión, reduce el sesgo en los bosques altos y preserva mejor la estructura a escala fina, como los bordes y huecos de la copa. Estas mejoras se habilitan mediante una gran expansión de datos de entrenamiento geográficamente diversos, la curaduría y el registro automatizados de datos, y una formulación de pérdida y una estrategia de muestreo de datos adaptadas a las distribuciones de altura de la copa. Validamos CHMv2 contra conjuntos de prueba independientes de ALS y contra decenas de millones de observaciones de GEDI e ICESat-2, demostrando un rendimiento consistente en los principales biomas forestales.
Ejemplos de uso
Ejecuta la inferencia en una imagen con el siguiente código:
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForDepthEstimation
processor = AutoImageProcessor.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head")
model = AutoModelForDepthEstimation.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head", device_map="auto")
image = Image.open("image.tif")
inputs = processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
depth = processor.post_process_depth_estimation(
outputs, target_sizes=[(image.height, image.width)]
)[0]["predicted_depth"]CHMv2Config
clase transformers.CHMv2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonepatch_size: int = 16initializer_range: float = 0.02reassemble_factors: list[float | int] | None = Nonepost_process_channels: list[int] | None = Nonefusion_hidden_size: int = 256head_hidden_size: int = 128number_output_channels: int = 256readout_type: str = 'project'min_depth: float = 0.001max_depth: float = 96.0bins_strategy: typing.Literal['linear', 'log', 'chmv2_mixlog'] = 'chmv2_mixlog'norm_strategy: typing.Literal['linear', 'softmax', 'sigmoid', 'chmv2_mixlog'] = 'chmv2_mixlog' )
Parámetros
- backbone_config (
Union[dict, "PreTrainedConfig"], opcional) — La configuración del modelo backbone. Actualmente solo se admite DINOv3ViTConfig. - patch_size (
int, opcional, valor predeterminado 16) — El tamaño de parche utilizado por el transformador de visión del backbone. - initializer_range (
float, opcional, valor predeterminado0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos. - reassemble_factors (
list[float], opcional, valor predeterminado[4, 2, 1, 0.5]) — Los factores de submuestreo/sobremuestreo de las capas de reensamblaje. - post_process_channels (
list[int], opcional, valor predeterminado[128, 256, 512, 1024]) — Los tamaños de los canales de salida de la etapa de reensamblaje para cada nivel de características del backbone. - fusion_hidden_size (
int, opcional, valor predeterminado 256) — El número de canales antes de la fusión. - head_hidden_size (
int, opcional, valor predeterminado 128) — El número de canales en la capa oculta de la cabeza de estimación de profundidad. - number_output_channels (
int, opcional, valor predeterminado 256) — Número de canales de salida para la cabeza CHMv2 (número de bins de profundidad). - readout_type (
str, opcional, por defecto"project") — Tipo de operación de lectura para el token CLS. Uno de["ignore", "add", "project"]. - min_depth (
float, opcional, valor predeterminado 0.001) — El valor mínimo de profundidad para el cálculo de los intervalos de profundidad. - max_depth (
float, opcional, valor predeterminado 96.0) — El valor máximo de profundidad para el cálculo de los intervalos de profundidad. - bins_strategy (
str, opcional, valor predeterminado"chmv2_mixlog") — La estrategia para la distribución de los bins de profundidad. Uno de["linear", "log", "chmv2_mixlog"]. - norm_strategy (
str, opcional, valor predeterminado"chmv2_mixlog") — La estrategia de normalización para la predicción de profundidad. Uno de["linear", "softmax", "sigmoid", "chmv2_mixlog"].
Esta es la clase de configuración para almacenar la configuración de un Chmv2Model. Se utiliza para instanciar un modelo Chmv2 según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de facebook/dinov3-vitl16-chmv2-dpt-head
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
CHMv2ImageProcessor
clase transformers.CHMv2ImageProcessor
< source >( **kwargs: *<class 'transformers.models.chmv2.image_processing_chmv2.CHMv2ImageProcessorKwargs'> )
Parámetros
- do_convert_rgb (
bool, kwargs, opcional) — Si se debe convertir la imagen a RGB. - do_resize (
bool, kwargs, opcional, valor predeterminadoFalse) — Si se debe redimensionar la imagen. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, por defecto{'height' -- 384, 'width': 384}): Describe las dimensiones de entrada máximas para el modelo. - default_to_square (
bool, kwargs, opcional, valor predeterminadoTrue) — Si se debe usar una imagen cuadrada por defecto al redimensionar, si size es un int. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, por defectoNone) — Tamaño de la imagen de salida tras aplicarcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, por defecto3) — Filtro de remuestreo a utilizar si se redimensiona la imagen. Puede ser uno de los valores de la enumeraciónPILImageResampling. Solo tiene efecto sido_resizeestá establecido enTrue. - do_rescale (
bool, kwargs, opcional, valor predeterminadoTrue) — Si se debe reescalar la imagen. - rescale_factor (
float, kwargs, opcional, valor predeterminado0.00392156862745098) — Factor de reescalado para reescalar la imagen sido_rescaleestá establecido enTrue. - do_normalize (
bool, kwargs, opcional, valor predeterminadoTrue) — Si se debe normalizar la imagen. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, opcional, valor predeterminado[0.42, 0.411, 0.296]) — Media de la imagen a utilizar para la normalización. Solo tiene efecto sido_normalizeestá establecido enTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, opcional, valor predeterminado[0.213, 0.156, 0.143]) — Desviación estándar de la imagen a utilizar para la normalización. Solo tiene efecto sido_normalizeestá establecido enTrue. - do_pad (
bool, kwargs, opcional, valor predeterminadoTrue) — Indica si se debe aplicar relleno a la imagen. El relleno se realiza hasta el tamaño más grande del lote o hasta un tamaño cuadrado fijo por imagen. La estrategia exacta de relleno depende del modelo. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — El tamaño en{"height": int, "width" int}al que se rellenan las imágenes. Debe ser mayor que cualquier tamaño de imagen proporcionado para el preprocesamiento. Si no se proporcionapad_size, las imágenes se rellenarán hasta la mayor altura y anchura del lote. Se aplica solo cuandodo_pad=True. - do_center_crop (
bool, kwargs, opcional, valor predeterminadoNone) — Si se debe recortar la imagen centrada. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opcional) — Solo se admiteChannelDimension.FIRST. Se añadió para garantizar la compatibilidad con los procesadores lentos. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opcional) — El formato de la dimensión de canales para la imagen de entrada. Si no se establece, el formato de la dimensión de canales se infiere a partir de la imagen de entrada. Puede ser uno de:"channels_first"oChannelDimension.FIRST: imagen en formato (num_channels, height, width)."channels_last"oChannelDimension.LAST: imagen en formato (altura, ancho, num_canales)."none"oChannelDimension.NONE: imagen en formato (altura, ancho).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — El dispositivo en el que se procesarán los videos. Si no se establece, el dispositivo se infiere a partir de los videos de entrada. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Devuelve tensores apilados si se establece en'pt'; en caso contrario, devuelve una lista de tensores. - disable_grouping (
bool, kwargs, opcional) — Si se debe deshabilitar el agrupamiento de imágenes por tamaño para procesarlas de forma individual y no en lotes. Si es None, se establecerá en True si las imágenes están en CPU, y en False en caso contrario. Esta elección se basa en observaciones empíricas, como se detalla aquí: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, opcional) — El número de tokens de imagen que se utilizarán para cada imagen en la entrada. Añadido por compatibilidad con versiones anteriores, pero en futuros modelos debería establecerse como un atributo del procesador. - ensure_multiple_of (
int, kwargs, opcional, valor predeterminado 1) — Sido_resizeesTrue, la imagen se redimensiona a un tamaño que es múltiplo de este valor. Puede sobrescribirse porensure_multiple_ofenpreprocess. - size_divisor (
int, kwargs, valor predeterminado16) — El tamaño por el que se debe asegurar que tanto la altura como el ancho sean divisibles. - keep_aspect_ratio (
bool, kwargs, opcional, valor predeterminadoFalse) — Si esTrue, la imagen se redimensiona al tamaño más grande posible de modo que se preserve la relación de aspecto. Puede ser anulado porkeep_aspect_ratioenpreprocess. - do_reduce_labels (
bool, kwargs, opcional, valor predeterminadoself.do_reduce_labels) — Indica si se deben reducir en 1 todos los valores de etiqueta de los mapas de segmentación. Se utiliza habitualmente en conjuntos de datos donde 0 se emplea para el fondo y el propio fondo no está incluido en todas las clases del conjunto de datos (p. ej. ADE20k). La etiqueta de fondo se reemplazará por 255.
Construye un procesador de imágenes CHMv2ImageProcessor.
preprocesar
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.models.chmv2.image_processing_chmv2.CHMv2ImageProcessorKwargs'> ) → ~image_processing_base.BatchFeature
Parámetros
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]) — Imagen a preprocesar. Espera una imagen única o un lote de imágenes con valores de píxeles que van de 0 a 255. Si se pasan imágenes con valores de píxeles entre 0 y 1, establezcado_rescale=False. - segmentation_maps (
ImageInput, opcional) — Los mapas de segmentación que se van a preprocesar. - do_convert_rgb (
bool, kwargs, opcional) — Si se debe convertir la imagen a RGB. - do_resize (
bool, kwargs, opcional) — Si se debe redimensionar la imagen. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Describe las dimensiones de entrada máximas del modelo. - default_to_square (
bool, kwargs, opcional) — Si se debe usar una imagen cuadrada por defecto al redimensionar, si size es un int. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Tamaño de la imagen de salida tras aplicarcenter_crop. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Filtro de remuestreo a utilizar si se redimensiona la imagen. Puede ser uno de los enumPILImageResampling. Solo tiene efecto sido_resizeestá establecido enTrue. - do_rescale (
bool, kwargs, opcional) — Si se debe reescalar la imagen. - rescale_factor (
float, kwargs, opcional) — Factor de reescalado para reescalar la imagen sido_rescaleestá establecido enTrue. - do_normalize (
bool, kwargs, opcional) — Si se debe normalizar la imagen. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, opcional) — Media de la imagen a utilizar para la normalización. Solo tiene efecto sido_normalizeestá establecido enTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, opcional) — Desviación estándar de la imagen a utilizar para la normalización. Solo tiene efecto sido_normalizeestá establecido enTrue. - do_pad (
bool, kwargs, opcional) — Indica si se debe aplicar relleno a la imagen. El relleno se realiza hasta el tamaño más grande del lote o hasta un tamaño cuadrado fijo por imagen. La estrategia exacta de relleno depende del modelo. - pad_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — El tamaño en{"height": int, "width" int}al que se rellenan las imágenes. Debe ser mayor que cualquier tamaño de imagen proporcionado para el preprocesamiento. Si no se proporcionapad_size, las imágenes se rellenarán hasta la mayor altura y anchura del lote. Se aplica solo cuandodo_pad=True. - do_center_crop (
bool, kwargs, opcional) — Si se debe recortar la imagen centrada. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opcional) — Solo se admiteChannelDimension.FIRST. Se añadió para garantizar la compatibilidad con los procesadores lentos. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opcional) — El formato de la dimensión de canales para la imagen de entrada. Si no se establece, el formato de la dimensión de canales se infiere a partir de la imagen de entrada. Puede ser uno de:"channels_first"oChannelDimension.FIRST: imagen en formato (num_channels, height, width)."channels_last"oChannelDimension.LAST: imagen en formato (altura, ancho, num_canales)."none"oChannelDimension.NONE: imagen en formato (altura, ancho).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — El dispositivo en el que se procesarán los videos. Si no se establece, el dispositivo se infiere a partir de los videos de entrada. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Devuelve tensores apilados si se establece en'pt'; en caso contrario, devuelve una lista de tensores. - disable_grouping (
bool, kwargs, opcional) — Si se debe deshabilitar el agrupamiento de imágenes por tamaño para procesarlas de forma individual y no en lotes. Si es None, se establecerá en True si las imágenes están en CPU, y en False en caso contrario. Esta elección se basa en observaciones empíricas, como se detalla aquí: https://github.com/huggingface/transformers/pull/38157 - image_seq_length (
int, kwargs, opcional) — El número de tokens de imagen que se utilizarán para cada imagen en la entrada. Añadido por compatibilidad con versiones anteriores, pero en futuros modelos debería establecerse como un atributo del procesador. - ensure_multiple_of (
int, kwargs, opcional, valor predeterminado 1) — Sido_resizeesTrue, la imagen se redimensiona a un tamaño que es múltiplo de este valor. Puede sobrescribirse porensure_multiple_ofenpreprocess. - size_divisor (
int, kwargs) — El tamaño por el que se debe asegurar que tanto la altura como el ancho sean divisibles. - keep_aspect_ratio (
bool, kwargs, opcional, valor predeterminadoFalse) — Si esTrue, la imagen se redimensiona al tamaño más grande posible de modo que se preserve la relación de aspecto. Puede ser anulado porkeep_aspect_ratioenpreprocess. - do_reduce_labels (
bool, kwargs, opcional, valor predeterminadoself.do_reduce_labels) — Indica si se deben reducir en 1 todos los valores de etiqueta de los mapas de segmentación. Se utiliza habitualmente en conjuntos de datos donde 0 se emplea para el fondo y el propio fondo no está incluido en todas las clases del conjunto de datos (p. ej. ADE20k). La etiqueta de fondo se reemplazará por 255.
Devuelve
~image_processing_base.BatchFeature
- data (
dict) — Diccionario de listas/arrays/tensores devueltos por el método call (‘pixel_values’, etc.). - tensor_type (
Union[None, str, TensorType], opcional) — Puede especificar un tensor_type aquí para convertir las listas de enteros en Tensors de PyTorch/Numpy durante la inicialización.
post_process_depth_estimation
< source >( outputs: DepthEstimatorOutputtarget_sizes: transformers.utils.generic.TensorType | list[tuple[int, int]] | None = None ) → List[Dict[str, TensorType]]
Parámetros
- outputs (
DepthEstimatorOutput) — Salidas sin procesar del modelo. - target_sizes (
TensorTypeoList[Tuple[int, int]], opcional) — Tensor de forma(batch_size, 2)o lista de tuplas (Tuple[int, int]) que contiene el tamaño objetivo (alto, ancho) de cada imagen del lote. Si se deja en None, las predicciones no se redimensionarán.
Devuelve
List[Dict[str, TensorType]]
Una lista de diccionarios de tensores que representan las predicciones de profundidad procesadas.
Convierte la salida cruda de DepthEstimatorOutput en predicciones de profundidad finales e imágenes de profundidad PIL.
Solo admite PyTorch.
CHMv2ForDepthEstimation
clase transformers.CHMv2ForDepthEstimation
< source >( config: CHMv2Config )
Parámetros
- config (CHMv2Config) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
Modelo CHMv2 con una cabeza de estimación de profundidad en la parte superior (compuesta por capas convolucionales), por ejemplo, para la estimación de la altura de la copa.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
forward
< source >( pixel_values: Tensorlabels: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → DepthEstimatorOutput or tuple(torch.Tensor)
Parámetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size)) — Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener utilizando CHMv2ImageProcessor. Consulte CHMv2ImageProcessor.call() para más detalles (processor_classutiliza CHMv2ImageProcessor para procesar las imágenes). - labels (
torch.LongTensorde forma(batch_size, height, width), opcional) — Mapas de estimación de profundidad de referencia para calcular la pérdida.
Devuelve
DepthEstimatorOutput o tuple(torch.Tensor)
Un DepthEstimatorOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (CHMv2Config) y las entradas.
El método forward de CHMv2ForDepthEstimation reemplaza el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, se devuelve cuando se proporcionalabels) — Pérdida de clasificación (o de regresión si config.num_labels==1).predicted_depth (
torch.Tensorde forma(batch_size, height, width)) — Profundidad predicha para cada píxel.hidden_states (
tuple(torch.Tensor), opcional, devuelto cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma(batch_size, num_channels, height, width).Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.
attentions (
tuple(torch.Tensor), opcional, se devuelve cuando se pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.Tensor(una por cada capa) de forma(batch_size, num_heads, patch_size, sequence_length).Pesos de atención tras el softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
Ejemplo:
>>> from transformers import AutoImageProcessor, CHMv2ForDepthEstimation
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read())).convert("RGB")
>>> processor = AutoImageProcessor.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head")
>>> model = CHMv2ForDepthEstimation.from_pretrained("facebook/dinov3-vitl16-chmv2-dpt-head")
>>> device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
>>> model.to(device)
>>> # prepare image for the model
>>> inputs = processor(images=image, return_tensors="pt").to(device)
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> # interpolate to original size
>>> post_processed_output = processor.post_process_depth_estimation(
... outputs, [(image.height, image.width)],
... )
>>> predicted_depth = post_processed_output[0]["predicted_depth"]