EXPERIMENT / 配套代码

main.py

← 返回文章
下载代码

在项目根目录执行;下载包解压后,在解压目录执行 python3 main.py。

cd 'content/posts/AI-深度学习/嵌入式视觉模型进阶/16-外观特征与 ReID/code' && python3 main.py
"""通过归一化向量、相似度与运动门控理解外观关联。"""

import numpy as np
from scipy.optimize import linear_sum_assignment


def normalize(x):
    norm = np.linalg.norm(x, axis=-1, keepdims=True)
    if np.any(norm < 1e-12):
        raise ValueError("zero embedding")
    return x / norm


def main():
    tracks = normalize(np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]))
    observations = normalize(np.array([[0.05, 1.0, 0.0], [1.0, 0.05, 0.0]]))
    cosine = tracks @ observations.T
    geometry = np.array([[0.1, 0.4], [0.4, 0.1]])
    cost = 0.2 * geometry + 0.8 * (1 - cosine)
    rows, cols = linear_sum_assignment(cost)
    assert cols.tolist() == [1, 0]
    print("cosine", cosine.tolist(), "matches", list(zip(rows.tolist(), cols.tolist())))
    updated = normalize(0.9 * tracks[0] + 0.1 * observations[1])
    assert abs(np.linalg.norm(updated) - 1) < 1e-12
    try:
        normalize(np.zeros((1, 3)))
    except ValueError:
        print("zero embedding rejected")
    else:
        raise AssertionError("zero embedding accepted")


if __name__ == "__main__":
    main()