模型训练好后发现数据集采集的图片样本中,光照和实际应用环境不一样导致误识率很高,并且色彩也不同,比如数据集中的图片偏白,实际应用环境偏黄偏绿,这样也有一定影响,因此这里提供了一些图片增强的方法。

注意是图像增强不是数据增强,两者不一样,如何区分请移步:

几种数据增强:Mixup,Cutout,CutMix 和yolov4中的 Mosaic_RayChiu757374816的博客-CSDN博客

opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》_RayChiu757374816的博客-CSDN博客_opencv-python灰度直方图

下面给出整理好的图像增强几种方式:

import cv2
import numpy as np
import osdef getColorImg(alpha,beta,img_path,img_write_path):img = cv2.imread(img_path)colored_img = np.uint8(np.clip((alpha * img + beta), 0, 255))cv2.imwrite(img_write_path,colored_img)def color(alpha,beta,img_dir,img_write_dir):if not os.path.exists(img_write_dir):os.makedirs(img_write_dir)img_names=os.listdir(img_dir)for img_name in img_names:img_path=os.path.join(img_dir,img_name)img_write_path=os.path.join(img_write_dir,img_name[:-4]+'color'+str(int(alpha*10))+'.jpg')getColorImg(alpha,beta,img_path,img_write_path)def claheMethod(img_dir,img_write_dir):if not os.path.exists(img_write_dir):os.makedirs(img_write_dir)img_names=os.listdir(img_dir)for img_name in img_names:img_path=os.path.join(img_dir,img_name)img_write_path=os.path.join(img_write_dir,img_name[:-4]+'clahe'+'.jpg')img = cv2.imread(img_path)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#彩色图要拆分三个通道分别做均衡化,否则像我这里一样转为灰度图clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))  # 自适应均衡化,参数可选cl1 = clahe.apply(hsv)#测试加了滤波没能让边缘清晰#cl1MedianBlur = cv2.medianBlur(cl1, 1)# cl1GaussianBlur = cv2.GaussianBlur(cl1, (1, 1), 0)cv2.imwrite(img_write_path, cl1)def adjust_gamma(img_dir,img_write_dir,gamma = 1.0):if not os.path.exists(img_write_dir):os.makedirs(img_write_dir)img_names=os.listdir(img_dir)for img_name in img_names:img_path=os.path.join(img_dir,img_name)img_write_path=os.path.join(img_write_dir,img_name[:-4]+'adjust_gamma'+'.jpg')image = cv2.imread(img_path)invGamma = 1.0 / gammatable = np.array([((i / 255.0) ** invGamma) * 255for i in np.arange(0, 256)]).astype("uint8")cv2.imwrite(img_write_path, cv2.LUT(image, table))def interMethod(img_dir,img_write_dir):if not os.path.exists(img_write_dir):os.makedirs(img_write_dir)img_names=os.listdir(img_dir)for img_name in img_names:img_path=os.path.join(img_dir,img_name)img = cv2.imread(img_path)height, width = img.shape[:2]new_height, new_width = int(height * 2), int(width * 2)# 双三次cubic_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_CUBIC)# 双线性linear_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)# 最邻近nearest_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_NEAREST)img_write_path=os.path.join(img_write_dir,img_name[:-4]+'cubic'+'.jpg')cv2.imwrite(img_write_path, cubic_img)img_write_path = os.path.join(img_write_dir, img_name[:-4] + 'linear' + '.jpg')cv2.imwrite(img_write_path, linear_img)img_write_path = os.path.join(img_write_dir, img_name[:-4] + 'nearest' + '.jpg')cv2.imwrite(img_write_path, nearest_img)# 原始图片地址
img_dir = r'E:\Users\raychiu\Desktop\22\55'
# 图像增强后图片地址
img_write_dir = r'E:\Users\raychiu\Desktop\22\44'# #第一步亮度、对比度增强
# alphas = [0.3, 0.5, 1.2]
# beta = 10
# for alpha in alphas:
#     color(alpha, beta, img_dir, img_write_dir)
#
# # #第二步自适应直方图均衡化,减少色彩不同和不均衡影响
# claheMethod(img_dir, img_write_dir)
#
# #第三步伽马矫正,减少光照影响
# gamma = 2.2
# adjust_gamma(img_dir, img_write_dir,gamma=gamma)#第四步线性插值 resize图像
interMethod(img_dir, img_write_dir)

另外我曾经尝试将图像增强逻辑植入训练代码中,发现有些难度,因此可以通过以上代码在训练前先处理好图片,然后训练,并且使用模型检测目标之前也要做相同的图像增强处理。

检测逻辑如何加相同的处理呢,假如我只加了直方图(直方图均衡化的方式实现亮度提升,更有利于边缘识别与物体识别模型的训练),那么以yolov5为例,detect.py中遍历回去dataset这里,115行:

im这个对象就是三通道的图片,我们对它做处理即可,以下是模拟加直方图:

......for path, img, im0s, vid_cap, s in dataset:#-----------------图片预处理开始---------------------print("img.shape:", img.shape)#(3, 480, 640)img = img.transpose((1, 2, 0)) #转置一下,把原来通道维度由第一维度放到最后一个维度,适配opencv (480, 640, 3)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 开始直方图处理,彩色图要拆分三个通道分别做均衡化,否则像我这里一样转为灰度图clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))  # 自适应均衡化,参数可选bgrimg = clahe.apply(gray)image = np.expand_dims(bgrimg, axis=2)#单通道的灰度图恢复为三通道图片im = np.concatenate((image, image, image), axis=-1)im = im.transpose((2, 0, 1))#转置回来print("im.shape:", im.shape)#(3, 480, 640)#-----------------图片预处理结束---------------------t1 = time_sync()im = torch.from_numpy(im).to(device)im = im.half() if half else im.float()  # uint8 to fp16/32im /= 255  # 0 - 255 to 0.0 - 1.0if len(im.shape) == 3:
......

