| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | IOAI 2025 — Phân đoạn ngữ nghĩa radar | 100 (p) | 1.0s | 256M |
| 2 | IOAI 2025 — Đếm gà | 100 (p) | 1.0s | 256M |

Khái niệm khoảng cách (range), góc phương vị (azimuth), góc ngẩng (elevation) và vận tốc (velocity) trong radar.

Trực quan hóa một mẫu radar (1.mat.pt) trong tập huấn luyện: 6 heatmap đặc trưng + bản đồ nhãn ngữ nghĩa.
Radar là công nghệ then chốt trong truyền thông không dây và có nhiều ứng dụng thực tiễn (xe tự lái, giám sát, y tế...). Nguyên lý cơ bản: ăng-ten phát tín hiệu rồi thu lại các tín hiệu phản xạ từ vật thể trong môi trường. Bằng cách xử lý các tín hiệu phản xạ này, hệ thống có thể ước lượng khoảng cách (range), góc phương vị (azimuth), góc ngẩng (elevation) và vận tốc (velocity) của vật thể.
Trong thực tế, tín hiệu radar bị nhiễu nặng và lẫn phản xạ từ rất nhiều vật thể không phải mục tiêu. Ví dụ trong môi trường trong nhà, ngoài người cần phát hiện, radar còn bắt phản xạ từ tường, ghế, vali... Bài toán này yêu cầu bạn xây dựng mô hình AI thực hiện phân đoạn ngữ nghĩa (semantic segmentation) trên dữ liệu radar trong nhà: với mỗi pixel của bản đồ radar, mô hình phải dự đoán nó là nền hay thuộc về một trong bốn loại vật thể (vali, ghế, người, tường).
Tín hiệu radar được tiền xử lý thành các heatmap mã hoá cường độ tín hiệu nhận được tại các vị trí và hướng khác nhau. Có hai loại heatmap: tĩnh (static) làm nổi bật phản xạ từ vật thể đứng yên, và động (dynamic) làm nổi bật thay đổi do vật thể chuyển động. Với ba cặp trục (range-azimuth, range-elevation, range-velocity) và mỗi cặp đều có bản tĩnh + bản động, mỗi mẫu có tổng cộng 6 heatmap.
Mỗi mẫu là một tensor 7 × 50 × 181 lưu trong tệp .mat.pt, trong đó trục 50 là số bin khoảng cách, trục 181 là số bin góc/vận tốc (tương ứng -90° đến +90°; các bin vận tốc cũng được ánh xạ sang dải này để hiển thị thống nhất). Mọi cường độ heatmap đã chuẩn hoá về [0, 1].
Sáu kênh đầu (chỉ số 0-5) là các heatmap đầu vào:
| Kênh | Nội dung |
|---|---|
| 0 | Heatmap tĩnh range-azimuth |
| 1 | Heatmap động range-azimuth |
| 2 | Heatmap tĩnh range-elevation |
| 3 | Heatmap động range-elevation |
| 4 | Heatmap tĩnh range-velocity |
| 5 | Heatmap động range-velocity |
Kênh thứ 7 (chỉ số 6) là bản đồ nhãn ngữ nghĩa ground truth, lưu ở dạng range-azimuth — đây cũng là đại lượng cần dự đoán. Mỗi pixel nhận một trong các giá trị:
| Giá trị | Ý nghĩa |
|---|---|
-1 |
Nền (không có mục tiêu) |
0 |
Vali |
1 |
Ghế |
2 |
Người |
3 |
Tường |
Quy mô: 1800 mẫu huấn luyện (training_set), 500 mẫu validation (validation_set), 500 mẫu test (test_set).
Lưu ý về tệp dữ liệu. Toàn bộ .mat.pt (~1.4 GB) quá lớn để đính kèm trên LQDOJ. Bạn cần tải dữ liệu gốc từ kho chính thức:
https://github.com/IOAI-official/IOAI-2025/tree/main/Individual-Contest/Radar
Để hỗ trợ tự đánh giá ở local, hệ thống có sẵn:
ioai25radar_baseline.ipynb — notebook baseline của ban tổ chức (cách tải dữ liệu, một mạng CNN nhỏ và pipeline huấn luyện).figures.zip — hình minh hoạ heatmap mẫu và các trục range/azimuth/elevation/velocity.ground_truth_val.csv — nhãn đúng của tập validation để bạn tự chấm thử trước khi nộp.Đầu vào của mô hình là tensor 6 × 50 × 181; đầu ra là bản đồ nhãn 50 × 181 với mỗi pixel thuộc {-1, 0, 1, 2, 3}.
Bạn nộp một tệp zip chứa test_answer.csv với header:
filename, pixel_0, pixel_1, ..., pixel_9049
(50 × 181 = 9050 pixel, duỗi phẳng theo thứ tự hàng). Mỗi dòng tương ứng một mẫu test:
filename: tên tệp mẫu dạng <id>.mat.pt (ví dụ 1.mat.pt).pixel_0 ... pixel_9049: nhãn dự đoán cho từng pixel, số nguyên trong {-1, 0, 1, 2, 3}.Thứ tự dòng không quan trọng, miễn là mỗi mẫu test xuất hiện đúng một lần.
Chấm theo độ chính xác pixel có trọng số, ưu tiên các pixel mục tiêu hơn pixel nền:
-1) đoán đúng: 1 điểm.[0, 1] bằng cách chia cho điểm tối đa lý thuyết (mọi pixel đều đúng):trong đó \(C_0\) là tập pixel nền theo ground truth, \(C_1\) là tập pixel không phải nền, và \(C_{*,\text{correct}}\) là phần đoán đúng tương ứng.
Ví dụ. Ground truth \(3 \times 3\):
Dự đoán:
có 4 pixel -1 đúng và 1 pixel 2 đúng, được \(4 \cdot 1 + 1 \cdot 50 = 54\) trên tối đa \(6 \cdot 1 + 3 \cdot 50 = 156\), tức là \(54/156 \approx 0{,}346\).
Mức tham khảo của ban tổ chức: baseline 0,67, top 0,90.

