Data(image) Augmentation

Data Augmentation 是 Regularization 的一种方法

 

可以做水平翻转

可以抽取不同尺度大小的裁剪图像,在测试时,评估一些固定的裁剪图像

可以做色彩抖动:

还可以:

 

code :

import os
import random
from PIL import Image
from PIL import ImageEnhance

def enhance_image(image_path):
    
    image = Image.open(image_path)
    
    # 随机亮度
    enhance_image = ImageEnhance.Brightness(image)
    bright = random.uniform(0.2, 1.8)
    enhance_image = enhance_image.enhance(bright)
    
    # 随机饱和度
    enhance_image = ImageEnhance.Contrast(enhance_image)
    contrast = random.uniform(0.2, 1.8)
    enhance_image = enhance_image.enhance(contrast)
    
    # 随机左右翻转
    if random.randint(0,1) == 1:
        enhance_image = enhance_image.transpose(Image.FLIP_LEFT_RIGHT)
        
    return enhance_image

def add_image(folder_list, folder_path, max_number):
    
    folder_length = len(folder_list)
    random_folder_list = []
    
    for _ in range(max_number - folder_length):  
        index = random.randint(0, folder_length - 1)
        random_folder_list.append(folder_list[index])
    
    add_path = "add"
    full_add_path = folder_path + os.sep + add_path
    if not os.path.exists(full_add_path):
        os.mkdir(full_add_path)
    
    counter = 0
    for path in random_folder_list:
        new_image = enhance_image(path)
        new_image.save(full_add_path + os.sep + str(counter) + ".jpg")
        counter += 1

def image_augmentation(db_folder, limit_number=100, max_number=600):
    
    number = 0
    for people_folder in os.listdir(db_folder):
        number += 1
        
        src_people_path = db_folder + os.sep + people_folder
        
        counter = 0
        people_folder_list = []
        for vedio_folder in os.listdir(src_people_path):
            
            src_vedio_path = src_people_path + os.sep + vedio_folder

            for img_file in os.listdir(src_vedio_path):
                counter += 1
                src_img_path = src_vedio_path + os.sep + img_file
                people_folder_list.append(src_img_path)
        
        if counter < limit_number or counter >= max_number:
            continue
        else:
            add_image(people_folder_list, src_people_path, max_number)
            
            print(people_folder + ": id--->" + str(number) + "--->OK")

def run():
    random.seed(7)
    db_folder = "image\\origin"
    image_augmentation(db_folder)

if __name__ == "__main__":
    run()

代码转自 https://github.com/shen1994/DeepID

数据集 https://pan.baidu.com/s/1gMqkmY1mUMQO4cQcbRycMw   提取码: uhkx

### 自适应模型与数据增强技术 #### 数据增强 (Data Augmentation) 数据增强是一种通过变换现有训练样本生成更多样化数据的技术,从而提高模型的泛化能力。常见的图像数据增强方法包括旋转、缩放、裁剪、翻转以及颜色调整等操作[^2]。这些技术能够帮助神经网络更好地学习输入特征的空间不变性和鲁棒性。 对于深度学习中的卷积神经网络(CNN),数据增强通常应用于预处理阶段或者在训练过程中动态执行。例如,在 Keras 中可以利用 `ImageDataGenerator` 类来实现在线的数据增强功能: ```python from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' ) train_generator = datagen.flow_from_directory( 'data/train', target_size=(150, 150), batch_size=32, class_mode='binary') ``` 上述代码展示了如何配置并应用一系列几何和色彩上的转换到训练集上。 #### 自适应模型 (Adaptive Model) 自适应模型指的是能够在运行时根据环境变化自动调整其参数或结构的一类算法。这种特性使得模型可以在不同条件下维持较高的性能水平而无需重新训练整个架构。一种典型的例子是在序列预测任务中使用的注意力机制(Attention Mechanism)。它允许模型聚焦于最相关的部分输入信息而不是平均对待所有的历史记录[^1]。 另一个实例是域适配(Domain Adaptation)领域内的工作,其中源分布下的已标注数据被用来构建初始分类器;随后该分类器会进一步微调至目标域未标记样本之上以减少两者间的差异影响最终效果。这种方法特别适用于当测试集中存在类别偏移情况的时候。 以下是基于 PyTorch 的简单示例展示如何加载预训练权重并对新任务进行迁移学习: ```python import torch.nn as nn import torchvision.models as models model = models.resnet18(pretrained=True) num_ftrs = model.fc.in_features model.fc = nn.Linear(num_ftrs, 2) # Assuming binary classification problem. ``` 此片段说明了怎样替换 ResNet 最后的全连接层以便适合特定应用场景的需求。 #### 结合使用 将数据增强技术和自适应策略结合起来往往能取得更好的成果。比如,在面对有限数量的手写字符识别图片库时,可以通过随机扭曲字体样式来进行扩充;与此同时引入对抗生成网络(GANs)作为辅助模块促使主干网络学会忽略那些由人工制造出来的干扰因素进而专注于真正重要的视觉线索。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值