文章目錄
- 1. 準備作業(前提)
- 2.Colab常用操作
- 3. git clone 從github 克隆代碼
- 4. 下載資料集(DIV2K)
- 5. 解壓資料
- 6. 查看代碼,運行改名rename.py代碼
- 7. 剪切圖片
- 8. 保存為tfrecord格式檔案
- 9 . 預訓練psnr_pretrain
- 10.模型存云盤與返復制回Google 服務器
- 10.1 模型保存
- 10.2 模型返復制到代碼
- 11. 測驗
- 12. 小結
1. 準備作業(前提)
-
特別宣告:以下每一段代碼:單獨放在Google drive 每一個代碼框,復制到框內,按照步驟,每步點擊按鈕即可跑通代碼,
-
科學上網;
-
下載谷歌瀏覽器,打開google drive,詳見筆者先前寫的一個“菜”博客;
-
科學上網并登錄Google drive ,界面如下:

-
掛載谷歌drive:簡言之,掛載drive,有利于所有涉及到檔案路徑時,正常輸入,代碼運行不出錯,【菜博客】有提及較詳細的原因,
-
進入colab,設定為GPU狀態(如圖)(每天六個小時GPU時長)

-
打開Google drive,創建ipynb檔案(如下圖)后,代碼:貼入
掛載代碼如下:

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
!mkdir -p drive
!google-drive-ocamlfuse -o nonempty drive
!rm -rf /content/sample_data
- 輸入代碼運行,彈出兩次鏈接,分別點擊進入,登錄谷歌賬號,獲取驗證號碼,復制填入框中,


- 出現下圖便正確:

掛載成功

2.Colab常用操作
- colab中沒有切換路徑的cd + path
- 只有: os.chdir()
import os
os.chdir('path')
其中的path,可以右點擊滑鼠掛載后的 Google drive 檔案夾(如圖)

drive下方很多檔案是自己Google 15G云盤的檔案,
- 舉栗子:正確復制路徑path,

- 凡是,在運行之前,需要添加(英文的驚嘆號!)
3. git clone 從github 克隆代碼
- 這里使用ESRGAN的代碼來源,
- colab克隆并加載代碼;
- TensorFlow2.X版本;
- 創建ESRGAN_tf2檔案夾;
- 切記! os.chidir() 相當于cd ./切換路徑,
- 切記! 上文提到的復制路徑的方式:切換路徑需要,
import os
# #in
path = '/content/ESRGAN_tf2' #在剛搭建搭載的Google drive 創建一個ESRGAN_tf2檔案夾
if not os.path.exists(path):
os.makedirs(path)
else:
print('Exist...')
exit(1)
os.chdir(path)
path1 = '/content/ESRGAN_tf2/esrgan-tf2'
if not os.path.exists(path1):
!git clone https://github.com/peteryuX/esrgan-tf2.git
os.chdir(path1)
# os.chdir('/content/temp/esrgan-tf2')
#建立環境
# !pip install -r requirements.txt
#colab默認是tensorflow2.X框架,不用安裝環境
4. 下載資料集(DIV2K)
- 電腦端匯入資料,下載太慢,匯入程序常斷開;
- 以下方法,若不存在特定的檔案夾,先創建一個檔案夾,直接鏈接資料集網站,下載資料,
import os
path=('/content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K')
if not os.path.exists(path):
os.makedirs(path)
else:
print('Exist...')
exit(1)
os.chdir(path)
# 下載資料
!wget http://data.vision.ee.ethz.ch/cvl/DIV2K/DIV2K_train_HR.zip
!wget http://data.vision.ee.ethz.ch/cvl/DIV2K/DIV2K_train_LR_bicubic_X4.zip
5. 解壓資料
- os.chdir()操作進入進入已經下載好的資料集檔案夾內,
- 解壓: !unzip xx.zip
- 解壓檔案完畢,前面壓縮檔案沒有用處,洗掉以釋放記憶體,
- 洗掉操作:!rm -rf path(路徑)
import os
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K')
!unzip DIV2K_train_HR.zip
!unzip DIV2K_train_LR_bicubic_X4.zip
#洗掉下載的壓縮包資料
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K')
!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K_train_HR.zip
!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K_train_LR_bicubic_X4.zip
6. 查看代碼,運行改名rename.py代碼
- 打開檔案路徑為:/content/ESRGAN_tf2/esrgan-tf2/data/rename.py;
- 如圖:通常py檔案需要雙擊檔案,就能顯示其中內容;

- rename.py:修改LR檔案夾中的檔案名與HR的一致

7. 剪切圖片
- 由于DIV2K資料集中的每張圖片都比較大,并且尺寸不一,需要對其切割,將其降切為480*120,一共有三萬多張子圖片,
- 打開/content/ESRGAN_tf2/esrgan-tf2/data/extract_subimages.py
- 如下圖:切割的引數,

- 運行檔案的代碼:
import os
#os.environ['CUDA_VISIBLE_DEVICES']='0'
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/data')
!python extract_subimages.py
- 可以看到,切成32208對資料,


- 剪切完畢,為保持一定的容量,洗掉原始解壓的檔案
!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K_train_HR
!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K_train_LR_bicubic
8. 保存為tfrecord格式檔案
- 改格式是TensorFlow框架中常用保存大型資料集的方式,加速資料的讀取與運行,提高實驗的效率,
- 運行data檔案夾下的有關tfrecord的檔案,
import os
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/data')
!python convert_train_tfrecord.py

