몇 줄의 코드는 완전한 기능을 갖춘 물체 감지 모델을 구축, 듀크 대학 학생했다!



저자 | Alan Bi

번역기 | 우 명려 Zebian | 캐롤

제작 | AI 기술을베이스 캠프 (ID : rgznai100)

오늘날, 기계 학습 및 컴퓨터 비전은 유행이되고있다. 우리는 얼마나 멋진 컴퓨터 비전 자신의 모델을 구축하기 위해 상상할 수있는 자동 조종 뉴스와 얼굴 인식에 차를 보았다. 그러나이 부분에 대한 액세스가 특히 강한 수학 배경이없는 상태에서, 항상 쉬운 일이 아닙니다. 그냥하고 싶은 경우 등 PyTorch 및 TensorFlow 라이브러리와 같은 몇 가지 작은 실험은 매우 지루한 될 수 있습니다. 

이 튜토리얼에서는, 저자는 간단한 방법 누군가가 완전한 기능을 갖춘 물체 감지 모델을 구축하기 위해 몇 줄의 코드를 사용할 수 있습니다. 보다 구체적으로, 우리는 PyTorch의 상단에 내장 파이썬 패키지 디텍은, 모든 수준의 프로그래머에게 공개 과정을 단순화 사용합니다.

빠르고 간단한 예

그것이 디텍을 모델 사전 훈련의 부하하자, 다음과 같은 이미지를 추론하는 것이 얼마나 쉬운 지 보여주기 위해 :

첫째, PIP 다운로드 디텍 패키지 :

pip3 install detecto

그런 다음, 위의 파이썬 파일로 이미지와는 "fruit.jpg"과 같은 폴더에있는 이미지를 만들 ,. 파이썬 파일에서 다음 코드 5 줄 쓰기 :

from detectoimport core, utils, visualize 
image = utils.read_image('fruit.jpg')
model = core.Model()
labels, boxes, scores = model.predict_top(image)
visualize.show_labeled_image(image, boxes, labels)
运行此文件后(如果你的计算机上没有启用CUDA的GPU,可能会花费几秒钟;稍后再进行介绍),你应该会看到类似下面的图:

저자는 모든 일, 정말 좋은를 완료하는 코드의 다섯 줄을했다. 여기에서 우리는 각 단계를하고있는 내용은 다음과 같습니다

1) 가져 오기 모듈 디텍

2) 판독 화상

3) 사전 교육 모델 초기화

4) 높은 예측 화상 생성

5) 예측 도면

우리의 예측을 그리기

디텍은 빠른 R-CNN ResNet 50 FPN PyTorch 동물원에서 모델을 이용하여, 이러한 동물, 차량, 기타 부엌 용품 등 80 가지 물체를 검출 할 수있다. 당신은 코카콜라와 펩시 캔, 얼룩말과 기린과 같은 물체의 검출을 사용자 정의 할 경우, 그것을 어떻게 할까? 

마찬가지로, 당신은 단지 다섯 줄 필요하고, 기존 데이터 세트 또는 약간의 시간 마크 이미지를 촬영, 그럼 당신은 같은 간단한 사용자 정의 데이터 세트에 검출기 모델 기차는 것을 발견 할 것이다.

사용자 정의 데이터 세트를 구축

이 튜토리얼에서는, 저자는 자신의 데이터 세트를 구축하기 위해 처음부터 시작합니다. 난 당신이 같은 일을 제안하지만,이 단계를 생략하려는 경우, 당신은 (스탠포드 개 데이터 세트에서 수정 된) 샘플 데이터 세트를 다운로드 할 수 있습니다.

对于我们的数据集,我们将训练我们的模型来检测来自RoboSub竞赛的水下外星人,蝙蝠和女巫,如下所示:

理想情况下,每个类至少需要100张图像。好在每张图像中可以有多个对象,所以理论上,如果每张图像包含你想要检测的每类对象,那么你可以总共获得100张图像。另外,如果你有视频素材,Detico可以轻松地将这些视频素材分割成可用于数据集的图像:

from detecto.utilsimport split_video

split_video('video.mp4','frames/', step_size=4)

上面的代码在“video.mp4”中每第4帧拍摄一次,并将其另存为JPEG文件存在“frames”文件夹中。

生成训练数据集后,应该具有一个类似于以下内容的文件夹:

images/

|   image0.jpg

|   image1.jpg

