如何通过Tensorflow和GCP在电商网站中自动标记服装

本文由【图普科技】编译自https://medium.com/@dataturks/automatic-tagging-of-clothing-in-e-commerce-using-tensorflow-and-gcp-d2b623cd2a78

为什么选择电商和服装标记?

从创业公司到小型企业,再到大型品牌,大量公司在他们电商网站上销售产品或服务,获益颇多。在当今竞争激烈且以便利为中心的社会中,消费者不想再冒险在大街购买物品,相反,他们倾向于在家中购物,这使得电商成为企业和买家的灵活解决方案。

随着电商日益普及,可供购物的产品数量也在增加,我们很难对服装之类的产品进行手动标记。因此,以下是使用机器学习来缓解这项任务的一个小尝试。

图像分类vs对象检测

人们很容易混淆图像分类和对象检测。通常,如果要将图像分类为特定类别,则属于图像分类。然而,如果您的目标是识别图像中对象的位置,例如,计算对象的实例数,则属于对象检测。

机器学习模型

我们使用的模型是用于对象检测的内置TensorFlow模型,以便对数据进行分类。需要分类的类别有:衬衫,T恤,夹克,牛仔裤,裤子,太阳镜,鞋子,上衣和裙子。TensorFlow中有多种模型可供选择,您可在此链接中找到详细信息。

出于本实验的目的,我使用了一类被称为MobileNets的特殊卷积神经网络(CNN)。 MobileNets虽然不能提供与发展成熟的深度神经网络一样精确的模型,但对于许多应用来说,其精确度已经非常高并且足够好。MobileNet架构和“传统的”CNN之间的主要区别在于,MobileNets将卷积分解为3x3深度卷积和1x1逐点卷积,而不是在简单的3x3卷积层后再接一个ReLU非线性激活。

网上有大量关于如何使用MobileNets或其他内置模型构建自定义分类器的教程。

数据集

本实验中的图像是从知名电商网站上下载的。这些数据已经经过清理(删除重复的图像,删除不需要的图像)并上传到dataturks平台。使用平台上提供的注释工具,用矩形边界框对这些图像注释(查看注释工具)。注释后的数据下载到包含图像和JSON文档的文件夹,并按照80-20的拆分比例将数据拆分为训练集和测试集。然后给出训练和测试文件夹作为python脚本的输入,以便将数据转换为Pascal VOC(此处为演示)。从json到PascalVOC脚本转换过程中获得的xml文档和图像随后转换为一组csv文档和图像。最后,将这些数据转换为TensorFlow 要求的.record 文件进行训练和测试。

(确保数据拆分后数据集中每个类别至少包含100-150个图像用于训练。)

数据准备的代码:

DataTurks-Engg/Automatic_tagging_of_clothing_in_E-Commerce
Contribute to Automatic_tagging_of_clothing_in_E-Commerce         developmentby creating an account on GitHub.                       github.com

训练:

模型的训练是在Ubuntu 16.04 LTS GPU系统上完成的,安装有NVIDIATESLA K80,7GB内存,12GB显卡以及30GB硬盘。训练进行了10,000次迭代,大约需要3个小时。

整个训练过程,从创建数据集,将其设置为正确的格式,利用谷歌云平台创建实例(GCP实例),训练模型到最终对其进行测试,需要付出巨大的努力,进行大量工作。下面概述了创建数据集后需采取的具体步骤。

创建GPC实例:谷歌云平台(Google Cloud Platform)是一种云计算基础架构,可提供安全,强大,高性能且经济高效的框架。它不仅仅适用于数据分析和机器学习,但其他方面我们在这里并不会探讨。谷歌将赠送300美元的信用额度和并提供12个月的免费试用。

有关如何设置实例的分步指南,请参阅谷歌云平台文档和博客。

创建实例后,设置如下所示:

 

Ubuntu 16.04 LTS上安装TensorFlow GPU版本:

第一步

#确保系统更新并具有基本构建工具

sudo apt-get update

sudo apt-get — assume-yes upgrade

sudo apt-get — assume-yes install tmux build-essentialgcc g++ make binutils

sudo apt-get — assume-yes installsoftware-properties-common

第二步
#安装您的nvidia显卡驱动。

在菜单中搜索其他驱动程序并将其打开。等待几分钟,选择nvidia驱动程序,点击应用并重新启动。

第三步

#谷歌cuda工具包

下载cuda-8.0 .deb并安装

sudo dpkg -icuda-repo-ubuntu1604–8–0-local-ga2_8.0.61–1_amd64.deb (this is the deb fileyou’ve downloaded)

sudo apt-get update

sudo apt-get install cuda exportPATH=/usr/local/cuda-8.0/bin ${PATH:+:${PATH}}

exportLD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

第四步

#下载cudnn v5.1并运行以下命令

tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz

sudo cp cuda/include/cudnn.h /usr/local/cuda/include

sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudochmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

第五步

#安装TensorFlow依赖包

sudo apt-get install libcupti-dev

第六步

#下载Python以及tensorflow gpu版本

bash Anaconda3–4.4.0-Linux-x86_64.sh

