目标检测图像增强

2023-05-16

https://blog.csdn.net/wei_guo_xd/article/details/74199729

常用的图像扩充方式有:

水平翻转,裁剪,视角变换,jpeg压缩,尺度变换,颜色变换,旋转

当用于分类数据集时,这些变换方法可以全部被使用,然而考虑到目标检测标注框的变换,我们选择如下几种方式用于目标检测数据集扩充:

jpeg压缩,尺度变换,颜色变换

这里,我们介绍一个图象变换包

http://lear.inrialpes.fr/people/paulin/projects/ITP/

这是项目主页,里面介绍了用于图像变换的基本方法,以及如何组合它们可以得到最好的效果,项目主页里同时带python程序。

里面的图像变换程序如下(用于windows下,用于目标检测时,做了一些修改):

 


   
  1. import os, sys, pdb, numpy

  2. from PIL import Image,ImageChops,ImageOps,ImageDraw

  3.  
  4. #parameters used for the CVPR paper

  5. NCROPS = 10

  6. NHOMO = 8

  7. JPG=[70,50,30]

  8. ROTS = [3,6,9,12,15]

  9. SCALES=[1.5**0.5,1.5,1.5**1.5,1.5**2,1.5**2.5]

  10. #parameters computed on ILSVRC10 dataset

  11. lcolor = [ 381688.61379382 , 4881.28307136, 2316.10313483]

  12. pcolor = [[-0.57848371, -0.7915924, 0.19681989],

  13. [-0.5795621 , 0.22908373, -0.78206676],

  14. [-0.57398987 , 0.56648223 , 0.59129816]]

  15.  
  16. #pre-generated gaussian values

  17. alphas = [[0.004894 , 0.153527, -0.012182],

  18. [-0.058978, 0.114067, -0.061488],

  19. [0.002428, -0.003576, -0.125031]]

  20.  
  21. def gen_colorimetry(i):

  22. p1r = pcolor[0][0]

  23. p1g = pcolor[1][0]

  24. p1b = pcolor[2][0]

  25. p2r = pcolor[0][1]

  26. p2g = pcolor[1][1]

  27. p2b = pcolor[2][1]

  28. p3r = pcolor[0][2]

  29. p3g = pcolor[1][2]

  30. p3b = pcolor[2][2]

  31.  
  32. l1 = numpy.sqrt(lcolor[0])

  33. l2 = numpy.sqrt(lcolor[1])

  34. l3 = numpy.sqrt(lcolor[2])

  35.  
  36. if i<=3:

  37. alpha = alphas[i]

  38. else:

  39. numpy.random.seed(i*3)

  40. alpha = numpy.random.randn(3,0,0.01)

  41. a1 = alpha[0]

  42. a2 = alpha[1]

  43. a3 = alpha[2]

  44.  
  45. return (a1*l1*p1r + a2*l2*p2r + a3*l3*p3r,

  46. a1*l1*p1g + a2*l2*p2g + a3*l3*p3g,

  47. a1*l1*p1b + a2*l2*p2b + a3*l3*p3b)

  48.  
  49. def gen_crop(i,w,h):

  50. numpy.random.seed(4*i)

  51. x0 = numpy.random.random()*(w/4)

  52. y0 = numpy.random.random()*(h/4)

  53. x1 = w - numpy.random.random()*(w/4)

  54. y1 = h - numpy.random.random()*(h/4)

  55.  
  56. return (int(x0),int(y0),int(x1),int(y1))

  57.  
  58. def gen_homo(i,w,h):

  59. if i==0:

  60. return (0,0,int(0.125*w),h,int(0.875*w),h,w,0)

  61. elif i==1:

  62. return (0,0,int(0.25*w),h,int(0.75*w),h,w,0)

  63. elif i==2:

  64. return (0,int(0.125*h),0,int(0.875*h),w,h,w,0)

  65. elif i==3:

  66. return (0,int(0.25*h),0,int(0.75*h),w,h,w,0)

  67. elif i==4:

  68. return (int(0.125*w),0,0,h,w,h,int(0.875*w),0)

  69. elif i==5:

  70. return (int(0.25*w),0,0,h,w,h,int(0.75*w),0)

  71. elif i==6:

  72. return (0,0,0,h,w,int(0.875*h),w,int(0.125*h))

  73. elif i==7:

  74. return (0,0,0,h,w,int(0.75*h),w,int(0.25*h))

  75. else:

  76. assert False

  77.  
  78.  
  79. def rot(image,angle,fname):

  80. white = Image.new('L',image.size,"white")

  81. wr = white.rotate(angle,Image.NEAREST,expand=0)

  82. im = image.rotate(angle,Image.BILINEAR,expand=0)

  83. try:

  84. image.paste(im,wr)

  85. except ValueError:

  86. print >>sys.stderr, 'error: image do not match '+fname

  87. return image

  88.  
  89. def gen_corner(n, w, h):

  90. x0 = 0

  91. x1 = w

  92. y0 = 0

  93. y1 = h

  94.  
  95. rat = 256 - 227

  96.  
  97. if n == 0: #center

  98. x0 = (rat*w)/(2*256.0)

  99. y0 = (rat*h)/(2*256.0)

  100. x1 = w - (rat*w)/(2*256.0)

  101. y1 = h - (rat*h)/(2*256.0)

  102. elif n == 1:

  103. x0 = (rat*w)/256.0

  104. y0 = (rat*h)/256.0

  105. elif n == 2:

  106. x1 = w - (rat*w)/256.0

  107. y0 = (rat*h)/256.0

  108. elif n == 3:

  109. x1 = w - (rat*w)/256.0

  110. y1 = h - (rat*h)/256.0

  111. else:

  112. assert n==4

  113. x0 = (rat*w)/256.0

  114. y1 = h - (rat*h)/256.0

  115.  
  116. return (int(x0),int(y0),int(x1),int(y1))

  117.  
  118. #the main fonction to call

  119. #takes a image input path, a transformation and an output path and does the transformation

  120. def gen_trans(imgfile,trans,outfile):

  121. for trans in trans.split('*'):

  122. image = Image.open(imgfile)

  123. w,h = image.size

  124. if trans=="plain":

  125. image.save(outfile,"JPEG",quality=100)

  126. elif trans=="flip":

  127. ImageOps.mirror(image).save(outfile,"JPEG",quality=100)

  128. elif trans.startswith("crop"):

  129. c = int(trans[4:])

  130. image.crop(gen_crop(c,w,h)).save(outfile,"JPEG",quality=100)

  131. elif trans.startswith("homo"):

  132. c = int(trans[4:])

  133. image.transform((w,h),Image.QUAD,

  134. gen_homo(c,w,h),

  135. Image.BILINEAR).save(outfile,"JPEG",quality=100)

  136. elif trans.startswith("jpg"):

  137. image.save(outfile,quality=int(trans[3:]))

  138. elif trans.startswith("scale"):

  139. scale = SCALES[int(trans.replace("scale",""))]

  140. image.resize((int(w/scale),int(h/scale)),Image.BILINEAR).save(outfile,"JPEG",quality=100)

  141. elif trans.startswith('color'):

  142. (dr,dg,db) = gen_colorimetry(int(trans[5]))

  143. table = numpy.tile(numpy.arange(256),(3))

  144. table[ :256]+= (int)(dr)

  145. table[256:512]+= (int)(dg)

  146. table[512: ]+= (int)(db)

  147. image.convert("RGB").point(table).save(outfile,"JPEG",quality=100)

  148. elif trans.startswith('rot-'):

  149. angle =int(trans[4:])

  150. for i in range(angle):

  151. image = rot(image,-1,outfile)

  152. image.save(outfile,"JPEG",quality=100)

  153. elif trans.startswith('rot'):

  154. angle =int(trans[3:])

  155. for i in range(angle):

  156. image = rot(image,1,outfile)

  157. image.save(outfile,"JPEG",quality=100)

  158. elif trans.startswith('corner'):

  159. i = int(trans[6:])

  160. image.crop(gen_corner(i,w,h)).save(outfile,"JPEG",quality=100)

  161. else:

  162. assert False, "Unrecognized transformation: "+trans

  163. imgfile = outfile # in case we iterate

  164.  
  165.  
  166. #Our 41 transformations used in the CVPR paper

  167. def get_all_trans():

  168. # transformations = (["plain","flip"]

  169. # # +["crop%d"%i for i in range(NCROPS)]

  170. # # +["homo%d"%i for i in range(NHOMO)]

  171. # +["jpg%d"%i for i in JPG]

  172. # +["scale0","scale1","scale2","scale3","scale4"]

  173. # +["color%d"%i for i in range(3)]

  174. # # +["rot-%d"%i for i in ROTS]

  175. # # +["rot%d"%i for i in ROTS]

  176. # )+["scale0","scale1","scale2","scale3","scale4"]

  177. transformations=(["plain"]

  178. + ["jpg%d" % i for i in JPG]

  179. + ["scale0", "scale1", "scale2", "scale3", "scale4"]

  180. + ["color%d" % i for i in range(3)])

  181. return transformations

  182.  
  183. #transformations used at test time in deep architectures

  184. def get_deep_trans():

  185. return ['corner0','corner1','corner2','corner3','corner4','corner0*flip','corner1*flip','corner2*flip','corner3*flip','corner4*flip']

  186.  
  187. if __name__=="__main__":

  188. inputpath = sys.argv[1]

  189. name = [name for name in os.listdir(inputpath) if os.path.isfile(os.path.join(inputpath,name))]

  190. #img_input = sys.argv[1]

  191. outpath = sys.argv[2]

  192. if len(sys.argv)>= 4:

  193. trans = sys.argv[3]

  194. if not trans.startswith("["):

  195. trans = [trans]

  196. else:

  197. trans = eval(trans)

  198. else:

  199. trans = get_all_trans()

  200. print "Generating transformations and storing in %s"%(outpath)

  201. for k in name:

  202. for t in trans:

  203. img_input=inputpath+'\\'+k

  204. gen_trans(img_input,t,outpath+'\\%s_%s.jpg'%(".".join(img_input.split("\\")[-1].split(".")[:-1]),t))

  205. #gen_trans(k, t, outpath + '\\%s_%s.jpg' % (".".join(k.split(".")[:-1]), t))

  206. print "Finished. Transformations generated: %s"%(" ".join(trans))

