謝邀
看到悟空問答官方給我推薦這個問題,我不得不說,這推薦是不是有點太精準了?我才前幾天在上發(fā)布的InceptionNet如何實現數據增強,今天就給我推送這個問題,這一點我不得不服。所以接下來我就直接引用我之前寫過的文章了。
在CNN中,為了增大數據量避免模型的過擬合,通常都會對訓練數據做數據增強處理,這篇文章主要介紹在InceptionNet中是如何做數據增強的,tensorflow官方通過slim已經實現了VGG、Inception、LeNet網絡的數據增強的,官網鏈接如下:https://github.com/tensorflow/models/tree/master/research/slim/preprocessing,InceptionNet數據增強主要包括以下幾個部分:
#將圖片的像素值縮放到[0,1)
image=tf.image.convert_image_dtype(image,dtype=tf.float32)
image:一個3維的圖片tensor,數據的取值范圍在[0,1],即表示已經做了歸一化后的圖片
bbox:box的邊框,[ymin,xmin,ymax,xmax],默認是[0,0,1,1]表示使用的是整張圖片
min_object_covered:在隨機裁剪圖片的時候必須要包括box邊框的比例
aspect_ratio_range:隨機裁剪的圖片,寬/高的比例需要滿足的范圍
area_range:隨機裁剪的圖片需要占圖片的比例
max_attempts:隨機裁剪,嘗試的最多次數,超過最大嘗試次數返回整張圖片
返回的是一張裁剪之后的圖片和隨機裁剪所選的區(qū)域,后面會通過tensorflow對這個區(qū)域進行標注,裁剪的圖片就是從這個區(qū)域中選擇的。
在隨機變化圖片參數的時候,tensorflow提供了一種fast_mode模型,從名字上理解就是快速模型,在fast_mode模型中沒有做比較耗時處理的色度變換和對比度變換,由于參數變換的順序也會影響最終生成的圖片,在變換參數的時候也還加入了不同變化順序。
#隨機水平翻轉
distorted_image=tf.image.random_flip_left_right(distorted_image)
4、將圖片的像素轉換到[-1,1]區(qū)間內
distorted_image=tf.subtract(distorted_image,0.5)#減去0.5
distorted_image=tf.multiply(distorted_image,2.0)#乘以2
第一步將圖片轉換到[0,1]區(qū)間內,通過除以255,通過最后兩步可以將圖片轉換到[-1,1]區(qū)間內。將圖片轉換到[0,1]區(qū)間,其實就是做了一個0(最小值)/255(最大值)的變化,將圖片轉換到[-1,1]區(qū)間相當于做了128(最小值)/128(最大值),實驗證明[-1,1]區(qū)間比[0,1]的準確率要高一些。
注意:對圖片的像素區(qū)間做了轉換之后,在預測圖片類標的時候,也需要對圖片的像素區(qū)間進行相同的縮放。