问题导入
第二个参数fake_anno是重点
发现是字典类型
而且也提示了fake_anno是(the input of pipeline)
data = video ## 将fake_anno赋值给data
然后接下来是把data放入这个test_pipeline流水线里面
test_pipeline = Compose(test_pipeline)
data = test_pipeline(data)
言外之意是把fake_anno放入这个test_pipeline流水线里面
data = collate([data], samples_per_gpu=1)
将处理后的数据 data
进行批处理(collate),并将其转换为适合在 GPU 上处理的格式。samples_per_gpu=1
表示每个 GPU 处理一个样本。
if next(model.parameters()).is_cuda:
# scatter to specified GPU
data = scatter(data, [device])[0]
如果模型在 GPU 上,进一步将数据分散到指定的 GPU 设备上,以便进行高效的计算
总结:
整段代码的目的是:
- 先对数据进行预处理;
- 然后将处理后的数据整理成适合模型输入的批次;
- 如果模型在 GPU 上,进一步将数据分散到指定的 GPU 设备上,以便进行高效的计算。
接下来就是前向传播了
核心
从130GB视频样本数据发现获取的骨架模态数据ann_file发现存储大概600MB
极大压缩了存储空间。现在的问题是拿到这个ann_file骨架模态数据之后。貌似获取骨架数据过程中没有经过pipeline这个流水线过程。
问题:也就是说需要把这个ann_file骨架模态数据进一步pipeline流水线预处理之后,才能输入到模型里面进行前向传播forward函数推理。
分析:通过分析代码是这样的。
问题:那就是说需要看一下源码这个ann_file骨架数据模态在哪里调用的?并在哪里输入的?是否是输入到了pipeline里面进行的预处理?猜测应该是的。
分析:通过分析代码发现是在PoseDataset类里面调用的,猜测是完全正确的。
pyskl/pyskl/apis/inference.py at main · kennymckormick/pyskl · GitHub