与数据生成有关的.sh有以下两个:

caffe/data/VOC0712/create_list.sh

caffe/data/VOC0712/create_data.sh

按照github上作者的提示,顺序执行即可。

下面来详细研究一下源码,因为笔者没学过shell语言,python也是刚入门,顶多就会个C++.

#!/bin/bashroot_dir=$HOME/data/VOCdevkit/
sub_dir=ImageSets/Main
#  get current executed file's path  $CAFFE_ROOT/data/VOC0712
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"# dataset is trainval or test
for dataset in trainval test
dodst_file=$bash_dir/$dataset.txtif [ -f $dst_file ]thenrm -f $dst_filefifor name in VOC2007 VOC2012do# continue means skep the rest of current loopif [[ $dataset == "test" && $name == "VOC2012" ]]thencontinuefiecho "Create list for $name $dataset..."# find each of the xxx.txt filedataset_file=$root_dir/$name/$sub_dir/$dataset.txtimg_file=$bash_dir/$dataset"_img.txt"# copy the file contents to $img_filecp $dataset_file $img_file# add /$name\/JPEGImages\ at the begining of each linesed -i "s/^/$name\/JPEGImages\//g" $img_file# add .jpg at the end of each linesed -i "s/$/.jpg/g" $img_file# create label filelabel_file=$bash_dir/$dataset"_label.txt"cp $dataset_file $label_file# add /$name\/Annotations\ at the begining of each linesed -i "s/^/$name\/Annotations\//g" $label_file# add .xml at the end of each linesed -i "s/$/.xml/g" $label_file# concate each line of the two files with a ' ' separatedpaste -d' ' $img_file $label_file >> $dst_filerm -f $label_filerm -f $img_filedone# Generate image name and size infomation.if [ $dataset == "test" ]then      #                              [root folder   list file   output file]$bash_dir/../../build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"fi# Shuffle trainval file.if [ $dataset == "trainval" ]thenrand_file=$dst_file.randomcat $dst_file | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' > $rand_filemv $rand_file $dst_filefi
done

create_list.sh最终生成 text.txt、trainval.txt和test_name_size.txt。脚本首先获得数据所在的根目录root_dir,子目录sub_dir和当前脚本目录bash_dir。。然后分别在 VOC2007和VOC2012两个数据集文件里寻找数据集提供的trainval 和test的txt文件,这里面存放了所有图片的名称(不包含后缀.jpg)。假如已经有之前生成过的文件,则rm删除。

if [[ $dataset == "test" && $name == "VOC2012" ]]
thencontinue
fi

这句话是因为VOC2012里面没有test.txt。

dataset_file=$root_dir/$name/$sub_dir/$dataset.txt

这句话是定位到数据集中的.txt列表文本,然后以该dataset_file为母版,分别创建图片列表和Annotations 列表,

# add /$name\/JPEGImages\ at the begining of each line
sed -i "s/^/$name\/JPEGImages\//g" $img_file
# add .jpg at the end of each line
sed -i "s/$/.jpg/g" $img_file
img_file是在每一行前面添加VOC2007或VOC2012/JPEGImages/,以表明路径,在每一行的末尾添加.jpg后缀。label_file与前者类似,只不过后缀变为.xml。然后将$img_file、$label_file合并,每一行中间插入一个空格:paste -d' ' $img_file $label_file >> $dst_file,注意$是表示该变量的内容。这里最终生成: caffe/data/VOC0712/test.txt和 caffe/data/VOC0712/trainval.txt

当是test数据集时,还要调用get_image_size.cpp去获取所有图片的尺寸。

$bash_dir/../../build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"

参数分别是:[root folder     list file      output file],最终生成: caffe/data/VOC0712/test_name_size.txt

对于trainval.txt还需要进行随机排列shuffle。以上是create_list.sh的解释。

create_data比较简洁:

#!/bin/bash
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
#root_dir=/home/nvidia/PycharmProjects/caffe_ssd/caffe
root_dir=$cur_dir/../../cd $root_dir
redo=1
data_root_dir="$HOME/data/VOCdevkit"
dataset_name="VOC0712"
mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"
anno_type="detection"
db="lmdb"
min_dim=0
max_dim=0
width=0
height=0extra_cmd="--encode-type=jpg --encoded"
if [ $redo ]
thenextra_cmd="$extra_cmd --redo"
fi
for subset in test trainval
dopython $root_dir/scripts/create_annoset.py --anno-type=$anno_type --label-map-file=$mapfile --min-dim=$min_dim --max-dim=$max_dim --resize-width=$width --resize-height=$height --check-label $extra_cmd $data_root_dir $root_dir/data/$dataset_name/$subset.txt $data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$db examples/$dataset_name
done

