# PP-OCRv6_small_det

## 概要

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

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

## 使用方法

### 単一入力推論

以下の例では、[AutoModel](/docs/transformers/main/ja/model_doc/auto#transformers.AutoModel)を使用してPP-OCRv6_small_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_small_det_safetensors" # or "PaddlePaddle/PP-OCRv6_tiny_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_small_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_small_det_safetensors" # or "PaddlePaddle/PP-OCRv6_tiny_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)
```

## PPOCRV6SmallDetForObjectDetection[[transformers.PPOCRV6SmallDetForObjectDetection]]

#### transformers.PPOCRV6SmallDetForObjectDetection[[transformers.PPOCRV6SmallDetForObjectDetection]]

```python
transformers.PPOCRV6SmallDetForObjectDetection(config: PPOCRV6SmallDetConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/modeling_pp_ocrv6_small_det.py#L314)

**パラメータ:**

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

テキスト認識タスク用のPPOCR6SmallRecモデル。

このモデルは [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のドキュメントを参照してください。

## PPOCRV6SmallDetConfig[[transformers.PPOCRV6SmallDetConfig]]

#### transformers.PPOCRV6SmallDetConfig[[transformers.PPOCRV6SmallDetConfig]]

```python
transformers.PPOCRV6SmallDetConfig(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, reduction: int = 4, neck_out_channels: int = 96, interpolate_mode: str = 'nearest', kernel_list: list[int] | tuple[int, ...] = (3, 2, 2), layer_list_out_channels: list[int] | tuple[int, ...] = (12, 18, 42, 360), dilated_kernel_size: int = 7)
```

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

**パラメータ:**

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

reduction (`int`, *optional*, デフォルトは 4) : 特徴量チャネル次元の削減係数です。特徴量の表現力を維持しつつ、モデルのパラメータ数と計算複雑度を低減するために使用されます。

neck_out_channels (`int`, *optional*, デフォルトは 96) : neck ネットワークからの出力チャネル数です。neck ネットワークは、特徴量を head ネットワークに渡す前に、特徴量の融合と洗練を行う役割を担います。

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

kernel_list (`List[int]`、*optional*、デフォルトは`[3, 2, 2]`) : ヘッドネットワーク内の畳み込み層のカーネルサイズの一覧です。異なるサイズのテキスト領域を検出するために、マルチスケールの特徴抽出に使用されます。

layer_list_out_channels (`List[int]`, *任意*、デフォルトは `[12, 18, 42, 360]`) : 各バックボーン段階の出力チャネルのリストです。マルチスケール特徴融合のためのネックネットワークにおけるRSE層の入力チャネルを設定するために使用されます。

dilated_kernel_size (`int`, *optional*, デフォルトは 7) : 入力コンボリューションパスにおける、特徴量マップ内の長距離依存性を捉えるために使用される、空洞畳み込み層のカーネルサイズ。

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

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

## PPOCRV6SmallDetModel[[transformers.PPOCRV6SmallDetModel]]

#### transformers.PPOCRV6SmallDetModel[[transformers.PPOCRV6SmallDetModel]]

```python
transformers.PPOCRV6SmallDetModel(config: PPOCRV6SmallDetConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/modeling_pp_ocrv6_small_det.py#L289)

**パラメータ:**

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

特定のヘッドを付加せずに生のhidden-statesを出力する、素のPp Ocrv6 Small 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.PPOCRV6SmallDetModel.forward]]

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

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pp_ocrv6_small_det/modeling_pp_ocrv6_small_det.py#L296)

**パラメータ:**

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`の場合）。構成は、設定（[PPOCRV6SmallDetConfig](/docs/transformers/main/ja/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetConfig)）と入力に応じて、さまざまな要素からなります。

[PPOCRV6SmallDetModel](/docs/transformers/main/ja/model_doc/pp_ocrv6_small_det#transformers.PPOCRV6SmallDetModel)の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、および任意の初期埋め込み出力。

