前言
经过 Android 机器学习组件-图画标签初探 – (juejin.cn) 咱们了解了如何运用根底模型完成图画标签功用。但是,根底模型所能识别的标签是有限的,是根据特定的数据集进行练习的。而实践事务场景中,需求咱们结合自身的数据,需求量身定制的模型,以便模型推理的成果更契合咱们实践的需求,下面就来了解一下如何运用自定义模型。
自定义模型
比较于标准模型,运用自定义模型有更多的灵活性,能够经过参数定制更多的内容。
运用自定义模型获取图画标签
- 首要,运用自定义模型时需求依靠支撑自定义模型的组件
com.google.mlkit:image-labeling-custom
- 将模型文件放在项目代码 assets 目录下,模型文件(通常以 .tflite 或 .lite 结束)
- 完成 ImageLabeler 的初始化
private fun initCustomLabeler() {
val localModel = LocalModel.Builder().setAssetFilePath("model.tflite").build()
val customImageLabelerOptions =
CustomImageLabelerOptions.Builder(localModel).setConfidenceThreshold(0.5f)
.setMaxResultCount(15).build()
labeler = ImageLabeling.getClient(customImageLabelerOptions)
}
- 这儿 setConfidenceThreshold 望文生义,便是配置可信度最小值,小于这个可信度的成果是不会回来的
- setMaxResultCount 回来标签个数调集的最大值
创建好 ImageLabeler 了之后,具体运用方法已经在Android 机器学习组件-图画标签初探 – (juejin.cn)中说过了,咱们用相同的图片再试一下。这儿运用的自定义模型是有 Google 练习的 mobilenet_v3, 是一个专门用于图画分类相关任务的模型。
17:07:37.195 ImageLabelHelper I text=stage ,confidence=8.178474 ,index=820 ,uri=content://media/external/images/media/101508
17:07:37.195 ImageLabelHelper I text=volcano ,confidence=7.372629 ,index=981 ,uri=content://media/external/images/media/101508
17:07:37.195 ImageLabelHelper I text=spotlight ,confidence=5.266957 ,index=819 ,uri=content://media/external/images/media/101508
17:07:37.196 ImageLabelHelper I text=alp ,confidence=4.521148 ,index=971 ,uri=content://media/external/images/media/101508
17:07:37.196 ImageLabelHelper I text=electric guitar,confidence=4.404194 ,index=547 ,uri=content://media/external/images/media/101508
17:07:37.197 ImageLabelHelper I text=geyser ,confidence=4.381730 ,index=975 ,uri=content://media/external/images/media/101508
17:07:37.197 ImageLabelHelper I text=maypole ,confidence=4.266276 ,index=646 ,uri=content://media/external/images/media/101508
17:07:37.197 ImageLabelHelper I text=planetarium,confidence=4.118463 ,index=728 ,uri=content://media/external/images/media/101508
17:07:37.197 ImageLabelHelper I text=ballplayer,confidence=4.013018 ,index=982 ,uri=content://media/external/images/media/101508
17:07:37.198 ImageLabelHelper I text=torch ,confidence=3.877848 ,index=863 ,uri=content://media/external/images/media/101508
17:07:37.198 ImageLabelHelper I text=steam locomotive,confidence=3.836026 ,index=821 ,uri=content://media/external/images/media/101508
17:07:37.198 ImageLabelHelper I text=fountain ,confidence=3.698731 ,index=563 ,uri=content://media/external/images/media/101508
17:07:37.199 ImageLabelHelper I text=unicycle ,confidence=3.564799 ,index=881 ,uri=content://media/external/images/media/101508
17:07:37.199 ImageLabelHelper I text=jigsaw puzzle,confidence=3.548051 ,index=612 ,uri=content://media/external/images/media/101508
17:07:37.199 ImageLabelHelper I text=crash helmet,confidence=3.526286 ,index=519 ,uri=content://media/external/images/media/101508
17:09:00.118 ImageLabelHelper I text=basketball,confidence=10.063719 ,index=431 ,uri=content://media/external/images/media/101507
17:09:00.119 ImageLabelHelper I text=unicycle ,confidence=5.737387 ,index=881 ,uri=content://media/external/images/media/101507
17:09:00.119 ImageLabelHelper I text=volleyball,confidence=5.126340 ,index=891 ,uri=content://media/external/images/media/101507
17:09:00.119 ImageLabelHelper I text=mountain bike,confidence=5.038583 ,index=672 ,uri=content://media/external/images/media/101507
17:09:00.120 ImageLabelHelper I text=bow ,confidence=4.851575 ,index=457 ,uri=content://media/external/images/media/101507
17:09:00.120 ImageLabelHelper I text=comic book,confidence=4.779339 ,index=918 ,uri=content://media/external/images/media/101507
17:09:00.120 ImageLabelHelper I text=toilet seat,confidence=4.755874 ,index=862 ,uri=content://media/external/images/media/101507
17:09:00.120 ImageLabelHelper I text=racket ,confidence=4.598331 ,index=753 ,uri=content://media/external/images/media/101507
17:09:00.121 ImageLabelHelper I text=chain saw ,confidence=4.398981 ,index=492 ,uri=content://media/external/images/media/101507
17:09:00.121 ImageLabelHelper I text=drum ,confidence=4.151714 ,index=542 ,uri=content://media/external/images/media/101507
17:09:00.121 ImageLabelHelper I text=shield ,confidence=3.973551 ,index=788 ,uri=content://media/external/images/media/101507
17:09:00.122 ImageLabelHelper I text=toyshop ,confidence=3.807693 ,index=866 ,uri=content://media/external/images/media/101507
17:09:00.122 ImageLabelHelper I text=bobsled ,confidence=3.746702 ,index=451 ,uri=content://media/external/images/media/101507
17:09:00.122 ImageLabelHelper I text=tricycle ,confidence=3.694458 ,index=871 ,uri=content://media/external/images/media/101507
17:09:00.122 ImageLabelHelper I text=balance beam,confidence=3.685299 ,index=417 ,uri=content://media/external/images/media/101507
17:10:03.945 ImageLabelHelper I text=seashore ,confidence=7.280358 ,index=979 ,uri=content://media/external/images/media/3719
17:10:03.946 ImageLabelHelper I text=aircraft carrier,confidence=5.773122 ,index=404 ,uri=content://media/external/images/media/3719
17:10:03.946 ImageLabelHelper I text=alp ,confidence=5.731852 ,index=971 ,uri=content://media/external/images/media/3719
17:10:03.946 ImageLabelHelper I text=obelisk ,confidence=5.652296 ,index=683 ,uri=content://media/external/images/media/3719
17:10:03.947 ImageLabelHelper I text=breakwater,confidence=5.417479 ,index=461 ,uri=content://media/external/images/media/3719
17:10:03.947 ImageLabelHelper I text=traffic light,confidence=5.388855 ,index=921 ,uri=content://media/external/images/media/3719
17:10:03.947 ImageLabelHelper I text=maze ,confidence=5.183353 ,index=647 ,uri=content://media/external/images/media/3719
17:10:03.948 ImageLabelHelper I text=go-kart ,confidence=5.009349 ,index=574 ,uri=content://media/external/images/media/3719
17:10:03.948 ImageLabelHelper I text=lakeside ,confidence=4.928476 ,index=976 ,uri=content://media/external/images/media/3719
17:10:03.948 ImageLabelHelper I text=unicycle ,confidence=4.758537 ,index=881 ,uri=content://media/external/images/media/3719
17:10:03.948 ImageLabelHelper I text=racer ,confidence=4.605724 ,index=752 ,uri=content://media/external/images/media/3719
17:10:03.949 ImageLabelHelper I text=triumphal arch,confidence=4.504304 ,index=874 ,uri=content://media/external/images/media/3719
17:10:03.949 ImageLabelHelper I text=promontory,confidence=4.499630 ,index=977 ,uri=content://media/external/images/media/3719
17:10:03.949 ImageLabelHelper I text=crane ,confidence=4.449341 ,index=518 ,uri=content://media/external/images/media/3719
17:10:03.949 ImageLabelHelper I text=trailer truck,confidence=4.262432 ,index=868 ,uri=content://media/external/images/media/3719
能够看到运用这个自定义模型,比较与根底模型,回来的图画标签类型更丰富了。同时标签类型索引也和之前的不同了,毕竟这个模型更大了,会有新的标签映射关系。
如何获取自定义模型
假如要运用自定义模型组件,就需求运用自己的模型。那么模型文件从哪里来呢?这个一般有两种方法
- 从网上获取他人练习好模型,比方直接从 TenserFlow Hub 下载他人练习好的模型。
这儿需求留意的是,从网络上获取模型时要契合 TensorFlow Lite 的标准
挑选形式时,从这儿挑选正确的模型,然后下载即可运用。
-
自己进行练习,这种一般是练习通用模型,也便是 PC 端可用的模型,然后转换为 TensorFlow Lite 类型的模型,以便移动端进行运用。许多深度学习框架 PyTorch,Paddle 练习之后的模型,都能够转换为契合 TensorFlow Lite 标准的模型。
上述相关完好代码能够参阅 Matisse