本文へ移動

G検定(ジェネラリスト検定)

くろっぷ

クロップ

Crop

画像の中から指定した大きさの領域を切り出すデータ拡張の手法。切り出す位置を無作為に変えるランダムクロップにより、1枚の元画像から見た目の異なる訓練データを複数作れる。

詳しい説明

クロップとは

クロップ(Crop)は、画像の中から指定した大きさの領域を切り出すデータ拡張の手法です。PyTorchの公式ドキュメントは、RandomCropを与えられた画像を無作為な位置で切り出す処理として説明しています。

位置を無作為に変えるランダムクロップ

ランダムクロップでは、切り出す大きさを固定し、切り出す位置を画像内で毎回無作為に変えます。同じ元画像でも位置が違えば写る範囲が少しずれるので、1枚の元画像から見た目の異なる訓練データを複数作れます。これがランダムクロップの基本の考え方です。

切り出す大きさはRandomCropの出力サイズ(size)で指定します。整数を1つ渡すと正方形で切り出し、高さと幅の組を渡すとその大きさで切り出します。

パディングとの組み合わせ

元の画像が指定した大きさより小さいと、そのままでは切り出せず例外になります。そこで、切り出す前に画像の外周へ余白を足すパディングを組み合わせます。RandomCropでは、四辺に加える余白の幅をpaddingで指定できます。pad_if_neededを有効にすると、画像が小さいときだけ余白を足してから切り出します。

余白の埋め方(padding_mode)には次の種類があります。

  • constant: 一定の値で埋める(既定の値は0)
  • edge: 画像の端の値で埋める
  • reflect: 鏡のように反転して埋める。端の値そのものは繰り返さない
  • symmetric: 鏡のように反転して埋める。端の値も繰り返す

CIFARでの標準的な手順

CIFARのような32×32ピクセルの画像を扱う研究では、次の手順が標準的なデータ拡張として記述されています。

1. 画像の四辺に4ピクセルずつゼロでパディングし、40×40ピクセルにする
2. その中から32×32の領域を無作為に切り出す

出力は元と同じ32×32の大きさですが、切り出す位置は元の画像から上下左右に最大4ピクセルずれることがあります。ずれた分だけ、画像の端にはゼロで埋めた余白が入ります。同じ研究では左右の反転も組み合わせていますが、これはクロップとは別の手法です。

押さえ方

クロップは、切り出す大きさ、切り出す位置を無作為に変えること、足りない分を補うパディングの3つを組にして覚えると整理しやすい語です。

試験で問われること

G検定

  • クロップは画像の中から指定した大きさの領域を切り出すデータ拡張の手法で、切り出す位置を無作為に変えるものをランダムクロップと呼び、1枚の元画像から見た目の異なる訓練データを複数作れる。
  • ランダムクロップでは切り出す大きさを固定して位置だけを毎回変えるため、出力画像の大きさはそろったまま、写っている範囲が少しずつずれた画像がモデルに渡される点を押さえておく。
  • 元の画像が切り出す大きさより小さいと切り出せず例外になるため、切り出しの前に画像の外周へ余白を足すパディングを行い、そのうえで指定した大きさの領域を切り出すという組み合わせが使われる。
  • パディングの埋め方には、一定の値で埋める方式、画像の端の値で埋める方式、鏡のように反転させて埋める方式などがあり、PyTorchのRandomCropの既定は一定の値0で埋める方式である。
  • CIFARの標準的な手順では、32×32ピクセルの画像の四辺に4ピクセルずつゼロのパディングを加えて40×40ピクセルにし、その中から32×32の領域を無作為に切り出して訓練データとして使う。

最終更新日: 2026/09/23