Commit 8ddfb00b authored by Evgeny Belyaev's avatar Evgeny Belyaev

обновил задание и модель

parent 2bc42a7d
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.10" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/cnnimagequalityenhancement.iml" filepath="$PROJECT_DIR$/.idea/cnnimagequalityenhancement.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="69b68ebe-acf9-4b4a-b39a-652cf5e07f42" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.gitignore" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/cnnimagequalityenhancement.iml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/QECNNYUV.py" beforeDir="false" afterPath="$PROJECT_DIR$/QECNNYUV.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/enhancer.weights.h5" beforeDir="false" afterPath="$PROJECT_DIR$/enhancer.weights.h5" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 3
}</component>
<component name="ProjectId" id="2nn3qSxVcbiS8hEBJ1pE6lgUbnV" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;master&quot;
}
}</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-python-sdk-babbdf50b680-746f403e7f0c-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-241.15989.155" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="69b68ebe-acf9-4b4a-b39a-652cf5e07f42" name="Changes" comment="" />
<created>1729595203374</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1729595203374</updated>
</task>
<servers />
</component>
</project>
\ No newline at end of file
......@@ -10,6 +10,7 @@ from tensorflow.keras.layers import GlobalMaxPooling2D, MaxPooling2D, AveragePoo
from tensorflow.keras import models, layers
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam, SGD, AdamW
from tensorflow.keras.callbacks import ModelCheckpoint
#Frame size of training data
w=480
......@@ -194,19 +195,55 @@ def TrainImageEnhancementModel (folderRaw,folderComp,folderRawVal,folderCompVal)
XrawVal = XrawVal / 255.0
XcompVal = XcompVal / 255.0
enhancer = EnhancerModel (patchsize,patchsize)
learning_rate_schedule = tensorflow.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.001,
decay_steps=300,
decay_rate=0.96)
optimizer=tensorflow.keras.optimizers.Adam(learning_rate=learning_rate_schedule)
enhancer.compile(loss='mean_squared_error',optimizer='Adam',metrics=[psnr])
#learning_rate_schedule = tensorflow.keras.optimizers.schedules.ExponentialDecay(
# initial_learning_rate=0.001,
# decay_steps=300,
# decay_rate=0.96)
#optimizer=tensorflow.keras.optimizers.Adam(learning_rate=learning_rate_schedule)
optimizer = tensorflow.keras.optimizers.Adam()
print(optimizer.get_config())
#{'name': 'adam', 'learning_rate': 0.0010000000474974513, 'weight_decay': None, 'clipnorm': None,
# 'global_clipnorm': None, 'clipvalue': None, 'use_ema': False, 'ema_momentum': 0.99,
# 'ema_overwrite_frequency': None, 'loss_scale_factor': None, 'gradient_accumulation_steps': None, 'beta_1': 0.9,
# 'beta_2': 0.999, 'epsilon': 1e-07, 'amsgrad': False}
optimizer = tensorflow.keras.optimizers.Adam(
learning_rate=0.0001,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
weight_decay=None,
clipnorm=None,
global_clipnorm=None,
clipvalue=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
loss_scale_factor=None,
gradient_accumulation_steps=None,
amsgrad=False)
print(optimizer.get_config())
enhancer.compile(loss='mean_squared_error',optimizer=optimizer,metrics=[psnr])
#enhancer.compile(loss='mean_squared_error', optimizer=optimizer, metrics=[psnr])
NumEpochs=50
# Путь для сохранения модели
checkpoint_filepath = 'best_model.weights.h5'
# Определяем колбэк для сохранения наилучшей модели
checkpoint_callback = ModelCheckpoint(
filepath=checkpoint_filepath, # куда сохраняем веса
monitor='val_loss', # метрика для отслеживания
save_best_only=True, # сохраняем только наилучшие веса
save_weights_only=True, # сохраняем только веса (не архитектуру)
mode='min', # минимизируем значение метрики
verbose=1 # вывод информации в процессе обучения
)
NumEpochs=200
#enhancer.load_weights('enhancer.weights.h5')
#with tensorflow.device('gpu'):
with tensorflow.device('cpu'):
hist = enhancer.fit(Xcomp, Xraw, epochs=NumEpochs, batch_size=128, verbose=1,validation_data=(XcompVal, XrawVal))
hist = enhancer.fit(Xcomp, Xraw, epochs=NumEpochs, batch_size=128, verbose=1,
validation_data=(XcompVal, XrawVal),callbacks=[checkpoint_callback])
enhancer.save_weights('enhancer.weights.h5')
return enhancer
......@@ -351,11 +388,11 @@ def ShowFramePSNRPerformance (folderyuv,foldercomp,VideoIndex,framesmax,fw,fh):
TrainMode = 1
TrainMode = 0
PrepareDataSetFromYUV=1
if TrainMode==1:
if PrepareDataSetFromYUV==1:
if PrepareDataSetFromYUV==0:
FromFolderYuvToFolderPNG (testfolderRawYuv,testfolderRawPng,w,h)
FromFolderYuvToFolderPNG (testfolderCompYuv,testfolderCompPng,w,h)
FromFolderYuvToFolderPNG (trainfolderRawYuv,trainfolderRawPng,w,h)
......
......@@ -6,13 +6,14 @@
помещены в файлы BSD500train.yuv и BSD500test.yuv, соответственно.
## Модель
Модель нейронной сети заимствована из работы [2].
Модель нейронной сети заимствована из работы [2]. Эффективность работы текущей версии модели можно представить в виде графика ниже:
![PSNR до и после улучшения для первых 20 изображений](./doc/Figure_1.png)
Код протестирован на OC Windows 10 и Ubuntu 24.
## Описание задания к лабораторной работе
Улучшить QECNN модель так, чтобы модифицированная версия:
- выиграла на 100 изображениях из файла BSD500test.yuv в среднем 0.1 дБ и более по метрике PSNR;
- выиграла на 100 изображениях из файла BSD500test.yuv в среднем 0.2 дБ и более по метрике PSNR;
Требования к реализации и результаты:
- При обучении должны использоваться только изображения из папки файла BSD500train.yuv
......
No preview for this file type
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment