下载HICO-Det数据集
将从HICO-Det网站下载的数据集存储到hico_clean文件夹中
这些数据文件(版本0160224)包括
图像和标注(.tar.gz)
HOIs列表(.txt)
Verbs列表(.txt)
Objects列表(.txt)
对下载的tar.gz文件使用下面的命令来提取图片和标注
tar xvzf <path to tar.gz file> -C <path to hico_clean directory>
-C标志指定了所提取文件存储的目标路径
经过这一步之后ls -l data_symlinks/hico_clean的输出结果应该是
anno_bbox.mat
anno.mat
hico_list_hoi.txt
hico_list_obj.txt
hico_list_vb.txt
images
README
tools
处理HICO-Det文件
HICO-Det数据集包含以.mat和.txt文件形式存储的图像和标注数据。使用下面的命令将这些文件转换成json文件,并存储到hico_processed文件夹中
bash data/hico/process.sh
process.sh文件分别调用下面的文件:
data/hico/split_ids.py:将样本id划分为train, val, train_val(train和val的并集),以及test集
data/hico/hoi_cls_count.py:统计每一个HOI类别的训练样本数
训练和评估都需要划分好的片段。类计数仅用于评估,以计算基于可训练样本所生成的HOI类别组的mAP
执行物体检测
自己创建
Step 1: 准备运行faster-rcnn所需的数据
python -m exp.detect_coco_objects.run --exp exp_detect_coco_objects_in_hico
执行上面的命令将在hico_exp/detect_coco_objects_in_hico中生成faster_rcnn_im_in_out.json文件,该文件指定运行目标检测器的图片路径,以及保存结果的目标位置路径
对每张具有唯一<global_id>的图片,物体检测器将下面的文件写到hico_processed/faster_rcnn_boxes文件夹中:
- <global_id>_scores.npy
- <global_id>_boxes.npy
- <global_id>_fc7.npy
- <global_id>_nms_keep_indices.npy
Step 2: 运行faster-rcnn
这一步需要前一步生成的faster_rcnn_im_in_out.json文件。Faster-RCNN pytorch实现中包含一个脚本文件,获取json文件,并将输出以指定格式写到hico_processed文件夹中
在Faster-RCNN pytorch实现中执行下面的命令:
python -m tools.extract_boxes_scores_features --im_in_out_json <path to im_in_out.json>
来提取检测到的边界框,物体类别分数,nms保留ids,以及在下游应用程序中可能用到的最有一层特性
保存了faster-rcnn特征后,使用下面的命令将所有的特征写到单独的hdf5文件中
python -m exp.hoi_classifier.data.write_faster_rcnn_feats_to_hdf5
Step 3: 从所有预测中为每个物体种类选择候选框
对每张图片,Faster-RCNN预测多达300个区域的类分数(针对80个COCO类)和框回归偏差(每一类)。在这一步中,对每个COCO类,通过运行以下命令,在非极大值抑制后挑选10个高置信度预测:
python -m exp.detect_coco_objects.run --exp exp_select_and_evaluate_confident_boxes_in_hico
这将在hico_exp/select_confident_boxes_in_hico目录中生成selected_coco_cls_dets.h5py文件
运行人体姿态检测器
通过将下面命令中的<subset>替代为train2015和test2015来提取姿态
./build/examples/openpose/openpose.bin --face --hand --num_gpu 2 --num_gpu_start 6 --display 0 --render_pose 0\
--image_dir <subset> \
--write_json <subset> \
训练HOI分类器
Step 1: 从候选物体,缓存框和姿态特征中生成HOI候选对象
bash exp/hoi_classifier/scripts/preprocess.sh
Step 2: 训练模型
按要求修改exp/hoi_classifier/scripts/train.sh中的标志并执行:
bash exp/hoi_classifier/scripts/train.sh <GPU ID>
这将在hico_exp/hoi_classifier中生成factors_rcnn_det_prob_appearance_boxes_and_object_label_human_pose文件夹
评价模型
Step 1: 选择评价的模型
可以根据在tensorboard中记录的验证损失来选择模型,通常选择大约在30000次迭代的模型
Step 2: 对测试集进行预测
bash exp/hoi_classifier/scripts/eval.sh <GPU ID> <MODEL NUM>
这将生成一个pred_hoi_dets.hdf5文件
Step 3: 计算mAPs
bash exp/hico_eval/compute_map.sh
Step 4: 可视化
排名最高的检测结果
可视化600种HOI类别中排名最高的检测结果
bash exp/hoi_classifier/scripts/visualize.sh <MODEL NUM>
这将为训练实验目录中的每一个HOI生成vis/top_boxes_per_hoi_wo_inference/<hoi_id>_<verb>_<object>/ 目录,每个目录都有一些.png文件以及可视化.png文件的index.html文件