DeepSORT的深度外观模型是在人的重识别数据集上训练得到的,在用于人的多目标跟踪效果好,用于车辆就不一定适用,所以要训练适用于车辆的深度外观模型。
下面是我参考的训练方法的链接,在此基础上记录我的训练过程
参考链接https://blog.****.net/qq_42412214/article/details/94360604
https://blog.****.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(在第一个参考链接里面)
修改图片文件名:[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所需的外观深度模型文件