TensorFlow + YOLO + React Native 制作 Not Hotdog App
看过美剧《硅谷》的同学都知道人工智能识别热狗曾是硅谷最赚钱的技术之一。去年 HBO 发布了官方的 Not Hotdog 应使用,支持 iOS 和 Android 平台,据说是使用 TensorFlow、Keras 和 React Native 打造的,但是源码没有公开。
最近入门了机器学习的少量边边角角,仿制了一个 Not Hotdog 应使用。代码主要用 React Native 和 TensorFlow Mobile ,训练模型用 Yolo v2 Tiny。
源代码
shaqian/Not-Hotdog
效果图
iOS
是时候表演真正的技术了 —— 画框
Android
建模过程
1. 制作数据集
偷懒使用了 COCO 2014 数据集。COCO 一共有 80 种物体类别,其中一个就是热狗 (hot dog)。我写了个脚本导出所有的热狗图片(共 1200 多张)并生成 yolo 格式的标注:
shaqian/Not-Hotdog/blob/master/yolo/coco2yolo.py
2. 训练 Yolov2 Tiny
用的是 darknet 的 这个 fork 。
- 首先从预训练的 yolov2 tiny 模型 提取初始 weights:
darknet.exe partial yolov2-tiny.cfg yolov2-tiny.weights yolov2-tiny.conv.13 13而后整理数据集,主要是生成 obj.data 和 obj.names 文件,可参考:
https://timebutt.github.io/static/how-to-train-yolov2-to-detect-custom-objects/修改 .cfg 文件:
将本来的 80 个类别改成 1 个类别。.cfg 文件和初始 weights 请见 GitHub repo 。最后训练模型:
darknet.exe detector train data\obj.data yolov2-tiny-hotdog.cfg yolov2-tiny.conv.133. 将 weights 转为 TensorFlow protobuf (.pb) 格式
我使用的 darkflow 转换:
flow --model ../yolov2-tiny-hotdog.cfg --load ../yolov2-tiny-hotdog_final.weights --savepb4. 量化
转换后的 .pb 约有 44MB。使用 TensorFlow repo里面的 quantization 脚本 压缩一下,体积可以减小到 11MB。
python3 tensorflow/tools/quantization/quantize_graph.py --input=yolov2-tiny-hotdog.pb --output_node_names=output --output=quantized_yolov2-tiny-hotdog.pb --mode=weights制作应使用
React Native 的 Native 板块
出于方便,调使用 TensorFlow Mobile 接口是自己实现的 native 板块。
iOS 端的实现代码在 ./react-native-NotHotdog/ios/NotHotdog/TensorflowManager.mm
Android 端的实现代码在 ./react-native-NotHotdog/android/app/src/main/java/com/nothotdog/tensorflowmanager
参考了以下 repo 特此感谢:
TensorFlow Android example
TensorFlow iOS example
yolov2_tf_ios
依赖库一览
- TensorFlow Mobile: iOS, Android
- react-native-camera
- react-native-share
- react-native-fs
- react-native-svg
- react-native-animatable
安装依赖
- iOS 的 TensorFlow Mobile 使用 pod 安装:
cd react-native-NotHotdog/iospod install- 安装其余依赖:
cd react-native-NotHotdog/npm install运行
iOS
- 模拟器:
react-native run-ios真实设施:
请参考 Running your app on iOS devices。
Android
因为 react-native-camera 的少量问题,Android 端拍照要比 iOS 慢很多,有时间可以改进一下。
GitHub repo 里的 hotdog.apk 可直接安装。
模拟器:
react-native run-android真实设施:
请参考 Running your app on Android devices。
感谢您的阅读!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » TensorFlow + YOLO + React Native 制作 Not Hotdog App