Chuẩn hoá ảnh theo từng kênh với mean/std
Trước khi đưa ảnh vào mạng, ta thường trừ đi giá trị trung bình và chia cho độ lệch
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-broadcasting.
Nội dung đề bài
Mô tả bài toán
Trước khi đưa ảnh vào mạng, ta thường trừ đi giá trị trung bình và chia cho độ lệch chuẩn của từng kênh màu. Mỗi kênh có mean/std riêng, nên phép chuẩn hoá phải phát theo trục kênh thay vì dùng một hằng số chung.
Yêu cầu
Viết hàm normalize_image(image, mean, std) nhận ảnh định dạng (C, H, W) và hai danh sách mean, std dài C, trả về ảnh đã chuẩn hoá (x - mean_c) / std_c cho từng kênh.
Quy ước nộp bài
Nộp hàm normalize_image 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: mảng 3 chiều (C, H, W).
- mean: danh sách độ dài C.
- std: danh sách độ dài C, mọi giá trị khác 0.
Output
Ảnh 3 chiều cùng kích thước, trả về bằng .tolist().
Ràng buộc
- Nếu mean/std không khớp số kênh, hoặc có std bằng 0, ném ValueError.
- Dùng NumPy broadcasting với mean/std reshape thành (C, 1, 1).
Ví dụ 1
Input
normalize_image(image=[[[1, 2], [3, 4]], [[10, 20], [30, 40]]], mean=[2, 25], std=[2, 5])
Output
[[[-0.5, 0.0], [0.5, 1.0]], [[-3.0, -1.0], [1.0, 3.0]]]
Ví dụ 2
Input
normalize_image(image=[[[1, 2], [3, 4]]], mean=[2], std=[2])
Output
[[[-0.5, 0.0], [0.5, 1.0]]]
Giải thích
Với ảnh kênh 0 là [[1, 2], [3, 4]] và kênh 1 là [[10, 20], [30, 40]], mean = [2, 25], std = [2, 5], kênh 0 thành [[-0.5, 0.0], [0.5, 1.0]] và kênh 1 thành [[-3.0, -1.0], [1.0, 3.0]].
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.
