Environment setup 环境部分
Python 3.7
Pytorch 1.4.0
opencv-python 3.4.2
NVIDIA GPU + CUDA
numpy, argparse
配置基本环境:
conda create -n evdi python=3.7
conda activate evdi
git clone git@github.com:XiangZ-0/EVDI.git
cd EVDI
pip install -r requirements.txt
cd codes
测试部分(运用给的数据集和模型测试):
Test on GoPro data
python Test.py --test_ts=0.5 --model_path=./PreTrained/EVDI-GoPro.pth --test_path=./Database/GoPro/ --save_path=./Result/EVDI-GoPro/
Test on HQF data
python Test.py --test_ts=0.5 --model_path=./PreTrained/EVDI-HQF.pth --test_path=./Database/HQF/ --save_path=./Result/EVDI-HQF/
Test on RBE data
python Test.py --test_ts=0.5 --model_path=./PreTrained/EVDI-RBE.pth --test_path=./Database/RBE/ --save_path=./Result/EVDI-RBE/
Main Parameters:
--test_ts : reconstruction timestamp, normalized in [0,1].
--model_path : path of pretrained model.
--test_path : path of test dataset.
--save_path : path of reconstruction results.
Train(训练自己的数据集):
数据集结构
<project root>
|-- Database
| |-- Raw
| | |-- Events.txt
| | |-- Exposure_start.txt
| | |-- Exposure_end.txt
| | |-- Blur
| | | |-- 000000.png
| | | |-- 000001.png
| | | |-- ...
其中
Events.txt contains event data in (t,x,y,p) format with t in ns and p in {-1, 1}.
Exposure_start.txt contains the start timestamp of each blurry image in ns.
Exposure_end.txt contains the end timestamp of each blurry image in ns.
数据准备部分(数据一定要是统一大小的,而且记得更改代码中对应的两处数据集大小的位置):
python Prepare_data.py --input_path=./Database/Raw/ --save_path=./Database/train/
训练
python Train.py
Main Parameters:
--model_path : model save path.
--train_path : path of train datasets.
--num_epoch : number of epoch.
--loss_wei : weights for loss functions [blur-sharp, blur-event, sharp-event].
--num_frames : the number of reconstructions per input, i.e., 'N' in paper (recommended N>= 25).
--bs : batch size.
--lr : initial learning rate.
遇到问题:
1、用自己的数据集制作成需要的形式,但是有assert的错误,之前找不到原因就直接注释掉了,结果训练的时候一直warning,报错,生成的唯一一个模型跑出来图像是全黑的,然后发现5组数据中,有一组数据跟其他的大小不一样,所以直接删掉了那组数据,然后在数据生成部分就没有问题了,训练的时候也没有问题,但是我刚开始设置学习率是1e-8,然后训练了10个epoch,结果图像是纯灰色的……
训练自己的数据集:
## parameters
parser = argparse.ArgumentParser(description="Train EVDI")
parser.add_argument("--model_path", type=str, default="./PreTrained/mine/", help="model saving path")
parser.add_argument("--temp_path", type=str, default="./TempRes/EVDI/", help="path to save temporal result")
parser.add_argument("--save_int", type=int, default=50, help="epoch interval for saving temporal reconstruction result")
parser.add_argument("--train_path", type=list, default=["E:/Packed/00001/0001/"], help="path of training datasets")
parser.add_argument("--conTrain", type=int, default=0, help="continue training (1) or not (0)")
parser.add_argument("--conTrain_path", type=str, default="./PreTrained/EVDI-GoPro.pth", help="path to load model")
parser.add_argument("--num_epoch", type=int, default=100, help="number of epoch")
parser.add_argument("--loss_wei", type=list, default=[1,256,1e-1], help="weights for loss functions: [blur-sharp, blur-event, sharp-event]")
parser.add_argument("--num_frames", type=int, default=49, help="recover how many frames per input, i.e., 'N' in paper.\
We observe that higher N leads to better performance but will need more training time (recommended N>=25). ")
parser.add_argument("--bs", type=int, default=1, help="batch size")
parser.add_argument("--lr", type=float, default=1e-3, help="learning rate")
测试:
## parameters
parser = argparse.ArgumentParser(description="Test EVDI")
parser.add_argument("--model_path", type=str, default="./PreTrained/mine/epoch_0001.pth", help="path of pretrained model")
parser.add_argument("--test_path", type=str, default=["E:/Packed/00001/0002/"], help="path of test data")
parser.add_argument("--save_path", type=str, default="./Result/mine/", help="saving path")
parser.add_argument("--test_ts", type=float, default=0.5, help="test timestamp in [0,1]")