|   image2.jpg

|   ...

如果需要的话,你还可以使用另一个文件夹,其中包含一组验证图像。

现在是耗时的部分:标记。Detecto支持PASCAL VOC格式,其中具有XML文件,其中包含图像中每个对象的标签和位置数据。要创建这些XML文件,可以使用开源LabelImg工具,如下所示:

pip3 install labelImg   # Download LabelImg using pip

labelImg                # Launch the application

现在,你应该会看到一个弹出窗口。单击左侧“打开目录”按钮,然后选择想要标记的图像文件夹。如果一切正常,你应该会看到类似以下内容:

要绘制边界框,请单击左侧菜单栏中的图标(或使用键盘快捷键“w”)。然后,你可以在对象周围拖动一个框并编写/选择标签:

标记完图像后,请使用CTRL+S或CMD+S保存XML文件(为简便起见,你可以使用自动填充的默认文件位置和名称)。要标记下一张图像,请单击“下一张图像”(或使用键盘快捷键“d”)。

整个数据集处理完毕之后,你的文件夹应如下所示:

images/

|   image0.jpg

|   image0.xml

|   image1.jpg

|   image1.xml

|   ...

我们已经准备好开始训练我们的对象检测模型了!

访问GPU

首先,检查你的计算机是否具有启用CUDA的GPU。由于深度学习需要大量处理能力,因此在通常的CPU上进行训练可能会非常缓慢。值得庆幸的是,大多数现代深度学习框架(例如PyTorch和Tensorflow)都可以在GPU上运行,从而使处理速度更快。确保已经下载了PyTorch(如果你安装了Detecto,应该已经下载了),然后运行以下两行代码: 

import torch 

print(torch.cuda.is_available())

如果打印True,那你可以跳到下一部分。如果显示False,不要担心。请按照以下步骤创建Google Colaboratory笔记本,这是一个在线编码环境,带有免费可用的GPU。对于本教程,你将只在Google Drive文件夹中工作,而不是在计算机上工作。

1)登录到Google Drive

2)创建一个名为“Detecto Tutorial”的文件夹并导航到该文件夹

3)将你的训练图像(和/或验证图像)上传到此文件夹

4)右键单击,转到“更多”,然后单击“Google Colaboratory”:

你现在应该看到这样的界面:

5)根据需要给笔记本起个名字,然后转到“编辑”->“笔记本设置”->“硬件加速器”,然后选择“GPU”

6)输入以下代码以“装入”你的云端硬盘,将目录更改为当前文件夹,然后安装Detecto:

import os

from google.colabimport drive 

drive.mount('/content/drive') 

os.chdir('/content/drive/My Drive/Detecto Tutorial') 

!pip install detecto

为了确保一切正常,你可以创建一个新的代码单元,然后输入!ls以检查你是否处于正确的目录中。

训练自定义模型

最后,我们现在可以在自定义数据集上训练模型了。如前所述,这是容易的部分。它只需要4行代码:

from detectoimport core, utils, visualize 

dataset = core.Dataset('images/')

model = core.Model(['alien','bat','witch']) 

model.fit(dataset)

让我们再次分解一下我们每行代码所做的工作:

1、导入的Detecto模块

2、从“images”文件夹(包含我们的JPEG和XML文件)创建了一个数据集

3、初始化模型检测自定义对象(外星人,蝙蝠和女巫)

4、在数据集上训练我们的模型

根据数据集的大小,这可能需要10分钟到1个小时以上的时间来运行,因此请确保你的程序在完成上述语句后不会立即退出(例如:你使用的是Jupyter / Colab笔记本,它在活动时保留状态)。

使用训练好的模型

现在你已经有了训练好的模型,让我们在一些图像上对其进行测试。要从文件路径读取图像,可以使用detecto.utils模块中的read_image函数(也可以使用上面创建的数据集中的图像):

# Specify the path to your image
image = utils.read_image('images/image0.jpg')
predictions = model.predict(image)

# predictions format: (labels, boxes, scores)
labels, boxes, scores = predictions

# ['alien', 'bat', 'bat']
print(labels)

#           xmin       ymin       xmax       ymax
# tensor([[ 569.2125,  203.6702, 1003.4383,  658.1044],
#         [ 276.2478,  144.0074,  579.6044,  508.7444],
#         [ 277.2929,  162.6719,  627.9399,  511.9841]])
print(boxes)

