[OpenR8 解決方案] Image_DataAugmentation (影像資料擴增)

一、Image_Data Augmentation

 

Data Augmentation 資料擴增是藉由將數據集內既有的圖片予以修改變形,創造出更多的圖片來讓機器學習,以此擴大數據集、豐富數據多樣性,便於學習到更深度廣泛的特徵,與彌補資料量不足的困擾

 

此解決方案目的是將影像作旋轉以及改變亮度來產生更多的圖片來讓機器做學習。

流程檔案包含:

 

rotate.flow:旋轉 (可自行設定每旋轉幾度產生一張影像)。如下圖1

rotate_brightness.flow:旋轉+改變亮度。如下圖2

 

圖1.rotate.flow.flow每90度選轉lena示意圖.png

圖1.rotate.flow.flow 每90度旋轉 lena 示意圖。

 

圖2.rotate_brightness.flow每90度選轉與 -30明暗之lena示意圖.png

圖2.rotate_brightness.flow 每90度選轉與 -30明暗之 lena 示意圖。

 

 

二、使用介紹

 

此章節介紹使用者如何透過 R8 軟體載入現有的解決方案來實現影像資料擴增。

 

 

  1. 執行 R8,載入解決方案
  • 步驟1. 執行 R8.exe,請點擊滑鼠兩下開啟 R8。畫面如下圖3。

 

圖3. 執行R8.exe .png

圖3. 執行 R8.exe 。

 

  • 步驟2. 點擊 R8 上方的【檔案】=>【開啟】。畫面如下圖4。

 

圖4. 檔案 開啟 .png

圖4.【檔案】=>【開啟】。

 

  • 步驟3. 選擇 solution下的 DeepLearningServer_Python_PCB 資料夾。進資料夾選擇流程檔案來開啟。畫面如下圖5。

 

圖5.選擇檔案 rotate.flow or rotate_brightness.flow .png

圖5.選擇檔案【rotate.flow】or【rotate_brightness.flow】。

 

  • 步驟4. 開啟檔案後,畫面如下圖6

 

圖6.開啟rotate.flow 左 或 rotate_brightness.flow 右 示意圖.png

圖6.開啟 rotate.flow (左) 或 rotate_brightness.flow (右)示意圖。

 

  1. 設定輸入的影像及想要調整的明暗旋轉

【rotate.flow】: 旋轉

 

  • 步驟1. 設定旋轉角度。如下圖7

 

圖7.設定旋轉角度.png

圖7.設定旋轉角度。

 

  • 步驟2. 設定輸出檔案存放的資料夾。如下圖8

 

圖8.設定輸出資料夾.png

圖8.設定輸出資料夾。

 

  • 步驟3.設定輸入影像。如下圖9。

 

圖9.設定輸入影像.png

圖9.設定輸入影像。

 

【rotate_brightness.flow】:旋轉+明暗

步驟1~3。請參考本文同章節的 rotate.flow。

設定旋轉角度 + 設定輸出資料夾+設定輸入影像,流程位置如下圖10

 

圖10.rotate_brightness設定旋轉角度 輸出資料夾 輸入影像.png

圖10.rotate_brightness 設定旋轉角度 輸出資料夾 輸入影像。

 

  • 步驟4. 設定明暗程度。如下圖11

 

圖11.rotate_brightness設定明暗程度.png

圖11.rotate_brightness 設定明暗程度。

 

  1. 執行與結果

【rotate.flow】如下圖12圖13。

 

圖12.執行rotate.jpg

圖12.執行 rotate。

 

圖13.rotate輸出結果.png

圖13.rotate 輸出結果。

 

【rotate_brightness.flow】如下圖14圖15

 

圖14.執行rotate_brightness.png

圖14.執行 rotate_brightness。

 

圖15.rotate_brightness輸出結果.png

圖15.rotate_brightness 輸出結果。

 

 

 

 

 

三、流程介紹-Rotate.flow

 

此章節將詳細介紹流程內的每一方塊,在解決方案中扮演著什麼角色。流程架構如下圖16:

 

圖16.Rotate flow 內容.png

圖16.Rotate flow 內容。

 

流程由上至下:

【1.Println】設定旋轉角度。

