<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給汪思穎
      發送

      0

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      本文作者: 汪思穎 2017-11-19 16:35
      導語:Keras Image Data Augmentation 各參數詳解

      雷鋒網 AI科技評論按,本文作者Professor ho,該文首發于知乎專欄Keras花式工具箱,雷鋒網 AI科技評論獲其授權轉載。

      圖像深度學習任務中,面對小數據集,我們往往需要利用Image Data Augmentation圖像增廣技術來擴充我們的數據集,而keras的內置ImageDataGenerator很好地幫我們實現圖像增廣。但是面對ImageDataGenerator中眾多的參數,每個參數所得到的效果分別是怎樣的呢?本文針對Keras中ImageDataGenerator的各項參數數值的效果進行了詳細解釋,為各位深度學習研究者們提供一個參考。

      我們先來看看ImageDataGenerator的官方說明(https://keras.io/preprocessing/image/):

      keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
         samplewise_center=False,
         featurewise_std_normalization=False,
         samplewise_std_normalization=False,
         zca_whitening=False,
         zca_epsilon=1e-6,
         rotation_range=0.,
         width_shift_range=0.,
         height_shift_range=0.,
         shear_range=0.,
         zoom_range=0.,
         channel_shift_range=0.,
         fill_mode='nearest',
         cval=0.,
         horizontal_flip=False,
         vertical_flip=False,
         rescale=None,
         preprocessing_function=None,
         data_format=K.image_data_format())

      官方提供的參數解釋因為太長就不貼出來了,大家可以直接點開上面的鏈接看英文原介紹,我們現在就從每一個參數開始看看它會帶來何種效果。

      我們測試選用的是kaggle dogs vs cats redux 貓狗大戰的數據集,隨機選取了9張狗狗的照片,這9張均被resize成224×224的尺寸,如圖1:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖1

      1. featurewise

      datagen = image.ImageDataGenerator(featurewise_center=True,
         featurewise_std_normalization=True)

      featurewise_center的官方解釋:"Set input mean to 0 over the dataset, feature-wise." 大意為使數據集去中心化(使得其均值為0),而samplewise_std_normalization的官方解釋是“ Divide inputs by std of the dataset, feature-wise.”,大意為將輸入的每個樣本除以其自身的標準差。這兩個參數都是從數據集整體上對每張圖片進行標準化處理,我們看看效果如何:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖2

      與圖1原圖相比,經過處理后的圖片在視覺上稍微“變暗”了一點。

      2. samplewise

      datagen = image.ImageDataGenerator(samplewise_center=True,
         samplewise_std_normalization=True)

      samplewise_center的官方解釋為:“ Set each sample mean to 0.”,使輸入數據的每個樣本均值為0;samplewise_std_normalization的官方解釋為:“Divide each input by its std.”,將輸入的每個樣本除以其自身的標準差。這個月featurewise的處理不同,featurewise是從整個數據集的分布去考慮的,而samplewise只是針對自身圖片,效果如圖3:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖3

      看來針對自身數據分布的處理在貓狗大戰數據集上沒有什么意義,或許在mnist這類灰度圖上有用?讀者可以試試。

      3. zca_whtening

      datagen = image.ImageDataGenerator(zca_whitening=True)

      zca白化的作用是針對圖片進行PCA降維操作,減少圖片的冗余信息,保留最重要的特征,細節可參看:Whitening transformation--維基百科Whitening--斯坦福

      很抱歉的是,本人使用keras的官方演示代碼,并沒有復現出zca_whitening的效果,當我的圖片resize成224×224時,代碼報內存錯誤,應該是在計算SVD的過程中數值太大。后來resize成28×28,就沒有內存錯誤了,但是代碼運行了一晚上都不結束,因此使用貓狗大戰圖片無法復現效果,這里轉發另外一個博客使用mnist復現出的結果,如下圖4。針對mnist的其它DataAugmentation結果可以看這個博客:Image Augmentation for Deep Learning With Keras,有修改意見的朋友歡迎留言。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖4

      4. rotation range

      datagen = image.ImageDataGenerator(rotation_range=30)

      rotation range的作用是用戶指定旋轉角度范圍,其參數只需指定一個整數即可,但并不是固定以這個角度進行旋轉,而是在 [0, 指定角度] 范圍內進行隨機角度旋轉。效果如圖5:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖5

      5. width_shift_range & height_shift_range

      datagen = image.ImageDataGenerator(width_shift_range=0.5,height_shift_range=0.5)

      width_shift_range & height_shift_range 分別是水平位置評議和上下位置平移,其參數可以是[0, 1]的浮點數,也可以大于1,其最大平移距離為圖片長或寬的尺寸乘以參數,同樣平移距離并不固定為最大平移距離,平移距離在 [0, 最大平移距離] 區間內。效果如圖6:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖6

      平移圖片的時候一般會出現超出原圖范圍的區域,這部分區域會根據fill_mode的參數來補全,具體參數看下文。當參數設置過大時,會出現圖7的情況,因此盡量不要設置太大的數值。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖7

      6. shear_range

      datagen = image.ImageDataGenerator(shear_range=0.5)

      shear_range就是錯切變換,效果就是讓所有點的x坐標(或者y坐標)保持不變,而對應的y坐標(或者x坐標)則按比例發生平移,且平移的大小和該點到x軸(或y軸)的垂直距離成正比。

      如圖8所示,一個黑色矩形圖案變換為藍色平行四邊形圖案。狗狗圖片變換效果如圖9所示。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖8

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖9

      7. zoom_range

      datagen = image.ImageDataGenerator(zoom_range=0.5)

      zoom_range參數可以讓圖片在長或寬的方向進行放大,可以理解為某方向的resize,因此這個參數可以是一個數或者是一個list。當給出一個數時,圖片同時在長寬兩個方向進行同等程度的放縮操作;當給出一個list時,則代表[width_zoom_range, height_zoom_range],即分別對長寬進行不同程度的放縮。而參數大于0小于1時,執行的是放大操作,當參數大于1時,執行的是縮小操作。

      參數大于0小于1時,效果如圖10:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖10

      參數等于4時,效果如圖11:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖11

      8. channel_shift_range

      datagen = image.ImageDataGenerator(channel_shift_range=10)

      channel_shift_range可以理解成改變圖片的顏色,通過對顏色通道的數值偏移,改變圖片的整體的顏色,這意味著是“整張圖”呈現某一種顏色,像是加了一塊有色玻璃在圖片前面一樣,因此它并不能單獨改變圖片某一元素的顏色,如黑色小狗不能變成白色小狗。當數值為10時,效果如圖12;當數值為100時,效果如圖13,可見當數值越大時,顏色變深的效果越強。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖12

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖13

      9. horizontal_flip & vertical_flip

      datagen = image.ImageDataGenerator(horizontal_flip=True)

      horizontal_flip的作用是隨機對圖片執行水平翻轉操作,意味著不一定對所有圖片都會執行水平翻轉,每次生成均是隨機選取圖片進行翻轉。效果如圖14。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖14

      datagen = image.ImageDataGenerator(vertical_flip=True

      vertical_flip是作用是對圖片執行上下翻轉操作,和horizontal_flip一樣,每次生成均是隨機選取圖片進行翻轉,效果如圖15。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖15

      當然了,在貓狗大戰數據集當中不適合使用vertical_flip,因為一般沒有倒過來的動物。

      10. rescale

      datagen = image.ImageDataGenerator(rescale= 1/255, width_shift_range=0.1)

      rescale的作用是對圖片的每個像素值均乘上這個放縮因子,這個操作在所有其它變換操作之前執行,在一些模型當中,直接輸入原圖的像素值可能會落入激活函數的“死亡區”,因此設置放縮因子為1/255,把像素值放縮到0和1之間有利于模型的收斂,避免神經元“死亡”。

      圖片經過rescale之后,保存到本地的圖片用肉眼看是沒有任何區別的,如果我們在內存中直接打印圖片的數值,可以看到以下結果:

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖16

      可以從圖16看到,圖片像素值都被縮小到0和1之間,但如果打開保存在本地的圖片,其數值依然不變,如圖17。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖17

      應該是在保存到本地的時候,keras把圖像像素值恢復為原來的尺度了,在內存中查看則不會。

      11. fill_mode

      datagen = image.ImageDataGenerator(fill_mode='wrap', zoom_range=[4, 4])

      fill_mode為填充模式,如前面提到,當對圖片進行平移、放縮、錯切等操作時,圖片中會出現一些缺失的地方,那這些缺失的地方該用什么方式補全呢?就由fill_mode中的參數確定,包括:“constant”、“nearest”(默認)、“reflect”和“wrap”。這四種填充方式的效果對比如圖18所示,從左到右,從上到下分別為:“reflect”、“wrap”、“nearest”、“constant”。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖18

      當設置為“constant”時,還有一個可選參數,cval,代表使用某個固定數值的顏色來進行填充。圖19為cval=100時的效果,可以與圖18右下角的無cval參數的圖對比。

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      圖19

      自己動手來測試?

      這里給出一段小小的代碼,作為進行這些參數調試時的代碼,你也可以使用jupyter notebook來試驗這些參數,把圖片結果打印到你的網頁上。

      %matplotlib inline
      import matplotlib.pyplot as plt
      from PIL import Image
      from keras.preprocessing import image
      import glob

      # 設置生成器參數
      datagen = image.ImageDataGenerator(fill_mode='wrap', zoom_range=[4, 4])

      gen_data = datagen.flow_from_directory(PATH,
                                            batch_size=1,
                                            shuffle=False,
                                            save_to_dir=SAVE_PATH,
                                            save_prefix='gen',
            target_size=(224, 224))

      # 生成9張圖
      for i in range(9):
         gen_data.next()


      # 找到本地生成圖,把9張圖打印到同一張figure上
      name_list = glob.glob(gen_path+'16/*')
      fig = plt.figure()
      for i in range(9):
         img = Image.open(name_list[i])
         sub_img = fig.add_subplot(331 + i)
         sub_img.imshow(img)
      plt.show()

      結語

      面對小數據集時,使用DataAugmentation擴充你的數據集就變得非常重要,但在使用DataAugmentation之前,先要了解你的數據集需不需要這類圖片,如貓狗大戰數據集不需要上下翻轉的圖片,以及思考一下變換的程度是不是合理的,例如把目標水平偏移到圖像外面就是不合理的。多試幾次效果,再最終確定使用哪些參數。上面所有內容已經公布在我的github(https://github.com/JustinhoCHN/keras-image-data-augmentation)上面,附上了實驗時的jupyter notebook文件,大家可以玩一玩,have fun!

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      圖片數據集太少?看我七十二變,Keras Image Data Augmentation 各參數詳解

      分享:
      相關文章

      編輯

      關注AI學術,例如論文
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 色av综合av综合无码网站| 国产无码高清视频不卡| 人妻少妇不满足中文字幕| 2022色婷婷综合久久久| 日韩激情成人| 亚洲男女免费视频| 亚洲男同志网站| jizz喷水| 亚洲AV无码成人精品区网页| 花式道具play高h文调教| 亚洲av男人的在线的天堂| 97久久草草超级碰碰碰| 好吊AV| 午夜视频a| 中文字幕午夜福利片午夜福利片97| 日韩欧美精品有码在线观看 | 国产高清在线精品一区不卡| 国产自产V一区二区三区C| 国产成人无码一区二区在线播放| 果冻传媒18禁免费视频| 黑人大战中国av女叫惨了| 超碰99在线| 日韩一区二区三区无码影院| 久久发布国产伦子伦精品| 亚洲Av秘?无码一区二区下载 | www亚洲精品| 99无码中文字幕视频| 中文字幕日本最新乱码视频| 邯郸县| 亚洲三区在线观看无套内射| 狠狠干影院| 日韩久久久久久中文人妻| 国产精品久久欧美久久一区| 天堂中文8资源在线8| 九九视频精品免费观看6| 丁香花在线观看免费观看图片| 永川市| 亚洲成aⅴ人片久青草影院| 51自拍视频| 无卡无码| 亚洲中文字幕伊人久久无码|