亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為CNN編寫訓練模型

為CNN編寫訓練模型

HUWWW 2021-11-09 15:02:22
我正在為TwoStream-IQA編寫訓練代碼,它是一個雙流卷積神經網絡。該模型通過網絡的兩個流預測正在評估的補丁的質量分數。在下面的培訓中,我使用了上面 GitHub 鏈接中提供的測試數據集。訓練代碼如下:import osimport timeimport numpy as npimport argparseimport chainerchainer.global_config.train=Truefrom chainer import cudafrom chainer import serializersfrom chainer import optimizersfrom chainer import iteratorsfrom chainer import training from chainer.training import extensionsfrom PIL import Imagefrom sklearn.feature_extraction.image import extract_patchesfrom model import Modelparser = argparse.ArgumentParser(description='train.py')parser.add_argument('--model', '-m', default='',                     help='path to the trained model')parser.add_argument('--gpu', '-g', default=0, type=int, help='GPU ID')args = parser.parse_args()model = Model()cuda.cudnn_enabled = Truecuda.check_cuda_available()xp = cuda.cupymodel.to_gpu()## prepare training data test_label_path = 'data_list/test.txt'test_img_path = 'data/live/'test_Graimg_path = 'data/live_grad/'save_model_path = '/models/nr_sana_2stream.model'patches_per_img = 256patchSize = 32print('-------------Load data-------------')final_train_set = []with open(test_label_path, 'rt') as f:    for l in f:        line, la = l.strip().split()  # for debug        tic = time.time()        full_path = os.path.join(test_img_path, line)        Grafull_path = os.path.join(test_Graimg_path, line)        inputImage = Image.open(full_path)        Graf = Image.open(Grafull_path)        img = np.asarray(inputImage, dtype=np.float32)        Gra = np.asarray(Graf, dtype=np.float32)        img = img.transpose(2, 0, 1)        Gra = Gra.transpose(2, 0, 1)        img1 = np.zeros((1, 3, Gra.shape[1], Gra.shape[2]))        img1[0, :, :, :] = img        Gra1 = np.zeros((1, 3, Gra.shape[1], Gra.shape[2]))        Gra1[0, :, :, :] = Gra
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

簡而言之,您不恰當地調用numpy.asarray:numpy.asarray不連接兩個cupy.ndarrays,而連接兩個numpy.ndarrays。


您的代碼簡介:


import numpy, cupy


final_train_set = []


N_PATCH_PER_IMAGE = 8


for i in range(10):

    label = 0


    temp_slice_1 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]

    temp_slice_2 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]


    for j in range(N_PATCH_PER_IMAGE):

        temp_slice_1[j] = cupy.array(temp_slice_1[j])

        temp_slice_2[j] = cupy.array(temp_slice_2[j])

        final_train_set.append(

            [

                # attempting to concatenate two cupy arrays by numpy.asarray 

                numpy.asarray([temp_slice_1[j], temp_slice_2[j]]),

                label

            ]

        )

錯誤


import numpy as np

import cupy as cp


print("two numpy arrays")

print(np.asarray([np.zeros(shape=(1,)), np.zeros(shape=(1,))]))

print(np.asarray([np.zeros(shape=(1,)), np.zeros(shape=(1,))]).dtype)


print()


print("two cupy arrays")

print(np.asarray([cp.zeros(shape=(1,)), cp.zeros(shape=(1,))]))

print(np.asarray([cp.zeros(shape=(1,)), cp.zeros(shape=(1,))]).dtype)

two numpy arrays

[[0.]

 [0.]]

float64


two cupy arrays

[[array(0.)]

 [array(0.)]]

object

解決方法:注釋掉兩行


import numpy  # not import cupy here


for i in range(10):

    label = 0


    temp_slice_1 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]

    temp_slice_2 = [numpy.zeros((3, 3)) for j in range(N_PATCH_PER_IMAGE)]


    for j in range(N_PATCH_PER_IMAGE):

        # temp_slice_1[j] = cupy.array(temp_slice_1[j]) <- comment out!

        # temp_slice_2[j] = cupy.array(temp_slice_2[j]) <- comment out!

        final_train_set.append(

            [

                # concatenate two numpy arrays: usually cupy should not be used in dataset

                numpy.asarray([temp_slice_1[j], temp_slice_2[j]]),

                label

            ]

        )

