簡體   English   中英

使用自動編碼器的圖像着色 - 最大壓縮點

[英]Image colorization using autoencoder - Maximum compression point

我正在為自動編碼器構建模型。 我在 LAB 顏色空間中有一個圖像數據集(256x256)。

但我不知道,什么是正確的最大壓縮點。 我找到了一個例子,當我有 176 x 176 x 1 (~30976) 時,那么點是 22 x 22 x 512 (~247808)。

但這是如何計算的?

我的型號:

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(256, 256, 1)))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(128, (3,3), activation='relu', padding='same'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(256, (3,3), activation='relu', padding='same'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(512, (3,3), activation='relu', padding='same'))

#Decoder
model.add(Conv2D(256, (3,3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(128, (3,3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(64, (3,3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(2, (3, 3), activation='tanh', padding='same'))
model.add(UpSampling2D((2, 2)))
model.compile(optimizer='adam', loss='mse' , metrics=['accuracy'])
model.summary()

弄清楚網絡的這些方面比數學更像是一門藝術。 因此,如果不正確分析數據,我們就無法定義恆定的壓縮點,這就是首先使用神經網絡的原因。

然而,我們可以直觀地考慮每一層會發生什么。 例如,在圖像着色問題中,最好不要使用太多池化層,因為這會丟棄大量信息。 大小為 2x2 且步幅為 2 的最大池化層會丟棄 75% 的輸入數據。 這在分類中更有用,可以消除不可能的類別。 同樣,ReLU 會丟棄所有負面數據,並且可能不是手頭問題的最佳函數選擇。

以下是一些可能有助於解決您的具體問題的提示:

  1. 減少池化層的數量。 在池化之前,嘗試增加可訓練層的數量,以便模型(直觀地)學習聚合重要信息以避免將其池化。

  2. 將激活更改為eluLeakyReLU等,它們不會消除負值,特別是因為輸出也需要負值。

  3. 也許嘗試 BiLinear 或 BiCubic 上采樣來保持結構? 我還建議在這里查看所謂的“魔術”內核。 就我個人而言,我用它取得了不錯的結果,盡管有效地實施它需要時間。

  4. 如果您有足夠的 GPU 空間,請增加通道數。 除了在某些情況下過度擬合之外,這一點不需要考慮太多。

  5. 最好使用Conv2D層作為最后一層來補償上采樣時的偽影。

請記住,這些要點適用於一般用例。 研究論文中的模型是另一種情況,不像你的架構那么簡單。 所有這些要點可能適用於特定論文,也可能不適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM