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

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

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

部分数据

部分数据

模型训练

import paddlex as pdxfrom paddlex import transforms as T# 定义训练和验证时的transformstrain_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:362022-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:232022-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.200700979121352022-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:532022-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 cv2import ospredictor=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()

检测到使用手机

检测到使用手机

未检测到使用手机

检测到使用手机行为

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

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

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

声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

(0)
上一篇 2022年5月15日
下一篇 2022年5月15日

相关推荐