Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
oneflow_yolov3
提交
67719c20
O
oneflow_yolov3
项目概览
Oneflow-Inc
/
oneflow_yolov3
9 个月 前同步成功
通知
4
Star
6
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oneflow_yolov3
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
67719c20
编写于
7月 30, 2020
作者:
F
Flowingsun007
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
del multi-processing
上级
127ed186
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
0 addition
and
481 deletion
+0
-481
oneflow_yolov3/model/data_preprocess_multiprocess.py
oneflow_yolov3/model/data_preprocess_multiprocess.py
+0
-214
oneflow_yolov3/model/python_load_data_predict_with_print_box_multiprocessing.py
...ython_load_data_predict_with_print_box_multiprocessing.py
+0
-256
yolo_predict_python_data_preprocess_multiprocess.sh
yolo_predict_python_data_preprocess_multiprocess.sh
+0
-11
未找到文件。
oneflow_yolov3/model/data_preprocess_multiprocess.py
已删除
100644 → 0
浏览文件 @
127ed186
import
time
from
multiprocessing
import
Process
,
Queue
from
multiprocessing
import
Value
,
RawArray
import
cv2
import
numpy
as
np
def
resize_image
(
img
,
origin_h
,
origin_w
,
image_height
,
image_width
):
w
=
image_width
h
=
image_height
resized
=
np
.
zeros
((
3
,
image_height
,
image_width
),
dtype
=
np
.
float32
)
part
=
np
.
zeros
((
3
,
origin_h
,
image_width
),
dtype
=
np
.
float32
)
w_scale
=
(
float
)(
origin_w
-
1
)
/
(
w
-
1
)
h_scale
=
(
float
)(
origin_h
-
1
)
/
(
h
-
1
)
for
c
in
range
(
w
):
if
c
==
w
-
1
or
origin_w
==
1
:
val
=
img
[:,
:,
origin_w
-
1
]
else
:
sx
=
c
*
w_scale
ix
=
int
(
sx
)
dx
=
sx
-
ix
val
=
(
1
-
dx
)
*
img
[:,
:,
ix
]
+
dx
*
img
[:,
:,
ix
+
1
]
part
[:,
:,
c
]
=
val
for
r
in
range
(
h
):
sy
=
r
*
h_scale
iy
=
int
(
sy
)
dy
=
sy
-
iy
val
=
(
1
-
dy
)
*
part
[:,
iy
,
:]
resized
[:,
r
,
:]
=
val
if
r
==
h
-
1
or
origin_h
==
1
:
continue
resized
[:,
r
,
:]
=
resized
[:,
r
,
:]
+
dy
*
part
[:,
iy
+
1
,
:]
return
resized
def
image_preprocess_v2
(
img_path
,
image_height
,
image_width
):
img
=
cv2
.
imread
(
img_path
,
cv2
.
IMREAD_COLOR
)
img
=
img
.
transpose
(
2
,
0
,
1
).
astype
(
np
.
float32
)
# hwc->chw
img
=
img
/
255
# /255
img
[[
0
,
1
,
2
],
:,
:]
=
img
[[
2
,
1
,
0
],
:,
:]
# bgr2rgb
w
=
image_width
h
=
image_height
origin_h
=
img
.
shape
[
1
]
origin_w
=
img
.
shape
[
2
]
new_w
=
origin_w
new_h
=
origin_h
if
w
/
origin_w
<
h
/
origin_h
:
new_w
=
w
new_h
=
origin_h
*
w
//
origin_w
else
:
new_h
=
h
new_w
=
origin_w
*
h
//
origin_h
resize_img
=
resize_image
(
img
,
origin_h
,
origin_w
,
new_h
,
new_w
)
dw
=
(
w
-
new_w
)
//
2
dh
=
(
h
-
new_h
)
//
2
padh_before
=
int
(
dh
)
padh_after
=
int
(
h
-
new_h
-
padh_before
)
padw_before
=
int
(
dw
)
padw_after
=
int
(
w
-
new_w
-
padw_before
)
result
=
np
.
pad
(
resize_img
,
pad_width
=
(
(
0
,
0
),
(
padh_before
,
padh_after
),
(
padw_before
,
padw_after
)),
mode
=
'constant'
,
constant_values
=
0.5
)
result
=
np
.
expand_dims
(
result
,
axis
=
0
)
origin_image_info
=
np
.
zeros
((
1
,
2
),
dtype
=
np
.
int32
)
origin_image_info
[
0
,
0
]
=
origin_h
origin_image_info
[
0
,
1
]
=
origin_w
return
result
.
astype
(
np
.
float32
),
origin_image_info
def
batch_image_preprocess_v2
(
img_path_list
,
image_height
,
image_width
):
result_list
=
[]
origin_info_list
=
[]
for
img_path
in
img_path_list
:
img
=
cv2
.
imread
(
img_path
,
cv2
.
IMREAD_COLOR
)
img
=
img
.
transpose
(
2
,
0
,
1
).
astype
(
np
.
float32
)
# hwc->chw
img
=
img
/
255
# /255
img
[[
0
,
1
,
2
],
:,
:]
=
img
[[
2
,
1
,
0
],
:,
:]
# bgr2rgb
w
=
image_width
h
=
image_height
origin_h
=
img
.
shape
[
1
]
origin_w
=
img
.
shape
[
2
]
new_w
=
origin_w
new_h
=
origin_h
if
w
/
origin_w
<
h
/
origin_h
:
new_w
=
w
new_h
=
origin_h
*
w
//
origin_w
else
:
new_h
=
h
new_w
=
origin_w
*
h
//
origin_h
resize_img
=
resize_image
(
img
,
origin_h
,
origin_w
,
new_h
,
new_w
)
dw
=
(
w
-
new_w
)
//
2
dh
=
(
h
-
new_h
)
//
2
padh_before
=
int
(
dh
)
padh_after
=
int
(
h
-
new_h
-
padh_before
)
padw_before
=
int
(
dw
)
padw_after
=
int
(
w
-
new_w
-
padw_before
)
result
=
np
.
pad
(
resize_img
,
pad_width
=
(
(
0
,
0
),
(
padh_before
,
padh_after
),
(
padw_before
,
padw_after
)),
mode
=
'constant'
,
constant_values
=
0.5
)
origin_image_info
=
[
origin_h
,
origin_w
]
result_list
.
append
(
result
)
origin_info_list
.
append
(
origin_image_info
)
results
=
np
.
asarray
(
result_list
).
astype
(
np
.
float32
)
origin_image_infos
=
np
.
asarray
(
origin_info_list
).
astype
(
np
.
int32
)
return
results
,
origin_image_infos
img_path_list
=
[]
image_height
=
608
image_width
=
608
batch_size
=
16
num_worker
=
4
queue_size
=
batch_size
//
num_worker
size
=
queue_size
*
3
*
image_height
*
image_width
origin_info_size
=
queue_size
*
2
def
worker
(
idx
,
flag
,
buffer
,
origin_info_buffer
,
queue
):
while
True
:
time1
=
time
.
time
()
img_path_list
=
[]
for
i
in
range
(
queue_size
):
path
=
queue
.
get
()
img_path_list
.
append
(
path
)
images
,
origin_image_info
=
batch_image_preprocess_v2
(
img_path_list
,
image_width
,
image_width
)
while
flag
.
value
!=
0
:
time
.
sleep
(
0.01
)
arr
=
np
.
ctypeslib
.
as_array
(
buffer
)
arr
[:]
=
images
.
flatten
()
origin_info_arr
=
np
.
ctypeslib
.
as_array
(
origin_info_buffer
)
origin_info_arr
[:]
=
origin_image_info
.
flatten
()
flag
.
value
=
1
#print("make data time", time.time()-time1)
def
make_work
(
idx
):
flag
=
Value
(
'i'
,
0
,
lock
=
True
)
buffer
=
RawArray
(
'f'
,
size
)
origin_info_buffer
=
RawArray
(
'i'
,
origin_info_size
)
queue
=
Queue
(
queue_size
)
proc
=
Process
(
target
=
worker
,
args
=
(
idx
,
flag
,
buffer
,
origin_info_buffer
,
queue
))
return
proc
,
flag
,
queue
,
buffer
,
origin_info_buffer
# if __name__ == '__main__':
# workers = []
# for i in range(num_worker):
# workers.append(make_work(i))
# for w in workers:
# w[0].start()
#
# ss = time.time()
#
# for it in range(1, 5):
# path=['../../data/images/00000'+str(it)+'.jpg'] * 16
# for i in range(num_worker):
# _, _, w_q, _, _ = workers[i]
# for j in range(queue_size):
# w_q.put(path[i * queue_size + j])
#
# s = time.time()
# batch_image = np.zeros((num_worker, queue_size*3*image_height*image_width))
# batch_origin_info = np.zeros((num_worker, queue_size*2))
# for i in range(num_worker):
# (proc, w_f, _, w_b, w_origin_info_b) = workers[i]
# while w_f.value == 0:
# time.sleep(0.01)
# ret = np.ctypeslib.as_array(w_b)
# batch_image[i,:] = ret
# ret_origin_info = np.ctypeslib.as_array(w_origin_info_b)
# batch_origin_info[i,:] = ret_origin_info
# w_f.value = 0
#
# e = time.time()
# print(it, e - s, e)
#
# for w in workers:
# w[0].terminate()
#
# for w in workers:
# w[0].join()
oneflow_yolov3/model/python_load_data_predict_with_print_box_multiprocessing.py
已删除
100644 → 0
浏览文件 @
127ed186
import
argparse
import
os
import
time
import
numpy
as
np
import
oneflow
as
flow
from
data_preprocess_multiprocess
import
make_work
from
yolo_net
import
YoloPredictNet
import
oneflow_yolov3
parser
=
argparse
.
ArgumentParser
(
description
=
"flags for predict"
)
parser
.
add_argument
(
"-g"
,
"--gpu_num_per_node"
,
type
=
int
,
default
=
1
,
required
=
False
)
parser
.
add_argument
(
"-load"
,
"--pretrained_model"
,
type
=
str
,
required
=
True
)
parser
.
add_argument
(
"-image_height"
,
"--image_height"
,
type
=
int
,
default
=
608
,
required
=
False
)
parser
.
add_argument
(
"-image_width"
,
"--image_width"
,
type
=
int
,
default
=
608
,
required
=
False
)
parser
.
add_argument
(
"-img_list"
,
"--image_list_path"
,
type
=
str
,
required
=
True
)
parser
.
add_argument
(
"-label_to_name_file"
,
"--label_to_name_file"
,
type
=
str
,
required
=
True
)
parser
.
add_argument
(
"-batch_size"
,
"--batch_size"
,
type
=
int
,
default
=
1
,
required
=
False
)
parser
.
add_argument
(
"-total_batch_num"
,
"--total_batch_num"
,
type
=
int
,
default
=
308
,
required
=
False
)
parser
.
add_argument
(
"-loss_print_steps"
,
"--loss_print_steps"
,
type
=
int
,
default
=
1
,
required
=
False
)
parser
.
add_argument
(
"-use_tensorrt"
,
"--use_tensorrt"
,
type
=
int
,
default
=
0
,
required
=
False
)
parser
.
add_argument
(
"-image_path_list"
,
"--image_path_list"
,
type
=
str
,
nargs
=
'+'
,
required
=
True
)
args
=
parser
.
parse_args
()
assert
os
.
path
.
exists
(
args
.
pretrained_model
)
assert
os
.
path
.
exists
(
args
.
image_path_list
[
0
])
assert
os
.
path
.
exists
(
args
.
label_to_name_file
)
flow
.
config
.
load_library
(
oneflow_yolov3
.
lib_path
())
func_config
=
flow
.
FunctionConfig
()
func_config
.
default_distribute_strategy
(
flow
.
distribute
.
consistent_strategy
())
func_config
.
default_data_type
(
flow
.
float
)
if
args
.
use_tensorrt
!=
0
:
func_config
.
use_tensorrt
(
True
)
# func_config.tensorrt.use_fp16()
label_2_name
=
[]
with
open
(
args
.
label_to_name_file
,
'r'
)
as
f
:
label_2_name
=
f
.
readlines
()
nms
=
True
def
print_detect_box
(
positions
,
probs
):
if
nms
:
batch_size
=
positions
.
shape
[
0
]
for
k
in
range
(
batch_size
):
for
i
in
range
(
1
,
81
):
for
j
in
range
(
positions
.
shape
[
2
]):
if
positions
[
k
][
i
][
j
][
1
]
!=
0
and
positions
[
k
][
i
][
j
][
2
]
!=
0
and
probs
[
k
][
i
][
j
]
!=
0
:
print
(
label_2_name
[
i
-
1
],
" "
,
probs
[
k
][
i
][
j
]
*
100
,
"%"
,
" "
,
positions
[
k
][
i
][
j
][
0
],
" "
,
positions
[
k
][
i
][
j
][
1
],
" "
,
positions
[
k
][
i
][
j
][
2
],
" "
,
positions
[
k
][
i
][
j
][
3
])
else
:
for
j
in
range
(
positions
.
shape
[
1
]):
for
i
in
range
(
1
,
81
):
if
positions
[
0
][
j
][
1
]
!=
0
and
positions
[
0
][
j
][
2
]
!=
0
and
probs
[
0
][
j
][
i
]
!=
0
:
print
(
label_2_name
[
i
-
1
],
" "
,
probs
[
0
][
j
][
i
]
*
100
,
"%"
,
" "
,
positions
[
0
][
j
][
0
],
" "
,
positions
[
0
][
j
][
1
],
" "
,
positions
[
0
][
j
][
2
],
" "
,
positions
[
0
][
j
][
3
])
def
xywh_2_x1y1x2y2
(
x
,
y
,
w
,
h
,
origin_image
):
x1
=
(
x
-
w
/
2.
)
*
origin_image
[
1
]
x2
=
(
x
+
w
/
2.
)
*
origin_image
[
1
]
y1
=
(
y
-
h
/
2.
)
*
origin_image
[
0
]
y2
=
(
y
+
h
/
2.
)
*
origin_image
[
0
]
return
x1
,
y1
,
x2
,
y2
def
batch_boxes
(
positions
,
probs
,
origin_image_info
):
batch_size
=
positions
.
shape
[
0
]
batch_list
=
[]
if
nms
:
for
k
in
range
(
batch_size
):
box_list
=
[]
for
i
in
range
(
1
,
81
):
for
j
in
range
(
positions
.
shape
[
2
]):
if
positions
[
k
][
i
][
j
][
2
]
!=
0
and
positions
[
k
][
i
][
j
][
3
]
!=
0
and
probs
[
k
][
i
][
j
]
!=
0
:
x1
,
y1
,
x2
,
y2
=
xywh_2_x1y1x2y2
(
positions
[
k
][
i
][
j
][
0
],
positions
[
k
][
i
][
j
][
1
],
positions
[
k
][
i
][
j
][
2
],
positions
[
k
][
i
][
j
][
3
],
origin_image_info
[
k
])
bbox
=
[
i
-
1
,
x1
,
y1
,
x2
,
y2
,
probs
[
k
][
i
][
j
]]
box_list
.
append
(
bbox
)
batch_list
.
append
(
np
.
asarray
(
box_list
))
else
:
for
k
in
range
(
batch_size
):
box_list
=
[]
for
j
in
range
(
positions
.
shape
[
1
]):
for
i
in
range
(
1
,
81
):
if
positions
[
k
][
j
][
2
]
!=
0
and
positions
[
k
][
j
][
3
]
!=
0
and
probs
[
k
][
j
][
i
]
!=
0
:
x1
,
y1
,
x2
,
y2
=
xywh_2_x1y1x2y2
(
positions
[
k
][
j
][
0
],
positions
[
k
][
j
][
1
],
positions
[
k
][
j
][
2
],
positions
[
k
][
j
][
3
],
origin_image_info
[
k
])
bbox
=
[
i
-
1
,
x1
,
y1
,
x2
,
y2
,
probs
[
k
][
j
][
i
]]
box_list
.
append
(
bbox
)
batch_list
.
append
(
np
.
asarray
(
box_list
))
return
batch_list
input_blob_def_dict
=
{
"images"
:
flow
.
FixedTensorDef
(
(
args
.
batch_size
,
3
,
args
.
image_height
,
args
.
image_width
),
dtype
=
flow
.
float
),
"origin_image_info"
:
flow
.
FixedTensorDef
(
(
args
.
batch_size
,
2
),
dtype
=
flow
.
int32
),
}
@
flow
.
global_function
((
func_config
))
def
yolo_user_op_eval_job
(
images
=
input_blob_def_dict
[
"images"
],
origin_image_info
=
input_blob_def_dict
[
"origin_image_info"
]):
yolo_pos_result
,
yolo_prob_result
=
YoloPredictNet
(
images
,
origin_image_info
,
trainable
=
False
)
return
yolo_pos_result
,
yolo_prob_result
,
origin_image_info
if
__name__
==
"__main__"
:
flow
.
config
.
gpu_device_num
(
args
.
gpu_num_per_node
)
flow
.
env
.
ctrl_port
(
9789
)
check_point
=
flow
.
train
.
CheckPoint
()
if
not
args
.
pretrained_model
:
check_point
.
init
()
else
:
check_point
.
load
(
args
.
pretrained_model
)
fmt_str
=
"{:>12} {:>12.10f} {:>12.10f} {:>12.3f}"
print
(
"{:>12} {:>12} {:>12} {:>12}"
.
format
(
"iter"
,
"reg loss value"
,
"cls loss value"
,
"time"
))
global
cur_time
cur_time
=
time
.
time
()
num_worker
=
4
queue_size
=
args
.
batch_size
//
num_worker
image_height
=
608
image_width
=
608
workers
=
[]
for
i
in
range
(
num_worker
):
workers
.
append
(
make_work
(
i
))
for
w
in
workers
:
w
[
0
].
start
()
batch_image
=
np
.
zeros
(
(
num_worker
,
queue_size
*
3
*
image_height
*
image_width
),
dtype
=
np
.
float32
)
batch_origin_info
=
np
.
zeros
((
num_worker
,
queue_size
*
2
),
dtype
=
np
.
int32
)
image_list_len
=
len
(
args
.
image_path_list
)
for
step
in
range
(
args
.
total_batch_num
):
#img_path = args.image_path_list[step % image_list_len]
path
=
[
'data/images/00000'
+
str
(
step
+
1
)
+
'.jpg'
]
*
16
for
i
in
range
(
num_worker
):
_
,
_
,
w_q
,
_
,
_
=
workers
[
i
]
for
j
in
range
(
queue_size
):
w_q
.
put
(
path
[
i
*
queue_size
+
j
])
for
i
in
range
(
num_worker
):
(
proc
,
w_f
,
_
,
w_b
,
w_origin_info_b
)
=
workers
[
i
]
while
w_f
.
value
==
0
:
time
.
sleep
(
0.01
)
ret
=
np
.
ctypeslib
.
as_array
(
w_b
)
batch_image
[
i
,
:]
=
ret
ret_origin_info
=
np
.
ctypeslib
.
as_array
(
w_origin_info_b
)
batch_origin_info
[
i
,
:]
=
ret_origin_info
w_f
.
value
=
0
yolo_pos
,
yolo_prob
,
origin_image_info
=
yolo_user_op_eval_job
(
batch_image
.
reshape
(
args
.
batch_size
,
3
,
image_height
,
image_width
),
batch_origin_info
.
reshape
(
args
.
batch_size
,
2
)).
get
()
batch_list
=
batch_boxes
(
yolo_pos
,
yolo_prob
,
origin_image_info
)
print
(
"batch_list"
,
batch_list
)
for
w
in
workers
:
w
[
0
].
terminate
()
for
w
in
workers
:
w
[
0
].
join
()
yolo_predict_python_data_preprocess_multiprocess.sh
已删除
100755 → 0
浏览文件 @
127ed186
model_dir
=
of_model/of_yolov3_model/
image_list_file
=
data/with_dir_data_names
label_2_name_file
=
data/coco.names
export
ONEFLOW_DEBUG_MODE
=
""
python3 oneflow_yolov3/model/python_load_data_predict_with_print_box_multiprocessing.py
--total_batch_num
=
4
\
--gpu_num_per_node
=
1
--batch_size
=
16
--pretrained_model
=
$model_dir
\
--image_list_path
=
$image_list_file
--label_to_name_file
=
$label_2_name_file
\
--use_tensorrt
=
0
\
--image_path_list
'data/images/000001.jpg'
'data/images/000002.jpg'
'data/images/000003.jpg'
'data/images/000004.jpg'
'data/images/000011.jpg'
'data/images/000012.jpg'
'data/images/000013.jpg'
'data/images/000014.jpg'
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录