# tensor([0.9952, 0.9837, 0.5153])
print(scores)

正像你看到的,模型的预测方法返回一个由3个元素组成的元组:标签,方框和分数。
在上面的示例中,此模型在坐标[569、204、1003、658](框[0])处,
预测了一个外星人(标签[0]),其置信度为0.995(得分[0])。

根据这些预测,我们可以使用detecto.visualize模块绘制结果。例如:

visualize.show_labeled_image(image, boxes, labels)

将上面的代码与收到的图像和预测一起运行将产生如下所示的内容:

如果你有一个视频,你可以在它上面运行对象检测:

visualize.detect_video(model,'input.mp4','output.avi')

这将获取一个名为“input.mp4”的视频文件,并根据给定模型的预测结果生成一个“output.avi”文件。如果你使用VLC或其他视频播放器打开此文件,应该会看到一些希望看到的结果!

最后,你可以从文件中保存和加载模型,从而可以保存进度并稍后返回:

model.save('model_weights.pth') 
# ... Later ...


model = core.Model.load('model_weights.pth', ['alien','bat','witch'])

高级用法

你会发现Detecto不仅限于5行代码。举例来说,这个模型没有你希望的那么好。我们可以尝试通过使用Torchvision转换来扩展我们的数据集并定义一个自定义数据加载器来提高其性能:

from torchvisionimport transforms



augmentations = transforms.Compose([

    transforms.ToPILImage(),

    transforms.RandomHorizontalFlip(0.5),

    transforms.ColorJitter(saturation=0.5),

    transforms.ToTensor(),

    utils.normalize_transform(),

])



dataset = core.Dataset('images/', transform=augmentations)



loader = core.DataLoader(dataset, batch_size=2, shuffle=True)

此代码对数据集中的图像应用了随机的水平翻转和饱和效果,从而增加了数据的多样性。然后,我们使用batch_size = 2定义一个数据加载对象;我们将其传递给model.fit而不是Dataset,这样来告诉我们的模型是对2张图像进行批量训练,而不是默认的1张。

如果你之前创建了单独的验证数据集,那么现在是在训练期间加载它的时候了。通过提供验证数据集,fit方法将返回每个时期的损失列表,如果verbose = True,则会在训练过程中将其打印出来。以下代码块演示了这一点,并自定义了其他几个训练参数:

import matplotlib.pyplotas plt



val_dataset = core.Dataset('validation_images/')



losses = model.fit(loader, val_dataset, epochs=10, learning_rate=0.001,

                   lr_step_size=5, verbose=True)



plt.plot(losses)

plt.show()

损失的结果图应或多或少地减少:

为了更具有灵活性和对模型的控制,你可以完全绕过Detecto。你可以根据需要随意调整model.get_internal_model方法返回使用的基础模型。

结论

在本教程中,作者展示了计算机视觉和对象检测不需要具有挑战性。你所需要的是一点时间和耐心来处理标记的数集。

如果你对进一步探索感兴趣的话,请查看Detecto on GitHub或访问文档以获取更多教程和用例!

原文:https://hackernoon.com/build-a-custom-trained-object-detection-model-with-5-lines-of-code-y08n33vi

本文为 CSDN 翻译,转载请注明来源出处。

【End】

技术战“疫”,贾扬清、李飞飞给程序员直播讲AI技术

2月18日、2月20日,阿里云CIO学院攻“疫”技术课程正式开启。您将获得与达摩院数据库首席科学家 、阿里巴巴集团副总裁、ACM 杰出科学家李飞飞,Caffe之父、ONNX创始人、阿里巴巴集团副总裁贾扬清,阿里巴巴集团副总裁、阿里 CIO 学院院长胡臣杰等顶级技术专家直播互动的机会。

推荐阅读 

iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条

10 万阿里人都爱用的网红工具,语雀如何“用保护钱包的技术在保护文档安全”?

超赞的PyTorch资源大列表,GitHub标星9k+,中文版也上线了

“删库跑路”这件事情真的发生了 ,还是技术总监干的!

别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!!

31岁年薪50万:“复工第一天,谢谢裁掉我!” 有底气的人生无需解释!

你点的每一个在看,我认真当成了喜欢

发布了1724 篇原创文章 · 获赞 4万+ · 访问量 1548万+

추천

출처blog.csdn.net/csdnnews/article/details/104421798