参考:opencv-python 实现均值、高斯、中值、双边滤波_RayChiu757374816的博客-CSDN博客

​​​​​​opencv亚像素边缘精度_opencv 常用操作整理_weixin_39689297的博客-CSDN博客

通过图像预处理解决深度学习模型对光照色彩敏感的问题处理相关推荐

  1. ML Visual利器解决深度学习模型图

    目录 1.介绍 2.使用方法 https://github.com/dair-ai/ml-visuals 1.介绍 ML Visuals is a new collaborative effort t ...

  2. [转载] 使用Keras和TensorFlow 2.0建立深度学习模型对图像进行分类

    参考链接: Keras中的深度学习-建立深度学习模型 在本文中,我们将构建一个深度学习模型来对图像中的对象进行分类.为了构建卷积神经网络,我们将使用Kaggle提供的这个数据集.(https://ww ...

  3. 瑞典卡罗林斯卡医学院博士后招聘,图像流行病学和深度学习领域

    项目描述 该博士后项目主要针对癌症组织病理学图像数据的深度学习模型和图像处理方法进行开发和验证.机器学习和深度学习技术是该项目的核心技术.入选博士后之后需要参与机器学习/深度学习模型的实施和评估,为该 ...

  4. 猫狗图像数据集上的深度学习模型性能对比

    LeNet模型简介 1. LeNet LeNet-5由七层组成(不包括输入层),每一层都包含可训练权重.通过卷积.池化等操作进行特征提取,最后利用全连接实现分类识别,下面是他的网络结构示意图: C:卷 ...

  5. 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?

    如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法? deep learning is a data hungry problem 数据集太小,数据样本不足时,深度学习相对其它机 ...

  6. 机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:机场航拍图像检测软件使用深度学习技术检测机场航拍图像中的飞机目标等,识别航拍目标等结果并记录和保存,辅助机场智能管理运行.在介绍算法原理的同时,给出Python的实现代码.训练数据集,以及PyQ ...

  7. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    AI佳作解读系列(一)--深度学习模型训练痛点及解决方法 参考文章: (1)AI佳作解读系列(一)--深度学习模型训练痛点及解决方法 (2)https://www.cnblogs.com/carson ...

  8. docker 训练深度学习_利用RGB图像训练MultiModality的深度学习模型进行图像分割

    ▼更多精彩推荐,请关注我们▼ Dragonfly软件的一个特色功能就是可以让用户自己方便快速地训练深度学习的模型,实现图像分割等工作的智能完成.关于Dragonfly里面深度学习工具和智能分割向导工具 ...

  9. python打包exe之打包深度学习模型踩坑记录及其解决办法。

    在现实生活中,有时候我们写的程序需要发给小伙伴用,而小伙伴没有python,这时候我们需要将程序打包成exe文件发给小伙伴用. 今天讲下打包深度学习模型 打包一般要用到cmd命令行,要求cmd能执行p ...

  10. 图像协方差矩阵_深度学习的预处理:从协方差矩阵到图像白化

    图像协方差矩阵 by hadrienj 由hadrienj The goal of this post is to go from the basics of data preprocessing t ...

最新文章

  1. Qt msgBox 快捷版
  2. KubeNode:阿里巴巴云原生 容器基础设施运维实践
  3. [Android] 拍照、截图、保存并显示在ImageView控件中
  4. Vue学习(组件的定义及调用、路由)-学习笔记
  5. 机器学习 | 聚类评估指标
  6. mysql ansi unicode_Ansi 与 Unicode 字符串类型的互相转换
  7. 华为网络技术大赛笔记——数据库基础原理
  8. 提供多种版本- MSI Code条形码字体具有可扩充性条形码控件MSI Plessey
  9. 飞信免费发短信API接口
  10. 软件测试能干到多少岁,老了怎么办?
  11. PHP slideup,jQuery.slideUp() 函数使用详解
  12. Qt依赖平台软件打开PDF
  13. 阿里云大数据ACA认证考试总结
  14. SQL PLUS命令使用大全(转,特有用)
  15. Pycharm 远程debug项目配置
  16. nodejs MVC框架:Adonisjs框架入门-001概述
  17. python django-blog-zinnia
  18. CSS3—盒子模型 讲解
  19. 西邮Linux兴趣小组2019纳新试题总结
  20. 解决苹果发布正式环境后支付拉不起来或获取商品列表为空问题

热门文章

  1. 在centos官网下载系统镜像完整教程
  2. 高中英语语法(001)-虚拟语气
  3. 代码优化和内存屏障(barrier、mb、rmb、wmb)
  4. 2019美国大学计算机本科排名,美国大学计算机排名2019最新排名
  5. 等值面抽取技术(Iso-surfaces Extraction Technique)
  6. 多模态融合(三)MFAS: Multimodal Fusion Architecture Search
  7. 小白学习 指针,指针变量,指针变量大小
  8. [转载]Spring zuul日志配置
  9. WORD文档插入页码时有几页不显示不显示页码?怎么解决
  10. 【渝粤教育】广东开放大学 企业财务报表分析 形成性考核 (26)