# PP-OCRv6_medium_det

## 概要

PP-OCRv6_medium_det は、PaddleOCR チームが開発した PP-OCRv6 検出シリーズの中で最も大規模なモデルです。バックボーンには LCNetV4、特徴ピラミッドネックには RepLKFPN を採用しており、手書き、印刷、回転、曲線、装飾的なテキストなど、多様なシナリオにおける正確なテキスト位置特定を実現します。また、多言語にも対応しています。モデルのパラメータ数は 15.5M です。

## モデルアーキテクチャ

## 使用方法

### 単一入力推論

以下の例では、[AutoModel](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel)を使用してPP-OCRv6_medium_detでテキストを検出する方法を示しています。

```python
from io import BytesIO

from huggingface_hub.utils import httpx
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image

model_path = "PaddlePaddle/PP-OCRv6_medium_det_safetensors"
model = AutoModelForObjectDetection.from_pretrained(model_path, device_map="auto")
image_processor = AutoImageProcessor.from_pretrained(model_path)

image_url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/paddle_general_ocr_001.png"
image = load_image(image_url)
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_object_detection(
    outputs, 
    target_sizes=inputs["target_sizes"],
    threshold=0.2,
    box_threshold=0.45,
    max_candidates=3000,
    unclip_ratio=1.4,
)

for result in results:
    print(result)
```

### バッチ推論

[AutoModel](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel) を使用して PP-OCRv6_medium_det でこれを行う方法を示します。

```python
from io import BytesIO

from huggingface_hub.utils import httpx
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from transformers.image_utils import load_image

model_path = "PaddlePaddle/PP-OCRv6_medium_det_safetensors"
model = AutoModelForObjectDetection.from_pretrained(model_path, device_map="auto")
image_processor = AutoImageProcessor.from_pretrained(model_path)

image_url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/images/paddle_general_ocr_001.png"
image = load_image(image_url)
inputs = image_processor(images=[image, image], return_tensors="pt").to(model.device)
outputs = model(**inputs)

results = image_processor.post_process_object_detection(
    outputs, 
    target_sizes=inputs["target_sizes"],
    threshold=0.2,
    box_threshold=0.45,
    max_candidates=3000,
    unclip_ratio=1.4,
)

for result in results:
    print(result)
```

## PPOCRV6MediumDetForObjectDetection[[transformers.PPOCRV6MediumDetForObjectDetection]]

#### transformers.PPOCRV6MediumDetForObjectDetection[[transformers.PPOCRV6MediumDetForObjectDetection]]

```python
transformers.PPOCRV6MediumDetForObjectDetection(config: PPOCRV6MediumDetConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L363)

**パラメータ:**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/ja/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

テキスト検出タスク用のPPOCRV6MediumDetモデル。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

## PPOCRV6MediumDetConfig[[transformers.PPOCRV6MediumDetConfig]]

#### transformers.PPOCRV6MediumDetConfig[[transformers.PPOCRV6MediumDetConfig]]

```python
transformers.PPOCRV6MediumDetConfig(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, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, id2label: dict[int, str] | dict[str, str] | None = None, interpolate_mode: str = 'nearest', backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, neck_out_channels: int = 256, reduce_factor: int = 2, intraclass_block_number: int = 4, intraclass_block_config: dict | None = None, scale_factor: int = 2, scale_factor_list: list | None = None, kernel_list: list | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/configuration_pp_ocrv6_medium_det.py#L31)

**パラメータ:**

id2label (`Union[dict[int, str], dict[str, str]]`, *任意*) : インデックス（予測インデックスやターゲットインデックスなど）からラベルへのマップ。

interpolate_mode (`str`、*任意*、デフォルトは`"nearest"`) : neckネットワーク内で特徴マップをアップサンプリングまたはダウンサンプリングする際に使用される補間モード。

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`、*optional*) : バックボーンモデルの設定です。

neck_out_channels (`int`, *optional*, デフォルトは 256) : neck ネットワークからの出力チャネル数です。特徴量の融合と洗練を担当します。

reduce_factor (`int`, *optional*, デフォルトは 2) : 性能と複雑さのバランスを取るために、neck ブロックで使用するチャネル削減係数。

intraclass_block_number (`int`、*optional*、デフォルトは 4) : 特徴表現を強化するために使用される Intra-Class Block モジュールの数。

intraclass_block_config (`dict`, *任意*, デフォルトは `None`) : 特徴表現の強化に使用される場合のある Intra-Class Block モジュールの設定。

scale_factor (`int`, *任意*, デフォルトは 2) : 特徴量マップの空間解像度を調整するために使用されるスケーリング係数です。

scale_factor_list (`list[int]`、*optional*、デフォルトは`None`) : 特徴量マップの空間解像度を調整するために使用されるスケーリング係数のリストです。

kernel_list (`list[int]`、*optional*、デフォルトは`[3, 2, 2]`) : マルチスケール特徴抽出用のヘッドネットワークにおける畳み込み層のカーネルサイズの一覧です。

これは、PPOCRV6MediumDetModel の設定を保存するための設定クラスです。指定された引数に基づいて Pp Ocrv6 Medium Det モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[PaddlePaddle/PP-OCRv6_medium_det_safetensors](https://huggingface.co/PaddlePaddle/PP-OCRv6_medium_det_safetensors) と同様の設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) のドキュメントを参照してください。

## PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

#### transformers.PPOCRV6MediumDetModel[[transformers.PPOCRV6MediumDetModel]]

```python
transformers.PPOCRV6MediumDetModel(config: PPOCRV6MediumDetConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L338)

**パラメータ:**

config ([PPOCRV6MediumDetConfig](/docs/transformers/main/ja/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

特定のヘッドが上にない状態で、生の隠れ状態を出力する、素のPp Ocrv6 Medium Det Model。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

#### forward[[transformers.PPOCRV6MediumDetModel.forward]]

```python
forward(pixel_values: FloatTensor, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_medium_det/modeling_pp_ocrv6_medium_det.py#L345)

**パラメータ:**

pixel_values (`torch.FloatTensor`、shape `(batch_size, num_channels, image_size, image_size)`) : 入力画像に対応するテンソルです。ピクセル値は[PPOCRV5ServerDetImageProcessor](/docs/transformers/main/ja/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor)を使用して取得できます。詳細は[PPOCRV5ServerDetImageProcessor.__call__()](/docs/transformers/main/ja/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__)を参照してください（`processor_class`は画像の処理に[PPOCRV5ServerDetImageProcessor](/docs/transformers/main/ja/model_doc/pp_ocrv5_server_det#transformers.PPOCRV5ServerDetImageProcessor)を使用します）。

**戻り値:** `BaseModelOutputWithNoAttention` または `tuple(torch.FloatTensor)`

`BaseModelOutputWithNoAttention`、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。構成は、設定（[PPOCRV6MediumDetConfig](/docs/transformers/main/ja/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetConfig)）と入力に応じて、さまざまな要素からなります。

[PPOCRV6MediumDetModel](/docs/transformers/main/ja/model_doc/pp_ocrv6_medium_det#transformers.PPOCRV6MediumDetModel) の forward メソッドは、`__call__` という特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, num_channels, height, width)`) -- モデルの最終層の出力における隠れ状態のシーケンス。
- **hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（モデルに埋め込み層がある場合はその出力用 + 各層の出力用）で、形状は `(batch_size, num_channels, height, width)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

