最近在做行人轨迹预测,但首先想先做一个行人过街意图预测,即穿越or不穿越。找到一篇论文,代码开源,适合我这个菜鸟上手,放链接https://github.com/vita-epfl/bounding-box-prediction
按照它的官方redme一步步来,但是你也知道这个事情不可能这么简单的。我选择使用的是JAAD数据集,官方提供了三种数据集,按需使用。
一、准备数据集
仔细读读,他并没有告诉你这个数据集怎么存放,而且这个数据集的注释是托管在github上,没放在网站上,哎,心累,一点点来吧。
1.到JAAD库中https://github.com/BigJiang123/JAAD 把jaad-data.py复制到这个目录里边,仔细看看,作者已经帮咱们复制了。
./bounding-box-prediction/preprocess/
2.把JAAD数据集下载下来。(有空放链接)
先放一个JAAD_clips的链接,官网上下的链接:https://pan.baidu.com/s/18eQ6IRrEdJJ0bg5rCFljZw?pwd=62qk
提取码:62qk
--来自百度网盘超级会员V3的分享
3.运行split_clips_to_frames.sh这个脚本,把视频转为图像,但是这个脚本在JAAD库里,需要自己复制过来。
但现在我们首先要解决一个问题,官方说执行这个操作至少需要169G,反正我的电脑空间不够用了,我最开始的设想是在移动硬盘上跑整个项目,后来查了下资料发现这样不是很好,于是改为在本地运行代码,在移动硬盘上存放数据集。估计这也是以后得一个常用手段了,至于行不行的,等我跑完这个项目再说。
好了,看代码,6和7行首先就设置了两个路径,一个是下载下来的JAAD_clips文件夹存放地址,一个是用来存放转换后的图像的地址。把这两个地址改为自己的地址就好啦~
ps.使用移动硬盘的话,它一般挂载在media下。
最后,把脚本run起来,biu~开始跑了,电脑wawawa的叫。等吧,趁这个时间摸摸鱼~或者像我一样写写笔记。
其实,在另外一个作者的github上写了JAAD数据集的存放结构,但我现在还有点疑惑的是他的注释是放在哪里的。放上这个作者链接。GitHub - OSU-Haolin/Pedestrian_Crossing_Intention_Prediction: Pedestrian Crossing Intention Prediction with Feature Fusion and Spatio-Temporal Attention.
二、划分数据集
python3 preprocess/jaad_preprocessor.py --data_dir=/path/to/JAAD --train_ratio=0.7 --val_ratio=0.2 --test_ratio=0.1
运行这个代码划分数据集为train/val/test,官方给的有点小错误,把“data_dir”改为“data_path”
数据集怎么放的到这里也搞清楚了,创建一个文件夹JAAD,里面存放annotations/annotations_appearance/annotations_attributes/annotations_traffic/annotations_vehicle/split_ids 这些都到JAAD官方github上下载。还有上面得到的images。运行代码,最终会得到这样一个结构的处理后的数据集。
三、训练模型
终端输入:
python3 train.py --data_dir=/path/to/JAAD/processed_annotations --dataset=jaad --out_dir=/path/to/output --n_epochs=100 --task='2D_bounding_box-intention' --input=16 --output=16 --stride=16
将里面的路径改为自己的路径就好了,但我还设置了--lr_scheduler为True。其他学习率啥的可以自己根据需要改。训练时会打印各种vc,ade等等,其实训练完毕不用再测试了,两个代码抛出的结果是一样的。
四、测试模型
如果实在要运行的话也行,运行命令python3 test.py --data_dir=/path/to/JAAD/processed_annotations --dataset=jaad --out_dir=/path/to/output --task='2D_bounding_box-intention' 。(官方文档里给得也不太对,还缺一些参数,自己改改)只是还需要改一下代码。
由于在训练时设置了--lr_scheduler,所以保存的文件名是这样的model_0.001_512_scheduler.pkl,直接运行test.py会报错,所以修改一下,在test_2d函数里把上一句改为下一句。
#modelname = 'model_' + file + '.pkl'
modelname = 'model_' + file+ '_scheduler.pkl'
另外,没有使用3D数据集,但是代码里没有在这里做分支,修改:
-------修改前
# training
#test_3d(args, net, test_loader)
------以下为修改后的代码
if not args.is_3D:
test_2d(args, net, test_loader,)
else:
test_3d(args, net, test_loader)
再次运行,输出结果: