ディープ学習 - データ拡張戦略

データ強化方針: 
	オンラインモード-トレーニング
		ランダムにカット(完全にランダム、中央の+の四隅)作物は、あなたができます
		DEF(IMG、スケール= [0.8、1.0]、比= [3/4、4 /をrandom_crop 3。。。 。]、resize_w = 100、resize_h = 100):
			"" "
			ランダムにトリミング
			:PARAM IMG:
			:PARAMスケール:スケール
			:PARAM比
			:PARAM resize_w:
			:PARAM resize_h: リターン:
			" ""
			aspect_ratio Math.sqrt(= np.random.uniform(*比))
			W = aspect_ratio 1 *
			H = 1 / aspect_ratioの
			src_h、のsrc_wとimg.shape = [2]

			バインド=分((フロート(のsrc_wと)/ src_h)/(W ** 2)、 フロート(src_h)/のsrc_w及び)/(H ** 2))
			scale_max =分(スケール[1]、結合)
			scale_min =分(スケール[0]、結合)

			src_wとsrc_h * = TARGET_AREA np.random.uniform(scale_min、
															scale_max)
			Math.sqrt =(TARGET_AREA)のtarget_size 
			W = INT(W *のtarget_size)
			H = INT(H *のtarget_size)

			I = np.random.randint(0、 。のsrc_w及び- W + 1)
			J = np.random.randint(0、src_h - H + 1)。

			IMG = IMG [J:J + Hは、私はW +] 
			IMG = cv2.resizeを(IMG、(resize_w、resize_h ))
			IMG戻り


		、DEFのrule_crop(IMGをbox_ratio =(3/4、3/4)、LOCATION_TYPE = 'LT'、resize_w = 100、resize_h = 100):. 
			"" " 
			作物直接元に特定の規則に従って操作サイズ用画像なし
			:PARAM IMG:
			:PARAM box_ratio:剪断比(幅の比、高さ比)
			:PARAM LOCATION_TYPE:=で特定の位置:次のいずれか: 
					LRが左コーナー
					RT:右上角
					LB:左下角
					RB:右下角
					CC:中心
			:PARAM resize_w:输出图的幅
			:のparam resize_h:输出图的高さ
			:リターン""」
			'、( 'LT'、 'RT'でLOCATION_TYPEを主張LB」、 'RB'、 'CC')は、 '場所を持っている必要があります。' 
			is_gray = Falseの
			場合LEN(img.shape)== 3:
				H、W、C = img.shape 
			のelif LEN(img.shape)== 2:
				= img.shape W H、
				is_gray =真

			crop_w、crop_h = INT( W * box_ratio [0])、INT(時間*のbox_ratio [1])
			crop_img = np.zeros([10、10])
			LOCATION_TYPE場合== 'LT':
				crop_img = IMG [:crop_h:crop_w、:]もし、crop_h:他のimg [をis_grayません。
				crop_img = IMG [:crop_h :, W - crop_w :,:]他のIMG is_grayない場合[:crop_h :, W - crop_w:] 
			ELIFのLOCATION_TYPEを== 'LB':
				crop_img = IMG [H - crop_h :,:crop_w、 :]場合のimg他のないis_gray [H - crop_h :,:crop_w] 
			ELIFのLOCATION_TYPE == 'RB':
				crop_img = IMG [H - crop_h :, W - crop_w :,:] is_grayない他のimg [H場合- crop_h。 、W - crop_w:] 
			ELIFのLOCATION_TYPE == 'CC':
				start_h =(H - crop_h)// 2 
				start_w =(W - crop_w)// 2 
				crop_img = IMG [start_h:start_h + crop_h、start_w:start_w + crop_w、 :]場合のimg他のないis_gray [ 
																										  start_h:start_h + crop_h、
																										  start_w:start_w + crop_w] 

			= cv2.resizeをリサイズ(crop_img、(resize_w、resize_h))
			リサイズ返す
		水平フリップフリップ
		DEFのrandom_flip(IMG、MODE = 1):
			"" " 
			ランダムに反転
			:PARAMのIMG:
			:PARAMモデル:水平フリップ= 1/0 = = -1垂直/水平及び垂直
			:リターン:
			" "" 
			MODEをアサート中(0 ,. 1、-1)、 "MODEは適切ではない" 
			フリップnp.random.choice =(2)* 2から1#-1 / 1。。
			IF MODE == 1:
				IMG IMG = [フリップ:、:: 、:] 
			ELIFモード== 0:
				IMG IMG = [フリップ::、:、:] 
			ELIFモード== -1:
				IMG IMG = [::フリップフリップ::、:] 

			IMG戻り


		DEFフリップを(IMG、MODE = 1):
			"" " 
			フリップ
			:PARAMのIMGを:
			:PARAMのMODE = 1水平垂直= 0 / -1 =水平/垂直反転
			:リターン:
			「」」
			アサートでMODE(0 ,. 1、-1)、 "MODEは適切ではない" 
			リターンcv2.flip(IMG、MODE = flipCode)
	2オフラインモード
		2.1ランダム摂動
			ノイズ(ガウス、カスタム)騒音
            DEFのrandom_noise(IMG、rand_range = (3、20)):
                "" " 
                ランダムノイズ
                :PARAM IMG:
                :PARAM rand_range:(MIN、MAX)
                リターン:
                " "" 
                IMG = np.asarray(IMG、np.float)
                シグマ*(random.randintを= rand_range)
                NOSIEのnp.random.normal =(0、シグマ、サイズ= img.shape)
                IMG = + NOSIE 
                IMG = np.uint8(np.clip(IMG、0、255)) 
                のリターンのimg

			フィルタ(ガウシアン平滑化、平均値、中央値、最小値、最大値、二国間、導か運動)
			#は、様々なフィルタリング原理を説明:HTTPS://blog.csdn.net/hellocsz/article/details/80727972 
            DEF gaussianBlue(IMG、 = KS、1.5 STDEVため=)(7 ,. 7):
                "" " 
                ガウスぼかし、画像がシャープなノイズを除去するために平滑化することができる
                :PARAM IMG:
                :PARAM KS:畳み込みカーネル
                :PARAMのSTDEV:標準偏差
                :返します:
                " "" 
                cv2.GaussianBlur返す(IMGを、(7 ,. 7)、1.5ため。)

		2.2転換
			回転rorate 
            DEF回転(IMG、角度、スケール= 1.0):
                "" " 
                回転
                :PARAMのIMG: 
                :PARAM角度:回転角度> 0を反時計回りに、
                :PARAMスケール:
                :戻ります:
                "" " 
                高さ、幅= img.shapeの[2]#画像取得幅と高さ
                中心=(幅/ 2、高さ / 2)#1 画像を撮影中点

                M = cv2.getRotationMatrix2D(中央、角度、スケール) #回転行列のポイント周辺の画像を取得する
                (第2の引数#1 cv2.warpAffine)を変換行列であり、3番目のパラメータは、出力画像のサイズは
                = cv2.warpAffine(IMG、M、回転 (高さ、幅)) 
                回転戻り


            DEFのrandom_rotate(IMG、angle_range =( - 10、10)):
                "" " 
                ランダム回転 
                :PARAM IMG:
                :PARAM angle_range:回転角度範囲(最小、最大)> 0が反時計示し、
                :リターン:
                " "" 
                高さ、幅= img.shapeの[2]#は、画像の高さと幅取得
                中心=(幅/ 2、撮影高さ/ 2)#中点画像
                ランダム=角度。randrange(* angle_range 1) 
                M = cv2.getRotationMatrix2D(中心角、1.0 )# 回転行列のポイント周辺の画像を取得する
                (第2の引数#1 cv2.warpAffine)は変換行列であり、3番目のパラメータは、出力画像のサイズが
                = cv2.warpAffine回転しました(IMG、M、(高さ、幅))
                回転さが戻る
			シフトオフセット
            (IMG、X_OFFSET、Y_OFFSET)シフトDEF:
                "" " 
                シフト、右、上下
                :PARAM IMGを
                示し、右側に> 0:PARAM X_OFFSETシフトPX、<0が左方向を表します
                :PARAM Y_OFFSET:> 0 0が上方を示し、<オフセット下方PXを表す
                リターン:
                "" " 
                H、W、_ = img.shape 
                M = np.array([1、0、X_OFFSET]、[0、。 。1、Y_OFFSET]、DTYPE = np.float)
                戻りcv2.warpAffine(IMG、M、(W、H))
			捻らスキュー
            ... 
			ズームスケール 
                #HTTPSから://blog.csdn.net/weixin_43360384/article/details/84871521
            デフresize_img(IMG、resize_w、resize_h):
                高さ、幅= img.shapeの[2]#获取图片的高和宽
                戻りcv2.resize(IMG、(resize_w、resize_h)、補間= cv2.INTER_CUBIC)
			RGB / BGR - > HSV 
            DEF rgb2hsv_py(R、G、B):
                R、G、B = R / 255.0、G / 255.0、B / 255.0 
                MX = MAX(R、G、B)
                MN =分(R、G、B)
                M = MX-MN 
                MX == MN場合:
                    時間= 0 
                ELIFのMX == R:
                    もしG> = B:
                        H =((GB)/ M)* 60 
                    他:
                        H =((GB)/ M)* 60 + 360
                ELIF MX == G:
                    H =((BR)/ M)* 60 + 120 
                ELIFのMX == B:
                    H =((RG)/ M)* 60 + 240 
                :MX == 0の場合
                    、S = 0 
                さもなければ:
                    秒= M / MX 
                V = MX 
                V = np.zeros((H、W)、np.float32)
                R、G、 B = cv2.split(IMG) 
                戻りH、S、V
            :デフrgb2hsv_cv(IMG)
                https://blog.csdn.net/qq_38332453/article/details/89258058から#
                H = img.shape [0] 
                = img.shape [1] W 
                H = np.zeros((H、 W)、np.float32)
                S = np.zeros((H、W)、np.float32)
                R、G、B = R / 255.0、G / 255.0、B / 255.0 
                範囲(0でiについて、H)。
                    範囲内のJ(0、W)のために:
                        MX = MAX((B [I、J]、G [I、J]、R [I、J]))
                        MN =分((B [I、J]、G [I、J]、R [I、J]))
                        V [I、J] = MX 
                        もしV [I、J] == 0:
                            S [I、J] = 0
                        他:
                            S [I、J] =(Vの[I、J] - MN)/ V [I、J] 
                        もしMX == MN:
                            H [I、J] = 0  
                        ELIF V [I、J] == R [I、J]:
                            もしG [I、J]> = bの[I、J]。
                                H [I、J] =(60 * ((G [I、J]) - B [I、J])/(V [I、J] - MN))
                            他:
                                H [I、J] =(60 *((G [I、J]) - B [I、J])/(V [I、J] - MN))+ 360 
                        のelif V [I、J] == G [I、J]:
                            H [I、J] = 60 *((B [I、J]) - R [I、J])/(V [I、J] - MN)+ 120 
                        のelif V [I、J] == B [I、J]:
                            H [I、J] = 60 *((R [I、J]) - G [I、J])/(V [I、J] - MN)+ 240 
                        H [I、J] = H [I、J] / 2 
                戻りH、S、Vの
            画像の重ね合わせ融合
            DEF addWeight(SRCL、アルファ、SRC2、ベータ、ガンマ):
                "" " 
                G(X)=(1 - α)F0(X)+αf1(X)は、異なる値の#→(0,1)あなたは、異なる効果を達成することができます 
                DST = SRCL *アルファ+のSRC2 *ベータ+ガンマ
                :PARAMのSRCL:IMG1 
                :PARAMアルファ:
                :PARAMのSRC2:IMG2 
                :ベータPARAM:
                :PARAMガンマ:
                :リターン:
                "" " 
                src2.shapeアサートsrc1.shap == 
                cv2.addWeightedを返す(SRCL、アルファ、SRC2、ベータ、ガンマ)
			ディザリング(輝度\色\飽和\コントラスト)ジッタカラー
            DEFのadjust_contrast_bright(IMG、コントラスト= 1.2、明るさ= 100):
                "" "
                明るさとコントラストを調整
                DSTはIMG *輝度コントラスト+ =  
                :のparam IMG: のparamコントラスト:大きな明るくコントラスト
                :PARAM輝度:明るさ100〜0 
                :リターン:
                "" " 
                それは中断するよう#0-255は、画素値を超えた
                リターンnp.uint8(np.clip((コントラスト* IMGを輝度+)、0、255))
            DEFのpytorch_color_jitter(IMG):
                torchvision.transforms.ColorJitter(明るさ= 0を返す、コントラスト= 0、= 0彩度、色相= 0)
			3D幾何変換
			
			

  

おすすめ

転載: www.cnblogs.com/dxscode/p/11733311.html