帮助

个人资料

现在支持直接上传头像。前往「修改资料」,上传图片后即会显示为您的头像。

个性签名可以使用 Markdown 与 HTML,请不要在其中添加恶意代码。

添加题目

题面

添加题目页面填写题面,题目内容使用 Markdown 与 TeX 公式。

测试数据与评测方式

本站评测系统支持8种评测方式,针对不同的AI任务类型提供专业的评测指标。请根据题目类型准备并上传测试数据 ZIP 压缩包

支持的评测方式

评测方式 适用任务 评测指标 输出格式
Segmentation
图像分割
语义分割、实例分割 mIoU (平均交并比) [B, W, H] 整数类别掩码
Classification
分类
图像分类、文本分类 Exact Match (精确匹配) One-hot 编码或类别索引
Object Detection
目标检测
目标检测、人脸检测 mAP (平均精度均值) [C, M, 5] 包含置信度的边界框
Language Model
语言模型
函数调用、结构化输出 JSON内容比较 JSON字符串
Traditional NLP
传统NLP
语义分析、情感分析 Cross-Entropy (交叉熵) 概率分布
Speech
语音处理
语音增强、降噪 SISDR (信号失真比) 音频信号数组
Temporal Data
时序数据
时间序列预测、趋势分析 RMSE (均方根误差) 时间序列数组
Robot Simulation
机器人仿真
机器人控制、路径规划 待实现 待定

1. 压缩包目录结构(必须严格一致)

test/
  input/
    0001.npy
    0002.npy
    ...
  output/
    0001.npy
    0002.npy
    ...
        
  • 必须是有效的 ZIP 文件;解压后根目录下为 test/inputtest/output 两个文件夹。
  • 仅支持 .npy 文件;文件名需一一对应且相同(如 input/0001.npy 对应 output/0001.npy)。
  • 若某输入样本缺少同名标签文件,该样本会被跳过且不计入总数;如果 input 目录无任何样本,将判定为数据错误。

2. 各类型的输出格式详解

2.1 Segmentation(图像分割)
  • 输出格式[batch, width, height][width, height]
  • 数值类型:整数,表示每个像素的类别标签(0, 1, 2, ...)
  • 评测指标:计算每个类别的 IoU(交并比),取平均得到 mIoU
  • 注意:预测和标签的形状必须完全一致
2.2 Classification(分类)
  • 输出格式:One-hot 编码 [n_samples, n_classes] 或类别索引 [n_samples]
  • 评测指标:对于 one-hot 编码,每个样本必须完全匹配;对于类别索引,直接比较
  • 示例
    • One-hot: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
    • 类别索引: [0, 1, 2]
2.3 Object Detection(目标检测)
  • 输出格式[num_classes, max_detections, 5]
  • 最后一维[x1, y1, x2, y2, confidence](边界框坐标 + 置信度)
  • 标签格式[num_classes, max_gt_boxes, 4](只有坐标,无置信度)
  • 评测指标:使用 IoU 阈值(默认0.5)匹配预测框和真值框,计算每个类别的 AP,取平均得到 mAP
  • 填充:如果检测数量少于 max_detections,用全零填充
2.4 Language Model(语言模型 - 函数调用)
  • 输出格式:JSON 字符串
  • 评测指标:比较 JSON 内容是否相同(忽略格式化、缩进和键顺序)
  • 示例
    {"function": "get_weather", "args": {"city": "Beijing", "unit": "celsius"}}
  • 注意:必须是有效的 JSON 格式,内容必须完全匹配
2.5 Traditional NLP(传统NLP)
  • 输出格式:概率分布 [n_samples, n_classes]
  • 数值范围:[0, 1],每个样本的概率和应为1(或接近1)
  • 评测指标:计算预测概率和真值标签之间的交叉熵,越低越好
  • 注意:如果输出是 logits,系统会自动应用 softmax
2.6 Speech(语音处理)
  • 输出格式:音频信号数组 [signal_length][batch, signal_length]
  • 数值类型:浮点数,表示音频采样值
  • 评测指标:SISDR(尺度不变的信号失真比),越高越好
  • 注意:预测和标签的信号长度必须一致
2.7 Temporal Data(时序数据)
  • 输出格式:时间序列数组,形状可以是 [time_steps][batch, time_steps][batch, time_steps, features]
  • 评测指标:RMSE(均方根误差),越低越好
  • 注意:预测和标签的形状必须完全一致
2.8 Robot Simulation(机器人仿真)
  • 状态:暂未实现,请关注后续更新

3. 代码提交流程与规范

提交的代码将在 Docker 容器中运行,通过文件系统读取输入数据并写入输出结果。

3.1 提交格式
  • 提交一个 ZIP 压缩包,包含你的代码、模型文件和其他必要文件。
  • 压缩包根目录必须包含 start.sh 脚本作为程序入口。
3.2 运行环境与数据交互

评测系统会将你的代码解压到容器中,并自动创建以下目录结构:

