用Google计算机视觉API进行猫狗图片识别

准备工作

进入 colab notebook后输入以下代码:

from google.colab import drive
drive.flush_and_unmount()
drive.mount('/content/gdrive', force_remount=True)
root_dir = "/content/gdrive/My Drive/"

它会让你点进一个网址,输入安全码(在手机google play可找)便可进行后续操作

创建文件夹

创建两个文件夹,一个cat,一个dog。

from fastai.vision import *
path = Path(root_dir + 'DeepLearning/Datasets2/')

dest1 = path/'cat'
dest1.mkdir(parents=True, exist_ok=True)
dest2 = path/'dog'
dest2.mkdir(parents=True, exist_ok=True)

构建数据集

在Google图片上搜cat,浏览一会儿,按F12,再点console,或者Ctrl+Shift+J打开控制台,直接粘贴以下五段代码:

function simulateRightClick( element ) {
    var event1 = new MouseEvent( 'mousedown', {
        bubbles: true,
        cancelable: false,
        view: window,
        button: 2,
        buttons: 2,
        clientX: element.getBoundingClientRect().x,
        clientY: element.getBoundingClientRect().y
    } );
    element.dispatchEvent( event1 );
    var event2 = new MouseEvent( 'mouseup', {
        bubbles: true,
        cancelable: false,
        view: window,
        button: 2,
        buttons: 0,
        clientX: element.getBoundingClientRect().x,
        clientY: element.getBoundingClientRect().y
    } );
    element.dispatchEvent( event2 );
    var event3 = new MouseEvent( 'contextmenu', {
        bubbles: true,
        cancelable: false,
        view: window,
        button: 2,
        buttons: 0,
        clientX: element.getBoundingClientRect().x,
        clientY: element.getBoundingClientRect().y
    } );
    element.dispatchEvent( event3 );
}






function getURLParam( queryString, key ) {
    var vars = queryString.replace( /^\?/, '' ).split( '&' );
    for ( let i = 0; i < vars.length; i++ ) {
        let pair = vars[ i ].split( '=' );
        if ( pair[0] == key ) {
            return pair[1];
        }
    }
    return false;
}







function createDownload( contents ) {
    var hiddenElement = document.createElement( 'a' );
    hiddenElement.href = 'data:attachment/text,' + encodeURI( contents );
    hiddenElement.target = '_blank';
    hiddenElement.download = 'urls.txt';
    hiddenElement.click();
}










function grabUrls() {
    var urls = [];
    return new Promise( function( resolve, reject ) {
        var count = document.querySelectorAll(
        	'.isv-r a:first-of-type' ).length,
            index = 0;
        Array.prototype.forEach.call( document.querySelectorAll(
        	'.isv-r a:first-of-type' ), function( element ) {
            // using the right click menu Google will generate the
            // full-size URL; won't work in Internet Explorer
            // (http://pyimg.co/byukr)
            simulateRightClick( element.querySelector( ':scope img' ) );
            // Wait for it to appear on the <a> element
            var interval = setInterval( function() {
                if ( element.href.trim() !== '' ) {
                    clearInterval( interval );
                    // extract the full-size version of the image
                    let googleUrl = element.href.replace( /.*(\?)/, '$1' ),
                        fullImageUrl = decodeURIComponent(
                        	getURLParam( googleUrl, 'imgurl' ) );
                    if ( fullImageUrl !== 'false' ) {
                        urls.push( fullImageUrl );
                    }
                    // sometimes the URL returns a "false" string and
                    // we still want to count those so our Promise
                    // resolves
                    index++;
                    if ( index == ( count - 1 ) ) {
                        resolve( urls );
                    }
                }
            }, 10 );
        } );
    } );
}








grabUrls().then( function( urls ) {
    urls = urls.join( '\n' );
    createDownload( urls );
} );

同样的操作搜索dog。

把下载的txt改名,为后续工作做准备

 

下载数据集

将cat.txt和dog.txt文件上传于path目录下,执行如下命令:

其中使用了fast.ai.vision.data的download_images,指定txt文件的位置,存放图片的目的文件夹,最大的图片数目,最大处理线程数目

download_images(path/'cat.txt', dest1, max_pics=120)
download_images(path/'dog.txt', dest2, max_pics=120)

 

数据清理

下载下来的图片格式(jpeg、png、gift等)大小都不一致,需要进行清理,fast.ai提供了一个verify_images的工具,可以对图像进行基本的清理操作:

verify_images 会查看该图片是否损坏、是否使用合适的channel数目,是否需要调整到指定大小或超过了限定大小

classes = ['cat','dog']
for c in classes:
    print(c)
    verify_images(path/c, delete=True, max_size=500)

 

查看部分图片

