资料介绍
描述
深度学习极大地提高了计算机视觉的性能,使其能够达到人类甚至在某些情况下甚至超人类水平的能力。在过去的几年里,用于训练深度神经网络的框架一直在提高其用户友好性,以至于具有一些 Python 编程技能的普通用户可以训练和使用神经网络来完成广泛的计算机视觉任务,包括图像分类、对象检测和语义分割。
不过有一个警告——众所周知,如果你想获得好的结果,深度神经网络需要大量数据进行训练。在某些情况下,您可以使用开放数据集 - 然后问题就解决了。
在图像分类的情况下,可以通过抓取网络获得中小型数据集。对于对象检测,情况更加困难,因为训练对象检测网络不仅需要图像,还需要注释文件,其中包含边界框坐标。因此,如果有问题的对象没有可用的良好开源检测数据集,您唯一的选择是手动创建数据集,这可能是一项乏味的任务。
除非...
您可以使用合成数据自动执行数据集创建过程。有几种方法可以生成用于对象检测的合成数据:
1)只需将对象粘贴到背景上并随机化它们的方向/比例/位置
2)使用逼真的3D渲染引擎,如Unreal Engine
3) 使用 GAN 生成数据?当然,在这种情况下,您已经拥有一个能够识别/检测相关对象的网络(GAN 中的鉴别器),所以这有点像鸡与蛋的问题
2022 年 4 月 4 日更新。我尽我所能定期更新我的文章,并根据您在 YouTube/Hackster 评论部分的反馈。如果您想表达对这些努力的支持和赞赏,请考虑给我买杯咖啡(或披萨):)。
在本文中,我们将重点介绍最简单和最容易剖析的方法 - 剪切粘贴。不要被脚本生成的图像看似简单和不切实际的外观所迷惑。卷积神经网络没有逻辑或常识——因此对于我们的对象检测网络,即使是看似荒谬的图像也是一个很好的学习材料。
我的任务是MARK 机器人平台的乐高检测模型。我在 Kaggle 上找到了一个很好的乐高分类数据集,但没有现成的检测数据集。所以我决定重新设计用于为论文Cut, Paste and Learn: Surprisingly Easy Synthesis for Instance Detection生成合成场景的代码。
下载并准备对象实例
从这里下载乐高图像数据集。它实际上也是使用 Autodesk Maya 2020 从 3D 模型程序生成的。
对于合成数据生成,我们将需要对象实例及其二进制掩码——在我们的例子中,由于乐高积木都在黑色背景上,我们可以简单地使用以下阈值脚本来生成这些掩码。我们还随机给乐高积木上色,因为我们希望模型检测不同颜色的乐高积木。
# Standard imports
import cv2
import numpy as np;
import os
import time
import random
import sys
colors = ([1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 0], [0, 1, 1], [1, 0, 1])
input_folder = sys.argv[1]
output_folder = sys.argv[2]
try:
os.mkdir(os.path.join(os.path.join(output_folder, "imgs")))
os.mkdir(os.path.join(os.path.join(output_folder, "masks")))
except Exception:
pass
for folder in os.listdir(input_folder):
for file in os.listdir(os.path.join(input_folder, folder)):
print(file)
img = cv2.imread(os.path.join(input_folder, folder, file))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 1,255, cv2.THRESH_BINARY_INV)
#coloring
RGB = random.randint(0, len(colors)-1)
img[thresh == 0] *= np.array(colors[RGB], dtype='uint8')
#writing to files
cv2.imwrite(os.path.join(os.path.join(output_folder, "imgs", file)), img)
cv2.imwrite(os.path.join(os.path.join(output_folder, "masks", file)), thresh)
cv2.imshow('final', img)
cv2.waitKey(50)
cv2.destroyAllWindows()
使用输入文件夹的名称运行上述脚本(其中包含具有不同对象图像的文件夹,每种类型的对象一个)和输出文件夹,其中将保存图像和蒙版,例如
python helper.py objects output
您将看到正在处理和保存的图像。
接下来,克隆我的剪切、粘贴和学习论文代码的分支——我将其更改为使用 Python 3 并接受.png 图像作为掩码。
git clone https://github.com/AIWintermuteAI/syndata-generation.git
安装所有必需的依赖项(我建议您安装依赖项并在 Python 的虚拟环境中执行脚本,例如 conda 或 virtualenv)。
pip install -r requirements.txt
将带有图像和蒙版的文件夹放入 data_dir/objects_dir 并在 data_dir/backgrounds 中添加或更改背景图片。干扰物是我们试图检测的其他不是物体的物体——我在做这个项目时没有使用它们。然后使用以下命令运行生成脚本:
python dataset_generator.py data_dir/objects_dir/lego/imgs output_dir/ --num 3 --scale --dontocclude
和...
获得数据后,我们需要对其进行适当的结构化。需要有 4 个文件夹——训练图像、训练注释、验证图像和验证注释。只需从刚刚生成的数据中剪切一些图片和注释,然后将它们粘贴到验证图像和注释文件夹中。确保剪切而不是复制图像/注释。
训练模型
您可以使用任何框架/脚本来训练模型 - 但是我建议使用aXeleRate,这是一个基于 Keras 的边缘 AI 框架。它将自动训练模型并将训练会话的最佳模型转换为边缘推理所需的格式 - 目前它支持将训练模型转换为:.kmodel(K210)、.tflite 格式(提供完整的整数和动态范围量化支持),OpenVINO IR 模型格式。实验性支持:Google Edge TPU、TensorRT。
在本地机器上安装 aXeleRate
pip install git+https://github.com/AIWintermuteAI/aXeleRate
要下载示例,请运行:
git clone https://github.com/AIWintermuteAI/aXeleRate.git
您可以使用aXeleRate文件夹中的 tests_training_and_inference.py运行快速测试。它将为每种模型类型运行训练和推理,保存和转换训练好的模型。由于它只训练 5 个 epoch 并且数据集非常小,您将无法获得有用的模型,但此脚本仅用于检查是否存在错误。
对于实际训练,您需要运行以下命令:
python axelerate/train.py -c config/lego_detector.json
您可以从此处下载 example.json 配置文件和预训练模型。确保更改图像/注释训练和验证文件夹路径以匹配它们在系统上的位置。有关配置文件中附加参数的进一步说明,请查看本文。
推理
训练完成后,您可以使用以下命令在您的计算机上进行快速健全性检查并执行推理:
python axelerate/infer.py -c config/lego_detector.json --weights path-to-h5-weights
以下步骤将取决于您要运行训练模型的硬件。例如,对于 Raspberry Pi,使用 generated.tflite 模型和这个示例脚本。
在本文中,我们将使用基于 K210 的机器人平台进行 AI 教育,MARK(代表 Make A Robot Kit)。将项目文件夹中的.kmodel 文件复制到SD 卡中,并将SD 卡插入cyberEye 主板——cyberEye 是Maixduino 的定制版本。首先,让我们使用来自 TinkerGen 的图形编程环境 Codecraft 快速测试我们的机器人乐高检测功能。
打开 Codecraft ,选择 MARK(cyberEye) 作为设备,添加自定义模型扩展并定义具有以下属性的对象检测模型:
然后使用新出现的块创建以下代码:
如果您觉得卡住了,可以从本文的附件中下载 Codecraft 的 .cdc 文件。
它适用于较大的乐高积木,但也可以检测较小的积木。在找到四月标签后,机器人会接近四月标签,直到达到设定的距离。然后它放下乐高积木,转身并从循环的开头继续。
如果您使用相同型号和相同打印的 April Tag(A3 纸,tag36h11_1),您可以简单地在 MaixPy IDE 中执行代码并观看您的机器人收集乐高积木!
如果您有任何问题,请在LinkedIn上添加我,并订阅我的 YouTube 频道,以获得有关机器学习和机器人技术的更多有趣项目的通知。
- TinyML:使用合成数据的永远在线的音频分类器
- 合成数据的不合理有效性
- TinyML:使用ChatGPT和合成数据检测婴儿哭声
- PyTorch教程14.6之对象检测数据集
- 可合成人像提取及半身像的生成对抗网络算法 1次下载
- 基于改进模型和区域分割的表情动画合成方法 2次下载
- 用于代码注释生成的语法辅助机制设计 19次下载
- 手语识别、翻译及生成研究综述 25次下载
- 用于网络用户行为聚类分析的簇标签自动生成方法 15次下载
- 自动生成数字密码软件1.71 PC版应用程序免费下载 0次下载
- dsPIC DSC DTMF 生成库的详细中文资料概述
- TMS320C54X生成数字信号处理器的设备的功能概述 1次下载
- 基于内存云的大块数据对象并行存取策略 0次下载
- 类对象测试数据自动生成研究
- 面向对象软件自动生成在检测系统中的应用
- 如何使用OpenUSD构建支持生成式AI的合成数据工作流 309次阅读
- 视频时钟合成芯片怎么用 322次阅读
- NVIDIA Nemotron-4 340B模型帮助开发者生成合成训练数据 356次阅读
- OpenCV4.8 C++实现YOLOv8 OBB旋转对象检测 1778次阅读
- 对象检测边界框损失函数–从IOU到ProbIOU介绍 3001次阅读
- YOLOv8实现旋转对象检测 1933次阅读
- 【开发者说】鸿蒙原生应用开发——分布式数据对象 983次阅读
- DDS信号生成模块的Verilog实现 1940次阅读
- 详解对象检测网络性能评价指标mAP计算 553次阅读
- 数字频率合成器的作用 1020次阅读
- Python中的类和对象详解 1181次阅读
- 使用无监督学习和合成数据作为数据增强方法来分类异常 1093次阅读
- 利用视觉语言模型对检测器进行预训练 1430次阅读
- 如何使用ECDSA算法生成数字签名 9187次阅读
- 基于numpy实现合成梯度 2889次阅读
下载排行
本周
- 1A7159和A7139射频芯片的资料免费下载
- 0.20 MB | 55次下载 | 5 积分
- 2PIC12F629/675 数据手册免费下载
- 2.38 MB | 36次下载 | 5 积分
- 3PIC16F716 数据手册免费下载
- 2.35 MB | 18次下载 | 5 积分
- 4dsPIC33EDV64MC205电机控制开发板用户指南
- 5.78MB | 8次下载 | 免费
- 5STC15系列常用寄存器汇总免费下载
- 1.60 MB | 7次下载 | 5 积分
- 6模拟电路仿真实现
- 2.94MB | 4次下载 | 免费
- 7PCB图绘制实例操作
- 2.92MB | 2次下载 | 免费
- 8零死角玩转STM32F103—指南者
- 26.78 MB | 1次下载 | 1 积分
本月
- 1ADI高性能电源管理解决方案
- 2.43 MB | 452次下载 | 免费
- 2免费开源CC3D飞控资料(电路图&PCB源文件、BOM、
- 5.67 MB | 141次下载 | 1 积分
- 3基于STM32单片机智能手环心率计步器体温显示设计
- 0.10 MB | 137次下载 | 免费
- 4A7159和A7139射频芯片的资料免费下载
- 0.20 MB | 55次下载 | 5 积分
- 5PIC12F629/675 数据手册免费下载
- 2.38 MB | 36次下载 | 5 积分
- 6如何正确测试电源的纹波
- 0.36 MB | 19次下载 | 免费
- 7PIC16F716 数据手册免费下载
- 2.35 MB | 18次下载 | 5 积分
- 8Q/SQR E8-4-2024乘用车电子电器零部件及子系统EMC试验方法及要求
- 1.97 MB | 8次下载 | 10 积分
总榜
- 1matlab软件下载入口
- 未知 | 935121次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420062次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233088次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183335次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73810次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65988次下载 | 10 积分
评论
查看更多