!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K800_sub
!rm -rf /content/ESRGAN_tf2/esrgan-tf2/data/data/DIV2K/DIV2K800_sub_bicLRx4
- 生成tfrecord格式資料集之后,就可以洗掉掉之前的子檔案,

9 . 預訓練psnr_pretrain
- 預訓練的目的:先生成精度較高的預訓練模型,防止判別器訓練初就能辨認出生成的圖片,
- 在預訓練之前,在前面所有代碼運行完畢,可以打開data檔案夾中觀看,因為前面代碼在保存資料集前,路徑不太一致,在data檔案夾內,又創建一個data檔案夾,如果直接運行psnr_pretrian.py檔案,就會出錯,
- 需要修改檔案路徑:打開configs檔案夾下的psnr.yaml檔案, 在訓練路徑添加:‘/data/’,添加之處,具體如圖,后面的正式esrgan訓練亦如是,

- 以上的作業準備好之后,開始預訓練,
import os
os.chdir('/content/ESRGAN_tf2/esrgan-tf2')
!python train_psnr.py

- 以下都是分段(psnr訓預訓練)截圖:
- 開端顯示的是:GPU的資訊,

- 其次:ESRGAN模型中的密集殘差連接模塊(RRDB)的引數:

- 下圖為模型的引數量,加載的tfrecord資料名稱為:DIV2K;低分圖片尺寸為3232,SR圖片經過超解析度重建為:128128,與HR原始剪切的圖片尺寸一致,

- 訓練程序顯示:

10.模型存云盤與返復制回Google 服務器
- 先驗知識:復制檔案
import shutil
shutil.copytree('original_path' , 'destination_path')
- 通常,目的地檔案夾路徑不用事先建立,代碼模塊已經包含建立檔案夾命令,,如果不行,自己根據自己的15G網盤,建立一個檔案夾以保存即可,
10.1 模型保存
- 原因:目前所有的運行模型,資料都是在Google 云服務器上,如果重新加載,Google 服務器端就會清空,所有資料都會消失,
- 從configs檔案夾中的yaml檔案,可以看出,5000 steps = 1個epoch,設定steps=1000000,即預訓練需要跑200個epochs.
- 囿于Google drive每天只有六個小時的gpu時長,不可能一次run 完畢,
- 解決方法:通常運行4個epochs(20000steps),就斷開運行保存模型到自己的Google 云盤(15G)上,等下次有GPU時長,再復制回來,繼續運行模型(模型代碼中有斷點繼續訓練的命令),并且,在除了第一次復制保存模型以外,在往后復制模型到云盤前,先洗掉前一次存盤的模型,相當于洗掉覆寫此外,這樣操作的原因,是云盤本身記憶體有限,(詳見代碼)
import shutil, os
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/checkpoints')
!rm -rf /content/drive/Experiment/ESRGAN_tf2/pre_checkpoint
shutil.copytree('/content/ESRGAN_tf2/esrgan-tf2/checkpoints','/content/drive/Experiment/ESRGAN_tf2/pre_checkpoint') #pre_checkpoint 復制的目的檔案,可以不用事先建立,命令可以自動建立,
os.chdir('/content/ESRGAN_tf2/esrgan-tf2/logs')
!rm -rf /content/drive/Experiment/ESRGAN_tf2/tf2_logs
shutil.copytree('/content/ESRGAN_tf2/esrgan-tf2/logs','/content/drive/Experiment/ESRGAN_tf2/tf2_logs')
- !!再次強調上述代碼:有‘!rm -rf ’ 行要先注釋掉,第一次復制保存,下次運行代碼,產生新的模型,再取消有!rm -rf 行,這樣在當次模型的時候,會事先洗掉前一次的模型,

10.2 模型返復制到代碼
- 前提:已有保存部分模型,次日有充足GPU時長,
- 首先,預先已經運行1-8步驟的程序(資料準備);
- 其次,從上次保存的模型檔案夾,返復制模型到1-8程序已經下載好的代碼中去,返復制代碼,和10.1程序相反,如下,
import os,shutil
os.chdir('/content/drive/Experiment/ESRGAN_tf2/pre_checkpoint')
shutil.copytree('/content/drive/Experiment/ESRGAN_tf2/pre_checkpoint','/content/ESRGAN_tf2/esrgan-tf2/checkpoints')
os.chdir('/content/drive/Experiment/ESRGAN_tf2/tf2_logs')
shutil.copytree('/content/drive/Experiment/ESRGAN_tf2/tf2_logs','/content/ESRGAN_tf2/esrgan-tf2/logs')
11. 測驗
- 運行代碼中的test.py
- test.py可以運行psnr預訓練程序ckpt,也可以運行正式訓練的ESRGAN程序生成的模型ckpt,生成圖片,查看效果圖,以及相應的評判標準PSNR,SSIM,
- 只需要修改test.py中的yaml路徑,預訓練時,改為psnr.yaml,測驗正式訓練的模型,就改為:esrgan.yaml
os.chdir('/content/ESRGAN_tf2/esrgan-tf2')
!python test.py
12. 小結
- 登錄谷歌、云盤,創建自己的ipynb檔案
- 分步驟,復制以上代碼,
- 注意在configs檔案夾中的yaml檔案,更改路徑(在路徑處的代碼,再添加 '/data/ ')
- 如果是第一次,就直接保存模型到云盤,如果非首次,就先返復制到代碼中,運行即可,GPU時長有限的舉動,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252086.html
標籤:其他
