本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

【j2开奖】计算机视觉到底怎么给图像分类?这5种方法供你选(3)

时间:2017-05-18 01:47来源:香港现场开奖 作者:118KJ 点击:
我们在这里使用的类型是['Sphynx'(加拿大无毛猫,也称斯芬克斯猫),'Siamese'(暹罗猫),'Ragdoll'(布偶猫),'Persian'(波斯猫),'Maine-Coon'(缅因猫),

  我们在这里使用的类型是['Sphynx'(加拿大无毛猫,也称斯芬克斯猫),'Siamese'(暹罗猫),'Ragdoll'(布偶猫),'Persian'(波斯猫),'Maine-Coon'(缅因猫),'British-shorthair'(英国短毛猫),'Bombay'(孟买猫),'Birman'(缅甸猫),'Bengal'(孟加拉猫)]。

  所以我们在数据集中共有2000张图像,彼此的尺寸各不同。但是我可以将它们调整为固定大小,如64 x 64或128 x 128。

  预处理

  在这个项目中,我们主要使用OpenCV进行图像数据的处理,比如将图像读入数组,并重新形成我们需要的尺寸。

  改进图像训练结果的一个常见方法是以随机方式变形,裁剪或增亮训练输入,这具有扩展训练数据的有效大小的优点,而这归功于相同图像的所有可能的变化,并且倾向于帮助网络学习应对在分类器的现实使用中将发生的所有失真问题。

  详情请参阅链接:https://github.com/aleju/imgaug。

  评估

  第一种方法:

  第一部分:预处理数据集,并用sklearn应用KNN、SVM和BP神经网络。

  在程序中有很多参数可以调整:在image_to_feature_vector函数中,我们设置的尺寸是128x128,我们之前也尝试过像8x8,64x64,256x256这样的大小。从而我们发现图像尺寸越大,精度越好。但是,大的图像尺寸也会增加执行时间和内存消耗。所以我们终于决定图像尺寸为128x128,因为它不是太大,但同时也可以保证精度。

  在extract_color_histogram函数中,我们将每个通道的bin数设置为32,32,32。像上一个函数一样,我们也尝试了8,8,8和64,64,64,并且更高的数字可以产生更高的结果,但同时也伴随着更高的执行时间。所以我们认为32,32,32是最合适的。

  而至于数据集,我们尝试了3种数据集。第一个是具有400个图像,2个标签的子数据集。第二个是具有1000个图像,5个标签的子数据集。最后一个是具有1997个图像,10个标签的整个数据集。并且我们将不同的数据集解析为程序中的参数。

  在KNeighborsClassifier中,我们只更改了邻居数,并将结果存储为每个数据集的最佳K。然后将我们设置的所有其他参数初始为默认值。

  在MLPClassifier中,我们设置了一个含有50个神经元的隐藏层。我们测试了多个隐藏层,但最终结果似乎没有什么明显的变化。最大迭代时间为1000,容差为1e-4,以确保其收敛。并将L2惩罚参数α设置为默认值,随机状态为1,求解器为“sgd”,学习速率为0.1。

  在SVC中,最大迭代时间为1000,类的权重值为“平衡”。

  我们的程序的运行时间不是很长,从2个标签数据集到10个标签数据集需要大约3到5分钟。

  第二种方法:

  用TensorFlow构建CNN

  计算模型的梯度是需要很长时间的,因为这个模型使用的是大型数据集的整体。因此,我们在优化器的每次迭代中仅仅使用少量的图像。批量大小通常为32或64。数据集分为包含1600张图像的训练集,包含400张图像的验证集和包含300张图像的测试集。

  有很多参数是可以进行调整的。

  首先是学习率。只要它足够小,可以收敛和足够大得不会使程序太慢,一个好的学习率还是很容易找到的。我们选择了1×10 ^ -4。

  第二个是我们向网络提供的图像的大小。我们尝试了64 * 64和128 * 128。事实证明,图像越大,我们得到的准确性越高,但代价是运行时间也相应地增加。

  然后是层和它们的形状。但实际上有太多的参数可以调整,所以想要找到这些参数的最佳值是一件非常困难的工作。

  根据网上的许多资源,我们了解到,建立网络的参数的选择几乎都取决于经验。

  起初我们试图建立一个相对复杂的网络,其参数如下所示:

【j2开奖】计算机视觉到底怎么给图像分类?这5种方法供你选

  我们使用3个卷积层和2个完全连接的层,而这些都是相对复杂的。

  但是,结果是——过度拟合。只有经过一千次迭代,我们的程序才能获得100%的训练精度,而只有30%的测试精度。起初我很困惑为什么我们会得到一个过度拟合的结果,并且我试图随机调整参数,但是结果却始终没有变好。几天后,我碰巧看到一篇文章,谈到中国研究人员进行的一个深入学习项目(https://medium.com/@blaisea/physiognomys-new-clothes-f2d4b59fdd6a)。他们指出,他们进行的研究是有问题的。“一个技术性的问题是,想要训练和测试像AlexNet这样的CNN,而结果不会过度拟合,仅仅使用不到2000个例子是不足以做到的。”所以,这个时候我才意识到,首先我们的数据集实际上是很小的,其次就是我们的网络太复杂了。

  要记得我们的数据集是刚好包含2000张图像。

  然后我尝试减少内核的数量层和大小。我尝试了很多参数,下图就是我们使用的最终结构。

【j2开奖】计算机视觉到底怎么给图像分类?这5种方法供你选

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容