./data/
  input/      # 测试输入数据(.npy 文件)
  output/     # 你需要在此写入预测结果(.npy 文件)
  • 输入数据:位于 ./data/input/ 目录,包含所有测试样本(.npy 格式)
  • 输出数据:你的程序需要将预测结果写入 ./data/output/ 目录
  • 文件名对应:输出文件名必须与输入文件名完全相同(如 input/0001.npyoutput/0001.npy
3.3 程序执行流程
  1. 启动:评测系统执行 start.sh 脚本
  2. 加载模型:在你的代码中加载模型(如 ONNX、PyTorch、TensorFlow 等)
  3. 批量推理
    • 遍历 ./data/input/ 目录中的所有 .npy 文件
    • 读取每个输入文件,执行推理
    • 将预测结果保存到 ./data/output/,文件名与输入一致
  4. 程序退出:处理完所有样本后,程序正常退出
3.4 Python 示例代码
#!/usr/bin/env python3
import os
import numpy as np
import onnxruntime as ort

# 数据目录
INPUT_DIR = './data/input'
OUTPUT_DIR = './data/output'

# 创建输出目录
os.makedirs(OUTPUT_DIR, exist_ok=True)

# 加载模型(以 ONNX 为例)
model = ort.InferenceSession("model.onnx")

# 获取所有输入文件
input_files = [f for f in os.listdir(INPUT_DIR) if f.endswith('.npy')]

# 批量推理
for filename in input_files:
    # 读取输入数据
    input_path = os.path.join(INPUT_DIR, filename)
    input_data = np.load(input_path)

    # 执行推理(根据你的模型调整)
    output = model.run(None, {"input": input_data})[0]

    # 处理输出(示例:分类任务,转为 one-hot)
    result = np.zeros([10,], dtype=np.float32)
    result[np.argmax(output)] = 1.0

    # 保存结果(文件名与输入相同)
    output_path = os.path.join(OUTPUT_DIR, filename)
    np.save(output_path, result)
3.5 start.sh 示例
#!/bin/bash
python3 main.py
3.6 注意事项
  • 输出文件名必须与输入文件名完全相同(包括扩展名 .npy)
  • 必须处理 ./data/input/ 中的所有 .npy 文件
  • 输出数据的 shape 和 dtype 必须符合题目要求
  • 程序的总运行时间(包括模型加载和所有样本推理)受题目设置的时间限制约束
  • 可以自由使用任何 Python 库,但需确保在题目提供的环境中可用
  • 可以在代码中输出调试信息到 stdout/stderr,不会影响评测
  • 确保 start.sh 有执行权限(ZIP 压缩时保留权限,或在脚本开头添加 #!/bin/bash

4. 评测与判分规则

4.1 评分机制

所有评测方式返回的分数都归一化到 [0, 1] 区间,然后转换为百分制(0-100%):

  • Segmentation:mIoU 值直接作为分数(0-1)
  • Classification:准确率(正确数/总数)
  • Object Detection:mAP 值直接作为分数(0-1)
  • Language Model:完全匹配为1.0,不匹配为0.0
  • Traditional NLPscore = 1 / (1 + cross_entropy),交叉熵越低分数越高
  • Speech:SISDR 归一化到 [0, 1](-20dB→0, 0dB→0.5, 20dB→1.0)
  • Temporal Datascore = exp(-relative_rmse),RMSE 越低分数越高
4.2 三级成就系统

每道题目设置三个准确率阈值,根据提交的得分判定成就等级:

成就等级 默认阈值 描述 奖励池
卓越级 (Excellent) ≥ 95% 生产可用,极少错误 A 池
预期级 (Expected) ≥ 80% 满足实际需求 B 池
及格级 (Pass) ≥ 60% 基本功能可用 C 池
未入级 (Fail) < 60% 功能不完整 无奖励

注意:具体阈值由题目设置者在题目管理页面配置,上述为默认值。

4.3 时间与资源限制
  • 时间限制:为总运行时间(包括模型加载、数据读写和所有样本推理),超时未完成将被终止并判为 TLE (Time Limit Exceeded)
  • 内存限制:超出将判为 MLE (Memory Limit Exceeded)
  • 运行错误:模型或数据加载/运行异常判为 RE (Runtime Error)
  • 文件错误:无效 ZIP、缺少 start.sh 等判为文件错误

5. 实用建议与注意事项

5.1 通用建议
  • 确保 inputoutput 文件数量一致且文件名完全相同,且至少包含 1 个样本。
  • 若模型需要预处理/后处理,请在模型内部完成,或在生成 .npy 时提前处理好。
  • 避免单个样本过大导致读写或推理超时/内存不足。
  • 在本地测试时,使用相同的数据格式和评测方式验证输出。
  • 查看题目页面的"评测方式"标签,了解具体使用的评测指标。
5.2 针对不同评测方式的建议
  • Segmentation:确保输出是整数类别索引,而非概率图;类别编号从0开始。
  • Classification:对于 one-hot 编码,确保每个样本只有一个位置为1,其余为0。
  • Object Detection
    • 边界框坐标格式:[x1, y1, x2, y2](左上角和右上角)
    • 置信度范围:[0, 1]
    • 无检测时用全零填充,而非省略
  • Language Model:确保输出是有效的 JSON 字符串;使用 json.dumps() 生成标准格式。
  • Traditional NLP:如果模型输出 logits,可以直接提交,系统会自动应用 softmax。
  • Speech:保持音频采样率一致;信号长度必须与标签完全相同。
  • Temporal Data:注意时间序列的对齐;缺失值需要提前处理。
5.3 调试技巧
  • 为防止数据泄露,提交记录不会显示任何信息。
  • 先在本地测试,确保格式正确后再提交。
  • 如果评测失败,检查:
    • 输出文件名是否与输入完全对应
    • 输出数据的 shape 和 dtype 是否符合要求
    • 是否处理了所有输入文件
    • 程序是否正常退出(退出码为0)