代码分析工具
周报生成器
之前的调试方案为:fit -> vis -> observe,这一步需要完成的事情是替代原有的肉眼观察部分。肉眼观察主要实现的功能有:
- 观察动作的时序抖动,异常值附近通常会有抖动,或者突变
- 观察与图像的一致性,肉眼可以判断实际的图像的位置,因此尽管2D错误,肉眼可以知道正确的2D位置,通过与重投影的比较,即可知道错误的帧
主要的异常检测的方法有:
- 多视角情况,使用多视角鲁棒三角化重建的关键点检查SMPL拟合的结果
- 少视角情况,判断重投影误差,选出误差大的帧
- 任意情况,计算SMPL参数的速度与加速度,选出速度与加速度超过阈值的帧
对于异常帧,主要实现的功能:
- 裁剪图片:分为身体、左手、右手单独考虑
- 根据异常检测,输出自然语言:
第[n]帧由于第[v]个相机的[手腕|左手|右手]关键点检测[失败|遗漏|误匹配],导致[速度突变|加速度突变|重投影误差大]
- 自动保存图片与文字,生成markdown/latex文档
检查参数:
python3 apps/analyze/check_param.py ${out}/smpl --out ${out}
生成报告:
# 可视化一般的情况
python3 apps/analyze/report_outlier.py ${out} ${out}/log --cfg_data config/data/mv1h.yml --opt_data k2d ${data}/annots camera ${data} data.keypoints2d.args.undis False
# 处理MANO的情况
python3 apps/analyze/report_outlier.py ${out} ${out}/log --cfg_data config/data/mv1h.yml --opt_data k2d ${data}/annots camera ${data} data.keypoints2d.args.undis False --mano
TODO: 可视化的时候增加SMPL的渲染结果
性能分析
炼丹调参顺序
对于已有代码的任务:
对于没有代码的任务:
- 检查dataset是否返回正确
- 在极小数据上测试是否能够过拟合
- 不开启数据增强是否能够过拟合
- 测试不同的几个学习率开始
优化调参顺序
- 检查3D关键点重投影,如果有某一帧的对应不上,那么检查重建
- 检查用于优化的2D关键点,如果有某一帧的2D错误,标注2D
- 只优化到globalRT,检查整体的旋转
- 只优化到3D,检查渲染结果
- 优化到2D,检查
- 优化到每个视角的2D,去掉init项,检查
自动调参
这部分用于在优化的时候进行超参搜索。