generate_tfrecord.py生成tfrecord出错记录

本文是笔者在Windows 10上用python3.6 + Tensorflow gpu 1.9.0以egohand(一份手部检测数据集)训练过程中遇到的问题:
从头开始说起,笔者看到github上的一份已训练实现的手部识别源码
https://github.com/victordibia/handtracking
跑通一遍。实际已经运行成功了。只是用的是原有已训练完的模型。

第二步,是希望在源训练数据集上用Tensorflow重新训练一遍。

简述一下步骤:

  1. 下载手部检测数据
    来自于
    http://vision.soic.indiana.edu/projects/egohands/
  2. 整理数据
    不需要手动解压这个压缩包,而是使用代码去完成数据的解压和整理工作
    git库中的egohands_dataset_clean.py依次完成以下几项工作

如果当前目录下没有egohands_data.zip则下载,即调用download_egohands_dataset() 建议此步骤分成自己手动先下载好压缩包后再拷贝进来,避免下载过程中断续
否则解压egohands_data.zip并得到egohands文件夹,并对其中的图片数据执行rename_files()
rename_files()会将所有的图片重命名,加上其父文件夹的名称,避免图片名重复,并调用generate_csv_files()
generate_csv_files()读取每个场景下的图片,调用get_bbox_visualize(),根据标注文件polygons.mat绘制手部轮廓和Anchor Box并显示,同时将图片标注转换并存储为csv文件,全部处理完后,再调用split_data_test_eval_train()
split_data_test_eval_train()完成训练集和测试集的分割,在images文件夹中新建train和test两个文件夹,分别存放对应的图片和csv标注
完成以上工作后,便可以手动删除一开始解压得到的egohands文件夹

3.调用generate_tfrecord.py(不在该git中,从https://github.com/datitran/raccoon_dataset/blob/master/generate_tfrecord.py
直接拷贝过来),将训练集和测试集整理成TFRecord文件

由于这里只需要检测手部,因此物体类别只有一种即hand,如果需要定制其他物体检测任务,generate_tfrecord.py中修改以下代码即可

def class_text_to_int(row_label):
    if row_label == ‘hand‘:
        return 1
    else:
        None

接下来将generate_tfrecord.py放到与egohands_dataset_clean.py同级目录中,运行
python generate_tfrecord.py --csv_input=images/train/train_labels.csv --output_path=train.record
报如下错误:
Traceback (most recent call last):
File "generate_tfrecord.py", line 100, in <module>
tf.app.run()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\platform\app.py", line 125, in run
_sys.exit(main(argv))
File "generate_tfrecord.py", line 91, in main
tf_example = create_tf_example(group, path)
File "generate_tfrecord.py", line 46, in create_tf_example
encoded_jpg = fid.read()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 125, in read
self._preread_check()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 85, in _preread_check
compat.as_bytes(self.__name), 1024 * 512, status)
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 519, in exit
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open: CARDS_COURTYARD_B_T_frame_0011.jpg : ??\udcd5?\udcbb\udcb5\udcbd?\udcb6\udca8\udcb5\udcc4\udcce?\udcfe\udca1\udca3
; No such file or directory

最后一行错误 创建、打开CARDS_COURTYARD_B_T_frame_0011.jpg文件失败
CARDS_COURTYARD_B_T_frame_0011.jpg文件在images/train/目录下,相信花时间找generate_tfrecord中读文件的路径修改下即可。
本人偷了下懒,既然是获取本目录下的图片文件,那么只要将generate_tfrecord移动到images/train/目录下
再运行
python generate_tfrecord.py --csv_input=train_labels.csv --output_path=train.record
生成train.record成功。

网上stackflow中,有提到改变系统环境,用linux运行。这个步骤耗费太大,建议先按笔者的步骤尝试看看。

原文地址:https://blog.51cto.com/cfy10/2446070

时间: 2024-08-28 21:06:47

generate_tfrecord.py生成tfrecord出错记录的相关文章

Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告2(使用PyCharm )

1.说明 在我前一篇文件(Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告1(使用IDLE ))中简单的写明了,如何生产测试报告,但是使用IDLE很麻烦,而且在实际的项目中也不方便,所以,查了很多资料来研究如何在PyCharm中生成测试报告,故此记录一下(命名什么的不规范就不要纠结了). 2.步骤 第一步:下载HTMLTestRunner.py 参考:Python+Selenium----使用HTMLTestRunner.py生成自动化测试报告1(使

Mysql 高效随机生成N条记录

1 select *, rand() as random FROM yef_exercises where id not in(1) order by random limit 1 // Mysql Mysql 高效随机生成N条记录,布布扣,bubuko.com

Tensorflow 处理libsvm格式数据生成TFRecord (parse libsvm data to TFRecord)

#写libsvm格式 数据 write libsvm ? ? #!/usr/bin/env python #coding=gbk # ============================================================================== # \file gen-records.py # \author chenghuige # \date 2016-08-12 11:52:01.952044 # \Description # ========

安卓数据云端同步(一)生成操作Sqlite记录

同步思想: 先介绍客户端为最新数据的数据同步问题,这种机制常常应用在云笔记,随手记类似的app. 这里我建了一个listview,对listview上item的增删改,来代替实际项目中的情况. 1.对listview 和本地数据表datatable表(使用id作为数据唯一表示)映射,实现增删改. 2.每次将对本地数据表的操作记录在operation表中,在表中记录该操作的时间戳. 3.将operation 表中内容封装成json数据发送给服务器(从服务器获取上次同步时间戳,只提交在这次更新以后的

(三)maven出错记录

此处因为是自己做的所以文笔带过,简单描述下 1\首先是jsp页面报错,缺少必要的servletx依赖jar包,需要在pom中配置 <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>compile</scope></depende

iOS 使用EZAudio库生成wav出错的情况

使用EZAudio库 录M4A格式可以参考该库例子中的代码. 录wav格式得改下源码.看下面的代码 1 AVAudioSession *session = [AVAudioSession sharedInstance]; 2 NSError *error = nil; 3 [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 4 if (error) NSLog(@"audio session ca

Unity 生成APK 出错的解决方法

在unity生成apk时,报错: Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details. C:\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W\aapt.exe package --auto-add-overlay -v -f -m -J gen -M A

【二分】出错记录

一.跳石子 无限循环了. 改为: if (rez <= m) { ans = ans > rez ? rez : ans; l = mid + 1; } else r = mid - 1; 就跳出了循环. 0 是输出的结果,明显错误. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 还有ans的初值应该设为

【原创】AIX 下使用NFS挂载凝思linux下的文件系统出错记录

环境说明: 210.10.3.78 凝思Liunx 210.10.3.216 AIX 现象: 78共享,本机可mount,但216不能mount 操作过程如下(root): /* 凝思Liunx上操作 */ 共享: #/etc/rc.d/init.d/portmap start #/etc/rc.d/init.d/nfsserver start #vi /etc/exports 添加 /home  *(rw,sync) 挂载: mount -t nfs /home  /mnt/test 卸载: