应用开发使用:
- React Native | Flutter | Javascript
- TensorFlow Mobile
模型训练使用:
是时候表演真正的技术了 —— 画框
偷懒用了 COCO 2014 数据集。COCO 一共有 80 种物体类别,其中一个就是热狗 (hot dog)。我写了个脚本导出所有的热狗图片(共 1200 多张)并生成 yolo 格式的标注: https://github.com/shaqian/Not-Hotdog/blob/master/yolo/coco2yolo.py
- 首先从预训练的 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.13
我用的 darkflow 转换:
flow --model ../yolov2-tiny-hotdog.cfg --load ../yolov2-tiny-hotdog_final.weights --savepb
转换后的 .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
调用 TensorFlow Mobile 接口是自己实现的 native 模块。
-
iOS 端的实现代码在
./react-native-NotHotdog/ios/NotHotdog/TensorflowManager.mm
-
Android 端的实现代码在
./react-native-NotHotdog/android/app/src/main/java/com/nothotdog/tensorflowmanager
- TensorFlow Mobile: iOS, Android
- react-native-camera
- react-native-share
- react-native-fs
- react-native-svg
- react-native-animatable
将 ./yolo 文件夹的 quantized_yolov2-tiny-hotdog.pb 复制至以下路径:
- react-native-NotHotdog/android/app/src/main/assets
- react-native-NotHotdog/ios/NotHotdog/data
- iOS 的 TensorFlow Mobile 用 pod 安装:
cd react-native-NotHotdog/ios
pod install
- 安装其他依赖:
cd react-native-NotHotdog/
npm install
- 模拟器:
react-native run-ios
-
真实设备:
由于 react-native-camera 的一些问题,Android 端拍照要比 iOS 慢很多,有时间可以改进一下。
-
GitHub repo 里的 rn_hotdog.apk 可直接安装。
-
模拟器:
react-native run-android
-
真实设备:
调用 TensorFlow Mobile 接口是自己实现的 native 模块。
-
iOS 端的实现代码在
flutter_nothotdog/ios/Runner/TensorFlow/
-
Android 端的实现代码在
flutter_nothotdog/android/app/src/main/java/com/nothotdog/tensorflow/
- TensorFlow Mobile: iOS, Android
- camera
- path_provider
- share
将 ./yolo 文件夹内的 quantized_yolov2-tiny-hotdog.pb 复制至以下路径:
- flutter_nothotdog/android/app/src/main/assets/
- flutter_nothotdog/ios/Runner/TensorFlow/
- iOS 端的 TensorFlow Mobile 使用 POD 安装:
cd flutter_nothotdog/ios
pod install
- 安装其他依赖:
cd flutter_nothotdog/
flutter packages get
flutter run
- 直接安装 flutter_nothotdog 文件夹内的 flutter_hotdog.apk。
点击预览图片可显示 box 和 score。
https://shaqian.github.io/Not-Hotdog/
npm install
npm start
npm run build