CutMix
CutMixは、ある学習画像から切り出した長方形のパッチを別の画像に貼り付け、パッチの面積に応じてラベルを混合します。精度と位置特定性能の向上に役立ちます。
CutMixはデータ拡張の手法です。学習画像の一つから長方形のパッチを切り取り、別の画像の同じ位置に貼り付け、各画像が占める面積に応じて2つのラベルを混合します。NAVER Clova AI ResearchのSangdoo Yunらは、2つの従来手法を組み合わせたものとして、2019年のICCV論文でCutMixを発表しました。2つの手法とは、ランダムな領域を取り除くCutoutと、ラベルを混合するMixUpです。ImageNetでは、CutMixによりResNet-50のトップ1エラー率が23.68%から21.40%に下がり、MixUpの22.58%とCutoutの22.93%を上回りました。また、CutMixで事前学習したモデルは、物体検出と画像キャプション生成への転移性能も向上しました。
CutMixの仕組み#
画像Aと画像Bの各ペアについて、CutMixはベータ分布から混合比λをサンプリングします。デフォルトのパラメーターα = 1では、λは0から1までの一様分布になります。次に、幅と高さがそれぞれ画像の幅と高さに√(1 − λ)を掛けたサイズのボックスを描き、ランダムな点を中心に配置して画像の境界内に収め、Bの該当領域をAにコピーします。切り取り後、残ったAの割合としてλを再計算し、ラベルをAがλ、Bが(1 − λ)の割合で混合します。そのため、犬の画像に猫のパッチを30%貼り付けると、目標ラベルは犬0.7、猫0.3になります。損失関数は、このソフトラベルに対して最小化します。ラベルスムージングと同じ方法です。
PyTorchのtorchvisionでは、CutMixをバッチ全体に適用し、各画像をバッチ内の隣の画像と組み合わせます。
import torch
from torchvision.transforms import v2
# A batch of 4 random 224x224 images labeled with classes 0-3 of 10
torch.manual_seed(0)
images = torch.rand(4, 3, 224, 224)
labels = torch.tensor([0, 1, 2, 3])
# Paste a random box from each image's neighbor in the batch and mix the labels by area
cutmix = v2.CutMix(num_classes=10)
mixed_images, mixed_labels = cutmix(images, labels)
# Image 0 received its patch from image 3
pasted = (mixed_images[0] != images[0]).any(dim=0).float().mean()
print(f"pasted area: {pasted:.3f}")
print(f"label weights for classes 0-3: {mixed_labels[0, :4].numpy().round(3)}")貼り付けた領域の割合として0.187、クラス0のラベル重みとして0.813、クラス3のラベル重みとして0.187が出力されます。各クラスに割り当てられた目標値の割合は、そのクラスが占めるピクセルの割合と一致します。
CutMixが有効な理由#
画像全体で学習した画像分類モデルは、犬の顔など、小さくても識別力の高い部分を見分けるだけで高い精度を出すことがあります。CutMixでその部分を別の画像で覆うと、モデルは体、脚、毛並みから犬を認識する必要があるため、各物体のより多くの部分を活用するようになり、弱教師ありの位置特定性能とオクルージョンへの頑健性が向上します。混合画像のすべてのピクセルは実際の写真から得られるため、モデルが空白領域や不自然に重ね合わせた画像で学習することはありません。他の強力な拡張手法と同様に、CutMixは正則化として機能し、過学習を抑えます。MetaのData-efficient Image Transformers(DeiT)で使われたものを含め、ビジョントランスフォーマー(ViT)の最新の学習レシピでは、CutMixとMixUpを組み合わせて適用します。
CutMixと関連する拡張手法の比較#
- MixUp: 2枚の画像全体を重みλでピクセルごとにブレンドし、ラベルも同じ方法で混合します。その結果、実際のシーンにはない半透明の重ね合わせ画像が生成されます。
- Cutout: ランダムな正方形領域をゼロでマスクし、元のラベルを維持します。そのため、マスクされたピクセルは学習に情報を与えません。
- Mosaic: サイズを変更した4枚の画像を1枚にタイル状に配置します。物体検出器の学習に標準的に使われる拡張手法で、フレーム内に残るすべての物体のボックスラベルを保持します。
- インスタンスセグメンテーション向けCopy-paste: 長方形ではなく、セグメンテーションされた物体インスタンスを別の画像に貼り付けます。
物体検出におけるCutMix#
物体検出では、ラベルをすべて明示的に保持します。クラスベクトルを混合するのではなく、物体が見えている範囲で両方の画像のボックスを保持します。デフォルトでは無効になっているUltralytics YOLOのcutmix拡張では、確率を0~1で指定します。実装では、対象画像の既存ボックスと重ならない切り取り領域を選び、2枚目の画像から同じ領域をコピーします。貼り付けたバウンディングボックスは、領域内に面積の少なくとも10%が残るものを保持し、セグメンテーションラベルの場合は1%を基準にします。CutMixはデフォルトで、学習の最後の10エポックに入るとMosaicとともに無効になります。この設定はclose_mosaic=10で指定します。










