赛题介绍
本大赛旨在提高全国高校学生在国产平台动作识别应用领域自主创新设计与工程实践能力,培养具有创新思维、具备解决复杂工程问题能力且拥有团队合作精神的优秀人才,在活跃校园创新创业学术氛围的同时,推进高校与企业人才培养合作共建。
赛题内容
本届大赛在初赛和复赛阶段分别设GPU动作识别和国产平台动作识别两个专项赛题,以赛事方提供的视频数据作为训练样本,参赛选手需基于提供的样本构建模型,在赛事方指定的硬件平台上对视频中的动作进行识别推理。大赛评审组以模型准确性和模型推理耗时为主要维度进行打分评定成绩。
本次比赛复赛指定硬件平台为登临科技GoldWasser V1-UL-64-16。关于复赛的技术细节,详见复赛通知。
比赛链接:http://challenge.xfyun.cn/topic/info?type=action-recognition&ch=ds22-dw-zmt05
参赛对象
大赛参赛对象包括但不限于安徽省内高校集成电路类相关专业(微电子、仪器仪表、人工智能、通信、计算机等)在校大学生。
提交要求
无论初赛还是复赛,选手只需要提交测试视频文件对应的txt文件,txt文件的每一行标明帧号和本帧的人物动作label id(格式:帧id ,动作类别id)。
赛题任务
带标注的训练数据,即视频中的每一帧都有动作标签;

不带标注的测试数据。作品介绍视频要求:视频数据按照数据来源存放在不同的文件夹中,视频文件采用H.264编码的mp4格式;标签文件对应视频文件放在同一文件夹下,标签文件采用txt格式,每一行标明帧号和本帧的人物动作label。
评价指标
模型预测结果采用准确率(accuarcy)进行评价,对于模型预测的结果,严格对比每一帧预测结果与真实标注的要素名和要素内容,若二者完全一致,则记为本帧识别正确。
对于一段测试视频计算准确率的方法为:accuracy=本段视频中完全预测正确的要素个数/本段视频的帧数。
对于一个模型计算准确率的方法为:accuracy=累加每段视频预测的准确率/总的测试视频个数。
解题思路
赛题需要对视频的图像内容进行识别,因此可以考虑抽象为图像分类任务。完成赛题的步骤为:
步骤1:视频抽帧 步骤2:构建分类数据集 步骤3:训练分类模型 步骤4:对测试集进行预测
步骤1:训练集和测试集抽帧
由于赛题是按照帧标注的数据,因此我们抽帧可以直接选择所有的帧,并进行保存为图像。
def extract_images(video_path, out_dir):
video_name = os.path.basename(video_path).split('.')[0]
cam = cv2.VideoCapture(video_path)
print(video_path)
frame_count = 1
while True:
successed, img = cam.read()
if not successed:
break
outfile = f'./{out_dir}/{video_name}-{frame_count:06}.jpg'
cv2.imwrite(outfile, img)
frame_count += 1
步骤2:构建分类数据集
# 读取标注数据
paths = glob.glob('./国产平台动作识别挑战赛初赛公开数据/train/*')
paths.sort()
train_video_path = [x for x in paths if not x.endswith('txt')]
train_ann_path = [x for x in paths if x.endswith('txt')]
# 图像与标签的对应关系
train_img_list = []
train_label_list = []
for path in train_ann_path:
basename = os.path.basename(path)[:-4]
anns = codecs.open(path).readlines()
for idx, ann in enumerate(anns):
frame_count = idx + 1
train_img_list.append(f'./frames/train/{basename}-{frame_count:06}.jpg')
if ',' not in ann:
train_label_list.append(19)
else:
train_label_list.append(int(ann.split(',')[1]))
步骤3:训练分类模型
这里选择使用基础的resnet18模型,当然也可以选择更加复杂的模型。
model = models.resnet18(True)
model.fc = nn.Sequential(
nn.Dropout(p=0.5, inplace=True),
nn.Linear(in_features=512, out_features=14, bias=True)
)
步骤4:对测试集进行预测
for path in test_video_path:
cam = cv2.VideoCapture(path)
length = int(cam.get(cv2.CAP_PROP_FRAME_COUNT))
test_pred = []
for data, _ in test_loader:
pred = model(data.cuda())
test_pred += list(pred.argmax(1).cpu().numpy())
代码链接:https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2022
# 竞赛交流群 邀请函 #

添加Coggle小助手微信(ID : coggle666)
每天Kaggle算法竞赛、干货资讯汇总
与 24000+来自竞赛爱好者一起交流~





