python
This commit is contained in:
parent
477374f362
commit
73e28b7ff8
BIN
python/__pycache__/torch.cpython-310.pyc
Normal file
BIN
python/__pycache__/torch.cpython-310.pyc
Normal file
Binary file not shown.
91
python/epipolar.py
Normal file
91
python/epipolar.py
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
import numpy as np
|
||||||
|
import cv2
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
|
||||||
|
# Load the left and right images
|
||||||
|
# in gray scale
|
||||||
|
imgLeft = cv2.imread('image_l.jpg', 0)
|
||||||
|
imgRight = cv2.imread('image_r.jpg', 0)
|
||||||
|
|
||||||
|
# Detect the SIFT key points and
|
||||||
|
# compute the descriptors for the
|
||||||
|
# two images
|
||||||
|
sift = cv2.SIFT_create()
|
||||||
|
keyPointsLeft, descriptorsLeft = sift.detectAndCompute(imgLeft, None)
|
||||||
|
keyPointsRight, descriptorsRight = sift.detectAndCompute(imgRight, None)
|
||||||
|
assert(len(keyPointsLeft) == len(descriptorsLeft))
|
||||||
|
assert(len(keyPointsRight) == len(descriptorsRight))
|
||||||
|
|
||||||
|
# Create FLANN matcher object
|
||||||
|
FLANN_INDEX_KDTREE = 0
|
||||||
|
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
|
||||||
|
searchParams = dict(checks=50)
|
||||||
|
|
||||||
|
flann = cv2.FlannBasedMatcher(indexParams, searchParams)
|
||||||
|
matches = flann.knnMatch(descriptorsLeft, descriptorsRight, 2)
|
||||||
|
|
||||||
|
# Apply ratio test
|
||||||
|
goodMatches = []
|
||||||
|
ptsLeft = []
|
||||||
|
ptsRight = []
|
||||||
|
|
||||||
|
for m, n in matches:
|
||||||
|
if m.distance < 0.8 * n.distance:
|
||||||
|
goodMatches.append([m])
|
||||||
|
# ptsLeft.append(keyPointsLeft[m.trainIdx].pt)
|
||||||
|
# ptsRight.append(keyPointsRight[n.trainIdx].pt)
|
||||||
|
|
||||||
|
ptsLeft.append(keyPointsLeft[m.queryIdx].pt)
|
||||||
|
ptsRight.append(keyPointsRight[m.trainIdx].pt)
|
||||||
|
|
||||||
|
ptsLeft = np.int32(ptsLeft)
|
||||||
|
ptsRight = np.int32(ptsRight)
|
||||||
|
# r F l = 0 <- find f
|
||||||
|
F, mask = cv2.findFundamentalMat(ptsLeft,
|
||||||
|
ptsRight,
|
||||||
|
cv2.FM_LMEDS)
|
||||||
|
|
||||||
|
# We select only inlier points
|
||||||
|
ptsLeft = ptsLeft[mask.ravel() == 1]
|
||||||
|
ptsRight = ptsRight[mask.ravel() == 1]
|
||||||
|
|
||||||
|
|
||||||
|
def drawlines(img1, img2, lines, pts1, pts2):
|
||||||
|
r, c = img1.shape
|
||||||
|
img1 = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)
|
||||||
|
img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2BGR)
|
||||||
|
|
||||||
|
for i, (r, pt1, pt2) in enumerate(zip(lines, pts1, pts2)):
|
||||||
|
color = tuple(np.random.randint(0, 255, 3).tolist())
|
||||||
|
|
||||||
|
x0, y0 = map(int, [0, -r[2] / r[1]])
|
||||||
|
x1, y1 = map(int, [c, -(r[2] + r[0] * c) / r[1]])
|
||||||
|
|
||||||
|
img1 = cv2.line(img1, (x0, y0), (x1, y1), color, 1)
|
||||||
|
img1 = cv2.circle(img1, tuple(pt1), 5, color, -1)
|
||||||
|
img2 = cv2.circle(img2, tuple(pt2), 5, color, -1)
|
||||||
|
|
||||||
|
return img1, img2
|
||||||
|
|
||||||
|
# Find epilines corresponding to points
|
||||||
|
# in right image (second image) and
|
||||||
|
# drawing its lines on left image
|
||||||
|
linesLeft = cv2.computeCorrespondEpilines(ptsRight.reshape(-1, 1, 2), 2, F)
|
||||||
|
linesLeft = linesLeft.reshape(-1, 3)
|
||||||
|
img5, img6 = drawlines(imgLeft, imgRight,
|
||||||
|
linesLeft, ptsLeft,
|
||||||
|
ptsRight)
|
||||||
|
|
||||||
|
# Find epilines corresponding to
|
||||||
|
# points in left image (first image) and
|
||||||
|
# drawing its lines on right image
|
||||||
|
linesRight = cv2.computeCorrespondEpilines(ptsLeft.reshape(-1, 1, 2), 1, F)
|
||||||
|
linesRight = linesRight.reshape(-1, 3)
|
||||||
|
|
||||||
|
img3, img4 = drawlines(imgRight, imgLeft,
|
||||||
|
linesRight, ptsRight,
|
||||||
|
ptsLeft)
|
||||||
|
|
||||||
|
plt.subplot(121), plt.imshow(img5)
|
||||||
|
plt.subplot(122), plt.imshow(img3)
|
||||||
|
plt.show()
|
||||||
BIN
python/image_l.jpg
(Stored with Git LFS)
Normal file
BIN
python/image_l.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
python/image_r.jpg
(Stored with Git LFS)
Normal file
BIN
python/image_r.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
python/model.pth
Normal file
BIN
python/model.pth
Normal file
Binary file not shown.
BIN
torchtut/__pycache__/infra.cpython-310.pyc
Normal file
BIN
torchtut/__pycache__/infra.cpython-310.pyc
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/t10k-images-idx3-ubyte
Normal file
BIN
torchtut/data/FashionMNIST/raw/t10k-images-idx3-ubyte
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz
(Stored with Git LFS)
Normal file
BIN
torchtut/data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/t10k-labels-idx1-ubyte
Normal file
BIN
torchtut/data/FashionMNIST/raw/t10k-labels-idx1-ubyte
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz
(Stored with Git LFS)
Normal file
BIN
torchtut/data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/train-images-idx3-ubyte
Normal file
BIN
torchtut/data/FashionMNIST/raw/train-images-idx3-ubyte
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/train-images-idx3-ubyte.gz
(Stored with Git LFS)
Normal file
BIN
torchtut/data/FashionMNIST/raw/train-images-idx3-ubyte.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/train-labels-idx1-ubyte
Normal file
BIN
torchtut/data/FashionMNIST/raw/train-labels-idx1-ubyte
Normal file
Binary file not shown.
BIN
torchtut/data/FashionMNIST/raw/train-labels-idx1-ubyte.gz
(Stored with Git LFS)
Normal file
BIN
torchtut/data/FashionMNIST/raw/train-labels-idx1-ubyte.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
145
torchtut/first.py
Normal file
145
torchtut/first.py
Normal file
|
|
@ -0,0 +1,145 @@
|
||||||
|
import torch
|
||||||
|
from torch import nn
|
||||||
|
from torch.utils.data import DataLoader
|
||||||
|
from torchvision import datasets
|
||||||
|
from torchvision.transforms import ToTensor
|
||||||
|
|
||||||
|
training_data = datasets.FashionMNIST(
|
||||||
|
root="data",
|
||||||
|
train=True,
|
||||||
|
download=True,
|
||||||
|
transform=ToTensor(),
|
||||||
|
)
|
||||||
|
|
||||||
|
test_data = datasets.FashionMNIST(
|
||||||
|
root="data",
|
||||||
|
train=False,
|
||||||
|
download=True,
|
||||||
|
transform=ToTensor(),
|
||||||
|
)
|
||||||
|
|
||||||
|
print(training_data)
|
||||||
|
print(test_data)
|
||||||
|
batch_size=8192
|
||||||
|
train_dataloader = DataLoader(training_data, batch_size=batch_size, shuffle=True)
|
||||||
|
test_dataloader = DataLoader(test_data, batch_size=batch_size, shuffle=True)
|
||||||
|
|
||||||
|
for X, y in test_dataloader:
|
||||||
|
print(f"Shape of X [N, C, H, W]: {X.shape}")
|
||||||
|
print(f"Shape of y: {y.shape} {y.dtype}")
|
||||||
|
break
|
||||||
|
|
||||||
|
device = (
|
||||||
|
"cuda" if torch.cuda.is_available()
|
||||||
|
else "mps" if torch.backends.mps.is_available()
|
||||||
|
else "cpu"
|
||||||
|
)
|
||||||
|
print(device)
|
||||||
|
|
||||||
|
class NeuralNetwork(nn.Module):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.flatten = nn.Flatten()
|
||||||
|
self.linear_relu_stack = nn.Sequential(
|
||||||
|
nn.Linear(28 * 28, 512),
|
||||||
|
nn.BatchNorm1d(512),
|
||||||
|
nn.ReLU(),
|
||||||
|
nn.Linear(512, 512),
|
||||||
|
nn.BatchNorm1d(512),
|
||||||
|
nn.ReLU(),
|
||||||
|
nn.Linear(512, 512),
|
||||||
|
nn.BatchNorm1d(512),
|
||||||
|
nn.ReLU(),
|
||||||
|
nn.Linear(512, 512),
|
||||||
|
nn.BatchNorm1d(512),
|
||||||
|
nn.ReLU(),
|
||||||
|
nn.Linear(512, 512),
|
||||||
|
nn.BatchNorm1d(512),
|
||||||
|
nn.ReLU(),
|
||||||
|
nn.Linear(512, 10)
|
||||||
|
)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
# torch.Size([64, 1, 28, 28])
|
||||||
|
# torch.Size([64, 784])
|
||||||
|
# torch.Size([64, 10])
|
||||||
|
# print("=====")
|
||||||
|
#print(x.shape)
|
||||||
|
x = self.flatten(x)
|
||||||
|
#print(x.shape)
|
||||||
|
logits = self.linear_relu_stack(x)
|
||||||
|
#print(logits.shape)
|
||||||
|
return logits
|
||||||
|
|
||||||
|
model = NeuralNetwork().to(device)
|
||||||
|
print(model)
|
||||||
|
|
||||||
|
loss_fn = nn.CrossEntropyLoss().to(device)
|
||||||
|
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
|
||||||
|
|
||||||
|
def train(dataloader, model, loss_fn, optimizer):
|
||||||
|
size = len(dataloader.dataset)
|
||||||
|
model.train()
|
||||||
|
for batch, (X, y) in enumerate(dataloader):
|
||||||
|
X, y = X.to(device), y.to(device)
|
||||||
|
pred = model(X)
|
||||||
|
loss = loss_fn(pred, y)
|
||||||
|
|
||||||
|
optimizer.zero_grad()
|
||||||
|
loss.backward()
|
||||||
|
optimizer.step()
|
||||||
|
|
||||||
|
if batch % 100 == 0:
|
||||||
|
loss, current = loss.item(), (batch + 1) * len(X)
|
||||||
|
print(f"loss: {loss:>7f} [{current:>5d}/{size:>5d}]")
|
||||||
|
|
||||||
|
def test(dataloader, model, loss_fn):
|
||||||
|
size = len(dataloader.dataset)
|
||||||
|
num_batches = len(dataloader)
|
||||||
|
model.eval()
|
||||||
|
test_loss, correct = 0, 0
|
||||||
|
with torch.no_grad():
|
||||||
|
for X, y in dataloader:
|
||||||
|
X, y = X.to(device), y.to(device)
|
||||||
|
pred = model(X)
|
||||||
|
test_loss += loss_fn(pred, y).item()
|
||||||
|
correct += (pred.argmax(1) == y).type(torch.float).sum().item()
|
||||||
|
|
||||||
|
test_loss /= num_batches
|
||||||
|
correct /= size
|
||||||
|
print(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")
|
||||||
|
|
||||||
|
epochs = 5
|
||||||
|
for t in range(epochs):
|
||||||
|
print(f"Epoch {t+1}\n---------------------")
|
||||||
|
train(train_dataloader, model, loss_fn, optimizer)
|
||||||
|
test(test_dataloader, model, loss_fn)
|
||||||
|
|
||||||
|
print("Done!")
|
||||||
|
|
||||||
|
torch.save(model.state_dict(), "model.pth")
|
||||||
|
print("Saved PyTorch Model Sate to model.pth")
|
||||||
|
|
||||||
|
model = NeuralNetwork()
|
||||||
|
model.load_state_dict(torch.load("model.pth"))
|
||||||
|
|
||||||
|
classes = [
|
||||||
|
"T-shirt/top",
|
||||||
|
"Trouser",
|
||||||
|
"Pullover",
|
||||||
|
"Dress",
|
||||||
|
"Coat",
|
||||||
|
"Sandal",
|
||||||
|
"Shirt",
|
||||||
|
"Sneaker",
|
||||||
|
"Bag",
|
||||||
|
"Ankle Boot",
|
||||||
|
]
|
||||||
|
|
||||||
|
model.eval()
|
||||||
|
x, y = test_data[0][0], test_data[0][1]
|
||||||
|
with torch.no_grad():
|
||||||
|
pred = model(x)
|
||||||
|
predicted, actual = classes[pred[0].argmax(0)], classes[y]
|
||||||
|
print(f'Predicted: "{predicted}", Actual: "{actual}"')
|
||||||
|
|
||||||
BIN
torchtut/model.pth
Normal file
BIN
torchtut/model.pth
Normal file
Binary file not shown.
12
torchtut/rick.py
Normal file
12
torchtut/rick.py
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import torch
|
||||||
|
import numpy as np
|
||||||
|
import math
|
||||||
|
|
||||||
|
target = torch.tensor([0, 1.0, 0])
|
||||||
|
input = torch.tensor([.333, .333, .334])
|
||||||
|
|
||||||
|
print("nats: ", -math.log(.333))
|
||||||
|
print("bits: ", -math.log(.333, 2))
|
||||||
|
b = torch.nn.functional.cross_entropy(input, target).item()
|
||||||
|
print(b)
|
||||||
|
print(b / math.log(2))
|
||||||
62
torchtut/tensor.py
Normal file
62
torchtut/tensor.py
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
import torch
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
data = [[1,2],[3,4]]
|
||||||
|
x_data = torch.tensor(data)
|
||||||
|
|
||||||
|
print(x_data)
|
||||||
|
|
||||||
|
np_array = np.array(data)
|
||||||
|
x_np = torch.from_numpy(np_array)
|
||||||
|
|
||||||
|
|
||||||
|
x_ones = torch.ones_like(x_data)
|
||||||
|
print(f"Ones Tensor: \n {x_ones}\n")
|
||||||
|
print(x_ones.dtype)
|
||||||
|
|
||||||
|
x_rand = torch.rand_like(x_data, dtype=torch.float)
|
||||||
|
print(f"Random Tensor: \n {x_rand} \n")
|
||||||
|
print(x_rand.dtype)
|
||||||
|
|
||||||
|
shape=(2, 3)
|
||||||
|
rand_tensor = torch.rand(shape)
|
||||||
|
ones_tensor = torch.ones(shape)
|
||||||
|
zeros_tensor = torch.zeros(shape)
|
||||||
|
|
||||||
|
print(f"Random Tensor: \n {rand_tensor} \n")
|
||||||
|
print(f"Ones Tensor: \n {ones_tensor} \n")
|
||||||
|
print(f"Zeros Tensor: \n {zeros_tensor} \n")
|
||||||
|
|
||||||
|
|
||||||
|
tensor = torch.rand(3, 4)
|
||||||
|
print(f"Shape of tensor: {tensor.shape}")
|
||||||
|
print(f"Datatype of tensor: {tensor.dtype}")
|
||||||
|
print(f"Device tensor is stored on: {tensor.device}")
|
||||||
|
|
||||||
|
tensor = torch.ones(4, 4)
|
||||||
|
if torch.cuda.is_available():
|
||||||
|
tensor = tensor.to("cuda")
|
||||||
|
|
||||||
|
print(f"First row: {tensor[0]}")
|
||||||
|
print(f"First column: {tensor[:, 0]}")
|
||||||
|
print(f"Last Column: {tensor[..., -1]}")
|
||||||
|
tensor[:, 1] = 0
|
||||||
|
print(tensor)
|
||||||
|
|
||||||
|
t1 = torch.cat([tensor, tensor, tensor], dim=1)
|
||||||
|
print(t1)
|
||||||
|
|
||||||
|
|
||||||
|
y1 = tensor @ tensor.T
|
||||||
|
y2 = tensor.matmul(tensor.T)
|
||||||
|
print(y1)
|
||||||
|
print(y2)
|
||||||
|
y3 = torch.rand_like(y1)
|
||||||
|
torch.matmul(tensor, tensor.T, out=y3)
|
||||||
|
print(y3)
|
||||||
|
|
||||||
|
print(y3.cpu().numpy())
|
||||||
|
|
||||||
|
agg = y3.sum()
|
||||||
|
print(agg)
|
||||||
|
print(agg.item())
|
||||||
Loading…
Reference in New Issue
Block a user