日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

pix是什么意思(pixio)

發布時間:2023/12/19 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 pix是什么意思(pixio) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文會介紹cGAN和pix2pix,并在 TensorFlow 中使用 pix2pix 模型。

一、cGAN原理

使用GAN可以無監督生成全新的圖片,比如使用GAN生成MNIST數字,雖然可以生成數字,但是不能生成確定的數字。如果希望控制生成的結果,例如生成數字1,此時就要用到cGAN了。

cGAN 的全稱為 Conditional Generative Adversarial Networks, 即條件對抗生成網 絡,它為生成器、判別器都額外加入了一個條件 y, 這個條件實際是希望生成的標簽 。 生成器 G 必須要生成和條件 y 匹配的樣本,判別器不僅要判別圖像是否真實,還要判別圖像和條件y是否匹配。cGAN的輸入輸出為:

(1)生成器 G, 輸入一個噪聲 z, 一個條件 y,輸出符合該條件的圖像 G(z[y)。

(2)判別器 D ,輸入一張圖像、一個條件 y,輸出該圖像在該條件下的真實概率 D(x[y)。

cGAN損失定義:在GAN的優化目標中加入條件y,即:

二、pix2pix模型的原理

在自然語言處理領域,機器翻譯,也就是將中文譯成英文,對應的,在圖像領域,也有圖像翻譯。例如:將白天的圖片轉換為夜晚的圖片、將街景的標注圖像變為真實圖片。使用pix2pix可以處理這類問題,模型結構如下:

它是一種特殊的cGAN,設要將 Y類型的圖像轉換為 X類型的圖像, G、 D 的任務分別為 :

(1)G 的輸入是一個 Y類圖像y (條件y) ,輸出為生成圖像 G(y)。

(2)D 的輸入為一個X類圖像x,一個 y類圖像y。D需要判斷x圖像是否是真正的y對應的圖像,并輸出一個概率。

模型損失定義為:L1+cGAN。實驗中發現,在生成圖像和真實圖像中加入L1/L2損失,可以加速模型收斂以及提高準確率。

在pix2pix2提出一種PatchGAN的思想:PatchGAN 對圖片中每個 NxN 的小塊計算概率, 然后再將這些概率求平均值作為整體的輸出,這樣做可以加快計算速度以及加快收斂。

三、TensorFlow中的pix2pix模型

1、執行已有數據集

Facades數據集包含了建筑的外觀圖像和建筑的標注 。 建筑的標注同樣是圖像形式,用不同顏色的色塊表示不同的類別。Facades 數據集將建筑外觀分為墻壁、窗戶、門、檐口等 12 個類別。下載Facades 數據集:python tools/download-dataset.py facades

所有的樣本圖像都是兩張圖片拼接起來的,訓練時,可以將A類圖像翻譯成B類圖像。本例將標注圖像生成真實圖像,運行命令:

python pix2pix.py
--mode train # 表示從頭訓練模型 test表示用已有模型測試
--output_dir facades_train # 保存模型的位置
--max_epochs 200 # epoch數
--input_dir facades/train/ # 訓練數據
--which_direction BtoA # 翻譯方向

訓練結束后,使用命令進行測試:

python pix2pix.py
--mode test # 用已有模型測試
--output_dir facades_test # 保存所有圖片的測試結果
--input_dir facades/val # 訓練數據
--checkpoint facades_train # 之前保存模型的位置,表示從此處恢復模型

執行測試后,在 facades_test 文件夾下,會產生一個 index.html 文件 。 打開后可以看到一個可視化展示生成結果的網頁。

2、創建自己的數據集

通過程序,將訓練數據也整理為之前所說的 A、 B 圖像并列排列的形式,用對應的指令進行訓練和測試,相應代碼在process.py文件中。

(1)將圖片縮放到同樣的大小

def resize(src):
    height, width, _ = src.shape
    dst = src
    if height != width:
        if a.pad:
            size = max(height, width)
            # pad to correct ratio
            oh = (size - height) // 2
            ow = (size - width) // 2
            dst = im.pad(image=dst, offset_height=oh, offset_width=ow, target_height=size, target_width=size)
        else:
            # crop to correct ratio
            size = min(height, width)
            oh = (height - size) // 2
            ow = (width - size) // 2
            dst = im.crop(image=dst, offset_height=oh, offset_width=ow, target_height=size, target_width=size)

    assert(dst.shape[0] == dst.shape[1])

    size, _, _ = dst.shape
    if size > a.size:
        dst = im.downscale(images=dst, size=[a.size, a.size])
    elif size < a.size:
        dst = im.upscale(images=dst, size=[a.size, a.size])
    return dst

(2)轉換圖像井合并

對 A 類圖像做某種操作以生成對應的 B 類圖像,并將轉煥后的圖像合起來變成一個訓練樣本。比如將A圖像挖去一部分成為B圖像,再合并。

# 填充部分圖像為空白
def blank(src):
    height, width, _ = src.shape
    if height != width:
        raise Exception("non-square image")

    image_size = width
    size = int(image_size * 0.3)
    offset = int(image_size / 2 - size / 2)

    dst = src
    dst[offset:offset + size,offset:offset + size,:] = np.ones([size, size, 3])
    return dst
# 合并
def combine(src, src_path):
    if a.b_dir is None:
        raise Exception("missing b_dir")

    # find corresponding file in b_dir, could have a different extension
    basename, _ = os.path.splitext(os.path.basename(src_path))
    for ext in [".png", ".jpg"]:
        sibling_path = os.path.join(a.b_dir, basename + ext)
        if os.path.exists(sibling_path):
            sibling = im.load(sibling_path)
            break
    else:
        raise Exception("could not find sibling image for " + src_path)

    # make sure that dimensions are correct
    height, width, _ = src.shape
    if height != sibling.shape[0] or width != sibling.shape[1]:
        raise Exception("differing sizes")
    
    # convert both images to RGB if necessary
    if src.shape[2] == 1:
        src = im.grayscale_to_rgb(images=src)

    if sibling.shape[2] == 1:
        sibling = im.grayscale_to_rgb(images=sibling)

    # remove alpha channel
    if src.shape[2] == 4:
        src = src[:,:,:3]
    
    if sibling.shape[2] == 4:
        sibling = sibling[:,:,:3]

    return np.concatenate([src, sibling], axis=1)

(3)分割數據集,把數據集分割為訓練集和驗證集

總結

以上是生活随笔為你收集整理的pix是什么意思(pixio)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。