今天我来带大家做一个有趣的事情,识别“啪”的手势,使用tensorflow object detect api
来检测
标注
首先我们使用标注工具来进行标注
此工具是C#写的,只能用在windows环境下,输入图片的地址,按“导入”。
还有一种方法就是直接从网上找图片,输入关键字,点击启动,等待进度条完成后,导入到标注文件就好。(爬取的照片准确度不是很高,所以我拿的是自己拍的)
导入图片后我们在右侧输入要标注物体的tag
,在图片上从左向右下角将识别的物体框住就好。
标注完在右下角可以看到具体的标注信息
标注完后打开图片文件夹就能看到标注的位置了
把手势全部标注完。其产生的的“label_map.pbtxt”
和“image”
就是我们需要的:
安装tensorflow object detec api(ubuntu)
现在我们来安装tensorflow object detec api(ubuntu)
基于我们已经安装好了tensorflow
:
#在根目录下创建一个output目录
mkdir /output
cd /output/
#下载tensorflow object detec api 代码git clone https://github.com/tensorflow/models.git
#安装依赖项
pip install Cython
pip install pillow
pip install lxml
pip install jupyter
pip install matplotlib
pip install opencv-python
pip install pycocotools
cd /output/models/research/
#编译
protoc object_detection/protos/*.proto --python_out=.
#安装export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
#验证python object_detection/builders/model_builder_test.py
```
最后打印出“OK”即说明安装API成功
(代码来自https://github.com/sanfooh/tensorflow_object_detection_api_demo)
***
### 下载项目
```python
#下载图片及标注文件
cd /output
git clone https://github.com/sanfooh/tensorflow_object_detection_api_demo.git
下载这个项目之后,将项目中的“label_map.pbtxt”
和“image”
文件夹删掉,然后把第一步产生的“label_map.pbtxt”
和“image”
放进去。
我们还需要下载一个预训练项目
#下载预训练文件
cd /output/tensorflow_object_detection_api_demo
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz
tar -xzvf ssd_mobilenet_v1_coco_2017_11_17.tar.gz
rm -r ssd_mobilenet_v1_coco_2017_11_17.tar.gz
生成tfrecord
#生成tfrecord数据集
python create_tf_record.py
生成之后我们可以看到如下的文件(train.record
和 val.record
)
训练
接下来我们就开始训练
#训练
mkdir mytrain
python3 /output/models/research/object_detection/legacy/train.py --train_dir=mytrain/ --pipeline_config_path=/output/tensorflow_object_detection_api_demo/net.config --logtostderr
遇到缺乏'nets'解决方法,添加到环境变量中去就好
#缺乏'nets'
cd /output/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
查看训练情况
#查看训练情况cd /home/aiguodong/.local/lib/python3.6/site-packages/tensorboard3python3 main.py --logdir=/output/tensorflow_object_detection_api_demo/mytrain
打开浏览器http:/xxxx:6006就可查看训练情况
在训练的过程中(训练不要停),使用eval.py
来评估验证集
首先,为了避免评估争抢gpu
的资源,让eval
只在cpu
运行就好了,找到/output/models/research/object_detection/legacy/eval.py
文件在开始的地方添加 os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
PS:把/output/tensorflow_object_detection_api_demo
下的net.config
文件复制到/output/tensorflow_object_detection_api_demo/mytrain
文件夹下(两个文件一样 可以省去这步在下面代码中修改路径就好)
运行如下代码开始评估
#开始评估cd /output/tensorflow_object_detection_api_demo
mkdir eval
python3 /output/models/research/object_detection/legacy/eval.py --logtostderr --pipeline_config_path=net.config --checkpoint_dir=mytrain/ --eval_dir=eval/
运行后它不会退出,当有新的检查点文件产生时,它会重新评估,也就是说它是在训练的同时运行,需要注意net.config
文件中eval部分是这样设置的
不然会报错(ValueError:Image with id b'xxx.jpg' already added
)
评估时,会在eval
目录下生成形如events.out.tfevents.XXX
的文件
这时我们需要再使用tensorboard
来查看图片情况:
#查看图片情况cd /output/tensorflow_object_detection_api_demo
tensorboard --logdir "/output/tensorflow_object_detection_api_demo/eval"
训练完成后我们就可以发布了(注意修改13108)
#开始评估python3 /output/models/research/object_detection/export_inference_graph.py
--input_type image_tensor
--pipeline_config_path /output/tensorflow_object_detection_api_demo/net.config
--trained_checkpoint_prefix /output/tensorflow_object_detection_api_demo/mytrain/model.ckpt-13108 6--output_directory /output/tensorflow_object_detection_api_demo/mymodel
在mymodel
下生成如下文件,其中frozen_inference_graph.pb
就是我们要的文件
发布
有了.pb文件以后,我们就可以发布模型了:
#利用Flask来发布模型
pip install flask
pip install flask_wtf
#启动服务python3 /output/tensorflow_object_detection_api_demo/web/app.py
最后用浏览器打开8000端口可以看到如下效果:
如果大家在训练中遇到什么问题,可以私信我交流!