zoukankan      html  css  js  c++  java
  • 生成train.txt和val.txt的案例程序解释

    该问参考自:1:https://blog.csdn.net/JACK_YOUNG007/article/details/89482265               2:https://blog.csdn.net/gaohuazhao/article/details/69568267

    #!/usr/bin/env sh                          //在linux的一些脚本里,需在开头一行指定脚本的解释程序,脚本用env启动的原因,是因为脚本解释器在linux中可能被安装于不同的目录,

                                                         env可以在系统的PATH目录中查找。同时,env还规定一些系统环境变量。
    DATA=examples/myfile4/data
    MY=examples/myfile4/data

    echo "Create train.txt..."
    rm -rf $MY/train.txt                    //表示清除该路径下的train.txt文件

                                                      //下面是生成train.txt标签文件的.sh文件指令

                                                                   $DATA/train其中DATA是train数据的目录,表示的是图片的具体目录,DATASAVE是train.txt保存的路径

                                                                   -name ground*.jpg的意思呢是指的是以ground开头的图片名字

                                                                    cut -d ‘/’ -f4-5是截取图片的路径,调整-f后面的数字可设置几级路径,

                                                                     此处为cut指令的用法,具体表示请百度,此处表示以’/’为分隔符,由于该指令在caffe目录下执行,

                                                                     之后路径为examples/myfile4/data/train然后是图片名字,所以要采取的图片的名字为第5个,所以为-f5,下

                                                                    面val集的图片路径为examples/myfile4/data/val然后是图片名字,为第5个,所以为-f5

                                                                     sed “s/$/ 1/”是在其后面加上 1(空格和1)

                                                                    $MY/train.txt 表示在/examples/myself/data路径下产生train.txt,并将以上内容全部保存到此。

    find $DATA/train -name 15001*.jpg | cut -d '/' -f4-5 | sed "s/$/ 0/">>$MY/train.txt
    find $DATA/train -name 15059*.jpg | cut -d '/' -f4-5 | sed "s/$/ 1/">>$MY/train.txt
    find $DATA/train -name 62047*.jpg | cut -d '/' -f4-5 | sed "s/$/ 2/">>$MY/train.txt
    find $DATA/train -name 68021*.jpg | cut -d '/' -f4-5 | sed "s/$/ 3/">>$MY/train.txt
    find $DATA/train -name 73018*.jpg | cut -d '/' -f4-5 | sed "s/$/ 4/">>$MY/train.txt
    find $DATA/train -name 73063*.jpg | cut -d '/' -f4-5 | sed "s/$/ 5/">>$MY/train.txt
    find $DATA/train -name 80012*.jpg | cut -d '/' -f4-5 | sed "s/$/ 6/">>$MY/train.txt
    find $DATA/train -name 92002*.jpg | cut -d '/' -f4-5 | sed "s/$/ 7/">>$MY/train.txt
    find $DATA/train -name 92017*.jpg | cut -d '/' -f4-5 | sed "s/$/ 8/">>$MY/train.txt
    find $DATA/train -name 95005*.jpg | cut -d '/' -f4-5 | sed "s/$/ 9/">>$MY/train.txt

    echo "Create test.txt..."
    rm -rf $MY/val.txt

    find $DATA/val -name 15001*.jpg | cut -d '/' -f4-5 | sed "s/$/ 0/">>$MY/val.txt
    find $DATA/val -name 15059*.jpg | cut -d '/' -f4-5 | sed "s/$/ 1/">>$MY/val.txt
    find $DATA/val -name 62047*.jpg | cut -d '/' -f4-5 | sed "s/$/ 2/">>$MY/val.txt
    find $DATA/val -name 68021*.jpg | cut -d '/' -f4-5 | sed "s/$/ 3/">>$MY/val.txt
    find $DATA/val -name 73018*.jpg | cut -d '/' -f4-5 | sed "s/$/ 4/">>$MY/val.txt
    find $DATA/val -name 73063*.jpg | cut -d '/' -f4-5 | sed "s/$/ 5/">>$MY/val.txt
    find $DATA/val -name 80012*.jpg | cut -d '/' -f4-5 | sed "s/$/ 6/">>$MY/val.txt
    find $DATA/val -name 92002*.jpg | cut -d '/' -f4-5 | sed "s/$/ 7/">>$MY/val.txt
    find $DATA/val -name 92017*.jpg | cut -d '/' -f4-5 | sed "s/$/ 8/">>$MY/val.txt
    find $DATA/val -name 95005*.jpg | cut -d '/' -f4-5 | sed "s/$/ 9/">>$MY/val.txt

    echo "All done"

    上述的验证集文件夹 bird 图片和 cat 图片没有分开,是依靠图片名字的字符串作为区分标准。但在大数据集的情况下,建议以文件夹作为区分标准(细节之处不同,实际工作可以提高效率)。另一种实现方法实现 create_filelist.txt 文件:

    准备工作:

    原始数据:train文件夹下的bird图片和cat图片分别在各自的文件夹下,即train文件夹下有两个文件夹,bird和cat。

    但是val文件夹目录下并没有再分开bird和cat,而是将验证集10张bird和10张cat一起放到了val文件夹下。

    这是上述方法的图片数据的存储格式。

    变更之处:此处需要将val文件夹下新建两个文件夹,bird和cat1 (因为在代码中需要使用该文件夹名称,

    而cat是Ubuntu中的一个指令,冲突)。

    同时将train文件夹下的cat文件夹重命名为cat1,将10张bird图片放到bird文件夹下,10张cat文件夹放到cat_1文件夹下,即可!

    其他步骤都一样,只是将create_filelist.sh代码部分换成下列代码:

    代码:

    DATA=data/myself

    MY=examples/myself

    echo "Create train.txt..."

    rm -rf $DATA/train.txt

    ls $DATA/train/bird | sed "s:^:bird/:" | sed "s/$/ 1/">>$MY/train.txt

    ls $DATA/train/cat1 | sed "s:^:cat1/:" | sed "s/$/ 2/">>$MY/train.txt

    echo "Create val.txt..."

    rm -rf $DATA/val.txt

    ls $DATA/val/bird | sed "s:^:bird/:" | sed "s/$/ 1/">>$MY/val.txt

    ls $DATA/val/cat1 | sed "s:^:cat1/:" | sed "s/$/ 2/">>$MY/val.txt

    echo "All done"

    代码解释:

    此处代码和上面代码的改变之处就是将find和cut命令替换为了ls命令,ls表示列举,具体含义可以百度。

    依据文件区分不同类别的数据图片,而不是图片名称中的字符串。

    1. 准备工作:
    2.  
      原始数据:train文件夹下的bird图片和cat图片分别在各自的文件夹下,即train文件夹下有两个文件夹,bird和cat。
    3.  
      但是val文件夹目录下并没有再分开bird和cat,而是将验证集10张bird和10张cat一起放到了val文件夹下。
    4.  
      这是上述方法的图片数据的存储格式。
    5.  
       
    6.  
      变更之处:此处需要将val文件夹下新建两个文件夹,bird和cat1 (因为在代码中需要使用该文件夹名称,
    7.  
      而cat是Ubuntu中的一个指令,冲突)。
    8.  
      同时将train文件夹下的cat文件夹重命名为cat1,将10张bird图片放到bird文件夹下,10张cat文件夹放到cat_1文件夹下,即可!
    9.  
       
    10.  
      其他步骤都一样,只是将create_filelist.sh代码部分换成下列代码:
    11.  
       
    12.  
      代码:
    13.  
       
    14.  
      DATA=data/myself
    15.  
      MY=examples/myself
    16.  
       
    17.  
      echo "Create train.txt..."
    18.  
      rm -rf $DATA/train.txt
    19.  
      ls $DATA/train/bird | sed "s:^:bird/:" | sed "s/$/ 1/">>$MY/train.txt
    20.  
      ls $DATA/train/cat1 | sed "s:^:cat1/:" | sed "s/$/ 2/">>$MY/train.txt
    21.  
       
    22.  
      echo "Create val.txt..."
    23.  
      rm -rf $DATA/val.txt
    24.  
      ls $DATA/val/bird | sed "s:^:bird/:" | sed "s/$/ 1/">>$MY/val.txt
    25.  
      ls $DATA/val/cat1 | sed "s:^:cat1/:" | sed "s/$/ 2/">>$MY/val.txt
    26.  
       
    27.  
      echo "All done"
    28.  
       
    29.  
      代码解释:
    30.  
      此处代码和上面代码的改变之处就是将find和cut命令替换为了ls命令,ls表示列举,具体含义可以百度。
    31.  
      依据文件区分不同类别的数据图片,而不是图片名称中的字符串。
  • 相关阅读:
    (一)Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化
    (一)Python入门-5函数:10nonlocal-global-LEGB规则
    (一)Python入门-5函数:09嵌套函数(内部函数)-数据隐藏
    (一)Python入门-5函数:08递归函数
    (一)Python入门-5函数:07lambda表达式和匿名函数-eval()函数
    (一)Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数
    (一)Python入门-5函数:05参数的传递-可变对象-不可变对象-浅拷贝和深拷贝-不可变对象含可变子对象
    (一)Python入门-5函数:04变量的作用域-全局变量-局部变量-栈帧内存分析-效率测试
    Java学习第十二章 之 自定义数据类型的使用
    Java学习第十一章 之 final、static、内部类
  • 原文地址:https://www.cnblogs.com/1149825709qq/p/14280021.html
Copyright © 2011-2022 走看看