FairMOT理解与实现

理解:
(1)概述:多目标跟踪,单纯跟踪能力不足以完成任务,所以,不同于单目标跟踪,这里加入了检测任务,可以将多目标跟踪任务看成为目标检测+重识别任务。
(2)论文网络结构
FairMOT理解与实现
文中网络结构分3大部分:
网络结构在:.\src\lib\models\networks\pose_dla_dcn.py中。
①:Encoder-decoder 部分
网络中,这是backbone network部分,主干网络为DLA-34(34层的DLA),最终input(HxW)->output(H/4xW/4)
Encoder部分(base/DLA):
FairMOT理解与实现
其中:Tree结构为:conv1->bn1->relu->conv2->bn2;
root结构为:conv->bn->relu;
downSample结构为:Maxpool2d;
project结构为:conv->bn
project结构为:conv->bn
Encoder部分的网络结构类似金字塔结构(或者树形结构),实现不同block,不同深度之间的特征融合。
decoder 部分(dlA-up/DLAup):decoder 部分实际就是反卷积上采样的过程,实现输出为原图尺寸的1/4。
FairMOT理解与实现
其中:Proj结构为:BN->Relu->conv;
Up结构为:convTranspose2d;
node结构为:BN->Relu->conv;
②:detection部分+Re-ID部分
Encoder-decoder 部分之后,并行的接入4部分,分别为:{hm,wh,reg,id}
其中,这四部分结构均为:con2d(3 * 3卷积)->Relu->con2d(1*1卷积),每个部分为一个任务,继而每个任务,需要加一个loss约束。
Hm:采用基于热力图定位目标中心点位置,实现anchor-free。
FairMOT理解与实现
如上图所示,如果用anchor表示目标位置。在目标相互靠近时,anchor给出来的位置很粗糙,所以在文中,作者采用点代表目标,位置会比较精确。
Loss:假如在原图中
FairMOT理解与实现
Wh:负责预测目标的长宽尺寸。reg负责预测长宽偏移尺寸,引入这个任务的目的是为了更精确的定位目标位置。将这两个任务的loss写在一起:(懒的写,盗用一下博友的图)
FairMOT理解与实现
Id:重识别的过程。相当于分类任务,判断目标是哪一类(跟踪任务中,同一个目标为一类)(懒的写,盗用一下博友的图)
FairMOT理解与实现
3)复现(服务器上训练):
官网链接:https://github.com/ifzhang/FairMOT
①首先搭建需要的环境,编译项目:
conda install pytorch1.2.0 torchvision0.4.0 cudatoolkit=10.0 -c pytorch
cd ${FAIRMOT_ROOT}
pip install -r requirements.txt
cd src/lib/models/networks/DCNv2_new sh make.sh
② 准备数据(只使用了2DMOT2015为训练集)
FairMOT理解与实现
将2DMOT2015.zip解压,重命名为images,放入./FairMOT-master/FairMOT-master/dataset/MOT15目录下,解析完后,里面有train和test两个文件夹,里面存着train和test数据,再在./FairMOT-master/FairMOT-master/dataset/MOT15目录下新建一个labels_with_ids文件夹,里面建一个空的train文件夹。
然后下载seqinfo 文件,将 seqinfo 文件夹中的 *.ini 复制到 MOT15 对应的文件夹中,如下所示:FairMOT理解与实现
下面网盘里提供2DMOT2015.zip,seqinfo 文件,和预训练模型。
链接:https://pan.baidu.com/s/1Ue702BbAIB_EGA8rYoWo2w
提取码:kb37

然后修改 src/python gen_labels_15.py 文件中数据集的路径,
FairMOT理解与实现
运行 gen_labels_15.py,
./FairMOT-master/FairMOT-master/dataset/MOT15/labels_with_ids/train,文件夹中就会生成训练集的label.
③ 准备预训练模型
FairMOT理解与实现
④ 修改训练集地址(因为只用了2DMOT2015),均改自己数据集的位置
./src/lib/opts.py
FairMOT理解与实现
src/lib/cfg/mot15.json
FairMOT理解与实现
⑤:训练…
根据自己实际,修改all_dla34.sh
sh experiments/all_dla34.sh
FairMOT理解与实现