未验证 提交 1192c297 编写于 作者: H huangjun12 提交者: GitHub

fix multiprocessing bug of bmn dynamic graph model (#4226)

* fix bmn model implemented with dynamic graph mode

* fix eval.py and README to increase the model usability
上级 6732a284
...@@ -21,6 +21,8 @@ BMN模型是百度自研,2019年ActivityNet夺冠方案,为视频动作定 ...@@ -21,6 +21,8 @@ BMN模型是百度自研,2019年ActivityNet夺冠方案,为视频动作定
BMN Overview BMN Overview
</p> </p>
BMN模型的静态图实现请参考[PaddleVideo](../../PaddleCV/PaddleVideo)
动态图文档请参考[Dygraph](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/user_guides/howto/dygraph/DyGraph.html) 动态图文档请参考[Dygraph](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/user_guides/howto/dygraph/DyGraph.html)
...@@ -81,7 +83,7 @@ BMN的训练数据采用ActivityNet1.3提供的数据集,我们提供了处理 ...@@ -81,7 +83,7 @@ BMN的训练数据采用ActivityNet1.3提供的数据集,我们提供了处理
python eval.py --weights=$PATH_TO_WEIGHTS python eval.py --weights=$PATH_TO_WEIGHTS
- 进行评估时,可修改脚本中的`weights`参数指定需要评估的权重,如果不设置,将使用默认参数文件checkpoint/bmn\_paddle\_dy\_final.pdparams。 - 进行评估时,可修改命令行中的`weights`参数指定需要评估的权重,如果不设置,将使用默认参数文件checkpoint/bmn\_paddle\_dy\_final.pdparams。
- 上述程序会将运行结果保存在output/EVAL/BMN\_results文件夹下,测试结果保存在evaluate\_results/bmn\_results\_validation.json文件中。 - 上述程序会将运行结果保存在output/EVAL/BMN\_results文件夹下,测试结果保存在evaluate\_results/bmn\_results\_validation.json文件中。
...@@ -94,9 +96,9 @@ BMN的训练数据采用ActivityNet1.3提供的数据集,我们提供了处理 ...@@ -94,9 +96,9 @@ BMN的训练数据采用ActivityNet1.3提供的数据集,我们提供了处理
- ActivityNet数据集的具体使用说明可以参考其[官方网站](http://activity-net.org) - ActivityNet数据集的具体使用说明可以参考其[官方网站](http://activity-net.org)
- 下载指标评估代码,请从[ActivityNet Gitub repository](https://github.com/activitynet/ActivityNet.git)下载,将Evaluation文件夹拷贝至models/dygraph/bmn目录下。(注:若使用python3,print函数需要添加括号,请对Evaluation目录下的.py文件做相应修改。) - 下载指标评估代码,请从[ActivityNet Gitub repository](https://github.com/activitynet/ActivityNet.git)下载,将Evaluation文件夹拷贝至models/dygraph/bmn目录下。(注:由于第三方评估代码不支持python3,此处建议使用python2进行评估;若使用python3,print函数需要添加括号,请对Evaluation目录下的.py文件做相应修改。)
- 请下载[activity\_net\_1\_3\_new.json](https://paddlemodels.bj.bcebos.com/video_detection/activity_net_1_3_new.json)文件,并将其放置在models/dygraph/bmn目录下,相较于原始的activity\_net.v1-3.min.json文件,我们过滤了其中一些失效的视频条目。 - 请下载[activity\_net\_1\_3\_new.json](https://paddlemodels.bj.bcebos.com/video_detection/activity_net_1_3_new.json)文件,并将其放置在models/dygraph/bmn/Evaluation/data目录下,相较于原始的activity\_net.v1-3.min.json文件,我们过滤了其中一些失效的视频条目。
- 计算精度指标 - 计算精度指标
......
...@@ -44,10 +44,7 @@ def parse_args(): ...@@ -44,10 +44,7 @@ def parse_args():
default='bmn.yaml', default='bmn.yaml',
help='path to config file of model') help='path to config file of model')
parser.add_argument( parser.add_argument(
'--batch_size', '--batch_size', type=int, default=1, help='eval batch size.')
type=int,
default=None,
help='training batch size. None to use config file setting.')
parser.add_argument( parser.add_argument(
'--use_gpu', '--use_gpu',
type=ast.literal_eval, type=ast.literal_eval,
...@@ -59,11 +56,6 @@ def parse_args(): ...@@ -59,11 +56,6 @@ def parse_args():
default="checkpoint/bmn_paddle_dy_final", default="checkpoint/bmn_paddle_dy_final",
help='weight path, None to automatically download weights provided by Paddle.' help='weight path, None to automatically download weights provided by Paddle.'
) )
parser.add_argument(
'--save_dir',
type=str,
default="evaluate_results/",
help='output dir path, default to use ./evaluate_results/')
parser.add_argument( parser.add_argument(
'--log_interval', '--log_interval',
type=int, type=int,
...@@ -135,7 +127,12 @@ def test_bmn(args): ...@@ -135,7 +127,12 @@ def test_bmn(args):
os.makedirs(test_config.TEST.output_path) os.makedirs(test_config.TEST.output_path)
if not os.path.isdir(test_config.TEST.result_path): if not os.path.isdir(test_config.TEST.result_path):
os.makedirs(test_config.TEST.result_path) os.makedirs(test_config.TEST.result_path)
place = fluid.CUDAPlace(0)
if not args.use_gpu:
place = fluid.CPUPlace()
else:
place = fluid.CUDAPlace(0)
with fluid.dygraph.guard(place): with fluid.dygraph.guard(place):
bmn = BMN(test_config) bmn = BMN(test_config)
...@@ -189,7 +186,10 @@ def test_bmn(args): ...@@ -189,7 +186,10 @@ def test_bmn(args):
aggr_pem_cls_loss += np.mean(pem_cls_loss.numpy()) aggr_pem_cls_loss += np.mean(pem_cls_loss.numpy())
aggr_batch_size += 1 aggr_batch_size += 1
logger.info("Processing................ batch {}".format(batch_id)) if batch_id % args.log_interval == 0:
logger.info("Processing................ batch {}".format(
batch_id))
gen_props( gen_props(
pred_bm, pred_bm,
pred_start, pred_start,
......
...@@ -47,6 +47,8 @@ class BMNReader(): ...@@ -47,6 +47,8 @@ class BMNReader():
self.num_threads = 1 # set num_threads as 1 for test and infer self.num_threads = 1 # set num_threads as 1 for test and infer
def get_dataset_dict(self): def get_dataset_dict(self):
assert (os.path.exists(self.feat_path)), "Input feature path not exists"
assert (os.listdir(self.feat_path)), "Input feature file not exists"
self.video_dict = {} self.video_dict = {}
if self.mode == "infer": if self.mode == "infer":
annos = json.load(open(self.file_list)) annos = json.load(open(self.file_list))
...@@ -265,7 +267,8 @@ class BMNReader(): ...@@ -265,7 +267,8 @@ class BMNReader():
tmp_list = video_list[i * file_num:] tmp_list = video_list[i * file_num:]
reader_lists[i] = tmp_list reader_lists[i] = tmp_list
queue = multiprocessing.Queue(queue_size) manager = multiprocessing.Manager()
queue = manager.Queue(queue_size)
p_list = [None] * len(reader_lists) p_list = [None] * len(reader_lists)
for i in range(len(reader_lists)): for i in range(len(reader_lists)):
reader_list = reader_lists[i] reader_list = reader_lists[i]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册