基于Mxnet的车辆重识别(Re-ID)之数据集处理(以VeRi为例)

1.mxnet的输入数据解释:

      mxnet的数据输入与其他的框架诸如tensorflow,pytorch不同,其特别之处在于:不直接输入图片,而是输入rec文件。
      rec文件是什么?rec文件内存放了每一张图片的data以及对应的label,相当于将所有图片集合成一个文件,且这个文件中含有图像的数据和标签信息。生成一个rec文件需要一个lst文件,再利用mxnet文件夹下的tools文件夹下的im2rec.py将图片生成为rec文件和idx文件。

调用格式:

python im2rec.py lst文件存放路径 image文件存放路径

这样就根据lst文件和图像文件生成了rec和idx文件,生成的rec和idx文件与lst文件存放路径相同。

      那么接下来的问题是,如何生成这个lst文件?这个lst文件有什么呢?监督学习需要标签,因此这个lst文件里面需要包含每一张图片的存放地址(包括名称),标签信息。举个栗子:
基于Mxnet的车辆重识别(Re-ID)之数据集处理(以VeRi为例)_第1张图片
      对上图的解释:第一列为数据的序号,第二列为车辆的ID,第三列为车辆的model信息(249中车型),第四列为图片存放的地址。
      所以对于编程人员来说,只需要编写预处理(preprocess)程序,将数据集中的标签信息(如车辆ID,model,color等信息图片存放地址一并写入lst文件,再利用im2rec.py文件将lst和图片联合生成rec文件即可。此时,对于feed给神经网络的数据已经处理完成。

2.Veri数据集分析:

      VeRi数据集的文件结构如下:
基于Mxnet的车辆重识别(Re-ID)之数据集处理(以VeRi为例)_第2张图片

以下内容来自readme.txt:

  1. “image_query/”. This dir contains 1678 images as queries.
  2. “image_test/”. This dir contains 11579 images for testing.
  3. “image_train/”. This dir contains 37778 images for training.
  4. “name_query.txt”. It lists all query file names.
  5. “name_test.txt”. It lists all test file names.
  6. “name_train.txt”. It lists all train file names.
  7. “gt_image.txt”. It lists the ground truths of each query in each line.
  8. “jk_image.txt”. It lists the junk images of each query in each line. The junk images are the images with the same camera ID to the query.
  9. “train_label.xml”. It lists the labels, e.g., vehicle ID, camera ID, color, type, of the training images.

      对此数据集,我们需要处理的数据为:车辆ID,color,model,因此需要构建的lst文件各列分别为:数据序号,车辆ID,车辆color,车辆model,图片dir。获取各列信息只需读取xml文件即可。

3.xml文件的读取:

      xml文件的构成如下:
基于Mxnet的车辆重识别(Re-ID)之数据集处理(以VeRi为例)_第3张图片
      对于xml文件,其读法如下代码:

import os
import csv
import random
import glob
import  xml.dom.minidom
dom = xml.dom.minidom.parse('train_label.xml')
root = dom.documentElement
Items = root.getElementsByTagName('Item')
ROOT='PATH'
img_lst=[]
cnt=0
for Item in Items:
    imagename=Item.getAttribute('imageName')
    #print imagename
    vehicleID=Item.getAttribute('vehicleID')
    colorID=Item.getAttribute('colorID')
    typeID=Item.getAttribute('typeID')
    imageDIR='%s/image_train/%s'%(ROOT,imagename)
    img_lst.append((cnt,vehicleID,colorID,typeID,imageDIR))
    cnt+=1
    print(img_lst)

      利用xml库里的方法,即可几句语句简易的实现xml文件的读取。读取完xml后,即可利用前面提到的方法,将mxnet训练所需要的数据生成了。

你可能感兴趣的:(-----项目记录-----)