背景:

做大规模机器学习算法,特别是神经网络最怕什么——没有数据!!没有数据意味着,机器学不会,人工不智能!通常使用样本增强来扩充数据一直都是解决这个问题的一个好方法。

  最近的一篇论文《Training Neural Networks with Very Little Data-A Draft》提出了一个新的图像样本增强方法:对图像使用径向变换生成不同“副本”,解决样本数量太少难以训练的问题。论文地址:https://arxiv.org/pdf/1708.04347.pdf

  该论文提出将图片的直角坐标按指定中心点转换为极坐标来重构图像,从而在不同中心点位置的情况下得到一张图片的多个增强样本,实际就是选取不同的点做圆心,将图像在圆心处展开。

实现:

  论文提供了伪代码,按照伪代码直接写出Python代码很容易:

  

  但事情并没有那么简单!上面的代码输出的是这个样子:

  

  喵!

  看了网上一些实现,图形也不对。只能再仔细检查了一遍。。然后。。发现论文里的“||  ||”原来是取整。。而且作者的直角坐标原点是图的左下角而我们代码是左上角。。

修改:

  知道了问题所在修改一下代码就ok了。去掉abs(),再交换cos和sin

  

 def RT(img, center=(0, 0)):
     U, V, p = img.shape
     RTimg = img.copy() - img
     m, n = center
     for u in range(U):
         d = 2 * math.pi * u / U
         for v in range(V):
             x = v * math.sin(d)
             y = v * math.cos(d)
             mm = int(math.floor(m + x))
             nn = int(math.floor(n + y))
             if mm>=0 and mm<U and nn>=0 and nn<V:
                 RTimg[u, v, :] = img[mm, nn, :]
     return RTimg

  再跑一次图,center取图上圆心坐标:

  

  完美!

  再来增强一波明星图,最近很火的。。

  

  快跑。。

思考:

  个人理解该方法在取点时,越靠近圆心点越密集,相当于有目标的非均匀采样,中心点附近的样本点在变换后占图像比重更大。如下图中黄色区域,点要比外部更密集。

  

  

  这种做法相当于强化中心点附近区域在模型训练中的贡献,与deepid2中对同一张图片切分不同patch用于训练有异曲同工的效果。相较之下这种方法还会保留部分其他非中心区域的信息,考虑更全面。

  至于实际用于训练的效果,小霸王cpu,数据集还没转完,再议。

  原创,转载请声明。完工跑路

实现径向变换用于样本增强《Training Neural Networks with Very Little Data-A Draft》的更多相关文章

  1. A Recipe for Training Neural Networks [中文翻译, part 1]

    最近拜读大神Karpathy的经验之谈 A Recipe for Training Neural Networks  https://karpathy.github.io/2019/04/25/rec ...

  2. (转)A Recipe for Training Neural Networks

    A Recipe for Training Neural Networks Andrej Karpathy blog  2019-04-27 09:37:05 This blog is copied ...

  3. 1506.01186-Cyclical Learning Rates for Training Neural Networks

    1506.01186-Cyclical Learning Rates for Training Neural Networks 论文中提出了一种循环调整学习率来训练模型的方式. 如下图: 通过循环的线 ...

  4. Training Neural Networks: Q&A with Ian Goodfellow, Google

    Training Neural Networks: Q&A with Ian Goodfellow, Google Neural networks require considerable t ...

  5. [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization

    课程主页:http://cs231n.stanford.edu/   Introduction to neural networks -Training Neural Network ________ ...

  6. [Converge] Training Neural Networks

    CS231n Winter 2016: Lecture 5: Neural Networks Part 2 CS231n Winter 2016: Lecture 6: Neural Networks ...

  7. [转]Binarized Neural Networks_ Training Neural Networks with Weights and Activations Constrained to +1 or −1

    原文: 二值神经网络(Binary Neural Network,BNN) 在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的 ...

  8. [CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout

    课程主页:http://cs231n.stanford.edu/ ___________________________________________________________________ ...

  9. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

随机推荐

  1. javascript 代码放在head和body的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt239 1,在head中时,所代表的functions只加载而不执行,执行是在 ...

  2. 49、html基础认识&常用标签(1)

    从今天期我们进入前端的学习,先学习html,没有任何需要逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock ...

  3. Git和Github简单教程(收藏)

    原文链接:Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的 ...

  4. 转深入Java虚拟机 之四:类加载机制

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581 类加载过程     类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个 ...

  5. Java中equals和==之间的区别

    今天在写表达式求值的时候,发现了equals和==||!=和!equals()之间是不一样的. 我就从网上搜了搜关于这方面的知识,然后在下面做一个总结: Java中有两类数据类型: 基本数据类型(Pr ...

  6. Java计算器1.0版

    此版本只是设计了页面,还没有实现事件监听   代码: package com.niit.javagui; import java.awt.Button; import java.awt.FlowLay ...

  7. 【Beta阶段】第四次scrum meeting

    Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 查找适合的素材模块,和105一起把手势功能连接到APP上 100% 查阅换 ...

  8. Swing-布局管理器应用--WIN7上计算器的UI实现

    学完了Swing布局管理器,为了加深理解我决定做一些UI的实现,那就从WIN7上的计算器开始吧!首先,我们来研究一下它的UI.该计算器的UI主要有3个,分别是标准型.科学型和程序员型,如下图所示.   ...

  9. 2015211230554《Java程序设计》第6周学习总结

    1. 本周学习总结 2. 书面作业 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 克隆方法用于创建对象的拷贝,为了使用clon ...

  10. 201521123099 《Java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...