最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
二、数据增强方法
常用的数据增强手段可以分为以下几类:
- 基于几何变换的数据增强,如翻转、旋转、裁剪、平移和添加噪声等,可以消除训练集和测试集的尺度、位置和视角差异。
- 基于颜色空间变换的数据增强,如调整亮度、对比度、饱和度、通道分离和灰度图转换等,可以消除训练集和测试集的光照、色彩和亮度差异。
- 其他的数据增强方法,如多样本数据增强、Cut Mix数据增强和 Mosaic 数据增强等。
常用的数据增强方法包括:
- 随机旋转和翻转:对图像进行随机角度的旋转和水平/垂直翻转,以增加模型对旋转和镜像变换的鲁棒性。
- 随机裁剪:随机选取图像中的一部分作为训练样本,使模型对不同裁剪位置的变化具有适应能力。
- 随机缩放:对图像进行随机大小的缩放,以增加模型对尺度变化的适应性。
- 颜色扭曲:对图像进行随机的色彩变换,如亮度、对比度、饱和度的调整,以增加模型对色彩变化的鲁棒性。
- 随机添加噪声:向图像中添加随机噪声,以增加模型对噪声的鲁棒性。
- 随机遮挡:随机遮挡图像的一部分,模拟遮挡情况下的目标识别。
- 自动增强:使用自动增强算法,如AutoAugment或Fast AutoAugment,通过搜索策略来找到一组优秀的数据增强策略。
- Mixup和CutMix:将两个或多个图像进行混合,以生成新的训练样本,促进模型对类别之间的平滑过渡。
- 样本生成对抗网络(GAN):使用生成对抗网络来生成与原始样本具有一定相似性的新样本。
- 局部扰动:对图像的局部区域进行微小扰动,以增加模型对小物体的识别能力。
- 对比度增强:调整图像的对比度,使得图像中的特征更加清晰。
- 图像去噪:使用去噪算法对图像进行处理,以提升模型对噪声的鲁棒性。
选择合适的数据增强算法需要根据具体任务、数据集和模型来决定,通常需要进行实验和评估以找到最适合的方法。同时,可以结合多种数据增强方法以获得更好的效果。
三、图像数据增强
一般来说收集到特定的目标会有点困难,这需要根据我们工作中识别目标的种类而定,如果是车牌、安全帽、人这种显而易见的目标就很容易收集数据集,如果是球状闪电、雪山雪豹这类目标数据收集就比较难。这时候我们可以使用图像数据增强技术去尽可能的填充目标识别数据集,接下来我们先拿到一张图片,用这张图片进行处理展示,我们需要用到OpneCV库:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
image = cv2.imread('planck.jpg')
# 显示原始图片和增强后的图片
plt.figure(figsize=(10, 5))
plt.subplot(2, 3, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
真实场景中我们不可能仅从一个角度拍摄目标,这样收集到的数据集会造成目标识别模型过拟合,也就是只能从拍摄的角度去识别该物体,目标换个形态或者是拍摄角度更换,模型就识别不出来了。我们可以通过图片处理技术进行一定的泛化操作:
1.随机旋转和翻转
cv2.getRotationMatrix2D
是 OpenCV 中的一个函数,用于生成一个二维旋转矩阵,可以将图像围绕指定点进行旋转。
它接受三个参数:
center
:旋转的中心点,一个元组(x, y)
表示图像的中心坐标。angle
:旋转的角度,以度为单位,正值表示逆时针旋转。scale
:缩放因子,可选参数,默认为 1。
该函数会返回一个形如:
| cos(angle) -sin(angle) center_x * (1 - cos(angle)) - center_y * sin(angle) |
| sin(angle) cos(angle) center_x * sin(angle) + center_y * (1 - cos(angle)) |
的旋转矩阵。通常情况下,我们会将旋转矩阵传递给 cv2.warpAffine
函数,来实际地应用旋转到图像上。这样可以得到一个围绕指定点旋转了一定角度的图像。
# 随机旋转
angle = np.random.randint(0, 360)
rows, cols = image.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
rotated_image = cv2.warpAffine(image, M, (cols, rows))
cv2.flip()
函数用于翻转图片,它接受两个参数,一个是要翻转的图片,另一个是翻转的方向:
flip_direction
参数可以取以下三个值:
0
:垂直翻转(沿x轴翻转)1
:水平翻转(沿y轴翻转)-1
:同时在水平和垂直方向翻转
# 随机翻转
flip_direction = np.random.randint(-1, 2) # 随机选择水平、垂直或不翻转
flipped_image = cv2.flip(image, flip_direction)
2.随机裁剪
随机裁剪可以根据设定randint来随机生成裁剪的起始坐标,image.shape[1]
表示图像的宽度,image.shape[0]
表示图像的高度。
通过以下代码:
# 随机裁剪
crop_x = np.random.randint(0, image.shape[1] - 100)
crop_y = np.random.randint(0, image.shape[0] - 100)
cropped_image = image[crop_y:crop_y+100, crop_x:crop_x+100]
np.random.randint(0, image.shape[1] - 100)
会在图像的宽度范围内随机生成一个起始点横坐标,保证裁剪后剩余的宽度至少为 100 像素。同理,np.random.randint(0, image.shape[0] - 100)
会在图像的高度范围内随机生成一个起始点纵坐标,保证裁剪后剩余的高度至少为 100 像素。
image[crop_y:crop_y+100, crop_x:crop_x+100]
表示在图像上从 crop_y
到 crop_y+100
行,从 crop_x
到 crop_x+100
列的区域,即裁剪了一个 100x100 大小的区域。
3.随机缩放
np.random.uniform
函数,可以在指定范围内随机生成一个浮点数作为缩放因子 scale_factor
。
cv2.resize
函数可以用来对图像进行缩放,其参数:
image
是要被缩放的原始图像。None
表示输出图像的大小由后面的缩放因子决定。fx=scale_factor, fy=scale_factor
表示在水平和垂直方向上的缩放比例,即将图像
# 随机缩放
scale_factor = np.random.uniform(0.7, 1.3)
scaled_image = cv2.resize(image, None, fx=scale_factor, fy=scale_factor)
np.random.uniform(0.7, 1.3)
会在 0.7 到 1.3 之间随机生成一个浮点数,这个数就是缩放因子。
和原图像相比图像的刻度会有明显变化:
4.添加噪声
4.1高斯噪声
一般来说噪声是模拟实际数据采集情况,比如随机环境因素影响,大雾、水雾、大雨情况导致的摄像头传感器的不完美性、光照变化等。高斯噪声是一种常见的图像噪声类型,在图像数据增强中,通过添加高斯噪声,可以使模型更具鲁棒性,提高其对噪声环境的适应能力。
# 生成高斯噪声
mean = 0
var = 0.5
sigma = var \*\* 0.5
gaussian = np.random.normal(mean, sigma, image.shape).astype('uint8')
noisy_image = cv2.add(image, gaussian)
# 显示带噪声的图像
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.2椒盐噪声
椒盐噪声是一种常见的图像噪声类型,它主要体现为图像中出现了随机的黑白像素点,这些像素点模拟了背景中的颗粒物或损坏的像素。
def salt\_pepper\_noise(image, salt_prob, pepper_prob):
### 最后
> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**