2020中国华录杯·数据湖算法大赛—定向算法赛(吸烟打电话检测)baseline-tensorflow2.3-python3.6

本文档详细介绍了如何构建一个基于TensorFlow的计算机视觉模型,用于识别监控视频中的人物是否在抽烟、打电话或进行正常行为。通过数据预处理、训练集划分、模型构建(使用MobileNetV2为基础)、数据增强和Dropout策略,以及模型训练和预测,以提升行为识别的准确性。在模型训练过程中,使用了CategoricalCrossentropy作为损失函数,并通过EarlyStopping和ModelCheckpoint回调函数优化训练过程。

1.赛事背景

1.主办方

  1. 赛事链接
  2. 训练集
  3. 测试集
  4. 验证集

2.赛事介绍


 1. 【赛题描述】

行为规范,即指某些特定的场景会对人物的行为做出特定的限制,比如加油站禁止吸烟,驾驶员禁止打电话,博物馆禁止拍照等。随着计算机人工智能的发展,这些禁止行为或者不文明行为都可通过基于视频监控的行为检测算法进行监控、发现以及适当时给与警告。

本赛题基于这些数据,要求选手设计基于计算机视觉的算法,识别出其中人物抽烟和打电话的行为,难点在于数据集中人物清晰度有限,而且人物的像素大小不一,请选手合理利用技巧,尝试不同的图像算法,提升抽烟打电话行为识别的准确度。

 2. 【赛题任务】

初赛:选手可下载数据集的一部分,设计算法并完成模型训练,输出结果要求标出图片中人物的三种行为:抽烟,打电话,正常(即没有抽烟或者打电话的行人);

复赛:选手可下载包含初赛数据集在内的全量数据,请选手利用增量数据优化初赛的算法,提升输出结果的准确性;较初赛不同的是,复赛数据集中有少量的既抽烟又打电话的人员图像,输出结构要求标出图片中人物的四种行为:抽烟,打电话,抽烟&打电话,正常。    

决赛:参赛队伍现场答辩,确认最终获奖名单。

在这里插入图片描述

2.baseline

2.1 文件夹结构

  1. 1.初始文件结构

在这里插入图片描述

  1. 2.最终文件夹结构
    在这里插入图片描述

2.2 demo

1. 01_train_test_split.py

"""
https://blog.youkuaiyun.com/u010420283/article/details/90142480
将包含三个类别文件夹的训练集划分为训练集+验证集,比例自定(此处20%)
"""
# coding=utf-8
import os, random, shutil


def moveFile(fileDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    picknumber = int(filenumber * ratio)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取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'  # 最开始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)  # val下子文件夹名字
        if not os.path.exists(tarDir):  # 如果val下没有子文件夹,就创建
            os.makedirs(tarDir)
        moveFile(fileDir)  # 从每个子类别开始逐个划分

2. 02_tf2_mobilev2_classes.py

# 1.导入包
import matplotlib.pyplot as plt
import numpy as np
import os
import tensorflow as tf

from tensorflow.keras.preprocessing import image_dataset_from_directory

# # 2.加载数据

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"#验证集用01_train_test_splict.py生成
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_
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值