fast.ai通过类ImageDataBunch进行数据的组织

np.random.seed(42)
data = ImageDataBunch.from_folder(path, train=".", valid_pct=0.2,
        ds_tfms=get_transforms(), size=224, num_workers=4).normalize(imagenet_stats)

可以随机查看一组数据

data.show_batch(rows=3, figsize=(7,6))

 

训练模型

使用预训练模型resnet34进行迁移学习:

learn = cnn_learner(data, models.resnet34, metrics=error_rate)
learn.fit_one_cycle(4)

 

解冻模型,修改学习率,再训练几轮:

learn = cnn_learner(data, models.resnet34, metrics=error_rate)
learn.fit_one_cycle(4)

调整学习率继续学习

learn.fit_one_cycle(10,max_lr=slice(1e-4,3e-4))
learn.save('stage-2')

 

fast.ai提供了ClassificationInterpretation能够从结果中高效的进行分析

interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix(figsize=(12,12), dpi=60)

interp.plot_top_losses(9, figsize=(15,11))

 

参考网址:

https://medium.com/dain-studios/creating-a-computer-vision-api-in-60-minutes-658ff64ae4f7

从头训练一个图像分类器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 计算机视觉识别SVM,是一种基于支持向量机算法的图像分类器。这种分类器使用大量的有标签的图像数据来进行训练,并从中学习出一组的特征,然后将这些特征用来对新输入的图像进行分类。 SVM是一种常用的机器学习算法,通过将多维数据映射到支持向量面上,进行非线性分类、回归、降维等任务。在识别中,SVM算法可以对图像特征进行降维、分类,用来判断输入的图像是还是。 在使用SVM算法进行识别之前,首先需要将图像数据转换成数字矩阵,提取出图像的特征作为训练的数据。这些特征可以是颜色、纹理、形状等。提取出图像的特征后,使用SVM算法对特征进行分类,将进行区分。 在实际运用中,需要利用大量的有标签数据对SVM模型进行训练,并对训练结果进行评估和调整。随着机器学习和计算机视觉技术的不断发展,计算机视觉识别SVM算法也可以进行不断的升级和优化,以提高准确率和效率。 ### 回答2: 计算机视觉识别的SVM(Support Vector Machine)是一种基于机器学习算法的分类器,常用于图像分类和目标检测。在识别任务中,SVM可以通过学习图像数据集中特征点的差异,建立一个分类模型,将未知的图像分为的类别。 SVM的实现步骤包括特征提取、数据集划分、模型训练和测试。首先需要从图像数据集中提取出有代表性的特征,如HOG(Histogram of Oriented Gradients)或SIFT(Scale-Invariant Feature Transform),用于构建数据集。然后将数据集按一定比例划分为训练集和测试集,并进行标签化。接着,在训练阶段,使用SVM算法从训练集中学习之间的区别,并通过调优模型参数来提高模型效果。最后,在测试阶段,使用SVM模型对测试集中的图像进行分类预测,并评估模型的分类性能。 要构建一个高准确率的SVM识别系统,需要充足的图像数据集和良好的特征提取方法。同时,需要对SVM的参数设置和调优有足够的理解和掌握,以确保模型的训练效果和分析结果可靠性。除此之外,还需要考虑模型的实时性和复杂度,以满足实际应用场景需求。 ### 回答3: 计算机视觉识别是一种基于机器学习算法的图像识别技术,通过图像处理和特征提取等技术,将输入的图像进行分类。而支持向量机(SVM)是一种常用的分类器,它利用所谓的核函数将训练数据映射到高维空间,通过分类面划分不同的类别,并预测新数据的分类。 在识别中,SVM主要通过学习训练数据集的特征和是否为进行训练,然后利用训练好的分类器对新的输入数据进行分类。具体而言,基于SVM的识别流程包括以下几个步骤: 1. 数据集准备:需要收集大量的的图像数据,同时进行数据清洗和预处理,包括图像增强、白平衡、去噪等。 2. 特征提取:可以使用深度学习算法如卷积神经网络(CNN)来自动提取图像的特征,或者手动设计特征。例如,我们可以通过颜色直方图、纹理、形状和边缘等特征来描述的不同属性。 3. 分类器训练:利用SVM算法对已提取的特征进行训练,得到分类器模型。在训练过程中,我们需要选择核函数类型和参数,并进行交叉验证等操作来优化模型的性能。 4. 数据分类:将新的输入数据输入到已训练好的分类器中,进行分类识别,判断是还是。 总之,利用支持向量机算法进行计算机视觉识别技术,可以通过对大量数据和特征的学习和分类,实现准确的图像识别。未来,该技术还将在人工智能、自动驾驶、医学图像分类等领域得到广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值