變數名稱

名稱

用途

整數(整數)

N

4

在執行過程中,顯示欲將360度切成幾分。

例如:N=4, 360/4=90度。即想要設定每90度輸出一張其旋轉圖。

布林(布林)

 

 

 

浮點數(浮點數)

 

 

 

雙精度浮點數(雙精度浮點數)

 

 

 

字串(字串)

 

 

 

影像(影像)

 

 

 

 

【2.Println】設定輸出資料夾。

變數名稱

名稱

用途

整數(整數)

 

 

 

布林(布林)

 

 

 

浮點數(浮點數)

 

 

 

雙精度浮點數(雙精度浮點數)

 

 

 

字串(字串)

outputFolder

rotate_output

設定圖片輸出的資料夾。

例如: rotate_output 為將輸出的資料夾放置於與 flow 同一層的 rotate_output 資料夾內

影像(影像)

 

 

 

 

【3~6】計算與顯示旋轉角度。

  • 3.整數_轉浮點數:將設定的整數 N 轉為浮點數,用於下一步計算每幾度要輸出影像所需的分母。
  • 4.雙精度浮點數_除法:計算每幾度要輸出影像。
  • 5.雙精度浮點數_轉整數:將上一步計算出來的角度(有小數)轉換成整數。
  • 6.Println:顯示每幾度要輸出影像的度數。

 

函式

變數名稱

名稱

用途

整數_轉浮點數

整數

N

4

輸入的變數。

想要將此整數轉為浮點數。

雙精度浮點數

N_double

 

將整數轉為浮點數存至此變數。

雙精度浮點數_除法

雙精度浮點數 A

360

360

 

雙精度浮點數 B

N_double

 

 

雙精度浮點數 C

degreeDouble

 

degreeDouble=360/ N_double

計算每幾度要輸出影像

雙精度浮點數_轉整數

雙精度浮點數

 

 

輸入的變數。

想要將此浮點數轉為整數。

整數

degreeInt

 

將整浮點數為整數存至此變數。

Println

整數(整數)

degreeInt

 

顯示上面計算出來的角度

布林(布林)

 

 

 

浮點數(浮點數)

 

 

 

雙精度浮點數(雙精度浮點數)

 

 

 

字串(字串)

 

 

 

影像(影像)

 

 

 

 
【7 影像_開啟】開啟想要讀取的影像。選擇圖的方式可見下圖17
 

變數名稱

名稱

用途

影像檔案名稱(字串)

imageFileName

lena.png

讀取 lena.png 的影像。

此變數為名稱為 imageFileName。

如果想要換其它輸入的影像。請將值改為欲測試的影像路徑名稱。

影像(影像)

image

 

將讀進來的影像存至此變數。

 
圖17.選擇輸出影像.png
圖17.選擇輸出影像。
 

【9~10, 18】重複(9 For_ 迴圈)至(18 For_ 迴圈結束)中間過程,即10~17重複運行,直到達到設定的條件。

  • 9 For_ 迴圈
  • 10 取得 For_ 迴圈計數
  • 18 For_ 迴圈結束

 

函式

變數名稱

名稱

用途

For_ 迴圈

計數器(物件)

counter

 

存放 for 物件中,會使用到的變數。

從(整數)

degreeInt

 

一開始的值。

在此為一開始要旋轉的角度。

例如:當 N=4,就由上面步驟得知 degreeInt=90 度。

到(整數)

to

360

當角度累積到此值以上就不繼續輸出旋轉角度的影像。

步階(整數)

degreeInt

 

每一次要增加多少角度。

取得 For_ 迴圈計數

計數器(物件)

counter

 

 

 

【11~12】影像旋轉

  • 11.整數_轉浮點數:將要旋轉的角度(整數)轉換成影像旋轉需要的浮點數格式。
  • 12.影像_旋轉:將影像做旋轉。

 

函式

變數名稱

名稱

用途

整數_轉浮點數

整數

Count

 

輸入的變數。此處為旋轉角度,想要將此整數轉為浮點數。

雙精度浮點數

doubleR

 

將轉為浮點數的數值存至此變數。

影像_旋轉

影像

Image

 

想要旋轉的影像。

