基于yolo-v3的目标检测模型


一、项目简述

目标一:通过深度学习模型,主要是采用实时性较好的yolo-v3模型检测加油站场景下的人和手机。

目标二:复现最新论文中的方法,识别场景中的人物交互关系,主要是识别加油站中人员打手机的行为。

二、检测部分完整训练过程

1、数据准备及预处理

(1)、使用标注工具BBox-Label-Tool对加油站图像中的人和物进行标注,主要标注了人,和手机两种类别,以及框的坐标。获得数据集2000张图片,以5 :3:2划分训练集,验证集和测试集。

(2)、因为数据量较大,每次训练都直接读取的话效率就很低,所以tensorflow就提供了一种较为高效的数据读取方式tfrecord,可通过convert_tfrecord.py基于图像数据生成tfrecord生成trainset和testset。

(3)、下载用coco数据集预训练好的权重模型yolov3.weights进行初始化
地址:https://github.com/YunYang1994/tensorflow-yolov3

2、训练模型

(1)、登陆服务器后,进入“/data/videoAnalisys/yolo/train_demo”,运行:

CUDA_VISIBLE_DEVICE=0 python quick_train.py

即可利用GPU训练模型。
(2)、最开始运行可能会报错,module not found error,这时候需要设置工作路径,在quick_train.py最上方加上两行代码即可:

import sys
sys.path.append("/data/videoAnalysis/yolov3")

(3)、可以用tensorboard查看模型的损失函数可视图

基于yolo-v3的目标检测模型
(4)、训练完成后,把“data/train_dome_data/model”传回本地checkpoint文件夹,并利用convert_weight.py转化。然后即可测试模型效果,可通过运行train_demo/show_train_result.py检验模型处理图像的效果。

3、模型保存

将模型保存为ckpt、pb格式

(1)、ckpt模型训练完调用

saver.save(sess, save_path="./data/model/cpkt",global_step=step + 1)保存,调用saver.restore(sess, model_dir)加载。

(2)、pb的保存:多了将变量冻结成常量的过程,输出节点需要注意,不同模型可能名字不一样。
调用freeze_graph.py即可保存

基于yolo-v3的目标检测模型

(3)、查看pb文件所有节点
调用crea_graph即可查看

基于yolo-v3的目标检测模型
接下来需要将pb文件转换成om格式方能部署到Atlas500上

4、模型离线转化

使用Tensorflow等框架训练好的模型不能直接放上Atlas500运行,需通过OMG工具将其转换为昇腾AI处理器支持的离线模型(即om格式),模型转换过程中可以实现算子调度的优化、权重数据重排、量化压缩、内存使用优化等。此处主要使用命令行的方式用OMG进行模型转化。

三、人物交互关系的识别部分

参考论文

论文名称:VSGNet: Spatial Attention Network for Detecting Human Object Interactions Using Graph Convolutions

论文地址:https://arxiv.org/abs/2003.05541

作者提出三个分支来识别人物交互动作:

视觉分支:分别从人、物和周围环境中提取视觉特征;

空间注意分支:建模人-物对之间的空间关系;

图卷积分支:将场景视为一个图,人与对象作为节点,并对结构交互进行建模。
github链接:https://github.com/ASMIftekhar/VSGNet

可以用自己的数据集训练,识别出人打手机这一动作

CUDA_VISIBLE_DEVICES=0 python main.py -fw new_test -ba 8 -l 0.001 -e 80 -sa 20

相关文章: