CNN学习中一些有用的函数记录

文件处理函数

1.os.listdir()函数

​ 该函数可以用于获取所有二级目录,并返回一个列表

例如: image-20210801113301416

配合for函数还能直接获取二级目录的路径

image-20210801113409898

应用场景:

修改子文件夹下的文件名(批量重命名)

import os
# 数据集的地址  改为你自己的
path = './images'
#获取所有二级目录,存入列表中
cList=os.listdir(path)
# 遍历所有二级目录,修改其图片名称
for catalog in cList:
    #输出当前文件夹名
    print(">>>>>>>>>>>>>>>>>>>>>>>>>"+catalog)
    #拼凑获得子文件夹路径
    s_path = path+'/'+catalog
    #获取子文件夹下的文件名  返回的是一个列表
    imgs = os.listdir(s_path)
    print(imgs)
    #计数器
    n = 0
    for i in imgs:
        #设置旧文件名(就是路径+文件名)
        oldname = s_path + '/' + imgs[n]
        #设置新文件名---拼凑
        newname= s_path + '/' +catalog+str(n+1)+'.jpg'
        os.rename(oldname,newname)   #用os模块中的rename方法对文件改名
        n+=1
#         print(newname)

2.glob.glob()函数

该函数属于一个文件搜索函数。利用glob.glob函数可以搜索每个层级文件下面符合特定格式(例如“/*.jpg”)进行遍历

返回值为list

应用:可以对文件进行模糊遍历操作

import glob
import cv2
# 测试图像的地址 (改为自己的)
path_test = './test/'
test_list=[]
# 创建保存图像的空列表
imgs=[]                                                  # glob.glob(path_test+'/*.jpg')                                            
for im in glob.glob(path_test+'/*.jpg'):                # 利用glob.glob函数搜索每个层级文件下面符合特定格式“/*.jpg”进行遍历
    print(im)
    img=cv2.imread(im) 
    img=cv2.resize(img,(w,h))                           
    imgs.append(img)                                     # 将每张经过处理的图像数据保存在之前创建的imgs空列表当中
imgs = np.asarray(imgs,np.float32)

print("shape of data:",imgs.shape) 
image-20210801115019952

由上图可以看出,该函数是按照字典顺序进行遍历的,而不是按自然数大小顺序遍历的,所以在使用过程中需要注意。

数据增强函数

由于在进行模型训练的时候,会存在数据集达不到一定的数量集,就会对CNN模型训练的准确率产生影响,所以就需要进行数据增强。

下面是我参考过的一个好用并且易上手的数据增强的函数

ImageDataGenerator是keras提供的一种方法。

详细参数介绍可以看 https://keras.io/preprocessing/image/

import os
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

Datagen = ImageDataGenerator(rotation_range=40,
                 shear_range=0.2,
                 zoom_range=0.2,
                 horizontal_flip=True,
                 vertical_flip = True,
                 fill_mode='nearest')
#还有其他一些参数,具体请看:https://keras.io/preprocessing/image/ ,如去均值,标准化,ZCA白化,旋转,
#偏移,翻转,缩放等
def max_img(path,name):
    img = load_img(path+name)#获取一个PIL图像
    x_img = img_to_array(img)
    x_img = x_img.reshape((1,)+ x_img.shape)

    i = 0
    for img_batch in Datagen.flow(x_img,
                      batch_size=1,
                      save_to_dir='./images/纹枯病生成/',#'./images/pre_Data/'
                      save_prefix=name,
                      save_format='jpg'):
        i +=1
        if i > 20:
            break
            
path = './images/纹枯病/'
list_name = [x for x in os.listdir(path)]
list_img = [path+x for x in os.listdir(path)]
#扫描文件夹的内容
# [x for x in os.listdir(path)]
# list_img[0]
# max_img()
# list_name[0]
for i in list_name:
    print(i)
    max_img(path,i)
image-20210801120641144

经验总结

当有不懂的时候,还是得学着去看下TensorFlow的官方示例和官方文档。相比网上的博客,官方的示例讲解的更为详细。

或者去https://www.kaggle.com/下载相关的模型进行学习,都是很好的办法。

后续

以后在学习过程中,碰见有用的函数,都会记录在此。

posted @ 2021-08-01 12:29  PRINT王哲  阅读(75)  评论(0编辑  收藏  举报
Live2D