AI与农业:苹果缺陷检测
2019年09月19日 由 sunlei 发表
231129
0
关于训练人工智能计算和检测受损苹果的教程
毫无疑问,农业是人类历史上最古老、最重要的工作领域。随着全球人口的逐年增加,对农业食品和农产品的需求也随之增加。相反,世界各国和城市所经历的快速文明不断显示出大规模的农村向城市迁移,加上工作性质的转变,大多数人喜欢在非农业部门工作。因此,农业部门面临着生产和满足日益增长的现代生活需求的粮食和工业需求的巨大压力。
过去几十年,通过在农场使用重型机器和数字计算,技术一直是实现农业最佳产量和最低损耗的关键因素。随着大数据和人工智能的出现,农业部门在解决其大多数挑战以及确保农产品最高质量方面得到了令人难以置信的推动。例如,以色列是全球出口新鲜农产品的领头羊,尽管其地理位置不利于农业。这是因为数字计算和智能系统的广泛应用。
自机器学习和深度学习兴起以来,人工智能一直被用于改进农业生产、储存和分析,有效地帮助:
- 获取准确的农作物健康数据
- 检测病虫害
- 自动收割和作物分类
- 获取土壤状况的实时数据
- 实施精准灌溉
在本教程中,我们将向您展示如何使用人工智能,通过使用计算机视觉和深入学习自动检测、分类和识别受损的苹果。
请注意:您可以在本教程中对任何水果、作物或条件(如害虫控制和疾病检测等)应用相同的过程。
让我们按照下面详述的3个步骤开始。
第一步 -获取训练数据
为了将机器学习用于计算机视觉任务,我们需要提供足够的样本图像(数据集)来检测和识别我们需要的人工智能对象。在这种情况下,我们将使用一个深度学习算法,用于检测和计数苹果,以及识别图像和视频中受损的苹果。
在本教程中,我们收集并准备了713张包含苹果的图片,包括健康苹果和受损苹果。它也被标注为目标检测训练,这是我们用来训练我们的人工智能模型来检测和识别苹果的过程。您可以通过下面的链接下载下面的数据集。
https://github.com/OlafenwaMoses/AppleDetection/releases/download/v1/apple_detection_dataset.zip
它分为:
- 563张图像用于训练人工智能模型
- 150张图片用于测试训练过的人工智能模型
要为自己的自定义裁剪或项准备数据集,您可以按照链接的教程进行操作
https://medium.com/deepquestai/object-detection-training-preparing-your-custom-dataset-6248679f0d1d?source=post_page-----b246799b329c----------------------
第二步-训练你的人工智能模型
为了生成我们的人工智能模型,我们将使用ImageAI训练一个YOLOv3模型。
ImageAI是一个python库,允许您使用和训练AI模型,只需要几行代码来检测图像和视频中的对象。
因为训练过程是计算密集型的,所以可以使用谷歌Colab执行此训练。参见下面的链接。
https://colab.research.google.com
要进行训练,请遵循以下说明:
- 使用下面的代码通过PIP安装Tensorflow GPU版本
pip3 install tensorflow-gpu==1.13.1
pip3 install keras
pip3 install opencv-python
pip3 install imageai –upgrade
- 完成上述安装之后,下载步骤1中提供的样例数据集并将其解压。
unzip
apple_detection_dataset.zip
- 通过下面的链接下载一个预训练的YOLOv3模型,该模型将用于促进训练过程。下载后,将文件移动到与解压缩数据集相同的文件夹中
https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/pretrained-yolov3.h5
- 然后在解压数据集的同一文件夹中创建一个新的Python文件,并将下面的代码写入其中。
from imageai.Detection.Custom import DetectionModelTrainer
trainer = DetectionModelTrainer()
trainer.setModelTypeAsYOLOv3()
trainer.setDataDirectory(data_directory="apple_dataset")
trainer.setTrainConfig(object_names_array=["apple", "damaged_apple"], batch_size=8, num_experiments=50, train_from_pretrained_model="pretrained-yolov3.h5")
trainer.trainModel()
很简单!以上6行代码是您在苹果数据集上启动训练所需的全部。现在让我们把代码分解为以下几部分:
- 在第1行中,我们从ImageAI导入了“DetectionModelTrainer”类
- 在第2和第3行中,我们创建了类的一个实例,并将模型类型设置为YOLOv3
- 在第4行中,我们设置了到apple dataset的路径
- 在第5行中,我们指定了以下参数:
- object_names_array:这是数据集中所有对象名称的数组。
- batch_size:这是培训的批处理大小。批量大小可以是8、16等等。
- num_tests:这是我们希望训练代码在apple数据集上迭代的次数。
- train_from_pretrained_model:这是用来利用我们之前下载的预训练YOLOv3模型进行转移学习的。
一旦训练开始,
ImageAI将在hololens/json文件夹中生成detection_config.json文件。这个JSON文件将用于检测图像和视频中的对象
ImageAI将创建apple_dataset/models文件夹,其中保存所有生成的模型
您将在日志中看到如下示例详细信息。
Using TensorFlow backend.Generating anchor boxes for training images and annotation...
Average IOU for 9 anchors: 0.78
Anchor Boxes generated.
Detection configuration saved in apple_dataset/json/detection_config.json
Training on: ['apple', 'damaged_apple']
Training with Batch Size: 8
Number of Experiments: 100
Training with transfer learning from pretrained Model
Epoch 1/100
- 598s - loss: 42.5869 - yolo_layer_1_loss: 5.8333 - yolo_layer_2_loss: 11.9026 - yolo_layer_3_loss: 24.8509 - val_loss: 21.9279 - val_yolo_layer_1_loss: 3.6049 - val_yolo_layer_2_loss: 6.5100 - val_yolo_layer_3_loss: 11.8130
Epoch 2/100
- 560s - loss: 20.3933 - yolo_layer_1_loss: 3.2060 - yolo_layer_2_loss: 5.9345 - yolo_layer_3_loss: 11.2528 - val_loss: 19.1719 - val_yolo_layer_1_loss: 2.9118 - val_yolo_layer_2_loss: 5.6962 - val_yolo_layer_3_loss: 10.5639
Epoch 3/100
- 562s - loss: 17.8154 - yolo_layer_1_loss: 2.8638 - yolo_layer_2_loss: 5.3614 - yolo_layer_3_loss: 9.5903 - val_loss: 18.0630 - val_yolo_layer_1_loss: 2.6872 - val_yolo_layer_2_loss: 5.6299 - val_yolo_layer_3_loss: 9.7458
Epoch 4/100
- 548s - loss: 16.4284 - yolo_layer_1_loss: 2.4571 - yolo_layer_2_loss: 4.9751 - yolo_layer_3_loss: 8.9962 - val_loss: 18.3783 - val_yolo_layer_1_loss: 2.9664 - val_yolo_layer_2_loss: 5.3752 - val_yolo_layer_3_loss: 10.0367
Epoch 5/100
- 534s - loss: 15.4298 - yolo_layer_1_loss: 2.2201 - yolo_layer_2_loss: 4.6647 - yolo_layer_3_loss: 8.5451 - val_loss: 17.9699 - val_yolo_layer_1_loss: 2.4477 - val_yolo_layer_2_loss: 5.2248 - val_yolo_layer_3_loss: 10.2974
Epoch 6/100
第三步-开始使用你训练过的模型
完成训练后,转到apple_dataset/models文件夹,选择文件名中损失值最小的模型。在本教程中,我们提供了一个经过样本训练的苹果检测模型。通过下面的链接下载。
https://github.com/OlafenwaMoses/AppleDetection/releases/download/v1/detection_model-ex-028--loss-8.723.h5
然后以下面的示例图像为例。
然后创建一个新的python文件,并编写下面的代码来应用经过训练的模型来检测图像中的苹果。
from imageai.Detection.Custom import CustomObjectDetection
import os
execution_path = os.getcwd()
detector = CustomObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath(detection_model_path="detection_model-ex-028--loss-8.723.h5")
detector.setJsonPath(configuration_json="detection_config.json")
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image="image.jpg", minimum_percentage_probability=60, output_image_path="image-new.jpg")
for detection in detections:
print(detection["name"], " : ", detection["percentage_probability"], " : ", detection["box_points"])
当您运行上面的代码时,您将看到下面的结果。
damaged_apple : 93.93747448921204 : [164, 117, 447, 334]
apple : 93.14679503440857 : [0, 2, 185, 61]
apple : 92.1971321105957 : [197, 3, 365, 73]
apple : 95.81946730613708 : [378, 8, 572, 65]
apple : 97.50433564186096 : [491, 29, 630, 160]
apple : 92.4841821193695 : [33, 12, 243, 189]
apple : 95.06285786628723 : [275, 17, 471, 187]
apple : 93.58476400375366 : [1, 109, 158, 314]
apple : 96.47991061210632 : [458, 147, 621, 315]
apple : 95.83896398544312 : [589, 3, 631, 64]
如您所见,经过训练的苹果检测模型能够检测出图像中的所有苹果,并识别出有缺陷的苹果(有斑点的苹果)。
你可以用这个训练过的模型
正如您所看到的,我们刚刚创建了一个新的人工智能模型,可以用于苹果种植、生产和包装。我们的样本数据集是为检测和识别缺陷而准备的。我们可以通过收集更多的图像样本使我们的模型完成其他任务。此任务可以是:
- 检测成熟和未成熟的苹果
- 检测不同大小的苹果
- 检测不同类型的苹果。
有关为自定义检测创建更多人工智能模型的详细信息,请访问下面提供的教程链接。
Train object detection Ai with 6 lines of code
ImageAI : Custom Detection Model Training
ImageAI : Custom Video Object Detection, Tracking and Analysis
原文链接:https://medium.com/deepquestai/ai-in-agriculture-detecting-defects-in-apples-b246799b329c