Download tinydoc/models/orientation.py from harryfrz/tinydoc-5m: direct link, hf CLI and curl.
- Browser
- Download file 869 Bytes
-
https://huggingface.co/harryfrz/tinydoc-5m/resolve/main/tinydoc/models/orientation.py
- Command line
-
hf download hf://harryfrz/tinydoc-5m/tinydoc/models/orientation.py
-
curl -L -o orientation.py https://huggingface.co/harryfrz/tinydoc-5m/resolve/main/tinydoc/models/orientation.py
869 Bytes
| """Page orientation classifier: 0 / 90 / 180 / 270 degrees, voted over text-dense patches.""" | |
| from torch import nn | |
| from .common import ConvBNAct | |
| PATCH = 192 | |
| ANGLES = (0, 90, 180, 270) # clockwise rotation the page has undergone | |
| class OrientationNet(nn.Module): | |
| def __init__(self, widths=(16, 32, 64, 88, 120)): | |
| super().__init__() | |
| layers, cin = [], 1 | |
| for i, w in enumerate(widths): | |
| layers += [ConvBNAct(cin, w, s=2), ConvBNAct(w, w, k=3, groups=w), ConvBNAct(w, w, k=1)] | |
| cin = w | |
| self.features = nn.Sequential(*layers) | |
| self.pool = nn.AdaptiveAvgPool2d(1) | |
| self.fc = nn.Sequential(nn.Dropout(0.2), nn.Linear(cin, len(ANGLES))) | |
| def forward(self, x): | |
| """x: (B, 1, 192, 192) in [0, 1]. Returns logits (B, 4).""" | |
| return self.fc(self.pool(self.features(x - 0.5)).flatten(1)) | |