doubleR

 

旋轉角度。

旋轉影像

imageRotate

 

存放旋轉完的影像。

 
【8, 13~16】產生輸出檔名的字串
  • 8字串_取代: lena.png=>lena
  • 13字串_列印到字串:旋轉角度(整數)=>旋轉角度(字串)
  • 14字串_加法: rotate_output/ + lena_ = rotate_output/lena_
  • 15字串_加法: rotate_output/lena_ + 30(角度字串)= rotate_output/lena_30
  • 16字串_加法: rotate_output/lena_30+ .png = rotate_output/lena_30.png

 

函式

變數名稱

名稱

用途

字串_取代

輸出字串

imageName

 

將處理完的字串存入此變數。

replaceFrom

replaceFrom

.png

inputString 文字中符合 replaceFrom 的字,替換成 replaceTo。

例如:輸入為 lena.png。將.png 取代後,產生新的字串 lena_

replaceTo

replaceTo

_

inputString

imageFileName

lena.png

讀取影像所選取的影像檔名。

如範例為 lena.png。

字串_列印到字串

輸出字串

doubleString

 

 

整數

count

 

將此整數用字串的形式顯示在 dos 視窗。

此用意為將角度(整數)轉為字串。

布林

 

 

 

浮點數

 

 

 

雙精度浮點數

 

 

 

字串

 

 

 

影像

 

 

 

字串_加法

輸出字串

outputString

 

輸出字串=字串 A+字串 B

此處為 rotate_outputlena_

字串 A

outputFolder

rotate_output

存放檔案的資料夾

字串 B

imageName

 

檔案名稱

字串_加法

輸出字串

outputString

 

輸出字串=字串 A+字串 B

例如字串 A 為30(角度)。即為 rotate_outputlena_30

字串 A

outputFolder

 

上面合成的字串

rotate_outputlena_

字串 B

doubleString

 

旋轉角度(字串格式)

字串_加法

輸出字串

outputString

 

輸出字串=字串 A+字串 B

此為 rotate_outputlena_30.png

字串 A

outputFolder

 

上面合成的字串

rotate_outputlena_30

字串 B

stringB

.png

 

 
【17影像_儲存】儲存旋轉過的影像

變數名稱

名稱

用途

影像(影像)

imageRotate

 

想要儲存的影像。

imageRotate 為上面經由影像_旋轉得到的圖。

影像檔案名稱(字串)

outputString

 

儲存檔案的名稱。

例如,旋轉30度,此字串為 rotate_output/lena_30.png

 

 

四、流程介紹-Rotate_brightness.flow

 

此檔案流程圖如下圖18:

與另一流程 rotate.flow 差別於增加兩種明暗以及將其輸出。

  

設置【11影像_創建】產生255像素的影像及【10_影像創建】產生30像素的影像。​

  • 產生亮影像: 輸入圖增亮30 = 輸入圖+30 = 255-(255-輸入圖-30)。

對應至流程為【19影像差值】= 255 - 18影像差值】= 255-(17影像差值】-30) = 255-(255-輸入圖-30)。​

  • 產生暗影像:輸入影像減暗30 = 輸入圖 -30

對應至流程為【16影像差值】= 輸入圖-30

(此範例為藉由減法運算,使用者可自行使用其他方式達至相同結果。)

 

圖18.Rotate_brightness.flow流程圖.png

圖18.Rotate_brightness.flow 流程圖。 


延伸閱讀

1.
OpenR8 - 人人都會用的 AI 軟體 (下載)

[CP 值最好的 AI 人工智慧電腦熱賣中]
硬體採用最新最快的 Titan RTX, RTX-2080Ti-11G, 及 TESLA V100!
視窗圖控介面,易學易用。
硬體優勢:針對深度學習最佳化設計,且經過客戶端 24H 運作驗證。
軟體優勢:事先安裝人工智慧軟體及優化設定,每週提供最新 AI 演算法下載。
公司優勢:專業人工智慧機器人設計公司,資本額一億。
歡迎企業、學校、及公家機關大量採購。
可租用,歡迎來信或來電洽詢。
詳細資料請參閱以下網址: https://tw.openrobot.club/ai_computer