# CHMv2

## Tổng quan

Mô hình Canopy Height Maps v2 (CHMv2) được đề xuất trong [CHMv2: Improvements in Global Canopy Height Mapping using DINOv3](https://huggingface.co/papers/2603.06382). Dựa trên [bản đồ độ cao tán cây độ phân giải cao ban đầu](https://sustainability.atmeta.com/blog/2024/04/22/using-artificial-intelligence-to-map-the-earths-forests/) của chúng tôi được phát hành vào năm 2024, CHMv2 mang lại những cải thiện đáng kể về độ chính xác, chi tiết và tính nhất quán toàn cầu nhờ tận dụng DINOv3, mô hình thị giác tự giám sát của Meta.

Bạn có thể tìm thêm thông tin [tại đây](http://ai.meta.com/blog/world-resources-institute-dino-canopy-height-maps-v2), và mã nguồn gốc [tại đây](https://github.com/facebookresearch/dinov3).

Tóm tắt từ bài báo như sau:

*Thông tin chính xác về độ cao tán cây là thiết yếu để định lượng carbon rừng, giám sát phục hồi và suy thoái, cũng như đánh giá cấu trúc môi trường sống, trong khi các phép đo độ trung thực cao từ quét laser trên không (ALS) vẫn chưa được phân bố đồng đều trên toàn cầu. Ở đây, chúng tôi giới thiệu CHMv2, một bản đồ độ cao tán cây toàn cầu, độ phân giải theo mét, được suy ra từ ảnh vệ tinh quang học độ phân giải cao bằng cách sử dụng mô hình ước lượng độ sâu được xây dựng trên DINOv3 và huấn luyện đối chiếu với các mô hình độ cao tán cây ALS. So với các sản phẩm hiện có, CHMv2 cải thiện đáng kể độ chính xác, giảm sai lệch trong các khu rừng cao và bảo tồn tốt hơn cấu trúc quy mô nhỏ như mép tán và các khoảng trống. Những cải thiện này được hỗ trợ bởi việc mở rộng lớn dữ liệu huấn luyện đa dạng về địa lý, quy trình tự động hóa việc tuyển chọn và đăng ký dữ liệu, cùng với một công thức hóa tổn thất và chiến lược lấy mẫu dữ liệu được điều chỉnh phù hợp với phân bố độ cao tán cây. Chúng tôi xác thực CHMv2 đối với các bộ kiểm thử ALS độc lập và đối với hàng chục triệu quan sát từ GEDI và ICESat-2, chứng minh hiệu suất nhất quán trên các hệ sinh thái rừng chính.*

## Ví dụ sử dụng

Chạy suy luận trên một hình ảnh bằng đoạn mã sau:

```python
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[[transformers.CHMv2Config]]

#### transformers.CHMv2Config[[transformers.CHMv2Config]]

```python
transformers.CHMv2Config(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, patch_size: int = 16, initializer_range: float = 0.02, reassemble_factors: list[float | int] | None = None, post_process_channels: list[int] | None = None, fusion_hidden_size: int = 256, head_hidden_size: int = 128, number_output_channels: int = 256, readout_type: str = 'project', min_depth: float = 0.001, max_depth: float = 96.0, bins_strategy: typing.Literal['linear', 'log', 'chmv2_mixlog'] = 'chmv2_mixlog', norm_strategy: typing.Literal['linear', 'softmax', 'sigmoid', 'chmv2_mixlog'] = 'chmv2_mixlog')
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/configuration_chmv2.py#L32)

**Tham số:**

backbone_config (`Union[dict, "PreTrainedConfig"]`, *tùy chọn*) : Cấu hình của mô hình backbone. Hiện tại chỉ hỗ trợ DINOv3ViTConfig.

patch_size (`int`, *tuỳ chọn*, mặc định là 16) : Kích thước patch được sử dụng bởi vision transformer của backbone.

initializer_range (`float`, *optional*, mặc định là `0.02`) : Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.

reassemble_factors (`list[float]`, *tùy chọn*, mặc định là `[4, 2, 1, 0.5]`) : Các hệ số tăng/giảm mẫu của các lớp tái lắp ráp.

post_process_channels (`list[int]`, *optional*, mặc định là `[128, 256, 512, 1024]`) : Kích thước kênh đầu ra của giai đoạn reassemble cho mỗi mức đặc trưng của backbone.

fusion_hidden_size (`int`, *tuỳ chọn*, mặc định là 256) : Số lượng kênh trước khi hợp nhất.

head_hidden_size (`int`, *tuỳ chọn*, mặc định là 128) : Số lượng kênh trong lớp ẩn của đầu ước lượng độ sâu.

number_output_channels (`int`, *tuỳ chọn*, mặc định là 256) : Số lượng kênh đầu ra cho đầu CHMv2 (số lượng bin độ sâu).

readout_type (`str`, *tùy chọn*, mặc định là `"project"`) : Loại thao tác đọc cho token CLS. Một trong số `["ignore", "add", "project"]`.

min_depth (`float`, *optional*, mặc định là 0.001) : Giá trị độ sâu tối thiểu cho việc tính toán bin độ sâu.

max_depth (`float`, *tuỳ chọn*, mặc định là 96.0) : Giá trị độ sâu tối đa cho việc tính toán bin độ sâu.

bins_strategy (`str`, *tùy chọn*, mặc định là `"chmv2_mixlog"`) : Chiến lược cho phân phối các bin độ sâu. Một trong số `["linear", "log", "chmv2_mixlog"]`.

norm_strategy (`str`, *tùy chọn*, mặc định là `"chmv2_mixlog"`) : Chiến lược chuẩn hóa cho dự đoán độ sâu. Một trong số `["linear", "softmax", "sigmoid", "chmv2_mixlog"]`.

Đây là lớp cấu hình để lưu trữ cấu hình của một Chmv2Model. Nó được sử dụng để khởi tạo một mô hình Chmv2 theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của [facebook/dinov3-vitl16-chmv2-dpt-head](https://huggingface.co/facebook/dinov3-vitl16-chmv2-dpt-head)

Các đối tượng cấu hình kế thừa từ [PreTrainedConfig](/docs/transformers/main/vi/main_classes/configuration#transformers.PreTrainedConfig) và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ [PreTrainedConfig](/docs/transformers/main/vi/main_classes/configuration#transformers.PreTrainedConfig) để biết thêm thông tin.

```python
>>> from transformers import CHMv2Config, CHMv2ForDepthEstimation

>>> configuration = CHMv2Config()
>>> model = CHMv2ForDepthEstimation(configuration)
>>> configuration = model.config
```

## CHMv2ImageProcessor[[transformers.CHMv2ImageProcessor]]

#### transformers.CHMv2ImageProcessor[[transformers.CHMv2ImageProcessor]]

```python
transformers.CHMv2ImageProcessor(**kwargs: *<class 'transformers.models.chmv2.image_processing_chmv2.CHMv2ImageProcessorKwargs'>)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/image_processing_chmv2.py#L99)

**Tham số:**

do_convert_rgb (`bool`, *kwargs*, *optional*) : Có chuyển đổi hình ảnh sang RGB hay không.

do_resize (`bool`, *kwargs*, *tuỳ chọn*, mặc định là `False`) : Xác định có nên thay đổi kích thước ảnh hay không.

size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*, mặc định là `{'height' : 384, 'width': 384}`): Mô tả kích thước đầu vào tối đa cho mô hình.

default_to_square (`bool`, *kwargs*, *tuỳ chọn*, mặc định là `True`) : Có nên mặc định sử dụng ảnh vuông khi thay đổi kích thước hay không, nếu size là một số nguyên.

crop_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*, mặc định là `None`) : Kích thước của ảnh đầu ra sau khi áp dụng `center_crop`.

resample (`Annotated[Union[int, PILImageResampling, NoneType], None]`, *kwargs*, mặc định là `3`) : Bộ lọc lấy mẫu lại (resampling filter) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các hằng số liệt kê (enum) của `PILImageResampling`. Chỉ có hiệu lực khi `do_resize` được đặt thành `True`.

do_rescale (`bool`, *kwargs*, *tuỳ chọn*, mặc định là `True`) : Xác định có nên điều chỉnh lại tỷ lệ ảnh hay không.

rescale_factor (`float`, *kwargs*, *optional*, mặc định là `0.00392156862745098`) : Hệ số để điều chỉnh lại kích thước ảnh nếu `do_rescale` được đặt thành `True`.

do_normalize (`bool`, *kwargs*, *tuỳ chọn*, mặc định là `True`) : Có chuẩn hóa hình ảnh hay không.

image_mean (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*, mặc định là `[0.42, 0.411, 0.296]`) : Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu `do_normalize` được đặt thành `True`.

image_std (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*, mặc định là `[0.213, 0.156, 0.143]`) : Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu `do_normalize` được đặt thành `True`.

do_pad (`bool`, *kwargs*, *optional*, mặc định là `True`) : Xác định có chèn padding cho ảnh hay không. Padding được thực hiện đến kích thước lớn nhất trong batch hoặc đến kích thước vuông cố định cho từng ảnh. Chiến lược padding cụ thể phụ thuộc vào model.

pad_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*) : Kích thước ở dạng `{"height": int, "width" int}` để đệm (pad) các ảnh. Phải lớn hơn kích thước của bất kỳ ảnh nào được cung cấp cho tiền xử lý. Nếu `pad_size` không được cung cấp, các ảnh sẽ được đệm đến chiều cao và chiều rộng lớn nhất trong batch. Chỉ được áp dụng khi `do_pad=True.`

do_center_crop (`bool`, *kwargs*, *optional*, mặc định là `None`) : Xác định có cắt ảnh theo kiểu căn giữa hay không.

data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *tuỳ chọn*) : Chỉ hỗ trợ `ChannelDimension.FIRST`. Được thêm vào để tương thích với các bộ xử lý chậm.

input_data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *optional*) : Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị sau: - `"channels_first"` hoặc `ChannelDimension.FIRST`: ảnh ở định dạng (num_channels, height, width). - `"channels_last"` hoặc `ChannelDimension.LAST`: ảnh ở định dạng (height, width, num_channels). - `"none"` hoặc `ChannelDimension.NONE`: ảnh ở định dạng (height, width).

device (`Annotated[Union[str, torch.device, NoneType], None]`, *kwargs*) : Thiết bị để xử lý các video. Nếu không được đặt, thiết bị sẽ được suy ra từ các video đầu vào.

return_tensors (`Annotated[str | ~utils.generic.TensorType | None, None]`, *kwargs*) : Trả về các tensor đã xếp chồng nếu được đặt thành `'pt'`, ngược lại trả về một danh sách các tensor.

disable_grouping (`bool`, *kwargs*, *optional*) : Xác định có vô hiệu hóa việc nhóm các hình ảnh theo kích thước để xử lý chúng riêng lẻ thay vì theo lô hay không. Nếu là None, giá trị sẽ được đặt thành True nếu các hình ảnh nằm trên CPU, và False trong các trường hợp khác. Lựa chọn này dựa trên các quan sát thực nghiệm, chi tiết tại đây: https://github.com/huggingface/transformers/pull/38157

image_seq_length (`int`, *kwargs*, *tuỳ chọn*) : Số lượng token hình ảnh sẽ được sử dụng cho mỗi hình ảnh trong đầu vào. Được thêm vào để đảm bảo tương thích ngược, nhưng trong các mô hình tương lai, giá trị này nên được đặt như một thuộc tính của bộ xử lý.

ensure_multiple_of (`int`, *kwargs*, *optional*, mặc định là 1) : Nếu `do_resize` là `True`, hình ảnh sẽ được thay đổi kích thước thành một kích thước là bội số của giá trị này. Có thể bị ghi đè bởi `ensure_multiple_of` trong `preprocess`.

size_divisor (`int`, *kwargs*, mặc định là `16`) : Kích thước để đảm bảo cả chiều cao lẫn chiều rộng đều chia hết.

keep_aspect_ratio (`bool`, *kwargs*, *optional*, mặc định là `False`) : Nếu `True`, hình ảnh sẽ được thay đổi kích thước lên kích thước lớn nhất có thể sao cho tỷ lệ khung hình được giữ nguyên. Có thể bị ghi đè bởi `keep_aspect_ratio` trong `preprocess`.

do_reduce_labels (`bool`, *kwargs*, *optional*, mặc định là `self.do_reduce_labels`) : Có giảm tất cả các giá trị nhãn của các bản đồ phân đoạn xuống 1 hay không. Thường được sử dụng cho các bộ dữ liệu mà 0 được dùng cho nền, và bản thân nền không được bao gồm trong tất cả các lớp của bộ dữ liệu (ví dụ: ADE20k). Nhãn nền sẽ được thay thế bằng 255.

Tạo một trình xử lý ảnh CHMv2ImageProcessor.

#### preprocess[[transformers.CHMv2ImageProcessor.preprocess]]

```python
preprocess(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'>)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/image_processing_chmv2.py#L125)

**Tham số:**

images (`Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]`) : Ảnh cần tiền xử lý. Kỳ vọng một ảnh đơn hoặc một lô ảnh có giá trị pixel từ 0 đến 255. Nếu truyền vào các ảnh có giá trị pixel từ 0 đến 1, hãy đặt `do_rescale=False`.

segmentation_maps (`ImageInput`, *tùy chọn*) : Các bản đồ phân đoạn cần tiền xử lý.

do_convert_rgb (`bool`, *kwargs*, *optional*) : Có chuyển đổi hình ảnh sang RGB hay không.

do_resize (`bool`, *kwargs*, *optional*) : Xác định có nên thay đổi kích thước ảnh hay không.

size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*): Mô tả các kích thước đầu vào tối đa của mô hình.

default_to_square (`bool`, *kwargs*, *tuỳ chọn*) : Có mặc định dùng ảnh vuông khi thay đổi kích thước hay không, nếu size là một số nguyên.

crop_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*) : Kích thước của ảnh đầu ra sau khi áp dụng `center_crop`.

resample (`Annotated[Union[int, PILImageResampling, NoneType], None]`, *kwargs*) : Bộ lọc resampling để sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các enum `PILImageResampling`. Chỉ có hiệu lực khi `do_resize` được đặt thành `True`.

do_rescale (`bool`, *kwargs*, *tuỳ chọn*) : Xác định có nên điều chỉnh lại tỷ lệ hình ảnh hay không.

rescale_factor (`float`, *kwargs*, *optional*) : Hệ số để thay đổi tỷ lệ ảnh nếu `do_rescale` được đặt thành `True`.

do_normalize (`bool`, *kwargs*, *tuỳ chọn*) : Xác định có chuẩn hóa hình ảnh hay không.

image_mean (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*) : Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu `do_normalize` được đặt thành `True`.

image_std (`Union[float, list[float], tuple[float, ...]]`, *kwargs*, *optional*) : Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu `do_normalize` được đặt thành `True`.

do_pad (`bool`, *kwargs*, *optional*) : Xác định có chèn padding cho ảnh hay không. Padding được thực hiện đến kích thước lớn nhất trong batch hoặc đến một kích thước vuông cố định cho mỗi ảnh. Chiến lược padding cụ thể phụ thuộc vào model.

pad_size (`Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None]`, *kwargs*) : Kích thước ở dạng `{"height": int, "width" int}` để đệm (pad) các ảnh. Phải lớn hơn kích thước của bất kỳ ảnh nào được cung cấp cho tiền xử lý. Nếu `pad_size` không được cung cấp, các ảnh sẽ được đệm đến chiều cao và chiều rộng lớn nhất trong batch. Chỉ được áp dụng khi `do_pad=True.`

do_center_crop (`bool`, *kwargs*, *optional*) : Có nên cắt ảnh theo kiểu căn giữa hay không.

data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *tuỳ chọn*) : Chỉ hỗ trợ `ChannelDimension.FIRST`. Được thêm vào để tương thích với các bộ xử lý chậm.

input_data_format (`Union[str, ~image_utils.ChannelDimension]`, *kwargs*, *optional*) : Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị sau: - `"channels_first"` hoặc `ChannelDimension.FIRST`: ảnh ở định dạng (num_channels, height, width). - `"channels_last"` hoặc `ChannelDimension.LAST`: ảnh ở định dạng (height, width, num_channels). - `"none"` hoặc `ChannelDimension.NONE`: ảnh ở định dạng (height, width).

device (`Annotated[Union[str, torch.device, NoneType], None]`, *kwargs*) : Thiết bị để xử lý các video. Nếu không được đặt, thiết bị sẽ được suy ra từ các video đầu vào.

return_tensors (`Annotated[str | ~utils.generic.TensorType | None, None]`, *kwargs*) : Trả về các tensor đã xếp chồng nếu được đặt thành `'pt'`, ngược lại trả về một danh sách các tensor.

disable_grouping (`bool`, *kwargs*, *optional*) : Xác định có vô hiệu hóa việc nhóm các hình ảnh theo kích thước để xử lý chúng riêng lẻ thay vì theo lô hay không. Nếu là None, giá trị sẽ được đặt thành True nếu các hình ảnh nằm trên CPU, và False trong các trường hợp khác. Lựa chọn này dựa trên các quan sát thực nghiệm, chi tiết tại đây: https://github.com/huggingface/transformers/pull/38157

image_seq_length (`int`, *kwargs*, *tuỳ chọn*) : Số lượng token hình ảnh sẽ được sử dụng cho mỗi hình ảnh trong đầu vào. Được thêm vào để đảm bảo tương thích ngược, nhưng trong các mô hình tương lai, giá trị này nên được đặt như một thuộc tính của bộ xử lý.

ensure_multiple_of (`int`, *kwargs*, *optional*, mặc định là 1) : Nếu `do_resize` là `True`, hình ảnh sẽ được thay đổi kích thước thành một kích thước là bội số của giá trị này. Có thể bị ghi đè bởi `ensure_multiple_of` trong `preprocess`.

size_divisor (`int`, *kwargs*) : Kích thước để đảm bảo cả chiều cao và chiều rộng đều có thể chia hết.

keep_aspect_ratio (`bool`, *kwargs*, *optional*, mặc định là `False`) : Nếu `True`, hình ảnh sẽ được thay đổi kích thước lên kích thước lớn nhất có thể sao cho tỷ lệ khung hình được giữ nguyên. Có thể bị ghi đè bởi `keep_aspect_ratio` trong `preprocess`.

do_reduce_labels (`bool`, *kwargs*, *optional*, mặc định là `self.do_reduce_labels`) : Có giảm tất cả các giá trị nhãn của các bản đồ phân đoạn xuống 1 hay không. Thường được sử dụng cho các bộ dữ liệu mà 0 được dùng cho nền, và bản thân nền không được bao gồm trong tất cả các lớp của bộ dữ liệu (ví dụ: ADE20k). Nhãn nền sẽ được thay thế bằng 255.

**Trả về:** `~image_processing_base.BatchFeature`

- **data** (`dict`) -- Từ điển chứa các danh sách/mảng/tensor được trả về bởi phương thức __call__ ('pixel_values', v.v.).
- **tensor_type** (`Union[None, str, TensorType]`, *tùy chọn*) -- Bạn có thể cung cấp tensor_type tại đây để chuyển đổi các danh sách số nguyên trong Tensor PyTorch/Numpy khi khởi tạo.

#### post_process_depth_estimation[[transformers.CHMv2ImageProcessor.post_process_depth_estimation]]

```python
post_process_depth_estimation(outputs: DepthEstimatorOutput, target_sizes: transformers.utils.generic.TensorType | list[tuple[int, int]] | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/image_processing_chmv2.py#L385)

**Tham số:**

outputs (`DepthEstimatorOutput`) : Đầu ra thô của mô hình.

target_sizes (`TensorType` hoặc `List[Tuple[int, int]]`, *tùy chọn*) : Tensor có shape `(batch_size, 2)` hoặc danh sách các tuple (`Tuple[int, int]`) chứa kích thước đích (chiều cao, chiều rộng) của mỗi hình ảnh trong batch. Nếu để là None, các dự đoán sẽ không được thay đổi kích thước.

**Trả về:** `List[Dict[str, TensorType]]`

Một danh sách các từ điển của các tensor đại diện cho các dự đoán độ sâu đã được xử lý.

Chuyển đổi đầu ra thô của `DepthEstimatorOutput` thành các dự đoán độ sâu cuối cùng và các hình ảnh độ sâu PIL. Chỉ hỗ trợ PyTorch.

## CHMv2ForDepthEstimation[[transformers.CHMv2ForDepthEstimation]]

#### transformers.CHMv2ForDepthEstimation[[transformers.CHMv2ForDepthEstimation]]

```python
transformers.CHMv2ForDepthEstimation(config: CHMv2Config)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/modeling_chmv2.py#L384)

**Tham số:**

config ([CHMv2Config](/docs/transformers/main/vi/model_doc/chmv2#transformers.CHMv2Config)) : Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức [from_pretrained()](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained) để tải trọng số của mô hình.

Mô hình CHMv2 với một đầu ước lượng độ sâu phía trên (gồm các lớp tích chập), ví dụ để ước lượng độ cao tán cây.

Mô hình này kế thừa từ [PreTrainedModel](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu ra, v.v.)

Mô hình này cũng là một lớp con của [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

#### forward[[transformers.CHMv2ForDepthEstimation.forward]]

```python
forward(pixel_values: Tensor, labels: typing.Optional[torch.LongTensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/chmv2/modeling_chmv2.py#L397)

**Tham số:**

pixel_values (`torch.Tensor` có shape `(batch_size, num_channels, image_size, image_size)`) : Các tensor tương ứng với các ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng [CHMv2ImageProcessor](/docs/transformers/main/vi/model_doc/chmv2#transformers.CHMv2ImageProcessor). Xem [CHMv2ImageProcessor.__call__()](/docs/transformers/main/vi/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) để biết chi tiết (`processor_class` sử dụng [CHMv2ImageProcessor](/docs/transformers/main/vi/model_doc/chmv2#transformers.CHMv2ImageProcessor) để xử lý ảnh).

labels (`torch.LongTensor` có hình dạng `(batch_size, height, width)`, *tùy chọn*) : Bản đồ ước lượng độ sâu thực tế để tính toán loss.

**Trả về:** [DepthEstimatorOutput](/docs/transformers/main/vi/main_classes/output#transformers.modeling_outputs.DepthEstimatorOutput) hoặc `tuple(torch.Tensor)`

Một [DepthEstimatorOutput](/docs/transformers/main/vi/main_classes/output#transformers.modeling_outputs.DepthEstimatorOutput) hoặc một tuple của `torch.Tensor` (nếu `return_dict=False` được truyền hoặc khi `config.return_dict=False`) bao gồm các phần tử khác nhau tùy thuộc vào cấu hình ([CHMv2Config](/docs/transformers/main/vi/model_doc/chmv2#transformers.CHMv2Config)) và đầu vào.

Phương thức forward của [CHMv2ForDepthEstimation](/docs/transformers/main/vi/model_doc/chmv2#transformers.CHMv2ForDepthEstimation) ghi đè lên phương thức đặc biệt `__call__`.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, bạn nên gọi instance của `Module` sau đó thay vì gọi hàm này, vì instance `Module` sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ bỏ qua chúng một cách im lặng.

- **loss** (`torch.Tensor` có shape `(1,)`, *optional*, được trả về khi `labels` được cung cấp) -- Loss phân loại (hoặc hồi quy nếu config.num_labels==1).
- **predicted_depth** (`torch.Tensor` có hình dạng `(batch_size, height, width)`) -- Độ sâu dự đoán cho từng pixel.
- **hidden_states** (`tuple(torch.Tensor)`, *tuỳ chọn*, được trả về khi `output_hidden_states=True` được truyền vào hoặc khi `config.output_hidden_states=True`) -- Bộ tuple của `torch.Tensor` (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng `(batch_size, num_channels, height, width)`.

  Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
- **attentions** (`tuple(torch.Tensor)`, *tuỳ chọn*, được trả về khi `output_attentions=True` được truyền vào hoặc khi `config.output_attentions=True`) -- Bộ tuple của `torch.Tensor` (một cho mỗi lớp) có hình dạng `(batch_size, num_heads, patch_size, sequence_length)`.

  Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

Ví dụ:

```python
>>> 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"]
```

