پیوست اول
کد TensorFlow که مدل را ایجاد، آموزش و آزمایش می کند در اینجا فهرست شده است:
###################################
#### واردات کتابخانه ها #####
###################################
numpy را به عنوان np وارد کنید
وارد کردن tensorflow به عنوان tf
واردات سخت
وارد کردن cv2
از keras.models import Sequential
از tensorflow.keras.utils img_to_array را وارد می کند
از skimage.metrics structural_similarity را به عنوان ssim وارد می کند
واردات ریاضی
ما را وارد کنید
از واردات tqdm tqdm
واردات مجدد
matplotlib.pyplot را به صورت plt وارد کنید
از درایو واردات google.colab
drive.mount('/content/gdrive')
###############################
##### مدیریت فایل ها #####
###############################
def sorted_alphanumeric(data):
تبدیل = متن لامبدا: int(text) if text.isdigit() else text.lower()
alphanum_key = کلید لامبدا: [convert(c) for c in re.split(’([۰-۹]+)'،
کلید)]
برگرداندن مرتب شده (داده، کلید = کلید_الفانی)
# تعیین اندازه تصویر
سایز = ۲۵۶
height_img = []
#os.makedirs('gdrive/MyDrive/TMU/Neural_Networks/Project/kaggle/
داده خام/high_res'، exist_ok=True)
path = 'gdrive/MyDrive/TMU/Neural_Networks/Project/kaggle/
داده های خام/با وضوح بالا
files = os.listdir (مسیر)
فایل ها = sorted_alphanumeric (فایل ها)
برای i در فایل های tqdm:
if i == '855.jpg':
زنگ تفریح
در غیر این صورت:
img = cv2.imread(مسیر + '/'+i,1)
# open cv تصاویر را با فرمت BGR می خواند بنابراین باید آن را به آن تبدیل کنیم
RGB
img = cv2.cvtColor(img، cv2.COLOR_BGR2RGB)
#تغییر اندازه تصویر
img = cv2.resize(img، (SIZE، SIZE))
img = img.atype('float32') / 255.0
high_img.append(img_to_array(img))
low_img = []
path = 'gdrive/MyDrive/TMU/Neural_Networks/Project/kaggle/Raw Data/low_res'
files = os.listdir (مسیر)
فایل ها = sorted_alphanumeric (فایل ها)
برای i در فایل های tqdm:
if i == '855.jpg':
زنگ تفریح
در غیر این صورت:
img = cv2.imread(مسیر + '/'+i,1)
#تغییر اندازه تصویر
img = cv2.resize(img، (SIZE، SIZE))
img = img.atype('float32') / 255.0
low_img.append(img_to_array(img))
#################################
##### تجسم داده ها #####
#################################
برای i در محدوده (۴):
a = np.random.randint(0,855)
plt.figure(figsize=(10,10))
plt.subplot(1،۲،۱)
plt.title('تصویر با وضوح بالا'، رنگ = 'سبز'، فونت = ۲۰)
plt.imshow(high_img[a])
plt.axis ('خاموش')
plt.subplot(1،۲،۲)
plt.title('تصویر با وضوح پایین'، رنگ = 'سیاه'، اندازه قلم = ۲۰)
plt.imshow(low_img[a])
plt.axis ('خاموش')
###############################
##### تغییر شکل داده ها #####
###############################
train_high_image = high_img[:700]
train_low_image = low_img[:700]
train_high_image = np.reshape(train_high_image,
len(train_high_image),SIZE,SIZE,3))
train_low_image = np.reshape(train_low_image,(len(train_low_image),
SIZE, SIZE, 3))
validation_high_image = high_img[700:830]
validation_low_image = low_img[700:830]
validation_high_image = np.reshape(validation_high_image,
(لنز(تصویر_بالا_تأیید)،SIZE،SIZE،۳))
validation_low_image = np.reshape(validation_low_image,
(len(validation_low_image),SIZE,SIZE,3))
test_high_image = high_img[830:]
test_low_image = low_img[830:]
test_high_image= np.reshape(test_high_image,(len(test_high_image),
SIZE, SIZE, 3))
test_low_image = np.reshape(test_low_image,(len(test_low_image),
SIZE, SIZE, 3))
print("شکل تصاویر آموزشی:",train_high_image.shape)
print("شکل تصاویر آزمایشی:",test_high_image.shape)
print("شکل تصاویر اعتبارسنجی:",validation_high_image.shape)
##############################
##### تعریف مدل #####
##############################
از لایه های وارداتی keras
def down (فیلترها، kernel_size، application_batch_normalization = True):
downsample = tf.keras.models.Sequential()
downsample.add(layers.Conv2D(فیلترها، اندازه_kernel، padding = 'همان'،
گام = ۲))
اگر apply_batch_normalization:
downsample.add(layers.BatchNormalization())
downsample.add(keras.layers.LeakyReLU())
نمونه پایین را برگردانید
def up (فیلترها، kernel_size، dropout = False):
upsample = tf.keras.models.Sequential()
upsample.add(layers.Conv2DTranspose(فیلترها، kernel_size،
padding = 'همان'، گام = ۲))
در صورت ترک تحصیل:
upsample.dropout(0.2)
upsample.add(keras.layers.LeakyReLU())
برگرداندن نمونه
مدل def():
ورودی ها = لایه ها. ورودی(شکل= [SIZE,SIZE,3])
d1 = پایین (۱۲۸، (۳،۳)، نادرست (ورودی)
d2 = پایین (۱۲۸، (۳،۳)، نادرست (d1)
d3 = پایین (۲۵۶، (۳،۳)، نادرست (d2)
d4 = پایین (۵۱۲، (۳،۳)، نادرست (d3)
d5 = پایین (۵۱۲، (۳،۳)، نادرست (d4)
#نمونه برداری
u1 = بالا (۵۱۲، (۳،۳)، نادرست (d5)
u1 = layers.concatenate([u1,d4])
u2 = بالا (۲۵۶، (۳،۳)، نادرست (u1)
u2 = layers.concatenate([u2,d3])
u3 = بالا (۱۲۸، (۳،۳)، نادرست (u2)
u3 = layers.concatenate([u3,d2])
u4 = بالا (۱۲۸، (۳،۳)، نادرست (u3)
u4 = layers.concatenate([u4,d1])
u5 = بالا (۳، (۳،۳)، نادرست) (u4)
u5 = layers.concatenate([u5,inputs])
خروجی = لایه ها.
بازگشت tf.keras.Model(inputs=inputs,outputs=output)
model = model()
model.summary()
###############################
##### تدوین مدل #####
###############################
model.compile(بهینه ساز = tf.keras.optimizers.Adam(نرخ_آموزشی = ۰٫۰۰۱)،
ضرر = 'mean_absolute_error',
متریک = [’acc’])
##############################
##### تناسب مدل ######
##############################
model.fit(train_low_image, train_high_image, epochs = 20, batch_size = 1,
validation_data = (validation_low_image, validation_high_image))
##################################
##### ارزیابی مدل #####
#################################
def psnr(هدف، رفرنس):
target_data = target.atype(float)
ref_data = ref.atype(float)
diff = ref_data - target_data
diff = diff.flatten('C')
rmse = math.sqrt(np.mean(diff**2.))
بازگشت ۲۰ * math.log10 (255. / rmse)
def mse(هدف، اشاره):
err = np.sum((target.atype(float) - ref.atype(float))**2)
err /= float(target.shape[0] * target.shape[1])
بازگشت اشتباه
def compare_images(target, ref):
نمرات = []
scores.append(psnr(هدف، مرجع))
scores.append(mse(هدف، مرجع))
scores.append(ssim(هدف، مرجع، چند کانال=درست))
برگشت نمرات
###################################
##### تجسم پیش بینی ها #####
###################################
def plot_images (بالا، کم، پیش بینی شده):
plt.figure(figsize=(15،۱۵))
plt.subplot(1،۳،۱)
plt.title('تصویر بالا'، رنگ = 'سبز'، اندازه قلم = ۲۰)
plt.imshow (بالا)
plt.subplot(1،۳،۲)
plt.title('تصویر کم'، رنگ = 'سیاه'، اندازه قلم = ۲۰)
plt.imshow (کم)
plt.subplot(1،۳،۳)
plt.title('تصویر پیش بینی شده'، رنگ = 'قرمز'، اندازه قلم = ۲۰)
plt.imshow (پیش بینی شده)
plt.show()
نمرات = []
برای i در محدوده (۱،۱۰):
پیش بینی شده = np.clip(model.predict(test_low_image[i].reshape(
۱,SIZE,SIZE,3)),0.0,1.0).تغییر شکل (SIZE,SIZE,3)
scores.append(مقایسه_تصاویر(پیش بینی شده، test_high_image[i]))
plot_images(test_high_image[i],test_low_image[i](پیش بینی شده)
#########################################
##### ذخیره نتایج و مدل #####
#########################################
پانداها را به صورت PD وارد کنید
df = pd.DataFrame(نمرات)
df.columns = [’PSNR’, ’MSE’, ’SSIM’]
df.to_csv('3_3_11_20_0.001.csv'، index=False)
model.save("final_model.h5")
منبع: https://www.mdpi.com/2673-2688/5/1/21