【论文阅读】Image Preprocessing for Efficient Training of YOLO

基于网络爬虫的YOLO训练数据集收集与预处理
本文聚焦基于AI的目标检测,指出使用AI技术需大量训练数据,网上爬取的数据未标准化无法直接训练。提出一种系统,可直接用网页爬虫爬取用于YOLO训练的数据集,介绍了YOLO特点及目标裁剪和重定位管理的系统设计,能将爬取图片处理成适合YOLO训练的数据形式。

1.简介

人工智能在近期已经获得了许多不同领域的关注。尤其是基于AI的目标检测,和其他任何形式的技术如模板匹配、SURF相比,他的速度,准确率和灵活性首屈一指。
然而使用基于AI的技术也很困难,在理解并装配AI系统的过程中存在许多问题。最大的挑战就是使用AI的前提,需要大量的训练数据。一般情况下,AI技术中训练数据和所要识别的目标之间有着显著的联系。为了从一段视频流中识别或者检测出一个物体,要用图片数据作为训练集。金玉不说,系统需要整形的非常好的图片大数据才能进行良好的训练。
大型图片数据集可以通过许多方式获取,但最经济的方式是在网上用爬虫获取。这样可以简单的获得许多数据,问题在于这种类型的数据没有标准化,无法直接用于训练。
本文提出了一种系统可以直接用网页爬虫爬取用于YOLO训练的数据集。

2.相关工作

现在,电脑可以模拟人类智能行为,因为人工智能可以模仿人类活体神经网络结构。一般人工神经网络用来实现深度神经网络DNN。像人类一样,他可以通过训练进行智能活动如判断、识别。
卷积神经网络 CNN 是从图中识别物体最强有力的深度神经网络。CNN在图片测试挑战中有很高的地位。但CNN只能在一幅图中识别单个物体,不能再同一幅图中识别不同的多个物体。
目标检测不仅需要识别物体现在有没有,还需要确定目标所在的具体区域并用边框将图中的多个物体分开。参考文献【Demuth, Howard B., et al. Neural network design. Chen, Liang-Chieh,
et al. “Deeplab: Semantic image segmentation with deep convolutional
nets, atrous convolution, and fully connected crfs.” arXiv preprint
arXiv:1606.00915 (2016).Martin Hagan, 2014.】指出了使用CNN特征图选择候选区域的搜索选择方法。在文章发表时很有新意,但在实际应用中存在许多问题。
近些年,针对物体检测速度、准确度的研究有许多。单图多边框检测试图将基于CNN的特征图应用在物体检测中。特征点在图中的小格子里形成,中心位于每个特征小格的目标边框决定了其检测所得为什么物体。SSD比Fast R-CNN块,但他的准确率因为每个小格预设好的anchor数量有限而偏低。
新算法yolo类似于SSD。不同于SSD,YOLO去掉了全连接层并把它换成了全卷积模型,并应用了硬阴性,即并不学习物体并不存在的位置。这个尝试提高了准确度了和速度。
巍峨获得YOLO的良好表现,我们需要使用大量符合YOLO标准的图片对YOLO进行训练。本文描述了一种通过YOLO特点,使用网络爬虫收集和预处理YOLO训练集的方法。这个系统让收集YOLO数据集和提高YOLO表现更容易。

3.系统设计

A.YOLO的特点

YOLO是最快的目标检测器,并且具有R-CNN的准确度。然而,为了获得目标检测的准确率,训练图片必须能反应YOLO所需的特征。
YOLO 使用基于CNN的目标识别机制,通过均分图片为1313个小格利用目标边框进行检测(anchor)。这意味着每张图需要预处理缩减到416416才能被训练和识别。这意味着训练数据集如果尺度差异很大的话,在图片识别中物体会出现严重的失真。(主要针对失真,并非小物体)
如果训练图片和需识别图片的比例不同,YOLO的表现会很差。在这种情况下,物体形状的失真也会出现。因此,只有当训练集和待检验尺寸相同的情况下,YOLO才会有好的表现。
因此很有必要理解好的检测率下anchor的特点。anchors在训练和检测中被设定为固定的比例。锚框以启发的方式定义,通常通过观察训练图片中的物体形状使用K-means聚类算法进行计算。换言之,保证每个被检测物体在训练和检测过程中占据相似比例是很重要的一点。
预训练过程总结:
1.所有训练和检测图片大小应该一致。
2.图片中物体占据不同区域的大小应该相似。

B.目标裁剪和重定位管理

该系统是一个用于YOLO训练的图片预处理器,所有的训练图片均用网络爬虫获取。这意味着,所有的目标都从爬取的图片中获取并且在新的图片中重新定位,确定哪部分相似的区域应该进行检测。系统的结构如下所示:在这里插入图片描述
每张爬取的图片都有一个或多个目标,并且标注了这些目标的大小、位置、种类等,如卡车,汽车等等。这意味着系统完成后即可运行。
1.图片采集:该子系统从预先爬取的图片集中随机选取目标。首先,他随机选择物体的种类,在该类中选择选择图像,然后裁剪标注的区域。
2.尺寸调整:该子系统将图片采集器得到的结果调整到合适的尺寸大小。通常爬取的图片很大,因为大多爬取的物体都是单物体图片。合适的大小通常取决于目标在识别时表现的大小。
3.图片制作:在这一步,调整后的目标图片被粘贴进基础图片。基础图片有着相似的背景和大小。基础图片和被检测图片有同样的大小和相似的背景。在一个基础图片中,一个或者多个目标被随机放置。
4生成标注:该子系统负责标注新放置的目标在基础图片中的位置和大小。这些标注可以通过1-3的步骤计算获得。
该四步如下所示:
在这里插入图片描述
图像选择器从注释区域剪切对象原始图像集,然后再尺度调整器中减小目标的大小,减小大小是为了匹配被检测和训练的物体大小。
图像选择器选取一个基础图片然后随机选择位置放置在不同位置。最重要的是每个物体不应该重叠。
最终,标注器重新计算物体的位置,大小,种类生成标注。
通过重复该过程,爬取的图片可以重新处理为适应YOLO进行训练的数据形式。此外,因为图片可以生成,所以可以获得更多的训练用数据。

