# OmniMotion
一种在视频序列中密集和长距离运动估计方法,可对运动目标逐像素跟踪。
## 论文
`Tracking Everything Everywhere All at Once`
- https://arxiv.org/abs/2306.05422
- ICCV 2023, Oral, Best Student Paper
## 模型结构
先把一个序列表示成一个准3D的规范量,然后通过定义一个双射,这样就可以通过一个准3D空间,来描述一个完整的运动。
## 算法原理
OmniMotion 保留了投影到每个像素的所有场景点的信息,以及它们的相对深度顺序,这让画面中的点即使暂时被遮挡,也能对其进行追踪。将一整个视频序列作为输入, 同时还输入噪声运动估计(例如光流估计), 然后解出一个完整、全局的运动轨迹。然后,添加了一个优化过程,使其可以用任何帧中的任何像素查询表征,以在整个视频中产生平滑、准确的运动轨迹。
## 环境配置
```
mv omnimotion_pytoch omnimotion # 去框架名后缀
# -v 路径、docker_name和imageID根据实际情况修改
```
### Docker(方法一)
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-ubuntu20.04-dtk23.10-py38 # 本镜像imageID为:0a56ef1842a7
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /your_code_path/omnimotion
pip install -r requirements.txt
```
### Dockerfile(方法二)
```
cd /your_code_path/omnimotion/docker
docker build --no-cache -t codestral:latest .
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /your_code_path/omnimotion
pip install -r requirements.txt
```
### Anaconda(方法三)
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```
DTK驱动:dtk23.10
python:python3.8
pytorch:1.13.1
```
`Tips:以上DTK驱动、python、pytorch等DCU相关工具版本需要严格一一对应`
其它非深度学习库参照requirements.txt安装:
```
pip install -r requirements.txt
```
## 数据集
`DAVIS`
- https://davischallenge.org/index.html
数据下载、预处理脚本的使用方法
```
cd /your_code_path/omnimotion/
python get_davis.py # 下载数据集DAVIS-2017-trainval-480p
python main_processing.py # 预处理数据集
```
训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备:
```
├──DAVIS
├──sequence_1/
├──color/
├──mask/ (optional; only used for visualization purposes)
├──count_maps/
├──features/
├──raft_exhaustive/
├──raft_masks/
├──flow_stats.json
├──sequence_2/
├──...
```
## 训练
### 单机单卡
```
python train.py --config configs/default.txt # 注意修改configs文件以及config.py文件
```
## 推理
```
python viz.py --config configs/default.txt
```
## result
训练loss情况,视频序列为`dogs-jump`,绿色为GPU,橘色为DCU
可视化结果
- GPU: ./doc/GPU-dogs-jump_corr_foreground_100000.mp4
- DCU: ./doc/DCU-dogs-jump_corr_foreground_100000.mp4
### 精度
无
## 应用场景
### 算法类别
`目标跟踪`
### 热点应用行业
`制造,电商,医疗,教育`
## 源码仓库及问题反馈
- https://developer.hpccube.com/codes/modelzoo/omnimotion_pytorch
## 参考资料
- https://github.com/qianqianwang68/omnimotion