TensorFlow——训练自己的数据(一)数据处理

参考:Tensorflow教程-猫狗大战数据集

贴一张自己画的思维导图
这里写图片描述

数据集准备
kaggle猫狗大战数据集(训练),微软的不需要翻墙

  • 12500张cat
  • 12500张dog

生成图片路径和标签的List

step1:获取D:/Study/Python/Projects/Cats_vs_Dogs/data/Cat下所有的猫图路径名,存放到cats中,同时贴上标签0,存放到label_cats中。狗图同理。

train_dir = 'D:/Study/Python/Projects/Cats_vs_Dogs/data'

def get_files(file_dir):
    for file in os.listdir(file_dir+'/Cat'):
            cats.append(file_dir +'/Cat'+'/'+ file) 
            label_cats.append(0)
    for file in os.listdir(file_dir+'/Dog'):
            dogs.append(file_dir +'/Dog'+'/'+file)
            label_dogs.append(1)

step2:对生成的图片路径和标签List做打乱处理

    #把cat和dog合起来组成一个list(img和lab)
    image_list = np.hstack((cats, dogs))
    label_list = np.hstack((label_cats, label_dogs))

    #利用shuffle打乱顺序
    temp = np.array([image_list, label_list])
    temp = temp.transpose()
    np.random.shuffle(temp)

    #从打乱的temp中再取出list(img和lab)
    image_list = list(temp[:, 0])
    label_list = list(temp[:, 1])
    label_list = [int(i) for i in label_list]

生成Batch

step1:将上面生成的List传入get_batch() ,转换类型,产生一个输入队列queue,因为img和lab是分开的,所以使用tf.train.slice_input_producer(),然后用tf.read_file()从队列中读取图像

  • image_W, image_H, :设置好固定的图像高度和宽度
  • 设置batch_size:每个batch要放多少张图片
  • capacity:一个队列最大多少
def get_batch(image, label, image_W, image_H, batch_size, capacity):
    #转换类型
    image = tf.cast(image, tf.string)
    label = tf.cast(label, tf.int32)

    # make an input queue
    input_queue = tf.train.slice_input_producer([image, label])

    label = input_queue[1]
    image_contents = tf.read_file(input_queue[0]) #read img from a queue

step2:将图像解码,不同类型的图像不能混在一起,要么只用jpeg,要么只用png等。

image = tf.image.decode_jpeg(image_contents, channels=3) 

step3:数据预处理,对图像进行旋转、缩放、裁剪、归一化等操作,让计算出的模型更健壮。


image = tf.image.resize_image_with_crop_or_pad(image, image_W, image_H)

image = tf.image.per_image_standardization(image)

step4:生成batch

  • image_batch: 4D tensor [batch_size, width, height, 3],dtype=tf.float32
  • label_batch: 1D tensor [batch_size], dtype=tf.int32
image_batch, label_batch = tf.train.batch([image, label],
                                                batch_size= batch_size,
                                                num_threads= 32, 
                                                capacity = capacity)
#重新排列label,行数为[batch_size]
label_batch = tf.reshape(label_batch, [batch_size])
image_batch = tf.cast(image_batch, tf.float32)

测试

step1:变量初始化,每批2张图,尺寸208x208,设置好自己的图像路径

BATCH_SIZE = 2
CAPACITY = 256
IMG_W = 208
IMG_H = 208

train_dir = 'D:/Study/Python/Projects/Cats_vs_Dogs/data'

step2:调用前面的两个函数,生成batch

image_list, label_list = get_files(train_dir)
image_batch, label_batch = get_batch(image_list, label_list, IMG_W, IMG_H, BATCH_SIZE, CAPACITY)

step3:开启会话session,利用tf.train.Coordinator()tf.train.start_queue_runners(coord=coord)来监控队列(这里有个问题:官网的start_queue_runners()是有两个参数的,sess和coord,但是在这里加上sess的话会报错)。
利用try——except——finally结构来执行队列操作(官网推荐的方法),避免程序卡死什么的。i<2执行两次队列操作,每一次取出2张图放进batch里面,然后imshow出来看看效果。

with tf.Session() as sess:
    i = 0
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    try:
        while not coord.should_stop() and i<2:

            img, label = sess.run([image_batch, label_batch])

            # just test one batch
            for j in np.arange(BATCH_SIZE):
                print('label: %d' %label[j])
                plt.imshow(img[j,:,:,:])
                plt.show()
            i+=1

    except tf.errors.OutOfRangeError:
        print('done!')
    finally:
        coord.request_stop()
    coord.join(threads)

step4:查看结果,会出现4张图,resize的效果感觉不是很好,不知道是什么问题
2017.7.10 图片不正常是因为生成batch的时候将image转成了浮点型,吧image_batch = tf.cast(image_batch, tf.float32)注释掉后就好了

这里写图片描述
这里写图片描述

  • 33
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
引用\[1\]:运行完成后,在training_myself/dataset/COCO/目录下得到一个mask2014/目录,里面是未标注人的图片。将这个文件夹拷贝到training_myself/dataset/COCO/images/目录下以便后续处理。引用\[2\]:由于要训练自己的数据集,所以就需要人工标注数据,使用软件为labelme。该工具非常好用,基本可以满足深度学习众多任务的数据标注需求。引用\[3\]:按照编译官方最新的caffe的方法来编译这个用于训练openpose模型的caffe_train会遇到很多错误,主要原因我认为是这个caffe_train有点过时了,里面的部分源码都是很老版本的caffe中的。而我们所用的一些caffe相关的工具,软件,库肯定都是较新的版本。 针对openpose改进训练数据集的问题,可以采取以下步骤: 1. 首先,确保你已经准备好了自己的数据集,并使用labelme等工具进行人工标注。将标注好的数据集放置在合适的目录下,以便后续处理。 2. 接下来,你可以根据自己的需求对数据集进行改进。例如,你可以增加更多的样本,以增加数据集的多样性和覆盖范围。你还可以对标注的准确性进行检查和修正,确保每个位置的标注足够准确。 3. 此外,你还可以根据需要对数据集进行筛选,去除一些特征不明显或不符合要求的样本,以提高训练的准确率。 4. 如果你遇到了编译caffe_train的问题,可以尝试查找最新的编译方法或使用更新的版本。确保你使用的工具、软件和库与你所使用的openpose版本兼容。 通过以上步骤,你可以改进训练数据集,使其更适合用于openpose模型的训练。 #### 引用[.reference_title] - *1* *3* [OpenPose训练自己的数据集模型Realtime Multi-Person Pose Estimation](https://blog.csdn.net/qq_38469553/article/details/82119292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [OpenPose(tensorflow)工程详解系列(一)—— 制作训练数据集](https://blog.csdn.net/kxh123456/article/details/114531371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值