修改xml文件的程序如下;

 


   
  1. # -*- coding=utf-8 -*-

  2. import os

  3. import sys

  4. import shutil

  5. from xml.dom.minidom import Document

  6. from xml.etree.ElementTree import ElementTree,Element

  7. import xml.dom.minidom

  8. JPG=[70,50,30]

  9. SCALES=[1.5**0.5,1.5,1.5**1.5,1.5**2,1.5**2.5]

  10.  
  11. #产生变换后的xml文件

  12. def gen_xml(xml_input,trans,outfile):

  13. for trans in trans.split('*'):

  14. if trans=="plain" or trans.startswith("jpg") or trans.startswith('color'):#如果是这几种变换,直接修改xml文件名就好

  15. dom = xml.dom.minidom.parse(xml_input)

  16. root = dom.documentElement

  17. filenamelist = root.getElementsByTagName('filename')

  18. filename = filenamelist[0]

  19. c = str(filename.firstChild.data)

  20. d = ".".join(outfile.split("\\")[-1].split(".")[:-1]) + '.jpg'

  21. filename.firstChild.data = d

  22. f = open(outfile, 'w')

  23. dom.writexml(f, encoding='utf-8')

  24. elif trans.startswith("scale"):#对于尺度变换,xml文件信息也需要改变

  25. scale = SCALES[int(trans.replace("scale", ""))]

  26. dom=xml.dom.minidom.parse(xml_input)

  27. root=dom.documentElement

  28. filenamelist=root.getElementsByTagName('filename')

  29. filename=filenamelist[0]

  30. c=str(filename.firstChild.data)

  31. d=".".join(outfile.split("\\")[-1].split(".")[:-1])+'.jpg'

  32. filename.firstChild.data=d

  33. heightlist = root.getElementsByTagName('height')

  34. height = heightlist[0]

  35. a = int(height.firstChild.data)

  36. b = str(int(a / scale))

  37. height.firstChild.data = b

  38. widthlist=root.getElementsByTagName('width')

  39. width=widthlist[0]

  40. a = int(width.firstChild.data)

  41. b = str(int(a / scale))

  42. width.firstChild.data=b

  43. objectlist=root.getElementsByTagName('xmin')

  44. for object in objectlist:

  45. a=int(object.firstChild.data)

  46. b=str(int(a/scale))

  47. object.firstChild.data=b

  48. objectlist = root.getElementsByTagName('ymin')

  49. for object in objectlist:

  50. a = int(object.firstChild.data)

  51. b = str(int(a / scale))

  52. object.firstChild.data = b

  53. objectlist = root.getElementsByTagName('xmax')

  54. for object in objectlist:

  55. a = int(object.firstChild.data)

  56. b = str(int(a / scale))

  57. object.firstChild.data = b

  58. objectlist = root.getElementsByTagName('ymax')

  59. for object in objectlist:

  60. a = int(object.firstChild.data)

  61. b = str(int(a / scale))

  62. object.firstChild.data = b

  63. f=open(outfile,'w')

  64. dom.writexml(f,encoding='utf-8')

  65. else:

  66. assert False, "Unrecognized transformation: "+trans

  67.  
  68. #产生各种变换名

  69. def get_all_trans():

  70. transformations=(["plain"]

  71. + ["jpg%d" % i for i in JPG]

  72. + ["scale0", "scale1", "scale2", "scale3", "scale4"]

  73. + ["color%d" % i for i in range(3)])

  74. return transformations

  75.  
  76. if __name__=="__main__":

  77. inputpath = sys.argv[1]

  78. name = [name for name in os.listdir(inputpath) if os.path.isfile(os.path.join(inputpath,name))]

  79. outpath = sys.argv[2]

  80. if len(sys.argv)>= 4:

  81. trans = sys.argv[3]

  82. if not trans.startswith("["):

  83. trans = [trans]

  84. else:

  85. trans = eval(trans)

  86. else:

  87. trans = get_all_trans()

  88. print "Generating transformations and storing in %s"%(outpath)

  89. for k in name:

  90. for t in trans:

  91. xml_input=inputpath+'\\'+k

  92. gen_xml(xml_input,t,outpath+'\\%s_%s.xml'%(".".join(xml_input.split("\\")[-1].split(".")[:-1]),t))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测图像增强 的相关文章

  • Docker镜像

    概述 前面我们说了Docker的基本概念 xff0c 这里我们把每一块内容进行详细疏理一下 xff0c 本篇主要讲的是Docker的镜像相关内容 注 xff1a 本篇内容主要以 Docker从入门到实践 中镜像一模块为主线 xff0c 结合
  • Docker容器

    概述 前面我们讲了Docker三个主要概念中的镜像 xff0c 这里我们再来讲一下Docker的第二个重要概念 xff1a 容器 容器是独立运行的一个或一组应用以及它们的运行态环境 关于容器本篇主要讲如下几部分内容 xff1a 启动容器 关
  • 如何进入Docker容器

    概述 在使用Docker创建了容器之后 xff0c 大家比较关心的就是如何进入该容器了 xff0c 其实进入Docker容器有好几多种方式 xff0c 这里我们就讲一下常用的几种进入Docker容器的方法 进入Docker容器比较常见的几种
  • 从零开始使用Docker构建Java Web开发运行环境

    概述 前面我们讲了关于Docker的一些基本概念和操作 xff0c 今天我们以一个简单的Java Web例子来说一下Docker在日常工作中的应用 xff0c 本篇主要讲如下几部分内容 xff1a 创建jdk镜像 创建resin镜像 启动w
  • Spring MapFactoryBean应用详解

    在我们工作中 xff0c 尤其是电商系统中 xff0c 一个庞大的电商平台不是一个封闭的平台 xff0c 往往还伴生着一个开放平台 xff0c 用以接入各个企业 xff0c 以实现一种共赢的局面 xff0c 一般来讲 xff0c 针对于这种
  • FreeRTOS系列|二值信号量

    二值信号量 1 信号量简介 信号量一般用来进行资源管理和任务同步 xff0c FreeRTOS中信号量又分为二值信号量 计数型信号量 互斥信号量和递归互斥信号量
  • ubuntu ifconfig命令无效解决方案

    1 更新或升级系统 sudo apt get update 2 安装ipconfig的工具 sudo apt install net tools 3 查看ip ifconfig
  • 树莓派4b镜像烧录以及如何无显示屏远程登陆操作

    1 树莓派的烧录 xff1a 树莓派的烧录我用了很长的时间 xff0c 重新烧录的很多次 xff0c 都是因为没办法打开ssh xff0c 所以没办法进入树莓派调试 因为我使用树莓派主要是用来部署yolov5进行识别物体的 xff0c 所以
  • MyBatis入门——动态SQL

    前言 在我们日常工作中 xff0c 使用MyBatis除了做一般的数据查询之外 xff0c 还有很多业务场景下需要我们针对不同条件从数据库中获取到满足指定条件的数据 xff0c 这时候我们应该如何来做呢 xff1f 针对每种条件封装一个方法
  • Docker搭建本地私有仓库

    和Mavan的管理一样 xff0c Dockers不仅提供了一个中央仓库 xff0c 同时也允许我们使用registry搭建本地私有仓库 使用私有仓库有许多优点 xff1a 一 节省网络带宽 xff0c 针对于每个镜像不用每个人都去中央仓库
  • 斐波那契数列 Java实现

    关于斐波那契数列在百度百科上的定义如下 xff1a 斐波那契数列 xff0c 又称黄金分割数列 xff0c 指的是这样一个数列 xff1a 0 1 1 2 3 5 8 13 21 34 在数学上 xff0c 斐波纳契数列以如下被以递归的方法
  • Maven+Jetty运行项目无法热修改html处理

    一直以来都在做后端工程的开发 xff0c 很少做前端设计 xff0c 最近工作需要开始做前端开发 xff0c 感觉 辛辛苦苦几十年 xff0c 一朝回到解放前 的节奏啊 xff0c 遇到不少问题 xff0c 记录下来以备后查 今天在使用Ma
  • Spring4.3.0 Junit4.11 initializationError(org.junit.runner.manipulation.Filter)

    Spring4 3 0 Junit4 11 initializationError org junit runner manipulation Filter 昨天手欠 xff0c 在项目中把Spring3 2 14版本升级到4 3 0版本
  • zookeeper入门(一)——ZooKeeper伪集群安装

    zookeeper入门 xff08 一 xff09 ZooKeeper伪集群安装 在进行本篇文章之前 xff0c 先请大家了解一下zookeeper xff08 后面的文章为了省事有可能直接使用zk缩写来替代 xff09 xff0c 关于z
  • zookeeper入门(二)——zk客户端脚本使用

    zookeeper入门 xff08 二 xff09 zk客户端脚本使用 在上一篇文章zookeeper入门 xff08 一 xff09 ZooKeeper伪集群安装我们讲了在单机进行zk伪集群安装 xff0c 本篇文章我们来讲一下zk提供的
  • 事务基础知识

    数据库事务 数据库事务定义 xff0c 满足4个特性 xff1a 原子性 xff08 Atomic xff09 一致性 xff08 Consistency xff09 隔离性 xff08 Isolation xff09 和持久性 xff08
  • MySQL事务隔离级别

    1 MySQL所支持的事务隔离级别 MySQL所支持的事务隔离级别 xff1a READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 其中 REPEATABLE READ是
  • Thrift第一个示例

    第一步 xff1a 引入thrift依赖包 compile span class hljs keyword group span span class hljs string 39 org apache thrift 39 span nam
  • FreeRTOS系列|计数信号量

    计数信号量 1 计数信号量简介 计数型信号量有以下两种典型用法 事件计数 xff1a 每次事件发生 xff0c 事件处理函数将释放信号量 xff08 信号量计数值加1 xff09 xff0c 其他处理任务会获取信号量 xff08 信号量计数
  • Redis学习——01.redis安装

    下载 tar xzvf redis span class hljs number 3 2 span span class hljs number 10 span span class hljs preprocessor tar span s