腳注

  1. 在您提供的代碼中,xp未指定,因此您無法從任何人那里得到答案。如果您無法分離問題,請發布您的代碼的整體,包括模型。

  2. 我猜您可能由于其他原因無法運行訓練代碼。在這段代碼中,數據首先在final_train_set. 但是如果圖像數量很大,主內存就會耗盡并被MemoryError抬高。(換句話說,如果圖像數量很少,并且您的內存足夠大,則不會發生錯誤)在這種情況下,以下參考資料(Chainer at glassDataset Abstraction)會有所幫助。


查看完整回答
反對 回復 2021-11-09
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

我使用 OpenCV、Scipy 和其他一些用于質量評估的模塊找到了這個Github 存儲庫。這是代碼:


# Python code for BRISQUE model

# Original paper title: No-Reference Image Quality Assessment in the Spatial Domain

# Link: http://ieeexplore.ieee.org/document/6272356/

import cv2

import numpy as np

from scipy import ndimage

import math


def get_gaussian_filter():

    [m,n] = [(ss - 1.0) / 2.0 for ss in (shape,shape)]

    [y,x] = np.ogrid[-m:m+1,-n:n+1]

    window = np.exp( -(x*x + y*y) / (2.0*sigma*sigma) )

    window[window < np.finfo(window.dtype).eps*window.max() ] = 0

    sum_window = window.sum()

    if sum_window != 0:

        window = np.divide(window, sum_window)

    return window


def lmom(X):

    (rows, cols)  = X.shape

    if cols == 1:

        X = X.reshape(1,rows)

    n = rows

    X.sort()    

    b = np.zeros(3)    

    b0 = X.mean()    

    for r in range(1,4):        

        Num = np.prod(np.tile(np.arange(r+1,n+1), (r,1))-np.tile(np.arange(1,r+1).reshape(r,1),(1,n-r)),0)        

        Num = Num.astype(np.float)                

        Den = np.prod(np.tile(n, (1, r)) - np.arange(1,r+1), 1)        

        b[r-1] = 1.0/n * sum(Num/Den * X[0,r:])

    L = np.zeros(4)

    L[0] = b0

    L[1] = 2*b[0] - b0

    L[2] = 6*b[1] - 6*b[0] + b0

    L[3] = 20*b[2] - 30*b[1] + 12*b[0] - b0

    return L


def compute_features(im):

    im = im.astype(np.float)

    window = get_gaussian_filter()

    scalenum = 2

    feat = []

    for itr_scale in range(scalenum):

        mu = cv2.filter2D(im, cv2.CV_64F, window, borderType=cv2.BORDER_CONSTANT)

        mu_sq = mu * mu

        sigma = np.sqrt(abs(cv2.filter2D(im*im, cv2.CV_64F, window, borderType=cv2.BORDER_CONSTANT) - mu_sq))        

        structdis = (im-mu)/(sigma+1)

        structdis_col_vector = np.reshape(structdis.transpose(), (structdis.size,1))

        L = lmom(structdis.reshape(structdis.size,1))

        feat = np.append(feat,[L[1], L[3]])

        shifts = [[0,1], [1,0], [1,1], [-1,1]]

        for itr_shift in shifts:

            shifted_structdis = np.roll(structdis, itr_shift[0], axis=0)

            shifted_structdis = np.roll(shifted_structdis, itr_shift[1], axis=1)


            shifted_structdis_col_vector = np.reshape(shifted_structdis.T, (shifted_structdis.size,1))

            pair = structdis_col_vector * shifted_structdis_col_vector

            L = lmom(pair.reshape(pair.size,1))

            feat = np.append(feat, L)

        im = cv2.resize(im, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

    return feat



im = ndimage.imread('example.bmp', flatten=True)

feat = compute_features(im)

print feat



查看完整回答
反對 回復 2021-11-09
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號