基于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查看模型的损失函数可视图
(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即可保存
(3)、查看pb文件所有节点
调用crea_graph即可查看
接下来需要将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