先获取当前文件目录,然后找到caffe-ssd的根目录,设置好数据存放的目录以及lmdb的目录等,找到VOC的类别描述文件:labelmap_voc.prototxt,调用 $root_dir/scripts/create_annoset.py生成数据。后面参数比较多,其中使用到的数据列表文件是刚才生成的$root_dir/data/$dataset_name/$subset.txt  (for subset in test trainval,data_root_dir="$HOME/data/VOCdevkit" dataset_name="VOC0712")。

这个参数是生成的文件(db="lmdb",):

$data_root_dir/$dataset_name/$db/$dataset_name"_"$subset"_"$db

以及在这里 examples/$dataset_name 生成link(没有声明具体路径,那就是在执行.sh的那个文件夹下):

The directory to store the link of the database files.

caffe-SSD源码解析——生成数据列表及数据集相关推荐

  1. 2.2 SSD源码解析

    前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...

  2. AlphaFold2源码解析(3)--数据预处理

    AlphaFold2源码解析(3)–数据预处理 数据预处理整体流程 数据处理入口: feature_dict = data_pipeline.process( input_fasta_path=fas ...

  3. Attention is all you need pytorch实现 源码解析01 - 数据预处理、词表的构建

    我们今天开始分析著名的attention is all you need 论文的pytorch实现的源码解析. 由于项目很大,所以我们会分开几讲来进行讲解. 先上源码:https://github.c ...

  4. weiler-atherton多边形裁剪算法_EAST算法超详细源码解析:数据预处理与标签生成...

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  5. EAST算法超详细源码解析:数据预处理与标签生成

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  6. 大数据之-Hadoop3.x_MapReduce_ReduceTask源码解析---大数据之hadoop3.x工作笔记0127

    然后我们接着去reducetask的源码: 可以看到上面,maptask执行以后,数据被分区,然后溢写到磁盘文件中,然后 就到了执行reducetask的时候,首先走到reducetask的上面这个位 ...

  7. 大数据之-Hadoop3.x_MapReduce_MapTask源码解析---大数据之hadoop3.x工作笔记0126

    然后我们来看一下maptask的源码,这个对理解maptask如何工作很重要 我们在一个例子的基础上去debug,去看,可以看到,我们用 partitioner2这个案例,这个是我们之前,用来区分,把 ...

  8. 源码解析-深刻理解Hash HashTable HashMap原理及数据hash碰撞问题

    HashMap 前言 Hash HashTable 开地址法 线性探测法 平方探测法 双重散列探测法 拉链法 哈希表优势 HashMap 变量介绍 初始容量和负载因子 红黑树和链表转化 HashMap ...

  9. RN FlatList使用详解及源码解析

    FlatList使用详解及源码解析 前言 长列表或者无限下拉列表是最常见的应用场景之一.RN 提供的 ListView 组件,在长列表这种数据量大的场景下,性能堪忧.而在最新的 0.43 版本中,提供 ...

最新文章

  1. sqlsever无法重新启动计算机,安装SQL server 提示重新启动计算机失败怎么处理
  2. java 必须存在默认构造器_Java默认构造方法在字节码的实现
  3. Deep GSP : 面向多目标优化的工业界广告智能拍卖机制
  4. 理论基础 —— 查找 —— 插值查找
  5. java etcd api_在java中如何使用etcd的v2 和v3 api获取配置,并且对配置的变化进行监控和监听...
  6. 在linux中安装snort框架
  7. ubuntu和win7共享文件
  8. 上海交通大学考研网络安全专业823复习策略
  9. 2022.5.2 HTML学习第二天
  10. 短视频矩阵/短视频SEO矩阵系统源码/系统搭建
  11. java list逆序_Java使用ListIterator逆序ArrayList
  12. 与时间赛跑!阿里云医疗 AI | 心血管识别技术
  13. 图匹配(Graph Matching)入门学习笔记——以《Factorized Graph Matching》为例(二)
  14. linux xz命令
  15. bp配置 sap_SAP HANA BP主数据增强-对标准字段客户化检查
  16. 换个姿势「模拟登录」
  17. 1. R语言中grep函数和gsub()函数的使用
  18. 智汀智能家居,带给你梦幻般的生活
  19. ionic android 禁止截屏设置
  20. python selenium 显式等待和隐式等待

热门文章

  1. 数字化方法基础(二)_点的投影
  2. matlab保存数据用什么指令_Matlab数据处理——数据的保存和读取方法操作
  3. 修改MySQL用户的host属性_如何快速修改MySQL用户的host属性
  4. svn迁移到git_SVN到GIT的迁移完整教程
  5. Node JS环境设置– Node.js安装
  6. Apache ActiveMQ
  7. python集合_Python集合
  8. 熊猫DataFrame apply()示例
  9. log4j.dtd_Eclipse log4j.xml –无法将log4j.dtd验证为XML定义
  10. jsf用于页面判断的标签_JSF –在JSF视图页面中添加标签,图像,按钮和文本字段