训练车辆的Deepsort深度模型记录

DeepSORT的深度外观模型是在人的重识别数据集上训练得到的,在用于人的多目标跟踪效果好,用于车辆就不一定适用,所以要训练适用于车辆的深度外观模型。
下面是我参考的训练方法的链接,在此基础上记录我的训练过程
参考链接https://blog.csdn.net/qq_42412214/article/details/94360604
https://blog.csdn.net/flyfish1986/article/details/90379444

我的环境是win10 python3.6 TensorFlow1.9
训练代码:https://github.com/nwojke/cosine_metric_learning
1、首先要准备车辆的重识别数据集car-Reid.zip
2、将数据集调整成与行人重识别数据一样的格式 定义脚本image_rename.py(在第一个参考链接里面),下面放代码参考

# -*- coding:utf8 -*-

import os
from PIL import Image


# 定义创建目录函数
def mkdir(path):
    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)

        print(path + ' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path + ' 目录已存在')
        return False


class BatchRename():
    '''
    批量重命名文件夹中的图片文件
    '''

    def __init__(self):
        self.path = './resources/MARS-evaluation-master/dataset' # 表示需要命名处理的文件夹

    # 修改图像尺寸
    def resize(self):
        for aroot, dirs, files in os.walk(self.path):
            # aroot是self.path目录下的所有子目录(含self.path),dir是self.path下所有的文件夹的列表.
            filelist = files  # 注意此处仅是该路径下的其中一个列表
            # print('list', list)

            # filelist = os.listdir(self.path) #获取文件路径
            total_num = len(filelist)  # 获取文件长度(个数)

            for item in filelist:
                if item.endswith('.jpg'):  # 初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
                    src = os.path.join(os.path.abspath(aroot), item)

                    # 修改图片尺寸到128宽*256高
                    im = Image.open(src)
                    out = im.resize((128, 256), Image.ANTIALIAS)  # resize image with high-quality
                    out.save(src)  # 原路径保存

    def rename(self):

        for aroot, dirs, files in os.walk(self.path):
            # aroot是self.path目录下的所有子目录(含self.path),dir是self.path下所有的文件夹的列表.
            filelist = files  # 注意此处仅是该路径下的其中一个列表
            # print('list', list)

            # filelist = os.listdir(self.path) #获取文件路径
            total_num = len(filelist)  # 获取文件长度(个数)

            i = 1  # 表示文件的命名是从1开始的
            for item in filelist:
                if item.endswith('.jpg'):  # 初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
                    src = os.path.join(os.path.abspath(aroot), item)

                    # 根据图片名创建图片目录
                    dirname = str(item.split('_')[0])
                    # 为相同车辆创建目录
                    new_dir = os.path.join(self.path, '..', 'bbox_train', dirname)
                    mkdir(new_dir)

                    # 获得new_dir中的图片数
                    num_pic = len(os.listdir(new_dir))

                    dst = os.path.join(os.path.abspath(new_dir),
                                       dirname + 'C1T0001F' + str(num_pic + 1) + '.jpg')
                    # 处理后的格式也为jpg格式的,当然这里可以改成png格式    C1T0001F见mars.py filenames 相机ID,跟踪指数
                    # dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')    这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
                    try:
                        os.rename(src, dst)
                        print ('converting %s to %s ...' % (src, dst))
                        i = i + 1
                    except:
                        continue
            print ('total %d to rename & converted %d jpgs' % (total_num, i))


if __name__ == '__main__':
    demo = BatchRename()
    demo.resize()
    demo.rename()

修改图片文件名:[0:4]与图片上一级目录同,[4:6]相机ID,[6:11]跟踪ID,[11-15]图片序号。将图片改成128宽成256高。
修改image_rename.py第38行的car-Reid.zip解压出来的文件路径
在这里插入图片描述
运行完脚本会生成下列文件,每个文件夹里都是同一辆车不同拍摄角度的图片
在这里插入图片描述
3、打开CMD将工作目录cd到cosine_metric_learning-master 然后训练命令
python3 train_mars.py --dataset_dir=./resources/MARS-evaluation-master --loss_mode=cosine-softmax --log_dir=./output/mars/ --run_id=cosine-softmax
训练过程中每5分钟自动保存一组文件(图片中选中的文件)
在这里插入图片描述
生成的文件说明:Tensorflow训练后的模型可以保存checkpoint文件或pb文件。checkpoint文件是结构与权重分离的四个文件,便于训练;pb文件则是graph_def的序列化文件,类似于caffemodel,便于发布和离线预测。官方提供freeze_grpah.py脚本来将ckpt文件转为pb文件。Checkpoint保存断点文件列表,可以用来迅速查找最近一次的断点文件;meta文件是MetaGraphDef序列化的二进制文件,保存了网络结构相关的数据,包括graph_def和saver_def等;index文件为数据文件提供索引,存储的核心内容是以tensor name为键以BundleEntry为值的表格entries,BundleEntry主要内容是权值的类型、形状、偏移、校验和等信息。Index文件由data block/index block/Footer等组成,构建时主要涉及BundleWriter、TableBuilder、BlockBuilder几个类,除了BundleEntry的序列化,还涉及了tensor name的编码及优化(比如丢弃重复的前缀)和data block的snappy压缩。数据(data)文件保存所有变量的值,即网络权值。

训练过程中也可以查看训练进程,新开CMD窗口:命令为 tensorboard --logdir ./output/mars/cosine-softmax --port 7006
在CMD窗口出现链接,复制后在浏览器中打开

4、观察loss稳定后停止训练,查看checkpoint里面的内容
在这里插入图片描述
Finalize命令:
python train_mars.py --mode=finalize --restore_path=./output/mars/cosine-softmax/model.ckpt-227445
227445与最后一次生成的文件对应
运行完之后会在工作目录生成
在这里插入图片描述
5、Freeze命令生成mars.pb文件:
python train_mars.py --mode=freeze --restore_path=./mars.ckpt
运行完之后会在工作目录生成mar.bp文件,即为Deepsort所需的外观深度模型文件

  • 19
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 56
    评论
评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值