1.赛事背景
1.主办方
- 赛事链接
- 训练集
- 测试集
- 验证集
2.赛事介绍
1. 【赛题描述】
行为规范,即指某些特定的场景会对人物的行为做出特定的限制,比如加油站禁止吸烟,驾驶员禁止打电话,博物馆禁止拍照等。随着计算机人工智能的发展,这些禁止行为或者不文明行为都可通过基于视频监控的行为检测算法进行监控、发现以及适当时给与警告。
本赛题基于这些数据,要求选手设计基于计算机视觉的算法,识别出其中人物抽烟和打电话的行为,难点在于数据集中人物清晰度有限,而且人物的像素大小不一,请选手合理利用技巧,尝试不同的图像算法,提升抽烟打电话行为识别的准确度。
2. 【赛题任务】
初赛:选手可下载数据集的一部分,设计算法并完成模型训练,输出结果要求标出图片中人物的三种行为:抽烟,打电话,正常(即没有抽烟或者打电话的行人);
复赛:选手可下载包含初赛数据集在内的全量数据,请选手利用增量数据优化初赛的算法,提升输出结果的准确性;较初赛不同的是,复赛数据集中有少量的既抽烟又打电话的人员图像,输出结构要求标出图片中人物的四种行为:抽烟,打电话,抽烟&打电话,正常。
决赛:参赛队伍现场答辩,确认最终获奖名单。

2.baseline
2.1 文件夹结构
- 1.初始文件结构

- 2.最终文件夹结构

2.2 demo
1. 01_train_test_split.py
"""
https://blog.youkuaiyun.com/u010420283/article/details/90142480
将包含三个类别文件夹的训练集划分为训练集+验证集,比例自定(此处20%)
"""
import os, random, shutil
def moveFile(fileDir):
pathDir = os.listdir(fileDir)
filenumber = len(pathDir)
picknumber = int(filenumber * ratio)
sample = random.sample(pathDir, picknumber)
for name in sample:
shutil.move(os.path.join(fileDir, name), os.path.join(tarDir, name))
return
if __name__ == '__main__':
ori_path = r'C:\Users\hjz\python-project\project\03_smoking_calling\data\train'
split_Dir = r'C:\Users\hjz\python-project\project\03_smoking_calling\data\val'
ratio = 0.2
for firstPath in os.listdir(ori_path):
fileDir = os.path.join(ori_path, firstPath)
tarDir = os.path.join(split_Dir, firstPath)
if not os.path.exists(tarDir):
os.makedirs(tarDir)
moveFile(fileDir)
2. 02_tf2_mobilev2_classes.py
import matplotlib.pyplot as plt
import numpy as np
import os
import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory
train_normal = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\train\normal"
train_phone = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\train\phone"
train_smoke = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\train\smoke"
train_dir = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\train"
val_dir = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\val"
val_normal = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\val\normal"
val_phone = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\val\phone"
val_smoke = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\val\smoke"
test_dir = r"C:\Users\hjz\python-project\project\03_smoking_calling\data\test"
train_normal_num = len(os.listdir(train_normal))
train_phone_num = len(os.listdir(train_phone))
train_smoke_num = len(os.listdir(train_smoke))
val_normal_num = len(os.listdir(val_normal))
val_phone_num = len(os.listdir(val_phone))
val_smoke_num = len(os.listdir(val_smoke))
train_all = train_normal_num + train_phone_num + train_smoke_num
val_all = val_normal_num + val_phone_num + val_smoke_num
test_num = len(os.listdir(test_dir))
print("train normal number: ", train_normal_num)
print("train phone_num: ", train_phone_num)
print("train_smoke_num: ", train_smoke_num)
print("all train images: ", train_all)
print("val normal number: ", val_