【セマンティックセグメンテーション】 データ拡張手法(原画像とラベルの同時増幅)

1. データの強化

   過学習を避ける

   モデルの堅牢性を向上させる

  モデルの汎化能力を向上させる

  アンバランスなサンプルの問題を回避する

2. データ拡張の分類

これは、オンライン強化とオフライン強化の 2 つのカテゴリに分類できます。2 つの違いは、オフライン エンハンスメントはトレーニング前にデータ セットを処理し、多くの場合複数のデータ セットを取得できることですが、オンライン エンハンスメントはトレーニング中にトレーニング データの量を変更せずにロードされたデータを前処理することです。

オフライン拡張は通常、トレーニング データが不十分な場合に小規模なデータセットに使用され、オンライン拡張は通常、大規模なデータセットに使用されます。

3. 方法

より一般的に使用される幾何学的変換方法には主に、反転、回転、クロッピング、スケーリング、平行移動変換、カラー ディザリング、スケール変換、コントラスト変換、ノイズ摂動、および回転変換が含まれます。

より一般的に使用されるピクセル変換方法は、塩胡椒ノイズ、ガウス ノイズ、ガウス ブラーの追加、HSV コントラストの調整、明るさ、彩度の調整、ヒストグラムイコライゼーション、ホワイト バランスの調整などです。

オーグメンターモジュールによる強化

注:
元の画像とラベル画像のサフィックスは一致している必要があります。一致していないと、ラベル画像のみが拡張されません。

私の画像はlabelmeでマークされてvoc形式に変換されているため、変換後の元画像はjpg、元画像は統一する必要があるためpngとなっています。統一された方法は次のとおりです。画像のサフィックスをバッチで変更します

1. インストール:
環境を作成し、インストール コマンドを入力します。コマンドは次のとおりです。

pip install オーグメンター

conda インストール オーグメンター

インストールが成功した場合は、続行できます。

 2. 使用方法:

セマンティック セグメンテーション タスクでは、元の画像とマスク画像 (マスク) を同時に強化する必要があるため、既存の深層学習フレームワークの多くに付属している画像強化ツールを直接使用することはできません。しかし、この機能は Augmentor を使用することで簡単に実現できます。次の例で説明します。元の画像とそれに対応するマスク画像をそれぞれ test1 フォルダーと test2 フォルダーに置きます。次のコードで強化されました

元の画像

ラベルマップ

#导入数据增强工具
import Augmentor

#确定原始图像存储路径以及标签图的文件存储路径,创建Pipeline实例p
p = Augmentor.Pipeline("originalImages")
p.ground_truth("Segmentationimages")

(1) 回転

Probability は操作の確率を指定し、 max_left_rotation 、 max_right_rotation は左から右への最大回転角度を指定し、最大値は25です。サンプルとは、指定された画像から指定された数の強調画像を生成することを意味し、複数を指定できます。

回転操作のデフォルトでは、元の画像を回転した後にトリミングが行われ、元の画像と同じサイズの拡張画像が出力されます。

p.rotate(probability=1, max_left_rotation=25, max_right_rotation=25)
p.sample(1)

(2)ズーム(拡大縮小)ですが、比例拡大しかできないようです

scale_factor はズーム率を表し、1 より大きい値のみを指定できます。これは比例ズームです。

p.scale(probability=1, scale_factor=1.3)

(3)フリップ(反転)

左右反転、上下反転、ランダム反転

p.flip_random(probability=1)   %随机翻转
p.flip_left_right(probability=0.5)   %左右翻转
p.flip_top_bottom(probability=0.5)    %上下翻转

(4) ランダムな明るさの強化/弱め(random_brightness)

min_factor、max_factorは明るさの変化の度合いを決める変化係数であり、効果に応じて指定できます。

p.random_brightness(probability=1, min_factor=0.7, max_factor=1.2)   %随机亮度
p.random_color(probability=1, min_factor=0.0, max_factor=1)   %随机颜色
p.random_contrast(probability=1, min_factor=0.7, max_factor=1.2)   %随机对比度

(5) ランダムな遠近変形(スキュー)

大きさは変形の程度を示します。隠しパラメータ skew_type、値は ``TILT``、``TILT_TOP_BOTTOM``、``TILT_LEFT_RIGHT``、``CORNER`` です。ソースコードを展開したときにのみ表示されます。ソースコードではパラメータを指定せずに4つのパラメータからランダムに選択する方法を採用しています。

このうち「TILT_TOP_BOTTOM」は上下方向のみにパース変形を行うことを示します。

``TILT_LEFT_RIGHT`` は、遠近歪みが左右方向にのみ実行されることを示します。

「CORNER」は四隅方向のみにパース変形を行うことを意味します。

「TILT」には上記の方向、つまり上下左右と四隅の8方向の集合が含まれています。
 

p.skew(probability=1, magnitude=0.8)

(6)ランダムシアー(せん断)

せん断変換、max_shear_left、max_shear_right はせん断変換角度です。

p.shear(probability=1, max_shear_left=15, max_shear_right=15)

(7) ランダムクロップ(random_crop)

percentage_areaは元の画像領域に対する切り出し領域の割合を示し、centerは画像の中央から切り出すかどうかを指定し、randomise_percentage_areaは切り出し領域の割合をランダムに生成するかどうかを指定します。

p.crop_random(probability=1, percentage_area=0.8, centre=False, randomise_percentage_area=True)

(8) ランダム消去/オクルージョン(random_erasing)

Rectangle_area は、ランダムに消去される領域のパーセンテージを指定します。もちろん、これは消去領域の上限を規定するものである。

p.random_erasing(probability=1, rectangle_area=0.5)

(9)小変形変形

p.random_distortion(probability=0.8,grid_width=10,grid_height=10, magnitude=20)

完全なコード:

import Augmentor


# 确定原始图像存储路径以及掩码文件存储路径,需要把“\”改成“/”
p = Augmentor.Pipeline("originalImages")
p.ground_truth("Segmentationimages")

# 图像旋转: 按照概率0.8执行,范围在0-25之间
p.rotate(probability=0.8, max_left_rotation=25, max_right_rotation=25)

# 图像左右互换: 按照概率0.5执行
p.flip_left_right(probability=0.5)
p.flip_top_bottom(probability=0.5)

# 图像放大缩小: 按照概率0.8执行,面积为原始图0.85倍
p.zoom_random(probability=0.3, percentage_area=0.85)

#scale_factor表示缩放比例,只能大于1,且为等比放大。
p.scale(probability=1, scale_factor=1.3)

#小块变形
p.random_distortion(probability=0.8,grid_width=10,grid_height=10, magnitude=20)

#随机亮度增强/减弱,min_factor, max_factor为变化因子,决定亮度变化的程度,可根据效果指定
p.random_brightness(probability=1, min_factor=0.7, max_factor=1.2)

#随机颜色/对比度增强/减弱
#p.random_color(probability=1, min_factor=0.0, max_factor=1)
p.random_contrast(probability=1, min_factor=0.7, max_factor=1.2)

#随机剪切(shear)  max_shear_left,max_shear_right为剪切变换角度  范围0-25
p.shear(probability=1, max_shear_left=10, max_shear_right=10)

#随机裁剪(random_crop)
p.crop_random(probability=1, percentage_area=0.8, randomise_percentage_area=True)

#随机翻转(flip_random)
p.flip_random(probability=1)

# 最终扩充的数据样本数可以更换为100。1000等
p.sample(10)  

結果は自動的に生成され、その効果は次のとおりです。

 その後、手動で分離できます。

 

おすすめ

転載: blog.csdn.net/weixin_45912366/article/details/127855494