一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
# 随机翻转
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):
noisy_image = np.copy(image)
total_pixels = image.shape[0] \* image.shape[1] #计算图像的总像素数
num_salt = int(total_pixels \* salt_prob) #通过将总像素数与指定的椒盐噪声比例相乘,得到要添加的椒盐噪声的数量。
salt_coords = [np.random.randint(0, i-1, num_salt) for i in image.shape]
noisy_image[salt_coords[0], salt_coords[1]] = 255
num_pepper = int(total_pixels \* pepper_prob)
pepper_coords = [np.random.randint(0, i-1, num_pepper) for i in image.shape]
noisy_image[pepper_coords[0], pepper_coords[1]] = 0
return noisy_image
5.颜色扭曲
对图像进行随机的色彩变换,需要将图像从BGR颜色空间转换为HSV颜色空间,再对Hue通道进行扭曲,然后从HSV颜色空间转换回BGR颜色空间就可以完成:
# 读取图片
image = cv2.imread('clickhouse-logo.jpg')
# 转换为HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 扭曲Hue通道
hsv_image[:,:,0] = (hsv_image[:,:,0] + 30) % 180 # 在Hue通道上增加30
# 转回BGR颜色空间
result_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
# 显示原始图像和扭曲后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Distorted Image', result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里我们用一张彩色图片更好展示:
下面那张是原图片,上面那张是颜色扭曲后的图片,通过对Hue通道进行扭曲,将Hue通道的值增加30,同时使用模运算确保值在0到180之间,再将图像从HSV颜色空间转换回BGR颜色空间。
6.随机遮挡
在图像上随机生成一个矩形遮挡,遮挡的位置和大小都是随机生成的。遮挡的颜色也是随机选择的。
# 生成随机遮挡位置和大小
mask_x = np.random.randint(0, image.shape[1] - 100)
mask_y = np.random.randint(0, image.shape[0] - 100)
mask_width = np.random.randint(50, 100)
mask_height = np.random.randint(50, 100)
# 生成随机颜色的遮挡
mask_color = np.random.randint(0, 256, (1, 1, 3))
image[mask_y:mask_y+mask_height, mask_x:mask_x+mask_width] = mask_color
# 显示带遮挡的图像
cv2.imshow('Image with Random Mask', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码将随机生成的颜色mask_color
应用到图像的指定位置上,形成一个矩形遮挡,实际操作过程中一般有限定规则,比如GridMask:
7.多样本数据增强方法
Mosaic 数据增强是一种通过将多张图像拼接在一起来创建新的训练样本的方法。以具体实例来看, mosaic数据增强利用了四张图片,对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框框,然后我们将这样一张新的图片传入到神经网络当中去学习,相当于一下子传入四张图片进行学习了。其中我们熟悉的目标识别算法Yolo就是mosaic数据增强方式。
实现过程主要分为3步:
1)从数据集中每次随机取出四张图片
2)分别对四张图片进行翻转(对原始图片进行左右的翻转)、缩放(对原始图片进行大小的缩放)、色域变化(对原始图片的明亮度、饱和度、色调进行改变)等操作。
操作完成之后然后再将原始图片按照 第一张图片摆放在左上,第二张图片摆放在左下,第三张图片摆放在右下,第四张图片摆放在右上四个方向位置摆好。
3)进行图片的组合和框的组合。
完成四张图片的摆放之后,我们利用矩阵的方式将四张图片它固定的区域截取下来,然后将它们拼接起来,拼接成一张新的图片,新的图片上含有框框等一系列的内容。
这些方法可以单独或结合使用,具体选择取决于应用场景和数据集特点。通过数据增强,可以提升模型的性能,尤其在训练样本有限的情况下,它是一个非常有效的策略。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!