Flutter tflite图像分类如何不显示错误结果
Posted
技术标签:
【中文标题】Flutter tflite图像分类如何不显示错误结果【英文标题】:Flutter tflite image classification how to not show wrong results 【发布时间】:2021-08-02 09:32:49 【问题描述】:我正在尝试了解 tensorflow,我想创建一个带有猫或狗图像分类的颤振应用程序。
我使用https://teachablemachine.withgoogle.com/ 用 100 个 epoch 和 128 个批次训练我的模型。我的模型的输出对猫和狗的准确率都是 97%。我使用了来自 kaggle 的数据集,其中每只猫和狗都有 4000 张图像。
我的代码:
import 'dart:io';
import 'package:tflite/tflite.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class MyHomePage extends StatefulWidget
@override
_MyHomePageState createState() => _MyHomePageState();
class _MyHomePageState extends State<MyHomePage>
File? _image;
bool _loading = false;
List<dynamic>? _output;
final _picker = ImagePicker();
pickImage() async
var image = await _picker.getImage(source: ImageSource.camera);
if (image == null)
return null;
setState(()
_image = File(image.path);
);
classifyImage(_image);
pickGalleryImage() async
var image = await _picker.getImage(source: ImageSource.gallery);
if (image == null)
return null;
setState(()
_image = File(image.path);
);
classifyImage(_image);
@override
void initState()
super.initState();
_loading = true;
loadModel().then((value)
// setState(() );
);
@override
void dispose()
Tflite.close();
super.dispose();
classifyImage(File? image) async
var output = await Tflite.runModelOnImage(
path: image!.path,
numResults: 2,
threshold: 0.5,
imageMean: 127.5,
imageStd: 127.5,
);
setState(()
_loading = false;
_output = output;
);
loadModel() async
await Tflite.loadModel(
model: 'assets/model_unquant.tflite',
labels: 'assets/labels.txt',
);
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('Cat vs Dog Classifier'),
),
body: Center(
child: Column(
children: [
SizedBox(height: 160.0),
_image == null
? Text('No image selected')
: Container(
child: Image.file(_image!),
height: 250.0, // Fixed height for image
),
SizedBox(height: 20.0),
_output != null ? Text('$_output![0]['label']') : Container(),
SizedBox(height: 50.0),
ElevatedButton(
onPressed: pickImage,
child: Text('Take Picture'),
),
ElevatedButton(
onPressed: pickGalleryImage,
child: Text('Camera Roll'),
),
],
),
),
);
我的问题:
如果我选择了一个不是猫或狗的不同图像,我在大多数情况下仍会得到 100% 的猫或狗反馈。如何不显示这些错误的结果?我们实际上可以做什么?
【问题讨论】:
【参考方案1】:您必须在 3 个类上训练您的原始模型:
猫 狗 其他然后转换为 tflite 模型并在你的 Flutter 项目中使用它
【讨论】:
你会为“其他”类使用什么样的对象?任何事物?如果我有 1000 张猫和狗的照片,我需要多少张训练照片?谢谢!以上是关于Flutter tflite图像分类如何不显示错误结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 JAX,TFLite 和 Flutter 打造一个棋盘游戏