人工智能——基于PicoDet使用手机行为检测

在前面有介绍过PicoDet超轻量目检算法,详情可以参看:23.基于PP-PicoDet轻量级目标检测模型——实现目标检测项目。

在工作或生活中,我们经常有些场景需要检测使用手机的行为,以便进行跟踪处理。

本文主要是使用PicoDet目标检测算法,训练一个使用手机行为检测。这里的backbone选择是:高精度骨干网络–ESNet(Enhanced ShuffleNet)

数据集:来源网络,8201张图像,VOC格式。

部分数据

98.人工智能——基于PicoDet使用手机行为检测

部分数据

模型训练

import paddlex as pdx
from paddlex import transforms as T

# 定义训练和验证时的transforms
train_transforms = T.Compose([
    T.RandomCrop(), T.RandomHorizontalFlip(), T.RandomDistort(),
    T.BatchRandomResize(
        target_sizes=[576, 608, 640, 672, 704], interp='RANDOM'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

eval_transforms = T.Compose([
    T.Resize(
        target_size=640, interp='CUBIC'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 定义训练和验证所用的数据集
train_dataset = pdx.datasets.VOCDetection(
    data_dir='train/0_phone',
    file_list='train/0_phone/train_list.txt',
    label_list='train/0_phone/labels.txt',
    transforms=train_transforms,
    shuffle=True)

eval_dataset = pdx.datasets.VOCDetection(
    data_dir='train/0_phone',
    file_list='train/0_phone/val_list.txt',
    label_list='train/0_phone/labels.txt',
    transforms=eval_transforms,
    shuffle=False)

# 初始化模型,并进行训练
num_classes = len(train_dataset.labels)
model = pdx.det.PicoDet(num_classes=num_classes, backbone='ESNet_l')

model.train(
    num_epochs=20,
    train_dataset=train_dataset,
    train_batch_size=14,
    eval_dataset=eval_dataset,
    pretrain_weights='COCO',
    learning_rate=.05,
    warmup_steps=24,
    warmup_start_lr=0.005,
    save_interval_epochs=1,
    lr_decay_epochs=[6, 8, 11],
    use_ema=True,
    save_dir='output/picodet_phone',
    use_vdl=True)

部分训练过程epoch=12/20,使用训练的结果来看,bbox_map达到90%以上,基本还是可以的。

…………
2022-05-22 10:44:07 [INFO]	[TRAIN] Epoch=12/20, Step=452/468, loss_vfl=0.503368, loss_bbox=0.268626, loss_dfl=0.182570, loss=0.954564, lr=0.017488, time_each_step=0.49s, eta=0:42:36
2022-05-22 10:44:12 [INFO]	[TRAIN] Epoch=12/20, Step=462/468, loss_vfl=0.551387, loss_bbox=0.314132, loss_dfl=0.203088, loss=1.068607, lr=0.017408, time_each_step=0.49s, eta=0:42:23
2022-05-22 10:44:15 [INFO]	[TRAIN] Epoch 12 finished, loss_vfl=0.5484224, loss_bbox=0.31818506, loss_dfl=0.19476633, loss=1.0613737 .
2022-05-22 10:44:15 [WARNING]	Detector only supports single card evaluation with batch_size=1 during evaluation, so batch_size is forcibly set to 1.
2022-05-22 10:44:15 [INFO]	Start to evaluate(total_samples=1640, total_steps=1640)...
2022-05-22 10:45:44 [INFO]	Accumulating evaluatation results...
2022-05-22 10:45:44 [INFO]	[EVAL] Finished, Epoch=12, bbox_map=90.200701 .
2022-05-22 10:45:44 [INFO]	Model saved in output/picodet_phone/best_model.
2022-05-22 10:45:44 [INFO]	Current evaluated best model on eval_dataset is epoch_12, bbox_map=90.20070097912135
2022-05-22 10:45:45 [INFO]	Model saved in output/picodet_phone/epoch_12.
2022-05-22 10:45:48 [INFO]	[TRAIN] Epoch=13/20, Step=4/468, loss_vfl=0.605212, loss_bbox=0.361655, loss_dfl=0.222297, loss=1.189165, lr=0.017327, time_each_step=0.59s, eta=0:46:53
2022-05-22 10:45:53 [INFO]	[TRAIN] Epoch=13/20, Step=14/468, loss_vfl=0.486455, loss_bbox=0.302700, loss_dfl=0.186873, loss=0.976028, lr=0.017247, time_each_step=0.48s, eta=0:40:0
…………

训练模型包括三个文件.

1、model.pdparams  模型参数
2、model.pdopt         优化参数
3、model.yml            配置文件  

在训练模型目录运行命令,导出部署模型,生成一个inference_model目录。

>paddlex --export_inference --model_dir best_model --save_dir infer

模型预测

测试数据集,包括使用手机和未使用手机的图片。

import cv2
import os
predictor=pdx.deploy.Predictor("output/picodet-phone/inference_model",use_gpu=True)
for f in os.listdir("img/photo"):
    imgfile=os.path.join("img/photo",f)
    img=cv2.imread(imgfile)
    result=predictor.predict(img)
    #print(result)
    vis_img=pdx.det.visualize(img,result,threshold=0.5,save_dir=None)
    cv2.imshow("result",vis_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
98.人工智能——基于PicoDet使用手机行为检测

检测到使用手机

98.人工智能——基于PicoDet使用手机行为检测

检测到使用手机

未检测到使用手机

98.人工智能——基于PicoDet使用手机行为检测

检测到使用手机行为

从模型预测结果来看,基本上达到检测的要求,但还是会存在一些错检的行为,这里可能还需要多一些数据来进行训练。

对于人工智能,一是要有大数据,二是要有算力,三就是算法支持。

对于普通个人用户来说,即使有大数据,算力都很难保障。算法也都是人家的。

本文链接:https://www.dzdvip.com/33193.html 版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月22日 14:56
下一篇 2022年5月22日 16:47

相关推荐

发表评论

您的电子邮箱地址不会被公开。