【1708.04347】用非常少的图片训练神经网络(先占个坑)

摘要

深度神经网络的模型很复杂,需要通过训练来估计的参数很多。为了达到相同的收敛效果,复杂的模型需要更多的训练数据。我们提出在极坐标空间进行径向变换来进行数据增强,以解决小样本的网络训练问题。像素级别的变换提供了原始图片在极坐标下的表达,这增大了数据量不够的类别的表达。在MNIST和多模态医学图像上进行实验,采用alexnet和googlenet,得到很好的分类精度。

方法

笛卡尔坐标映射到极坐标,论文中的这张图很直观:

1.png

测试代码

from __future__ import division
import numpy as np
import cv2, math
import matplotlib.pyplot as plt
%matplotlib inline

def imshow(img):
    if len(img.shape) == 3:
        b,g,r = cv2.split(img)
        plt.subplot(111);
        plt.imshow(cv2.merge([r, g, b]))
    elif len(img.shape) == 2:
        plt.subplot(111);
        plt.imshow(img, cmap='gray')
    else:
        print("Unknown input shape")
def RT(I, U, V, m, n):
    I_out = np.zeros_like(I)
    for u in range(U):
        theta_u = 2*math.pi * u / U
        for v in range(V):
            x = int(v * math.cos(theta_u))
            y = int(v * math.sin(theta_u))
            if m+x >= 0 and m+x < U and n+y >= 0 and n+y < V:
                I_out[u, v] = I[n+y, m+x]
    return I_out
img = cv2.imread('/home/dumin/test.png', 0)
imshow(img)

output_3_0.png

U = V = 76 # 256
m, n = 30,50
img2 = RT(img, U, V, m, n)
imshow(img2)

output_4_0.png

论文实验

Mnist,每一类只用20张图片(为了呼应主题,“非常小的样本”),用上面这种变换方法扩增100倍,变成每类2000张,总共20k张图片。训练集:验证集:测试集为18k, 1k, 1k。

一点疑问

  1. 如果为了证明这种数据增强的效果好,个人觉得测试集不应该用增强的数据。数据增强只是一种训练的方法,并不能用在实际的测试当中。
  2. 有一点分析的很到位,复杂的网络,很多的参数,导致需要大量数据来训练。有一帮人在不断地减少模型的参数(各种连接方法,各种正则手段),同时保证模型的能力不受损失。另一帮人从数据出发,扩增数据集。
  3. 对于实验令人惊奇的结果,如果自己不实验一番,或者作者不公布实验代码,实在是很难令人信服。
  4. 从实验也能看出,对于医学图像数据来说(Imagenet预训练效果很小),在数据量不够的情况下,网络越复杂,效果越差。模型的参数一定要和数据量成正比。
  5. 当数据量很小,测试集本身得到的测试结果,都是存疑的。抽样样本太少,无法代表实际中的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值