File size: 2,155 Bytes
8b78124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
## PredNet denoising (black-box SavedModel)

This repository packages a TensorFlow **SavedModel** for video-frame prediction/denoising **without publishing any model architecture source code**. Inference calls the SavedModel signature as a black box and produces predicted frames.

### Files

- `savedmodel/`: TensorFlow SavedModel directory (weights + graph)
- `infer/`: minimal inference helpers (black-box loader + IO)
- `predict.py`: CLI that outputs prediction images
- `anomaly.py`: CLI that outputs per-frame anomaly scores (ahat_error + 1-SSIM vectors)

### Install

```bash
pip install -r requirements.txt
```

### Run (from a directory of frames)

`frames_dir` should contain ordered image frames (e.g. `0001.png`, `0002.png`, ...).

```bash
python predict.py --model_dir savedmodel --frames_dir /path/to/frames --out_dir outputs --save_sequence_grid
```

Outputs:
- `outputs/pred_last.png`
- `outputs/pred_sequence_grid.png` (optional)

### Run (from npy/npz)

Accepts `frames` stored as `[T,H,W,C]` or `[B,T,H,W,C]`.

```bash
python predict.py --array frames.npy --out_dir outputs
```

### Anomaly scores (4-frame window)

For each window of 4 frames ending at time `t`, this computes two vectors of length 4:
- `ahat_error[1..4]`: mean absolute error between `pred_frame_k` and `GT_frame_4`
- `dissim_1mssim[1..4]`: `1 - SSIM(pred_frame_k, GT_frame_4)`

```bash
python anomaly.py --model_dir savedmodel --frames_dir /path/to/frames --out_json anomaly.json --out_csv anomaly.csv
```

### Hugging Face Hub usage

After you upload this repo to the Hub, users can download it via `huggingface_hub` and point `--model_dir` at the downloaded `savedmodel/` directory.

### HuggingFace Pipeline Usage

```python
from transformers import pipeline
import numpy as np

pipe = pipeline(
    "video-frame-prediction",
    model="dvdface/denoising-prednet",
    trust_remote_code=True,
)

# frames: [T, H, W, C] numpy array, uint8 (0-255) or float (0-1)
frames = np.random.randint(0, 255, (4, 128, 128, 3), dtype=np.uint8)
result = pipe(frames)

print(result["sequence"].shape)    # (4, 128, 128, 3)
print(result["last_frame"].shape)  # (128, 128, 3)
```