十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
如何使用GAN拯救你的低分辨率老照片,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
專注于為中小企業(yè)提供成都網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)太原免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1 項(xiàng)目背景
了解GAN的同學(xué)都知道,GAN擅長(zhǎng)于捕捉概率分布,因此非常適合圖像生成類任務(wù)。我們?cè)趫D片視頻拍攝以及傳輸過(guò)程中,經(jīng)常會(huì)進(jìn)行圖像的壓縮,導(dǎo)致圖像分辨率過(guò)低,另外早些年的設(shè)備拍攝出來(lái)的照片也存在分辨率過(guò)低的問(wèn)題,比如10年前的320*240分辨率。要解決此問(wèn)題,需要使用到圖像超分辯技術(shù)。
我們使用GAN來(lái)完成圖像超分辯任務(wù),需要做的準(zhǔn)備工作包括:
(1) Linux系統(tǒng)或者windows系統(tǒng),使用Linux效率更高。
(2) 安裝好的Pytorch,需要GPU進(jìn)行訓(xùn)練。
2 原理簡(jiǎn)介
圖像超分辯任務(wù)輸入是一張低分辨率的圖像,輸出是一張對(duì)它進(jìn)行分辨率增大的圖片,下面是一個(gè)常用的框架示意圖[1]:
該框架首先對(duì)輸入圖使用插值方法進(jìn)行上采樣,然后使用卷積層對(duì)輸入進(jìn)行學(xué)習(xí),這種框架的劣勢(shì)是計(jì)算代價(jià)比較大,因?yàn)檎麄€(gè)網(wǎng)絡(luò)是對(duì)高分辨率圖操作。
隨后研究者提出在網(wǎng)絡(luò)的后端進(jìn)行分辨率放大,通過(guò)擴(kuò)充通道數(shù),然后將其重新分布來(lái)獲得高分辨率圖,這套操作被稱為(PixShuffle)[2],這樣整個(gè)網(wǎng)絡(luò)大部分計(jì)算量是對(duì)低分辨率圖操作,如下圖:
以上構(gòu)成了圖像超分辨的基本思路,之后研究者將GAN帶入超分辯框架[3],實(shí)際上就是增加了對(duì)抗損失,同時(shí)使用了我們常說(shuō)的感知損失替代了重建用的MSE損失。
關(guān)于各類超分辨率框架的具體原理,大家可以移步有三AI知識(shí)星球,或者自行學(xué)習(xí)。由于我們這是實(shí)戰(zhàn)專欄,不對(duì)原理做完整的介紹。
3 模型訓(xùn)練
大多數(shù)超分重建任務(wù)的數(shù)據(jù)集都是通過(guò)從高分辨率圖像進(jìn)行下采樣獲得,論文中往往選擇ImageNet數(shù)據(jù)集,由于我們這里打算專門(mén)對(duì)人臉進(jìn)行清晰度恢復(fù),因此選擇了一個(gè)常用的高清人臉數(shù)據(jù)集,CelebA-HQ,它發(fā)布于 2019 年,包含30000張不同屬性的高清人臉圖,其中圖像大小均為1024×1024,預(yù)覽如下。
接下來(lái)我們對(duì)代碼進(jìn)行解讀:
3.1 數(shù)據(jù)預(yù)處理
圖像超分辨數(shù)據(jù)集往往都是從高分辨率圖進(jìn)行采樣得到低分辨率圖,然后組成訓(xùn)練用的圖像對(duì),下面是對(duì)訓(xùn)練集和驗(yàn)證集中數(shù)據(jù)處理的核心代碼:
## 訓(xùn)練集高分辨率圖預(yù)處理函數(shù)
def train_hr_transform(crop_size):
return Compose([
RandomCrop(crop_size),
ToTensor(),
])
## 訓(xùn)練集低分辨率圖預(yù)處理函數(shù)
def train_lr_transform(crop_size, upscale_factor):
return Compose([
ToPILImage(),
Resize(crop_size // upscale_factor, interpolation=Image.BICUBIC),
ToTensor()
])
## 訓(xùn)練數(shù)據(jù)集類
class TrainDatasetFromFolder(Dataset):
def __init__(self, dataset_dir, crop_size, upscale_factor):
super(TrainDatasetFromFolder, self).__init__()
self.image_filenames = [join(dataset_dir, x) for x in listdir(dataset_dir) if is_image_file(x)] ##獲得所有圖像
crop_size = calculate_valid_crop_size(crop_size, upscale_factor)##獲得裁剪尺寸
self.hr_transform = train_hr_transform(crop_size) ##高分辨率圖預(yù)處理函數(shù)
self.lr_transform = train_lr_transform(crop_size, upscale_factor) ##低分辨率圖預(yù)處理函數(shù)
##數(shù)據(jù)集迭代指針
def __getitem__(self, index):
hr_image = self.hr_transform(Image.open(self.image_filenames[index])) ##隨機(jī)裁剪獲得高分辨率圖
lr_image = self.lr_transform(hr_image) ##獲得低分辨率圖
return lr_image, hr_image
def __len__(self):
return len(self.image_filenames)
## 驗(yàn)證數(shù)據(jù)集類
class ValDatasetFromFolder(Dataset):
def __init__(self, dataset_dir, upscale_factor):
super(ValDatasetFromFolder, self).__init__()
self.upscale_factor = upscale_factor
self.image_filenames = [join(dataset_dir, x) for x in listdir(dataset_dir) if is_image_file(x)]
關(guān)于如何使用GAN拯救你的低分辨率老照片問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。