简介
用TensorFlow实现一个手部实时检测器
和Inception-v3通过迁移学习实现定制的图片分类任务类似
在上节课内容的基础上,添加手部标注数据,并使用预训练好的模型完成迁移学习
数据
手部检测数据来自于
http://vision.soic.indiana.edu/projects/egohands/
图片使用Google Class拍摄,egohands_data.zip
是一个压缩包,里面共有48个文件夹,分别对应48个不同场景(室内、室外、下棋等)中共计4800张标注图片,标注即全部的手部轮廓点
不过我们不需要手动解压这个压缩包,而是使用代码去完成数据的解压和整理工作
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
文件夹
也就是从egohands_data.zip
得到images
文件夹,在我的笔记本上共花费6分钟左右
接下来调用generate_tfrecord.py
,将训练集和测试集整理成TFRecord文件
由于这里只需要检测手部,因此物体类别只有一种即hand
,如果需要定制其他物体检测任务,修改以下代码即可
def class_text_to_int(row_label):
if row_label == 'hand':
return 1
else:
None
运行