预处理后的训练:

Pysot训练自己的数据集_Vesper0412的博客-CSDN博客

Pysot源码地址: GitHub - STVIR/pysot: SenseTime Research platform for single object tracking, implementing algorithms like SiamRPN and SiamMask.

因为我用的数据集是视频数据集,所以比照着Pysot中使用的VID数据集进行预处理。

VID数据集的标签是以.xml格式存储的,具体如下:

<?xml version="1.0"?>
<annotation><folder>ILSVRC2015_VID_train_0000/ILSVRC2015_train_00000000</folder><filename>000000</filename><source><database>ILSVRC_2015</database></source><size><width>1280</width><height>720</height></size><object><trackid>0</trackid><name>n01674464</name><bndbox><xmax>1050</xmax><xmin>323</xmin><ymax>428</ymax><ymin>216</ymin></bndbox><occluded>1</occluded><generated>0</generated></object>
</annotation>

但我使用数据集的ground_truth是以 ‘.txt’ 形式存储的,所以代码调整一下。

1、par_crop.py

在par_crop阶段,只用到了.xml文件中的bndbox信息以及trackid信息。改进后将bndbox置换成自己的ground_truth就好,在.xml中,bndbox的存储顺序为[xmin,ymin,xmax,ymax],如果与自己的ground_truth不匹配,记得在代码里做出相应调整。

至于trackid,若一张图里有i个跟踪对象,则trackid = i-1,根据实际情况调整即可,我自己的数据集一张图片中只有一个跟踪对象,所以trackid = 0 。

主要修改 def crop_video函数

def crop_video(sub_set, video, crop_path, instanc_size):'''sub_set :  {'a', 'b', 'c', 'd', 'e'}中的一个video : 视频名称crop_path : 存储路径的base_pathinstanc_size : 511'''#设置视频剪裁后对应的存储路径video_crop_base_path = join(crop_path, sub_set, video)if not isdir(video_crop_base_path): makedirs(video_crop_base_path)gt_path = join(ann_base_path, video+'.txt')#GT路径gts=np.loadtxt(gt_path,dtype ='int')# 获取该视频图片的路径sub_set_base_path=join(data_base_path,sub_set)images = sorted(glob.glob(join(sub_set_base_path, video, '*.jpg')))for i , im_path in enumerate(images):im = cv2.imread(im_path)avg_chans = np.mean(im, axis=(0, 1))bbox = [gts[i][0], gts[i][1],gts[i][0]+gts[i][2], gts[i][1]+gts[i][3]]# 剪裁z, x = crop_like_SiamFC(im, bbox, instanc_size=instanc_size, padding=avg_chans)# 存储trackid = 0cv2.imwrite(join(video_crop_base_path, '{:06d}.{:02d}.z.jpg'.format(int(i), trackid)), z)cv2.imwrite(join(video_crop_base_path, '{:06d}.{:02d}.x.jpg'.format(int(i), trackid)), x)

2、parse_vid.py

参照vid.json,需要的信息如下:

路径(base_path与img_path), 图像大小,bbox,分类标签,是否遮挡,trackid。

"base_path": "a/ILSVRC2015_train_00000000","frame": [{"frame_sz": [1280,720],"img_path": "000000.JPEG","objs": [{"bbox": [323,216,1050,428],"c": "n01674464","occ": 1,"trackid": 0}]},

但是看VID后续的预处理过程,其实只需要路径,bbox,trackid信息,其他的信息可以省略掉,于是代码可以调整为:

from os.path import join
import os
from os import listdir
import json
import glob
import numpy as npgt_name='groundtruth_rect.txt'
img_base_path = 'E:/my_train_datasets/Data'
sub_sets = sorted({'a', 'b', 'c', 'd', 'e','f','g','h'})vid = []
for sub_set in sub_sets:sub_set_base_path = join(img_base_path, sub_set)#装了很多视频的路径videos = sorted(listdir(sub_set_base_path))#获取该路径中的视频名称'video1','video2's = []#存储a文件夹中所有视频序列的信息#视频序列for vi, video in enumerate(videos):print('subset: {} video id: {:04d} / {:04d}'.format(sub_set, vi, len(videos)))#创建一个字典v = dict()#存储一个视频序列的信息v['base_path'] = sub_set+'/'+video#'a/视频文件夹'v['frame'] = []video_base_path = join(sub_set_base_path, video)images = sorted(glob.glob(join(video_base_path, '*.jpg')))#该视频标签文件夹中的所有标注gt_path=join(video_base_path,gt_name)gts=np.loadtxt(gt_path,dtype=int)for i , im_path in enumerate(images):f = dict()objs = []trackid = 0bndbox = gts[i]o = dict()o['bbox'] = [int(bndbox[0]), int(bndbox[1]),int(bndbox[0]+bndbox[2]), int(bndbox[1]+bndbox[3])]o['trackid'] = trackidobjs.append(o)f['img_path'] = os.path.basename(im_path)f['objs'] = objsv['frame'].append(f)s.append(v)vid.append(s)#存储所有文件夹中所有视频序列的信息
print('save json (raw vid info), please wait 1 min~')
json.dump(vid, open('my.json', 'w'), indent=4, sort_keys=True)
print('done!')

my.json部分内容如下:

 "base_path": "a/MY_train_00000000","frame": [{"img_path": "000000.jpg","objs": [{"bbox": [0,130,250,294],"trackid": 0}]},

一定要注意的是,base_path中, "a/MY_train_00000000"不能是 "a//MY_train_00000000"形式,否则后续在Linux训练时会报错:  can’t open/read file: check file path/integrity

3、gen_json.py

生成train.json与val.json。

        for f, frame in enumerate(frames):objs = frame['objs']#frame_sz = frame['frame_sz']for obj in objs:trackid = obj['trackid']#occluded = obj['occ']bbox = obj['bbox']

把frame_sz与occluded直接注释掉就可以了。

生成的train.json部分内容如下:

{"a/MY_train_00000000": {"00": {"000000": [0,130,250,294],"000001": [1,131,259,287],"000002": [3,132,268,281],

生成的val.json部分内容如下:

{"h/MY_val_00000000": {"00": {"000000": [166,190,218,217],"000001": [164,190,215,217],"000002": [161,191,212,217],

至此,数据集预处理进行完毕 。

Pysot训练自己数据集前的预处理相关推荐

  1. Pytorch 实现全连接神经网络/卷积神经网络训练MNIST数据集,并将训练好的模型在制作自己的手写图片数据集上测试

    使用教程 代码下载地址:点我下载 模型在训练过程中会自动显示训练进度,如果您的pytorch是CPU版本的,代码会自动选择CPU训练,如果有cuda,则会选择GPU训练. 项目目录说明: CNN文件夹 ...

  2. SKlearn数据集转换之预处理数据

    数据集转换之预处理数据: 将输入的数据转化成机器学习算法可以使用的数据.包含特征提取和标准化. 原因:数据集的标准化(服从均值为0方差为1的标准正态分布(高斯分布))是大多数机器学习算法的常见要求. ...

  3. YOLOv5-Lite 详解教程 | 嚼碎所有原理、训练自己数据集、TensorRT部署落地应有尽有...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨集智书童 YOLOv5 Lite在YOLOv5的基础上进行一系列消融实验 ...

  4. 学习笔记:数据分析和处理(ML计算模型前的预处理)——持续更新

    数据分析和处理,其实就是你计算模型前的预处理步骤.一个不合理的错误数据如果不在预处理的时候剔除,可能会对最终结果造成非常大的影响. 在很多时候,如果你换了能换的所有模型和参数,最后计算得到的模型的交叉 ...

  5. 【Python3】Tensorflow_Fasterrcnn训练自己数据集,Keras_Yolov3_GPU训练自己数据集

    文章目录 1.Tensorflow_Fasterrcnn训练自己数据集 1.1 环境塔建 1.2 用预训练好的Resnet101模型演示demo图片 1.3 用预训练好的Resnet101模型对数据进 ...

  6. 火焰和烟雾的训练图像数据集_游戏开发者是烟雾和镜子的大师

    火焰和烟雾的训练图像数据集 Video games are incredible. They transport us to new worlds, allow us to partake in ot ...

  7. 数据预处理 泰坦尼克号_了解泰坦尼克号数据集的数据预处理

    数据预处理 泰坦尼克号 什么是数据预处理? (What is Data Pre-Processing?) We know from my last blog that data preprocessi ...

  8. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  9. yolov5环境配置及训练coco128数据集

    本人小白一个,最近在学习yolov5网络,于是跟着网上的教程配置环境训练等,出现了很多错误,可能会比较乱,先说声抱歉.现在总结一下,算是理清下自己的思路,希望对各位也有些帮助. 环境配置:推荐安装Cu ...

  10. WIN10 +pytorch版yolov3训练自己数据集

    pytorch版yolov3训练自己数据集 目录 1. 环境搭建 2. 数据集构建 3. 训练模型 4. 测试模型 5. 评估模型 6. 可视化 7. 高级进阶-网络结构更改 1. 环境搭建 将git ...

最新文章

  1. 0709 C语言常见误区----------函数指针问题
  2. Python通过一个网页地址获得网页标题Title
  3. vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数
  4. 给你多少钱,你才会愿意为国家生孩子?
  5. 闻泰通讯手机软件测试笔试内容,中科方德软件测试面试笔试经验
  6. 桌面时间的最佳管理者-软媒时间
  7. 【算法竞赛学习笔记】弦图和区间图
  8. vue、四级联动(省市区街道)
  9. 王小川告别搜狗那一天
  10. 网上书城图书模块及首页分页
  11. 辅导班师资力量介绍!
  12. 计算机睡眠和休眠哪个更好,windows7睡眠与休眠的区别_win7电脑休眠和睡眠哪个好...
  13. PTX-PEG-TCO 紫杉醇-聚乙二醇-反式环辛烯
  14. 运算符与基本数据类型int和string的方法汇总(二)
  15. 日本电视台选择 Infortrend存储管理核心播放业务
  16. 游戏编程之常用设计模式
  17. 基于QT的串口调试助手
  18. 拦截图片代码 精易web浏览器_[原创]用Com HOOK实现拦截WebBrowser的alert函数调用
  19. 基于词向量与CNN-BIGRU的情感分析研究
  20. Hadoop数据库性能调优指南

热门文章

  1. Linux数据备份与恢复 dump、restore、dd命令
  2. 一场跨越时空的协奏:编钟、古琴与5G的“弦外之音”
  3. 青岛,一座浓艳的美色之城?
  4. fHash(哈希校验工具)v2.1.9 绿色版
  5. 官方版win10重装系统(官方win10 镜像)
  6. 著名互联网公司薪酬最全分析!
  7. 怎样把HTC G7的内存扩展到2GB
  8. Winfrom控件的使用
  9. linux 查看kernel log,Linux Kernel Log
  10. JavaWeb静态网页