训练自己的Android TensorFlow神经网络

目录

结论


在这里,我们看一下如何通过三个命令来下载和构建Darknet。我们还将讨论如何收集各种类别的对象的图像以进行训练和测试,以及如何将图像标记和划分为两个列表。

这是在Android上使用TensorFlow的系列文章的最后一部分。该系列的前几部分介绍了如何设置开发环境,查找经过预先训练的模型,使其适合在Android应用程序中使用以及创建使用该模型的应用程序。前面的部分使用YOLO实现来创建可识别80类对象的应用程序。

您可以训练自己的YOLO网络以识别您自己选择的项目分类。YOLO最初由Joseph RedmondFarhadi Ali使用Darknet实现。Darknet是用于制作神经网络的基于C的开源框架。如果您的计算机已经安装了C编译器和make,则可以下载Darknet并使用以下三个命令构建它们:

git clone https://github.com/pjreddie/darknet
cd darknet
make

确定您希望网络识别的图像类别。列出文本文件中的类的列表,以使它们按定义的顺序排列。每个班级都应该排成一行。该文件将用于训练。拥有一个有序列表也很重要,因为图像类将由该列表中类的从零开始的索引来表示。将此文件命名为classes.txt并将其放置在Darknet数据文件夹中。

接下来,收集各个类别中的对象图像以进行训练和测试。这可能是最具挑战性的步骤之一,因为每个类别都需要数百张图像。对于您要识别的项目,您需要从不同角度在各种情况下对它们进行拍照。每个图像文件也必须标记。通过创建与该图像具有相同名称(但扩展名为txt)的文本文件来标记图像,该文本文件包含训练图像中每个样本对象的一行。每行有五个元素,中间用空格隔开。

    

下面是这样一条线的示例。对于此行,被分类为第5类的对象位于图像中10,12xy位置,并且宽45像素,高22像素。由于使用从零开始的索引,因此这里的数字5代表您先前创建的classes.txt文件中第六行的项目。

5 10 12 45 22

对于带有标签的图像,您将需要将图像分为两个列表。这两个列表的图像应以80/ 20%到90/ 10%的比例进行划分。列表中的较大者将用于训练网络,而两个列表中的较小者将用于测试网络。每个列表本身都应包含图像文件的绝对路径。将文件命名为test.txttrain.txt

这些文件现在将成为配置集的一部分。在数据文件夹中,创建一个名为training_config.data的文件。该文件将包含有关网络将检测到的类的数量,包含训练数据文件列表的文件的路径,包含测试文件列表的文件的路径以及间歇性放置的文件夹名称的信息训练期间的结果。

classes= 20
train  = /dev/darknet/data/train.txt
valid  = /dev/darknet/data/test.txt
names = data/classes.txt
backup = backup

有了该文件之后,您现在就可以开始训练了:

./darknet detector train cfg/training_config.data  cfg/yolov3-voc.cfg

训练是一个耗时的过程。训练开始后,可能是离开计算机并做其他事情的好时机。如果在便携式计算机上运行训练,请确保已将其连接到电源。训练需要大量计算,并且计算机可能会在一段时间内处于较高功率状态之一。

训练完成后,您将获得DarkNet.weights文件。有几种开源实用程序可将该文件转换为TensorFlow 1TensorFlow 2TensorFlow freeze图。我建议与TensorFlow兼容的实用程序名为Yolov4-tflite,这是一个Python脚本实用程序,您可以从以下URL克隆该实用程序:

https://github.com/hunglc007/tensorflow-yolov4-tflite

要转换权重文件,该实用程序接受文件的路径:

python save_model.py --weights ../darknet/yolov3.weights  -output my-yolov --input_size 416 --model yolov3

程序的输出提供了一个TensorFlow freeze图,可以立即使用或转换为TensorFlow Lite

结论

这是在Android上使用TensorFlite Lite的六部分系列的最后一部分。我专注于使用现有模型,并将注意力转向了视觉处理。这不是可以使用TensorFlow的唯一领域。如果您具有有关如何形成输入或解释输出的信息,则本系列中介绍的信息也可以用于导入和使用TensorFlow模型用于非可视算法。

你可能感兴趣的:(人工智能,python,Android,Android,TensorFlow神经网络)