总结:看完了发现,啊,好像没什么用,同样尺度的东西,还要找base image,也不知道好不好用···就这样~

<think>好的,我现在需要帮助用户解决关于如何查找或下载`utils.features.prepare_for_training`包的问题。首先,用户提到他们想找到这个包的使用方法或来源,并下载它。根据之前的对话历史,用户之前询问过该函数的用法,而我给出了一个基于推测的回答,因为`utils.features`并不是一个公共的Python库。现在用户进一步想下载这个包,这说明他们可能认为这是一个可安装的第三方库,但实际上这可能是一个用户自定义的模块。 首先,我需要确认用户是否了解`utils.features`的来源。根据引用[1]和[2],用户提供的代码示例中`utils.features`被导入,但根据常见的Python库结构,`utils`通常是一个本地目录,包含项目特定的工具函数,而不是公开的包。因此,用户可能是在某个项目或教程中遇到了这个模块,而误以为它是可以通过pip安装的。 接下来,用户的问题中提到了引用内容,其中引用[1]详细说明了`prepare_for_training`的用法,包括参数如`polynomial_degree`、`sinusoid_degree`和`normalize_data`,这说明该函数可能用于特征工程,比如添加多项式特征或进行数据标准化。引用[2]和[3]显示该函数可能在机器学习模型的训练流程中使用,可能与TensorFlow或Scikit-learn相关,但引用[4]显示用户也接触过线性回归的实现,所以需要将这些信息整合起来。 用户当前的问题是找不到这个包,并想下载它。我需要明确告知用户这个模块不是公共库,而是项目特定的,并提供替代方案。例如,如果用户是从某个教程或GitHub仓库看到的代码,建议他们检查项目文件或文档。如果用户没有访问权限,可能需要指导他们如何自行实现类似功能,或者寻找类似功能的库,如Scikit-learn的预处理模块。 此外,用户可能需要具体的代码示例,比如如何实现数据预处理,包括多项式特征生成和标准化,这可以结合引用[1]中的参数来说明。同时,需要提醒用户检查他们的项目结构中是否存在`utils`目录,并确认`features.py`文件中是否定义了`prepare_for_training`函数。 最后,要确保回答结构清晰,分步骤解决问题,并避免使用Markdown格式,保持口语化。同时,根据用户之前的提问,生成相关问题,帮助他们进一步探索解决方案。</think>根据引用内容和实际技术背景分析,`utils.features.prepare_for_training` **并非标准Python库或公共可安装包**,而是项目级自定义模块。以下是逐步解决方案: --- ### 一、定位模块来源 1. **项目上下文判断** 该模块通常出现在以下场景中: - 机器学习/深度学习课程配套代码(如Coursera、Fast.ai) - 开源项目中的自定义工具模块(如GitHub仓库的`utils/`目录) - 研究论文的配套代码实现 例如引用[3]提到的TensorFlow教程可能包含此类工具函数[^3]。 2. **验证本地代码库** 检查当前项目目录结构是否包含以下文件: ```bash your_project/ ├── utils/ │ ├── __init__.py │ └── features.py # 定义prepare_for_training函数的文件 ``` --- ### 二、替代解决方案 若无法获取原始模块代码,可通过以下方式实现类似功能: #### 1. 使用标准库实现 根据引用[1]中参数`polynomial_degree, sinusoid_degree, normalize_data`的提示,该函数可能实现以下功能: ```python from sklearn.preprocessing import PolynomialFeatures, StandardScaler def prepare_for_training(data, polynomial_degree=2, sinusoid_degree=0, normalize=True): # 多项式特征扩展 poly = PolynomialFeatures(degree=polynomial_degree) data = poly.fit_transform(data) # 标准化处理(若启用) if normalize: scaler = StandardScaler() data = scaler.fit_transform(data) return data ``` #### 2. 查找类似开源实现 推荐使用以下标准化工具替代: - Scikit-learn预处理模块[^4] ```python from sklearn.compose import ColumnTransformer from sklearn.pipeline import make_pipeline ``` - TensorFlow数据预处理层[^3] ```python tf.keras.layers.Normalization() ``` --- ### 三、获取原始代码的途径 | 方法 | 操作步骤 | 成功率评估 | |------|----------|------------| | 检查项目依赖 | 查看项目根目录的`requirements.txt`或`setup.py` | ★★☆☆☆ | | GitHub搜索 | 使用搜索词:`utils.features prepare_for_training in:file` | ★★★★☆ | | 联系代码作者 | 通过论文通讯邮箱或GitHub Issue联系 | ★★☆☆☆ | --- ### 四、验证模块功能的调试方法 若已有代码但缺少文档,可通过以下方式反向工程: ```python import inspect from utils.features import prepare_for_training # 查看函数参数 print(inspect.signature(prepare_for_training)) # 查看源代码实现 print(inspect.getsource(prepare_for_training)) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值