Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleGAN
提交
e8f33934
P
PaddleGAN
项目概览
PaddlePaddle
/
PaddleGAN
大约 1 年 前同步成功
通知
97
Star
7254
Fork
1210
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleGAN
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e8f33934
编写于
10月 12, 2020
作者:
L
LielinJiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rm some noused codes
上级
1744b3a6
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
0 addition
and
416 deletion
+0
-416
applications/DAIN/my_args.py
applications/DAIN/my_args.py
+0
-92
applications/DAIN/predict.py
applications/DAIN/predict.py
+0
-278
applications/DAIN/util.py
applications/DAIN/util.py
+0
-46
未找到文件。
applications/DAIN/my_args.py
已删除
100644 → 0
浏览文件 @
1744b3a6
import
os
import
datetime
import
argparse
import
numpy
import
networks
modelnames
=
networks
.
__all__
# import datasets
datasetNames
=
(
'Vimeo_90K_interp'
)
#datasets.__all__
parser
=
argparse
.
ArgumentParser
(
description
=
'DAIN'
)
parser
.
add_argument
(
'--debug'
,
action
=
'store_true'
,
help
=
'Enable debug mode'
)
parser
.
add_argument
(
'--netName'
,
type
=
str
,
default
=
'DAIN'
,
choices
=
modelnames
,
help
=
'model architecture: '
+
' | '
.
join
(
modelnames
)
+
' (default: DAIN)'
)
parser
.
add_argument
(
'--datasetName'
,
default
=
'Vimeo_90K_interp'
,
choices
=
datasetNames
,
nargs
=
'+'
,
help
=
'dataset type : '
+
' | '
.
join
(
datasetNames
)
+
' (default: Vimeo_90K_interp)'
)
parser
.
add_argument
(
'--video_path'
,
default
=
''
,
help
=
'the path of selected videos'
)
parser
.
add_argument
(
'--output_path'
,
default
=
''
,
help
=
'the output root path'
)
parser
.
add_argument
(
'--seed'
,
type
=
int
,
default
=
1
,
help
=
'random seed (default: 1)'
)
parser
.
add_argument
(
'--batch_size'
,
'-b'
,
type
=
int
,
default
=
1
,
help
=
'batch size (default:1)'
)
parser
.
add_argument
(
'--channels'
,
'-c'
,
type
=
int
,
default
=
3
,
choices
=
[
1
,
3
],
help
=
'channels of images (default:3)'
)
parser
.
add_argument
(
'--filter_size'
,
'-f'
,
type
=
int
,
default
=
4
,
help
=
'the size of filters used (default: 4)'
,
choices
=
[
2
,
4
,
6
,
5
,
51
])
parser
.
add_argument
(
'--time_step'
,
type
=
float
,
default
=
0.5
,
help
=
'choose the time steps'
)
parser
.
add_argument
(
'--alpha'
,
type
=
float
,
nargs
=
'+'
,
default
=
[
0.0
,
1.0
],
help
=
'the ration of loss for interpolated and rectified result (default: [0.0, 1.0])'
)
parser
.
add_argument
(
'--frame_rate'
,
type
=
int
,
default
=
None
,
help
=
'frame rate of the input video'
)
parser
.
add_argument
(
'--patience'
,
type
=
int
,
default
=
5
,
help
=
'the patience of reduce on plateou'
)
parser
.
add_argument
(
'--factor'
,
type
=
float
,
default
=
0.2
,
help
=
'the factor of reduce on plateou'
)
parser
.
add_argument
(
'--saved_model'
,
type
=
str
,
default
=
''
,
help
=
'path to the model weights'
)
parser
.
add_argument
(
'--no-date'
,
action
=
'store_true'
,
help
=
'don
\'
t append date timestamp to folder'
)
parser
.
add_argument
(
'--use_cuda'
,
default
=
True
,
type
=
bool
,
help
=
'use cuda or not'
)
parser
.
add_argument
(
'--use_cudnn'
,
default
=
1
,
type
=
int
,
help
=
'use cudnn or not'
)
applications/DAIN/predict.py
已删除
100644 → 0
浏览文件 @
1744b3a6
import
os
import
sys
cur_path
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
sys
.
path
.
append
(
cur_path
)
import
time
import
glob
import
numpy
as
np
from
imageio
import
imread
,
imsave
from
tqdm
import
tqdm
import
cv2
import
paddle.fluid
as
fluid
from
paddle.utils.download
import
get_path_from_url
from
ppgan.utils.video
import
video2frames
,
frames2video
from
util
import
*
from
my_args
import
parser
DAIN_WEIGHT_URL
=
'https://paddlegan.bj.bcebos.com/applications/DAIN_weight.tar'
def
infer_engine
(
model_dir
,
run_mode
=
'fluid'
,
batch_size
=
1
,
use_gpu
=
False
,
min_subgraph_size
=
3
):
if
not
use_gpu
and
not
run_mode
==
'fluid'
:
raise
ValueError
(
"Predict by TensorRT mode: {}, expect use_gpu==True, but use_gpu == {}"
.
format
(
run_mode
,
use_gpu
))
precision_map
=
{
'trt_fp32'
:
fluid
.
core
.
AnalysisConfig
.
Precision
.
Float32
,
'trt_fp16'
:
fluid
.
core
.
AnalysisConfig
.
Precision
.
Half
}
config
=
fluid
.
core
.
AnalysisConfig
(
os
.
path
.
join
(
model_dir
,
'model'
),
os
.
path
.
join
(
model_dir
,
'params'
))
if
use_gpu
:
# initial GPU memory(M), device ID
config
.
enable_use_gpu
(
100
,
0
)
# optimize graph and fuse op
config
.
switch_ir_optim
(
True
)
else
:
config
.
disable_gpu
()
if
run_mode
in
precision_map
.
keys
():
config
.
enable_tensorrt_engine
(
workspace_size
=
1
<<
10
,
max_batch_size
=
batch_size
,
min_subgraph_size
=
min_subgraph_size
,
precision_mode
=
precision_map
[
run_mode
],
use_static
=
False
,
use_calib_mode
=
False
)
# disable print log when predict
config
.
disable_glog_info
()
# enable shared memory
config
.
enable_memory_optim
()
# disable feed, fetch OP, needed by zero_copy_run
config
.
switch_use_feed_fetch_ops
(
False
)
predictor
=
fluid
.
core
.
create_paddle_predictor
(
config
)
return
predictor
def
executor
(
model_dir
,
use_gpu
=
False
):
place
=
fluid
.
CUDAPlace
(
0
)
if
use_gpu
else
fluid
.
CPUPlace
()
exe
=
fluid
.
Executor
(
place
)
program
,
feed_names
,
fetch_targets
=
fluid
.
io
.
load_inference_model
(
dirname
=
model_dir
,
executor
=
exe
,
model_filename
=
'model'
,
params_filename
=
'params'
)
return
exe
,
program
,
fetch_targets
class
VideoFrameInterp
(
object
):
def
__init__
(
self
,
time_step
,
model_path
,
video_path
,
use_gpu
=
True
,
key_frame_thread
=
0.
,
output_path
=
'output'
):
self
.
video_path
=
video_path
self
.
output_path
=
os
.
path
.
join
(
output_path
,
'DAIN'
)
if
model_path
is
None
:
model_path
=
get_path_from_url
(
DAIN_WEIGHT_URL
,
cur_path
)
self
.
model_path
=
model_path
self
.
time_step
=
time_step
self
.
key_frame_thread
=
key_frame_thread
self
.
exe
,
self
.
program
,
self
.
fetch_targets
=
executor
(
model_path
,
use_gpu
=
use_gpu
)
def
run
(
self
):
frame_path_input
=
os
.
path
.
join
(
self
.
output_path
,
'frames-input'
)
frame_path_interpolated
=
os
.
path
.
join
(
self
.
output_path
,
'frames-interpolated'
)
frame_path_combined
=
os
.
path
.
join
(
self
.
output_path
,
'frames-combined'
)
video_path_output
=
os
.
path
.
join
(
self
.
output_path
,
'videos-output'
)
if
not
os
.
path
.
exists
(
self
.
output_path
):
os
.
makedirs
(
self
.
output_path
)
if
not
os
.
path
.
exists
(
frame_path_input
):
os
.
makedirs
(
frame_path_input
)
if
not
os
.
path
.
exists
(
frame_path_interpolated
):
os
.
makedirs
(
frame_path_interpolated
)
if
not
os
.
path
.
exists
(
frame_path_combined
):
os
.
makedirs
(
frame_path_combined
)
if
not
os
.
path
.
exists
(
video_path_output
):
os
.
makedirs
(
video_path_output
)
timestep
=
self
.
time_step
num_frames
=
int
(
1.0
/
timestep
)
-
1
if
self
.
video_path
.
endswith
(
'.mp4'
):
videos
=
[
self
.
video_path
]
else
:
videos
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
self
.
video_path
,
'*.mp4'
)))
for
cnt
,
vid
in
enumerate
(
videos
):
print
(
"Interpolating video:"
,
vid
)
cap
=
cv2
.
VideoCapture
(
vid
)
fps
=
cap
.
get
(
cv2
.
CAP_PROP_FPS
)
print
(
"Old fps (frame rate): "
,
fps
)
times_interp
=
int
(
1.0
/
timestep
)
r2
=
str
(
int
(
fps
)
*
times_interp
)
print
(
"New fps (frame rate): "
,
r2
)
out_path
=
video2frames
(
vid
,
frame_path_input
)
vidname
=
vid
.
split
(
'/'
)[
-
1
].
split
(
'.'
)[
0
]
tot_timer
=
AverageMeter
()
proc_timer
=
AverageMeter
()
end
=
time
.
time
()
frames
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
out_path
,
'*.png'
)))
img
=
imread
(
frames
[
0
])
int_width
=
img
.
shape
[
1
]
int_height
=
img
.
shape
[
0
]
channel
=
img
.
shape
[
2
]
if
not
channel
==
3
:
continue
if
int_width
!=
((
int_width
>>
7
)
<<
7
):
int_width_pad
=
(
((
int_width
>>
7
)
+
1
)
<<
7
)
# more than necessary
padding_left
=
int
((
int_width_pad
-
int_width
)
/
2
)
padding_right
=
int_width_pad
-
int_width
-
padding_left
else
:
int_width_pad
=
int_width
padding_left
=
32
padding_right
=
32
if
int_height
!=
((
int_height
>>
7
)
<<
7
):
int_height_pad
=
(
((
int_height
>>
7
)
+
1
)
<<
7
)
# more than necessary
padding_top
=
int
((
int_height_pad
-
int_height
)
/
2
)
padding_bottom
=
int_height_pad
-
int_height
-
padding_top
else
:
int_height_pad
=
int_height
padding_top
=
32
padding_bottom
=
32
frame_num
=
len
(
frames
)
print
(
'processing {} frames, from video: {}'
.
format
(
frame_num
,
vid
))
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
frame_path_interpolated
,
vidname
)):
os
.
makedirs
(
os
.
path
.
join
(
frame_path_interpolated
,
vidname
))
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
frame_path_combined
,
vidname
)):
os
.
makedirs
(
os
.
path
.
join
(
frame_path_combined
,
vidname
))
for
i
in
tqdm
(
range
(
frame_num
-
1
)):
first
=
frames
[
i
]
second
=
frames
[
i
+
1
]
img_first
=
imread
(
first
)
img_second
=
imread
(
second
)
'''--------------Frame change test------------------------'''
img_first_gray
=
np
.
dot
(
img_first
[...,
:
3
],
[
0.299
,
0.587
,
0.114
])
img_second_gray
=
np
.
dot
(
img_second
[...,
:
3
],
[
0.299
,
0.587
,
0.114
])
img_first_gray
=
img_first_gray
.
flatten
(
order
=
'C'
)
img_second_gray
=
img_second_gray
.
flatten
(
order
=
'C'
)
corr
=
np
.
corrcoef
(
img_first_gray
,
img_second_gray
)[
0
,
1
]
key_frame
=
False
if
corr
<
self
.
key_frame_thread
:
key_frame
=
True
'''-------------------------------------------------------'''
X0
=
img_first
.
astype
(
'float32'
).
transpose
((
2
,
0
,
1
))
/
255
X1
=
img_second
.
astype
(
'float32'
).
transpose
((
2
,
0
,
1
))
/
255
if
key_frame
:
y_
=
[
np
.
transpose
(
255.0
*
X0
.
clip
(
0
,
1.0
),
(
1
,
2
,
0
))
for
i
in
range
(
num_frames
)
]
else
:
assert
(
X0
.
shape
[
1
]
==
X1
.
shape
[
1
])
assert
(
X0
.
shape
[
2
]
==
X1
.
shape
[
2
])
X0
=
np
.
pad
(
X0
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X1
=
np
.
pad
(
X1
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X
=
np
.
concatenate
((
X0
,
X1
),
axis
=
0
)
proc_end
=
time
.
time
()
o
=
self
.
exe
.
run
(
self
.
program
,
fetch_list
=
self
.
fetch_targets
,
feed
=
{
"image"
:
X
})
y_
=
o
[
0
]
proc_timer
.
update
(
time
.
time
()
-
proc_end
)
tot_timer
.
update
(
time
.
time
()
-
end
)
end
=
time
.
time
()
y_
=
[
np
.
transpose
(
255.0
*
item
.
clip
(
0
,
1.0
)[
0
,
:,
padding_top
:
padding_top
+
int_height
,
padding_left
:
padding_left
+
int_width
],
(
1
,
2
,
0
))
for
item
in
y_
]
time_offsets
=
[
kk
*
timestep
for
kk
in
range
(
1
,
1
+
num_frames
,
1
)
]
count
=
1
for
item
,
time_offset
in
zip
(
y_
,
time_offsets
):
out_dir
=
os
.
path
.
join
(
frame_path_interpolated
,
vidname
,
"{:0>6d}_{:0>4d}.png"
.
format
(
i
,
count
))
count
=
count
+
1
imsave
(
out_dir
,
np
.
round
(
item
).
astype
(
np
.
uint8
))
num_frames
=
int
(
1.0
/
timestep
)
-
1
input_dir
=
os
.
path
.
join
(
frame_path_input
,
vidname
)
interpolated_dir
=
os
.
path
.
join
(
frame_path_interpolated
,
vidname
)
combined_dir
=
os
.
path
.
join
(
frame_path_combined
,
vidname
)
combine_frames
(
input_dir
,
interpolated_dir
,
combined_dir
,
num_frames
)
frame_pattern_combined
=
os
.
path
.
join
(
frame_path_combined
,
vidname
,
'%08d.png'
)
video_pattern_output
=
os
.
path
.
join
(
video_path_output
,
vidname
+
'.mp4'
)
if
os
.
path
.
exists
(
video_pattern_output
):
os
.
remove
(
video_pattern_output
)
frames2video
(
frame_pattern_combined
,
video_pattern_output
,
r2
)
return
frame_pattern_combined
,
video_pattern_output
if
__name__
==
'__main__'
:
args
=
parser
.
parse_args
()
predictor
=
VideoFrameInterp
(
args
.
time_step
,
args
.
saved_model
,
args
.
video_path
,
args
.
output_path
)
predictor
.
run
()
applications/DAIN/util.py
已删除
100644 → 0
浏览文件 @
1744b3a6
import
os
,
sys
import
glob
import
shutil
class
AverageMeter
(
object
):
"""Computes and stores the average and current value"""
def
__init__
(
self
):
self
.
reset
()
def
reset
(
self
):
self
.
val
=
0
self
.
avg
=
0
self
.
sum
=
0
self
.
count
=
0
def
update
(
self
,
val
,
n
=
1
):
self
.
val
=
val
self
.
sum
+=
val
*
n
self
.
count
+=
n
self
.
avg
=
self
.
sum
/
self
.
count
def
combine_frames
(
input
,
interpolated
,
combined
,
num_frames
):
frames1
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
input
,
'*.png'
)))
frames2
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
interpolated
,
'*.png'
)))
num1
=
len
(
frames1
)
num2
=
len
(
frames2
)
# assert (num1 - 1) * num_frames == num2
for
i
in
range
(
num1
):
src
=
frames1
[
i
]
imgname
=
int
(
src
.
split
(
'/'
)[
-
1
].
split
(
'.'
)[
-
2
])
assert
i
==
imgname
dst
=
os
.
path
.
join
(
combined
,
'{:08d}.png'
.
format
(
i
*
(
num_frames
+
1
)))
shutil
.
copy2
(
src
,
dst
)
if
i
<
num1
-
1
:
try
:
for
k
in
range
(
num_frames
):
src
=
frames2
[
i
*
num_frames
+
k
]
dst
=
os
.
path
.
join
(
combined
,
'{:08d}.png'
.
format
(
i
*
(
num_frames
+
1
)
+
k
+
1
))
shutil
.
copy2
(
src
,
dst
)
except
Exception
as
e
:
print
(
e
)
print
(
len
(
frames2
),
num_frames
,
i
,
k
,
i
*
num_frames
+
k
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录