# visual_relationship_detection
**Repository Path**: xiehou-design/visual_relationship_detect
## Basic Information
- **Project Name**: visual_relationship_detection
- **Description**: 该项目用于检测图像中两个目标的关系,具体如ReadMe文件所示
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2022-07-05
- **Last Updated**: 2022-11-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 视觉对象关系检测
## 数据集
本项目使用了VG和VRD数据集,其项目数据集目录如下图图1所示。其中coco目录是和目标检测相关的,为了打通目标检测和对象关系,所以采用coco数据集训练的目标检测模型,我们剔除了部分无用的目标类别。

图1 项目数据目录
## 数据处理
数据处理模块代码框架如下图图2所示。

图2 vg和vrd数据筛选和预处理代码
其中`vg.py`和`vrd.py`分别表示`vg`数据集和`vrd`数据集的加载代码,也就是实现了自定义加载`Dataset`类。`get_dataset.py`是对`vg.py`和`vrd.py`的调用和加载。`get_part_data_from_vg.py`、`get_part_data_from_vg.py`、`get_part_data_from_vg.py` 、`split_vg_relationship.py`、`split_vrd_annotation_train.py` 、`visual_single_image_annotation.py`都是对数据集进行处理和划分的一些数据处理代码。
## 语言模型
我们这里采用了一种比较简单的`glove`模型,文件结构如下图3所示。语言模型默认采用300维的词向量表示方法,可以替换。要是目标类别不存在词向量中,则随机初始化词向量来表示目标的类别。

图3 glove语言模型文件目录
## 关系检测模型
关系检测模型结构如下图图4所示,该文件夹下包含了两个文件,其中`mfurln.py`代表的是对象关系检测模型的结构,`create_model.py`是模型的调用程序,便于统一化管理。在其基础上可以添加不同的关系检测模型。

图4 关系检测模型框架示意图
## 目标检测模型
目标检测模型我们使用了`one-stage`模型进行检测,目标检测模型的目录结构框架如下图5所示。

图5 目标检测模型模型框架
该文件基本上不用去修改,因为该项目的重点不是目标检测,我们仅仅采用了**retinanet**的预测部分,没有对该部分模型进行训练。在不重新训练目标检测代码的情况下可以不用去管这个文件目录下的文件功能。
## 模型保存
因为我们对原始模型做出了许多改进,所以说存在较多的模型保存目录,这里仅仅保留部分模型结果,所以这里只做部分模型的展示,具体如下图6所示。

图6 模型保存目录
## 工具
我们定义了多种工具类,便于辅助模型的训练,具体文件目录如下图图7所示。

图7 utils工具类
其中`config.py`是两个数据集的配置文件,如果对数据集进行更改则需要在里面进行转化其数据值。`evalue_util.py`是各种参数的评价指标自定义类,便于实现模型的评估。`focal_loss.py`为解决样本类别不平均问题自定义实现的**focal loss**类。`get_object_classify_vector.py`为从`glove`语言模型中获取每个模型对应的**embedding**的函数。`iou_util.py`文件是为了方便计算**IOU**所设计的函数。`opts.py`是为了设置各种模型训练参数的设定文件,**非常重要!!!**`spatial_location.py`文件是生成了不同种类的**spatial_location_type**的文件。
其中`opts.py`文件所需要设置的参数大致如下图图8所示。

图8 opts所需要设置参数
## 其他
项目剩余文件如下图9所示。

其中`main.py`是程序的训练代码,可以修改`utils/opts.py`文件后,直接运行该文件,模型开始训练。`training.py`是程序的训练文件,可以不用去修改。`predict_predicate.py`和`predict_predicate_copy.py`是直接使用**mfurln**模型进行关系预测的文件,只能预测出图像中两两对象的关系。`object_relationship_joint_detection.py`和`object_relationship_joint_detection-Copy1.py`是联合**Retinanet**模型的目标检测和对象关系检测模型。