Ví dụ ảnh trại gà và bản đồ mật độ tương ứng.
Bạn đóng vai trưởng nhóm AI hợp tác với các trang trại nuôi gà Ác (Silkie) thả vườn. Đếm chính xác số gà rất quan trọng cho cả người chăn nuôi lẫn công ty bảo hiểm: dịch bệnh hay thú săn mồi có thể làm đàn gà sụt giảm nhanh, và bồi thường bảo hiểm đòi hỏi con số tổn thất chính xác.
Nhiệm vụ là đếm gà bằng phương pháp ước lượng bản đồ mật độ (density estimation) — kỹ thuật phổ biến trong đếm đám đông và đếm động vật. Thay vì phát hiện trực tiếp từng con, mô hình hồi quy ra một bản đồ mật độ 2D có cùng vị trí không gian với ảnh; tổng pixel của bản đồ chính bằng số gà trong ảnh.
Cụ thể, với mỗi ảnh trang trại đầu vào (RGB, 720×1280), mô hình cần dự đoán một bản đồ mật độ 180×320 (giảm độ phân giải để tiết kiệm bộ nhớ), float32, không âm. Cộng toàn bộ giá trị trong bản đồ cho ta số gà ước tính.
Tập huấn luyện chính thức (ảnh + nhãn bản đồ mật độ) do IOAI công bố trên HuggingFace tại: https://huggingface.co/datasets/ioaihsc/Task2_Chicken_Counting_LABEL.
Bộ dữ liệu gốc gồm 100 ảnh huấn luyện có nhãn, 100 ảnh validation và 100 ảnh test; ảnh lẫn nhãn của hai tập sau đều được ban tổ chức giữ kín.
Để hỗ trợ chấm thử ngoại tuyến, LQDOJ đính kèm validation_density.npz chứa bản đồ mật độ thật của tập validation dưới khóa y_val. Đáp án tập test thật chỉ hệ thống chấm sử dụng.
Các tệp đính kèm:
ioai25chicken_baseline.ipynb — notebook baseline đầy đủ. Mô hình baseline ChickenCounting gồm FeatureExtraction (4 lớp tích chập, trọng số có sẵn trong base.pth) ghép với DensityDecoder để bạn tự thiết kế.figures.zip — minh họa ảnh đầu vào và bản đồ mật độ tham chiếu.validation_density.npz — nhãn validation để chấm thử cục bộ.Nộp một tệp .zip chứa duy nhất tệp test_answer.npz, bên trong có mảng tên pred_b với:
float32.(100, 1, 180, 320) hoặc (100, 180, 320).NaN/Inf).Sai kích thước, có giá trị âm/không hữu hạn, hoặc thiếu khóa pred_b đều bị tính 0 điểm.
Với mẫu thứ \(i\), gọi \(S_i\) là tổng bản đồ mật độ dự đoán và \(T_i\) là tổng bản đồ thật (số gà thật). Sai số tương đối từng ảnh:
Điểm cuối cùng tính trên toàn bộ 100 ảnh test:
Điểm bằng 1.0 khi tổng dự đoán trùng khít với số gà thật ở mọi ảnh, và giảm dần về 0 khi sai số tăng. Chỉ tổng bản đồ ảnh hưởng đến điểm — phân bố không gian không bị chấm trực tiếp, nhưng học đúng phân bố thường giúp tổng chính xác hơn.
Mã nguồn gốc: https://github.com/IOAI-official/IOAI-2025/tree/main/Individual-Contest/Chicken_Counting.