Patch embedding: cắt ảnh thành các vector
Vision Transformer không đọc từng điểm ảnh mà chia ảnh thành các ô vuông (patch) rồi làm
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics, numpy-array-reshape.
Nội dung đề bài
Mô tả bài toán
Vision Transformer không đọc từng điểm ảnh mà chia ảnh thành các ô vuông (patch) rồi làm phẳng mỗi ô thành một vector. Bước "patchify" này biến ảnh H x W thành danh sách các vector độ dài p * p, và thứ tự các patch phải theo hàng để khớp với vị trí không gian.
Yêu cầu
Viết hàm patchify(image, patch_size) trả về danh sách các vector patch đã làm phẳng, duyệt theo thứ tự hàng-trước (block trên-trái trước, rồi sang phải, rồi xuống dưới).
Quy ước nộp bài
Nộp hàm patchify trong solution.py. Hệ thống gọi hàm trực tiếp và so phần tử với sai số 1e-6; không đọc stdin và không in ra stdout.
Input
- image: ma trận 2 chiều kích thước H x W.
- patch_size: cạnh ô vuông p, phải chia hết cả H và W.
Output
Danh sách gồm (H/p) * (W/p) vector, mỗi vector dài p * p, trả về bằng .tolist().
Ràng buộc
- Nếu patch_size không chia hết một trong hai chiều, ném ValueError.
- Dùng NumPy reshape/transpose, không cắt bằng vòng lặp lồng nhau thủ công.
Ví dụ 1
Input
patchify(image=[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], patch_size=2)
Output
[[1, 2, 5, 6], [3, 4, 7, 8], [9, 10, 13, 14], [11, 12, 15, 16]]
Ví dụ 2
Input
patchify(image=[[1, 2], [3, 4]], patch_size=2)
Output
[[1, 2, 3, 4]]
Giải thích
Với ảnh [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] và p = 2, patch trên-trái là [1, 2, 5, 6], tiếp theo là [3, 4, 7, 8], rồi [9, 10, 13, 14] và [11, 12, 15, 16].
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