pip install tensorflow-gpu==1.2

第七步

#检查gpu是否能够正常运

#下载git repo https://github.com/tensorflow/models,并解压

pythonmodels-master/tutorials/image/imagenet/classify_image.py

or

pythonmodels-master/tutorials/image/cifar10/cifar10_train.py

修改自定义模型的文件:

由于我曾用过MobileNet模型,我对配置文件进行了更改。训练好的模型可以在这里下载

配置文件中的更改:


后面的部分:


clothes-detection.pbtxt文件:

开始训练模型

可以使用以下命令在本地进行训练:

其中${PATH_TO_YOUR_PIPELINE_CONFIG}指向管道配置,${PATH_TO_TRAIN_DIR}指向训练检查点和事件写入的目录。 默认情况下,训练将无限期运行,直到用户将其终止或完成迭代。

我的总损失图表如下:

进行评估

评估需单独进行,并在测试数据集上对其进行评估。可以使用以下命令进行评估:

其中 ${PATH_TO_YOUR_PIPELINE_CONFIG}指向管道配置, ${PATH_TO_TRAIN_DIR}指向保存训练检查点的目录(与训练时的目录相同),${PATH_TO_EVAL_DIR}指向将保存评估事件的目录。与训练一样,评估工作一直运行,直到默认终止。

运行TensorBoard

可以使用Tensorboard检查训练和评估工作的进度。如果要使用推荐的目录结构,可以使用以下命令运行Tensorboard:

其中${PATH_TO_MODEL_DIRECTORY} 指向包含训练和评估文件的目录。请注意,Tensorboard可能需要几分钟才能填充数据。

成功加载后,TensorBoard应该是这样的:

下面给出了学习率,批次规模,模型中tensorboard的损失等一些图表。所有这些图表以及其他图表都可以在浏览器中打开的tensorboard上找到,在图表上移动光标会提供平滑、步长、值等信息。




测试:

为了在本地测试模型,我将文件导出到谷歌驱动器,使用对象检测的object_detection_tutorial.ipynb文件来测试也会更容易些。下面给出了执行相同操作并简化任务的步骤。这样做可以让您多次运行已保存的模型进行测试,而无需为实例付费,并可在任何时间对它本地访问。

首先压缩保存模型检查点和图像的整个文件夹。

1.  通过SSH连接到Linux服务器,并从GitHub下载Linux版本的谷歌驱动器。

cd ~
wget https://docs.google.com/uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE&export=download

2.您应该在主目录中看到一个文件名为uc= 0B3X9GlR6EmbnWksyTEtCM0VfaFE的文件。将此文件重命名为gdrive。

mv uc\?id\=0B3X9GlR6EmbnWksyTEtCM0VfaFEgdrive

3. 分配此文件的可执行权限。

chmod +x gdrive

4. 将文件安装到usr文件夹。

sudo install gdrive/usr/local/bin/gdrive

5. 您需要让谷歌驱动器允许此程序连接到您的帐户。为此,可以使用任意参数运行gdrive程序,并将其提供给您的文本复制到浏览器中。然后将Google提供的响应代码粘贴到您的SSH窗口中。运行以下内容。

gdrive list

6. 完成了! 现在您可以根据需要上传文件。

gdrive upload trained.tar.gz

现在,可以从驱动器下载压缩文件并在本地进行测试。

下面将对object_detection_tutorial.ipynb文件进行一些更改:

在模型准备的存储变量的单元格中:

# 要下载的模型.
MODEL_NAME = ‘ssd_mobilenet_v1_coco_2017_11_17’
MODEL_FILE = MODEL_NAME + ‘.tar.gz’
DOWNLOAD_BASE = ‘http://download.tensorflow.org/models/object_detection/'

# 确定检测图表的路径。这是用于对象检测的实际模型。
PATH_TO_CKPT = MODEL_NAME + ‘/frozen_inference_graph.pb’ #name of yourinference graph

只需更改PATH_TO_CKPT,使其指向新的 .pb文件,就可以在此处加载使用export_inference_graph.py工具导出的任何模型。

# 为每个矩形框添加正确标签的字符串列表。
PATH_TO_LABELS = os.path.join(‘data’, ‘mscoco_label_map.pbtxt’) #name ofyour pbtxt file.

NUM_CLASSES = 90 #to the numberof classes you want

 

在第一个被检测的单元格中:

(确保测试图像命名为image1.jpg或image1.jpeg,image2.jpg或image2.jpeg等)

到这里模型就测试完成了。

以下是我测试模型后的一些结果:

结论:

实验结果令人印象深刻,对50个测试图像中的大约48个进行了正确的分类。分类的置信度范围为88%至98%。

对于MobileNets模型而言,结果似乎令人信服,因为该模型的准确性不是很高。我们也可以对GitHub上提供的其他模型,如Faster RCNN或InceptionNets等,进行类似实验。这些用于图像分类的定制模型可以部署在Android应用程序中,也可以在电商网站中使用。

注:本文由「图普科技」编译,您可以关注微信公众号tuputech,体验基于深度学习的「图像识别」应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值