数据增强python代码
时间: 2023-09-08 10:15:24 浏览: 96
数据增强是指通过对原始数据进行变换和扩充,以增加模型的泛化能力和鲁棒性。以下是一些常见的数据增强方法和对应的Python代码实现:
1. 随机裁剪
随机裁剪是指在原图中随机选取一个区域并保留,其余部分舍弃。这种方法可以增加模型对不同位置的物体的识别能力。
```python
import random
from PIL import Image
def random_crop(img, size):
w, h = img.size
if w < size or h < size:
raise ValueError("Image size should be larger than crop size")
left = random.randint(0, w - size)
top = random.randint(0, h - size)
right = left + size
bottom = top + size
return img.crop((left, top, right, bottom))
```
2. 随机旋转
随机旋转是指将原图随机旋转一个角度,这种方法可以增加模型对不同角度的物体的识别能力。
```python
import random
from PIL import Image
def random_rotate(img, max_angle):
angle = random.uniform(-max_angle, max_angle)
return img.rotate(angle)
```
3. 随机翻转
随机翻转是指将原图随机水平或垂直翻转,这种方法可以增加模型对不同方向的物体的识别能力。
```python
import random
from PIL import Image
def random_flip(img):
if random.random() < 0.5:
return img.transpose(Image.FLIP_LEFT_RIGHT)
else:
return img.transpose(Image.FLIP_TOP_BOTTOM)
```
4. 随机颜色变换
随机颜色变换是指对原图进行随机的亮度、对比度、饱和度等颜色变换,这种方法可以增加模型对不同颜色的物体的识别能力。
```python
import random
from PIL import ImageEnhance, ImageOps
def random_color_transform(img):
# 随机调整亮度对比度
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(random.uniform(0.5, 1.5))
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(random.uniform(0.5, 1.5))
# 随机调整饱和度
enhancer = ImageEnhance.Color(img)
img = enhancer.enhance(random.uniform(0.5, 1.5))
# 随机反转颜色
if random.random() < 0.5:
img = ImageOps.invert(img)
return img
```
5. 随机缩放
随机缩放是指将原图随机缩放一个比例因子,这种方法可以增加模型对不同尺度的物体的识别能力。
```python
import random
from PIL import Image, ImageOps
def random_resize(img, min_scale, max_scale):
scale = random.uniform(min_scale, max_scale)
w, h = img.size
new_w, new_h = int(w * scale), int(h * scale)
img = img.resize((new_w, new_h), Image.BILINEAR)
if scale < 1:
# 随机填充
left = random.randint(0, w - new_w)
top = random.randint(0, h - new_h)
right = w - new_w - left
bottom = h - new_h - top
img = ImageOps.expand(img, (left, top, right, bottom), fill=(255, 255, 255))
else:
# 随机裁剪
left = random.randint(0, new_w - w)
top = random.randint(0, new_h - h)
right = left + w
bottom = top + h
img = img.crop((left, top, right, bottom))
return img
```
以上是一些常用的数据增强方法和对应的Python代码实现,可以根据自己的需求进行组合使用。
阅读全文