宝石识别数据增强举例

115 阅读2分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

宝石识别数据增强举例

1.解压缩

!unzip data/data55032/archive_train.zip  -d dataset
  inflating: dataset/__MACOSX/Zircon/._zircon_17.jpg  
!rm dataset/__MACOSX

2.初始化分类

#导入需要的包
import os
import zipfile
import random
import json
import cv2
import numpy as np
from PIL import Image
import paddle
import matplotlib.pyplot as plt
from paddle.io import Dataset
## 转换4通道为3通道
def proc_img(src):
    for root, dirs, files in os.walk(src):
        if '__MACOSX' in root:continue
        for file in files:            
            src=os.path.join(root,file)
            img=Image.open(src)
            ## 转换4通道为3通道
            if img.mode != 'RGB': 
                    img = img.convert('RGB') 
                    img.save(src)            


if __name__=='__main__':
    proc_img("dataset")

3.旋转举例

import numpy as np
from PIL import Image
from paddle.vision.transforms import functional as F


for (root , dirs, files ) in os.walk("dataset", topdown=False):
    for name in files:
        abs_name=os.path.join(root, name)
        print(absname)
        img = Image.open(abs_name)
        rotated_img = F.rotate(img, 90)
        print(rotated_img.size)
        fake_name=os.path.join(root,"fake_"+ name)
        print(fake_name)
        rotated_img.save(fake_name)

import numpy as np
from PIL import Image
from paddle.vision.transforms import ColorJitter



# brightness(float) - 亮度调整范围大小,会从给定参数后的均匀分布[max(0,1 - brightness), 1 + brightness]中随机选择进行实际调整,不能是负数。
# contrast(float) - 对比度调整范围大小,,会从给定参数后的均匀分布[max(0,1 - contrast), 1 + contrast]中随机选择进行实际调整,不能是负数。
# saturation(float) - 饱和度调整范围大小,,会从给定参数后的均匀分布[max(0,1 - saturation), 1 + saturation]中随机选择进行实际调整,不能是负数。
# hue(float) - 色调调整范围大小,,会从给定参数后的均匀分布[-hue, hue]中随机选择进行实际调整,参数值需要在0到0.5之间。
# keys (list[str]|tuple[str], optional) - 与 BaseTransform 定义一致。默认值: None。
# ColorJitter随机调整图像的亮度,对比度,饱和度和色调。
transform = ColorJitter(0.4, 0.4, 0.4, 0.4)

for (root , dirs, files ) in os.walk("dataset", topdown=False):
    for name in files:
        abs_name=os.path.join(root, name)
        print(absname)
        img = Image.open(abs_name)
        rotated_img = transform(img, 90)
        print(rotated_img.size)
        fake_name=os.path.join(root,"fake_"+ name)
        print(fake_name)
        rotated_img.save(fake_name)

## 组合增强法

.. code-block:: python
    from paddle.vision.datasets import Flowers
    from paddle.vision.transforms import Compose, ColorJitter, Resize
    transform = Compose([ColorJitter(), Resize(size=608)])
    flowers = Flowers(mode='test', transform=transform)
    for i in range(10):
        sample = flowers[i]
        print(sample[0].shape, sample[1])


4.你可以加其他自己喜欢的

www.paddlepaddle.org.cn/documentati…