随机推荐

  • IDEA常用设置

    显示主题 建议使用Darcula Appearance gt Theme 编辑器字体 建议使用Courier New或者Consolas Editor gt Font gt Font 打开自动编译 Compiler gt Build pro
  • Windows下执行Linux命令

    常用的工具 Cygwin xff08 http www cygwin com xff09 Cygwin是一个在windows平台上运行的类UNIX模拟环境 xff0c 详细参见百度百科 xff1a https baike baidu com
  • Linux网络编程 - 多线程服务器端的实现(1)

    引言 本来 xff0c 线程在 Windows 中的应用比在 Linux 平台中的应用更广泛 但 Web 服务的发展迫使 UNIX 系列的操作系统开始重视线程 由于 Web 服务器端协议本身具有的特点 xff0c 经常需要同时向多个客户端提
  • 访问带有用户名、密码保护的 URL

    一 URL xff0c 统一资源定位器 指向互联网上的 资源 xff0c 可协议名 主机 端口和资源组成 如 http username password 64 host 8080 directory file query ref Comp
  • 【RT-Thread】STM32F1片内Flash实现Bootloader

    目录 前言1 开发环境搭建2 Bootloader制作3 APP程序制作4 OTA固件打包5 Ymodem升级小结 前言 RT Thread官网对于Bootloader的实现方案有非常详细的描述 xff0c 目前支持F1 F4 L4系列单片
  • SDVOE和传统矩阵的区别

    SDVOE最显著的特点 xff1a 分辨率高 xff0c 最高支持4KP60 4 4 4 图像质量好 xff0c 完全可以达到无压缩效果延时小 xff0c Genlock模式下4K30延时只有不到0 1ms xff0c 链路上嵌入千兆网络
  • GD32的DMA配置

    参考 GD32F4xx 用户手册 DMA 控制器由 4 部分组成 xff1a AHB 从接口配置 DMA xff1b 两个 AHB 主接口进行数据传输 xff1b 两个仲裁器进行 DMA 请求的优先级管理 xff1b 数据处理和计数 DMA
  • nuttx杂记

    1 设置自启动应用 修改deconfig文件下的 CONFIG INIT ENTRYPOINT 参数即可 2 消息队列使用 以下是Nuttx系统中使用queue create函数创建队列的示例代码 xff1a include lt stdi
  • linux下使用jlink 调试 stm32的破事

    安装libusb sudo apt get install libusb 安装readline wget c ftp ftp gnu org gnu readline readline 6 2 tar gz tar zxvf readlin
  • FreeRTOS系列|软件定时器

    软件定时器 MCU一般都自带定时器 xff0c 属于硬件定时器 xff0c 但是不同的MCU其硬件定时器数量不同 xff0c 有时需要考虑成本的问题 在硬件定时器不够用的时候 xff0c FreeRTOS也提供了定时器功能 xff0c 不过
  • 视频芯片选择

    常用的视频芯片记录 HDMI TI ITE Explore Silicon image ADI semtech https www semtech com Realtek MACRO http www mitinc co kr module
  • 眼图里的那些破事

    1 眼图基本概念 1 1 眼图的形成原理 眼图是一系列数字信号在示波器上累积而显示的图形 xff0c 它包含了丰富的信息 xff0c 从眼图上可以观察出码间串扰和噪声的影响 xff0c 体现了数字信号整体的特征 xff0c 从而估计系统优劣
  • IIC的地址

    7位寻址 在7位寻址过程中 xff0c 从机地址在启动信号后的第一个字节开始传输 xff0c 该字节的前7位为从机地址 xff0c 第8位为读写位 xff0c 其中0表示写 xff0c 1表示读 图1 xff1a 7位寻址 I2C总线规范规
  • ODR, BSRR, BRR的差别

    ODR寄存器可读可写 xff1a 既能控制管脚为高电平 xff0c 也能控制管脚为低电平 管脚对于位写1 gpio 管脚为高电平 xff0c 写 0 为低电平 BSRR 只写寄存器 xff1a color 61 Red 既能控制管脚为高电平
  • ACAP究竟是什么

    Xilinx推出Versal系列 xff0c 号称业界首款ACAP xff0c 自适应计算加速平台 ACAP不仅是一个新的处理器 xff0c 而且是新的产品类型 作为率先推出ACAP这样类型产品的公司 xff0c 这也是赛灵思的核心竞争力所
  • ISE 14.7 调试错误笔记

    1 ERROR Pack 2530 The dual data rate register 34 U sys ctl ODDR2 inst 2 34 failed to join an OLOGIC component as require
  • HDMI 4K分辨率 时序

    参考 HDMI1 4标准 High Definition Multimedia Interface Specification 这份文件放在百度网盘共享了 xff0c 上传到文档平台会被封禁 xff0c 如果侵权 xff0c 麻烦联系我删除
  • 深度学习CPU,GPU,NPU,TPU以及其计算能力单位

    处理器运算能力单位 TOPS是Tera Operations Per Second的缩写 xff0c 1TOPS代表处理器每秒钟可进行一万亿次 xff08 10 12 xff09 操作 与此对应的还有GOPS xff08 Giga Oper
  • SSD数据集增强方法

    coding utf 8 import numpy as np import random import cv2 import glob import os import xml etree cElementTree as ET def r
  • 目标检测图像增强

    https blog csdn net wei guo xd article details 74199729 常用的图像扩充方式有 xff1a 水平翻转 xff0c 裁剪 xff0c 视角变换 xff0c jpeg压缩 xff0c 尺度变