生成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.  
    依据文件区分不同类别的数据图片,而不是图片名称中的字符串。
原文地址:https://www.cnblogs.com/1149825709qq/p/14280021.html