月度归档:2017年08月

海底捞卫生问题后续,监管部门可否引入 AI 实时识别与监控?

前几天,海底捞被曝出严重卫生问题。

老鼠爬进食品柜、员工用漏勺掏下水道、洗碗池里洗簸箕……这是“海底捞”北京劲松店、太阳宫店后厨的“夜半实况”。

与“上帝服务”相悖的“脏乱差”实景的较大出入让本次事件引发全民热议。人们讨论着海底捞公关、讨论着海底捞背后潜在的其他商家的卫生问题….当然,这些都是本次事件的核心内容,值得商讨,但也许除了这些之外,食品卫生背后的相关监管方案也值得被关注。

相信大家在外就餐时,在稍大的餐饮店内都会看到一个蓝色长方形公示牌。上面会显示大笑、微笑、平脸三个卡通图形。如果显示大脸,即说明该店铺卫生情况良好;如果显示平脸,则代表卫生问题堪忧,有待改进;呈现何种“脸色”代表的是视频摄像头布控下的后厨卫生实时情况。

这项“利民工程”名为“明厨亮灶”,由国家食品药品监督管理局提出、推行。目的是让消费者坐在饭店大厅或包间内,就可以通过透明玻璃或大屏幕实时查看后厨的“一举一动”,增加食客对餐厅的食品安全的信任度。

据雷锋网了解,此项工程开展已久,从相关报道来看,多地海底捞门店也都安装了“明厨亮灶”设备(涉事两家海底捞店面还无从得知),但为何这样还会频频曝出食品卫生问题。

从这也可以看出,“明厨亮灶”还未能达到理想效果,在这其中存在两个疑问。

一、能否利用AI检测除了人体外的其他活体(老鼠、蟑螂)?

雷锋网了解到,目前相关方案已经深入布局,但在应用模式上还存有一定“漏洞”,它们基本只能做一些“录像”工作,大致作用可概括为三种:

  • 1、食客“实时查看”,增加食品卫生信任度;

  • 2、店主用来查看后厨情况;

  • 3、出现某种紧急情况,相关部门能够以此用来调查取证。

那么,从安防方案商的角度来说,未来可否改进这些方案来更好地解决食品卫生问题?

有人提出能否应用AI对后厨监控视频数据进行分析,自动识别老鼠、蟑螂后,把出现次数、频率等数据反馈给店家,同时把这类实时识别结果数据同步到食品卫生监管部门,以可视化的形式呈现。

通过现有的“明厨亮灶”工程要求进行自下而上(顾客)监督,利用AI进行自上而下(有关部门)的监管。

对此,海康威视楼宇事业部总经理胡明辉表示,现在最适合做的事就是进一步完善相关方案,努力将厨房各个位置的实时视频传输到各方,给总部管理人员、食药监人员、顾客来随时查看和监管。

在他看来,相关方案做移动侦测并不困难,但是由于老鼠、蟑螂个头不大,在视频中的像素点会很小,如果想要检测到它们,就必须把灵敏度提高,而这就会导致很多误报;另外老鼠和蟑螂的行动路线一般都是监控死角,非常不容易被发现。他还提到,如果使用热成像相机就可以很好解决这个问题,但是因为成本太高,目前还没有被使用

瑞为CEO詹东晖与海康威视胡明辉的观点一致。他首先肯定了“明厨亮灶”的作用。在他看来,明厨亮灶”有一定价值,它能让顾客看到厨房的实时场景,从心理层面来说,会对食品卫生有一定的安慰作用;另外,也对店家提升厨房卫生环境有一定的威慑力。

但他认为,仅靠安防方案解决食品卫生问题还存有很大难度。他解释说,对于老鼠、蟑螂,靠图像去识别还是比较困难,因为目标比较小,图像就算能实现,在可用性方面也会大打折扣;另外,他也提到热成像相机能够很好地解决这个问题,但因为成本太高,不太适合应用在消费类市场。

二、“明厨亮灶”当前存在的问题与解决方案

如果说AI在应对这件事上略显乏力,那么就工程本身来说,尚存哪些问题?未来能否做些改进来更好应对这类问题?

业内人士向雷锋网透露,为了响应相关政策的落实,目前很多餐厅的确都安装了视频监控摄像机直播后厨。但很多店家都玩了“心思”,他们将视频探头监视一些“无光痛痒”的地方,比如过道和保温箱,很多“要害”地方都监测不到;另外,有的设备选型老旧、常年失修、画质模糊不晰、效果非常不理想。

相关方案急需改善

针对此,海康威视胡明辉认为,从本次事件中也凸显出相关方案的不足,未来需要新增有效地巡查技术手段及考核机制。以海底捞为代表的各类连锁餐饮店应该每时每刻都需要洞察全国甚至全球各个餐厅的运营及管理情况,从而做出最准确的判断。

随后,他提出了更为详细的解决方案。在建设这块可以分总部端、餐厅端和公众端三大模块。

  • 总部端实现对各个餐厅后厨的远程集中监管,并可以实现大屏上墙、手机查看等应用;并统一制定巡查计划和整改计划。

  • 餐厅端监控点位的选择与布置按照后厨不同区域的环境特点进行设计;针对总部整改要求进行完善。

  • 公众端实现餐厅后厨操作过程能够向公众开放,支持向本地开放、向互联网开放。

总部端

在他看来,管理平台也应该实现视频巡查的标准化、规范化、高效化,并且责任到人。

  1. 区域督导/巡检员负责制定巡店计划、设置抓拍点位、线下巡店及上传视频及图片、对比并检查巡店图片、点评并打分巡检店面、生成巡检报告、发送整改请求给店长。

  2. 店长根据上级要求实时地对店面做出整改;

  3. 区域总监/Boss可以随机巡检店面并语音实时指导。

餐厅端

另外,胡明辉还具体谈了一下餐厅端的具体布点,他认为:

  1. 一个中型餐厅最少配置4-6个点位,后厨视频监控点位的布置需覆盖原料储存、清洗、切配、烹饪、留样、餐具洗消等环节;

  2. 系统应该实时记录仓库内食材的存放和人员进出情况;并检测温湿度数据,可实现温湿度异常报警;

  3. 通过采集的视频应该可以清晰辨认食材和操作人员,监督食材加工的全过程。

  4. 灶间、蒸煮区、面点房等存在大量油烟、蒸汽,对设备的防水等级有要求,同时需具有防油污能力;画面要求可辨认厨师着装和操作细节;

  5. 留样存储冰箱进行全天候视频采集,记录样品放入、拿出情况;

  6. 录餐具清洗、消毒的全过程;视频图像清晰度应能看清消毒设备温度显示数字。

他还从设备选型角度来分析如何更好预防此类事件发生。

在摄像机选型这块,应该选择分辨率超过200万的半球摄像机;但在有防油污需求的场景,推荐选择筒机(半球更易受油污影响);

针对仓库、留样等特殊环节,接入温湿度传感器的摄像机,当温湿度超出设置的阈值时,摄像机自动向平台发送超限报警;

针对烹饪、蒸煮区等区域存在油烟、蒸汽的环境特点,应该定制更适合厨房的防油污摄像机,在做到IP66级防水的同时,带有可拆卸面罩,便于清洗维护;同时也支持外接语音对讲设备。 

公众端

而从公众端来看,食客可以实时查看后厨视频、评论打分、分享传播。

在他看来,通过本次事件提醒直播镜头应该多角度、全方位展示餐厅后厨场景,尽量不留死角;同时,必须保证画面的清晰度,让很多细微的问题也能被看到。

小结

食品卫生问题大于天。

安防专家朱明初教授表示,“明厨亮灶”方案的确能起到监督和查证作用,但前提是一定要落实到位,安装是第一步,日后加强管理才是重中之重;另外,食品卫生不仅包括老鼠,还有蟑螂、苍蝇等等,单靠装个摄像机并不能解决现实问题,这就需要相关企业努力完善相关方案、政管部门加强日常管理监督工作、餐饮从业者对卫生制度的坚决执行,提升对除虫灭鼠等卫生工作的重视程度。唯有各方一起努力, 才能将这件事做好。

雷锋网

从零开始码一个皮卡丘检测器-CNN目标检测入门教程(上)

本文作者Zhreshold,原文载于其知乎主页,雷锋网获其授权发布。

本文先为大家介绍目前流行的目标检测算法SSD (Single-Shot MultiBox Object Detection)和实验过程中的数据集。训练、测试过程及结果参见《从零开始码一个皮卡丘检测器-CNN目标检测入门教程(下)》

目标检测通俗的来说是为了找到图像或者视频里的所有目标物体。在下面这张图中,两狗一猫的位置,包括它们所属的类(狗/猫),需要被正确的检测到。

所以和图像分类不同的地方在于,目标检测需要找到尽量多的目标物体,而且要准确的定位物体的位置,一般用矩形框来表示。

在接下来的章节里,我们先介绍一个流行的目标检测算法,SSD (Single-Shot MultiBox Object Detection).

友情提示:本章节特别长,千万不要在蹲坑的时候点开。
本文中涉及MXNet 0.11最新的发布的gluon接口,参考MXNet 0.11发布,加入动态图接口Gluon,还有两位CMU教授的亲笔教程(https://zhuanlan.zhihu.com/p/28648399)

SSD:  Single Shot MultiBox Detector

顾名思义,算法的核心是用卷积神经网络一次前向推导求出大量多尺度(几百到几千)的方框来表示目标检测的结果。网络的结构用下图表示。

跟所有的图像相关的网络一样,我们需要一个主干网络来提取特征,同时也是作为第一个预测特征层。网络在当前层产生大量的预设框,和与之对应的每个方框的分类概率(背景,猫,狗等等)以及真正的物体和预设框的偏移量。在完成当前层的预测后,我们会下采样当前特征层,作为新的预测层,重新产生新的预设框,分类概率,偏移量。这个过程往往会重复好几次,直到预测特征层到达全局尺度( 1 \times 1 )。

接下来我们用例子解释每个细节实现。

预设框 Default anchor boxes

预设框的形状和大小可以由参数控制,我们往往设置一堆预设框,以期望任意图像上的物体都能有一个预设框能大致重合,由于每个预设框需要对应的预测网络预测值,所以希望对于每个物体都有100%重合的预设框是不现实的,可能会需要几十万甚至几百万的预设框,但是采样的预设框越多,重合概率越好,用几千到上万个预设框基本能实现略大于70%的最好重合率,同时保证了检测的速度。

为了保证重合覆盖率,对于每个特征层上的像素点,我们用不同的大小和长宽比来采样预设框。 假设在某个特定的特征层( w \times h ),每个预设框的中心点就是特征像素点的中心,然后我们用如下的公式采样预设框:

  • 预设框的中心为特征像素点的中心 x = (i + 0.5) / w, y = (j + 0.5) / h, i \in [0, w), j \in [0, h)

  • 对于长宽比 r = 1 ,  尺寸s\in (0,1] , 生成的预设框大小 ws \times hs

  • 对于长宽比 r > 0 同时 r \neq 1 , 生成的预设框大小 ws[0]\sqrt{r} \times \frac{hs[0]}{\sqrt{r}} , 其中 s[0] 是第一个预设的尺寸。

这里例子里,我们用事先实现的层MultiBoxPrior产生预设框,输入 n 个预设尺寸,和 m 个预设的长宽比,输出为 n+m-1 个方框而不是 n \times m 个。 当然我们完全可以使用其他的算法产生不同的预设框,但是实践中我们发现上述的方法覆盖率和相应需要的预设框数量比较合适。

import mxnet as mx

from mxnet import nd

from mxnet.contrib.ndarray import MultiBoxPrior


n=40

#  输入形状: batch x channel x height x weight

x=nd.random_uniform(shape=(1,3,n,n))


y=MultiBoxPrior(x,sizes=[.5,.25,.1],ratios=[1,2,.5])


# 取位于 (20,20) 像素点的第一个预设框

# 格式为 (x_min, y_min, x_max, y_max)

boxes=y.reshape((n,n,-1,4))

print('The first anchor box at row 21, column 21:',boxes[20,20,0,:])

The first anchor box at row 21, column 21:
[ 0.26249999  0.26249999  0.76249999  0.76249999]
<NDArray 4 @cpu(0)>

看着数字不够直观的话,我们把框框画出来。取最中心像素的所有预设框,画在图上的话,我们看到已经可以覆盖几种尺寸和位置的物体了。把所有位置的组合起来,就是相当可观的预设框集合了。

import matplotlib.pyplot as plt

def box_to_rect(box,color,linewidth=3):

    """convert an anchor box to a matplotlib rectangle"""

    box=box.asnumpy()

    returnplt.Rectangle(

        (box[0],box[1]),(box[2]-box[0]),(box[3]-box[1]),

        fill=False,edgecolor=color,linewidth=linewidth)

colors=['blue','green','red','black','magenta']

plt.imshow(nd.ones((n,n,3)).asnumpy())

anchors=boxes[20,20,:,:]

for i in range(anchors.shape[0]):

    plt.gca().add_patch(box_to_rect(anchors[i,:]*n,colors[i]))

plt.show()

分类预测 Predict classes

这个部分的目标很简单,就是预测每个预设框对应的分类。我们用 3 \times 3 , Padding (填充)  1 \times 1 的卷积来预测分类概率,这样可以做到卷积后空间上的形状不会变化,而且由于卷积的特点,每个卷积核会扫过每个预测特征层的所有像素点,得到 c \times h \times w 个预测值, h \times w 对应了空间上所有的像素点,每个通道对应特定的预设框 c = (N_{class} + 1) \times N_{anchors} 。假设有10个正类,每个像素5个预设框,那么我们就需要 11 \times 5 = 55 个通道。 具体的来说,对于每个像素第 i 个预设框:

  • 通道 i \times (N_{class} + 1) 的值对应背景(非物体)的得分

  • 通道 i \times (N_{class} + 1) + 1 + j 对应了第 j 类的得分

from mxnet.gluon import nn

def class_predictor(num_anchors,num_classes):

    """return a layer to predict classes"""

    returnnn.Conv2D(num_anchors*(num_classes+1),3,padding=1)


cls_pred=class_predictor(5,10)

cls_pred.initialize()

x=nd.zeros((2,3,20,20))

print('Class prediction',cls_pred(x).shape)

Class prediction (2, 55, 20, 20)

预测预设框偏移 Predict anchor boxes

为了找到物体准确的位置,光靠预设框本身是不行的,我们还需要预测偏移量以便把真正的物体框出来。

假设  b  是某个预设框, Y 是目标物体的真实矩形框,我们需要预测的偏移为 \Delta(Y, b) = (t_x, t_y, t_{width}, t_{height}) ,全都是长度为4的向量, 我们求得偏移

  • t_x = (Y_x - b_x) / b_{width}

  • t_y = (Y_y - b_y) / b_{height}

  • t_{width} = (Y_{width} - b_{width}) / b_{width}

  • t_{height} = (Y_{height} - b_{height}) / b_{height}

所有的偏移量都除以预设框的长或宽是为了更好的收敛。

类似分类概率,我们同样用 3 \times 3 填充 1 \times 1 的卷积来预测偏移。这次不同的是,对于每个预设框,我们只需要 4 个通道来预测偏移量, 一共需要 N_{anchors} \times 4 个通道,第  i  个预设框对应的偏移量存在通道 i \times 4 到通道  i \times 4 + 3  之间。

def box_predictor(num_anchors):

    """return a layer to predict delta locations"""

    returnnn.Conv2D(num_anchors*4,3,padding=1)


box_pred=box_predictor(10)

box_pred.initialize()

x=nd.zeros((2,3,20,20))

print('Box prediction',box_pred(x).shape)

Box prediction (2, 40, 20, 20)

下采样特征层 Down-sample features

每次我们下采样特征层到一半的长宽,用Pooling(池化)操作就可以轻松的做到,当然也可以用stride(步长)为2的卷积直接得到。在下采样之前,我们会希望增加几层卷积层作为缓冲,防止特征值对应多尺度带来的混乱,同时又能增加网络的深度,得到更好的抽象。

def down_sample(num_filters):

    """stack two Conv-BatchNorm-Relu blocks and then a pooling layer

    to halve the feature size"""

    out=nn.HybridSequential()

    for_inrange(2):

        out.add(nn.Conv2D(num_filters,3,strides=1,padding=1))

        out.add(nn.BatchNorm(in_channels=num_filters))

        out.add(nn.Activation('relu'))

    out.add(nn.MaxPool2D(2))

    return out


blk=down_sample(10)

blk.initialize()

x=nd.zeros((2,3,20,20))

print('Before',x.shape,'after',blk(x).shape)


Before (2, 3, 20, 20) after (2, 10, 10, 10)

整合多个特征层预测值 Manage predictions from multiple layers

SSD算法的一个关键点在于它用到了多尺度的特征层来预测不同大小的物体。相对来说,浅层的特征层的空间尺度更大,越到网络的深层,空间尺度越小,最后我们往往下采样直到 1 \times 1 ,用来预测全图大小的物体。所以每个特征层产生的预设框,分类概率,框偏移量需要被整合起来统一在全图与真实的物体比较。 为了做到一一对应,我们统一把所有的预设框, 分类概率,框偏移量 平铺再连接。得到的是按顺序排列但是摊平的所有预测值和预设框。

# 随便创建一个大小为 20×20的预测层

feat1=nd.zeros((2,8,20,20))

print('Feature map 1',feat1.shape)

cls_pred1=class_predictor(5,10)

cls_pred1.initialize()

y1=cls_pred1(feat1)

print('Class prediction for feature map 1',y1.shape)

# 下采样

ds=down_sample(16)

ds.initialize()

feat2=ds(feat1)

print('Feature map 2',feat2.shape)

cls_pred2=class_predictor(3,10)

cls_pred2.initialize()

y2=cls_pred2(feat2)

print('Class prediction for feature map 2',y2.shape)

Feature map 1 (2, 8, 20, 20)
Class prediction for feature map 1 (2, 55, 20, 20)
Feature map 2 (2, 16, 10, 10)
Class prediction for feature map 2 (2, 33, 10, 10)

def flatten_prediction(pred):

    return nd.flatten(nd.transpose(pred,axes=(0,2,3,1)))


def concat_predictions(preds):

    return nd.concat(*preds,dim=1)


flat_y1=flatten_prediction(y1)

print('Flatten class prediction 1',flat_y1.shape)

flat_y2=flatten_prediction(y2)

print('Flatten class prediction 2',flat_y2.shape)

print('Concat class predictions',concat_predictions([flat_y1,flat_y2]).shape)

Flatten class prediction 1 (2, 22000)
Flatten class prediction 2 (2, 3300)
Concat class predictions (2, 25300)

我们总是确保在 dim = 1 上连接,以免打乱一一对应的关系。

主干网络 Body network

主干网络用来从原始图像输入提取特征。 一般来说我们会用预先训练好的用于分类的高性能网络(VGG, ResNet等)来提取特征。

在这里我们就简单地堆叠几层卷积和下采样层作为主干网络的演示。

from mxnet import gluon

def body():

    """return the body network"""

    out=nn.HybridSequential()

    for nfilters in [16,32,64]:

        out.add(down_sample(nfilters))

    return out


bnet=body()

bnet.initialize()

x=nd.zeros((2,3,256,256))

print('Body network',[y.shape for y in bnet(x)])

Body network [(64, 32, 32), (64, 32, 32)]

设计一个简单的SSD示意网络 Create a toy SSD model

我们这里介绍一个示意用的简单SSD网络,出于速度的考量,输入图像尺寸定为 256 \times 256

def toy_ssd_model(num_anchors,num_classes):

    """return SSD modules"""

    downsamples=nn.Sequential()

    class_preds=nn.Sequential()

    box_preds=nn.Sequential()


    downsamples.add(down_sample(128))

    downsamples.add(down_sample(128))

    downsamples.add(down_sample(128))


    for scale in range(5):

        class_preds.add(class_predictor(num_anchors,num_classes))

        box_preds.add(box_predictor(num_anchors))


    return body(),downsamples,class_preds,box_preds


print(toy_ssd_model(5,2))

(HybridSequential(
(0): HybridSequential(
(0): Conv2D(16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=16)
(2): Activation(relu)
(3): Conv2D(16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=16)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
)
(1): HybridSequential(
(0): Conv2D(32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=32)
(2): Activation(relu)
(3): Conv2D(32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=32)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
 )
(2): HybridSequential(
(0): Conv2D(64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=64)
(2): Activation(relu)
(3): Conv2D(64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=64)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
)
), Sequential(
(0): HybridSequential(
(0): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(2): Activation(relu)
(3): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
)
(1): HybridSequential(
(0): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(2): Activation(relu)
(3): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
)
(2): HybridSequential(
(0): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(2): Activation(relu)
(3): Conv2D(128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): BatchNorm(fix_gamma=False, axis=1, momentum=0.9, eps=1e-05, in_channels=128)
(5): Activation(relu)
(6): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
)
), Sequential(
(0): Conv2D(15, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): Conv2D(15, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(2): Conv2D(15, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): Conv2D(15, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): Conv2D(15, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
), Sequential(
(0): Conv2D(20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): Conv2D(20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(2): Conv2D(20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): Conv2D(20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(4): Conv2D(20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
))

网络前向推导 Forward

既然我们已经设计完网络结构了,接下来可以定义网络前向推导的步骤。

首先得到主干网络的输出,然后对于每一个特征预测层,推导当前层的预设框,分类概率和偏移量。最后我们把这些输入摊平,连接,作为网络的输出。

打包收工 Put all things together

from mxnet import gluon

class ToySSD(gluon.Block):
    def __init__(self, num_classes, **kwargs):
        super(ToySSD, self).__init__(**kwargs)
        # 5个预测层,每层负责的预设框尺寸不同,由小到大,符合网络的形状
        self.anchor_sizes = [[.2, .272], [.37, .447], [.54, .619], [.71, .79], [.88, .961]]
        # 每层的预设框都用 1,2,0.5作为长宽比候选
        self.anchor_ratios = [[1, 2, .5]] * 5
        self.num_classes = num_classes

        with self.name_scope():
            self.body, self.downsamples, self.class_preds, self.box_preds = toy_ssd_model(4, num_classes)

    def forward(self, x):
        default_anchors, predicted_classes, predicted_boxes = toy_ssd_forward(x, self.body, self.downsamples,
            self.class_preds, self.box_preds, self.anchor_sizes, self.anchor_ratios)
         # 把从每个预测层输入的结果摊平并连接,以确保一一对应
         anchors = concat_predictions(default_anchors)
         box_preds = concat_predictions(predicted_boxes)
         class_preds = concat_predictions(predicted_classes)
         # 改变下形状,为了更方便地计算softmax
         class_preds = nd.reshape(class_preds, shape=(0, -1, self.num_classes + 1))

         return anchors, class_preds, box_preds

网络输出示意 Outputs of ToySSD

# 新建一个2个正类的SSD网络

net = ToySSD(2)

net.initialize()

x = nd.zeros((1, 3, 256, 256))

default_anchors, class_predictions, box_predictions = net(x)

print('Outputs:', 'anchors', default_anchors.shape, 'class prediction', class_predictions.shape, 'box prediction', box_predictions.shape)

Outputs: anchors (1, 5444, 4) class prediction (1, 5444, 3) box prediction (1, 21776)

数据集 Dataset

聊了半天怎么构建一个虚无的网络,接下来看看真正有意思的东西。

我们用3D建模批量生成了一个皮卡丘的数据集,产生了1000张图片作为这个展示用的训练集。这个数据集里面,皮神会以各种角度,各种姿势出现在各种背景图中,就像Pokemon Go里增强现实那样炫酷。

因为是生成的数据集,我们自然可以得到每只皮神的真实坐标和大小,用来作为训练的真实标记。

下载数据集 Download dataset

下载提前准备好的数据集并验证

from mxnet.test_utils import download

import os.path as osp

def verified(file_path, sha1hash):
    import hashlib
    sha1 = hashlib.sha1()
    with open(file_path, 'rb') as f:
        while True:
            data = f.read(1048576)
            if not data:
                break
            sha1.update(data)
    matched = sha1.hexdigest() == sha1hash
    if not matched:
        print('Found hash mismatch in file {}, possibly due to incomplete download.'.format(file_path))
    return matched


url_format = 'https://apache-mxnet.s3-accelerate.amazonaws.com/gluon/datasets/pikachu/{}'

hashes = {'train.rec': 'e6bcb6ffba1ac04ff8a9b1115e650af56ee969c8',
         'train.idx': 'dcf7318b2602c06428b9988470c731621716c393',
         'val.rec': 'd6c33f799b4d058e82f2cb5bd9a976f69d72d520'}

for k, v in hashes.items():
    fname = 'pikachu_' + k
    target = osp.join('data', fname)
    url = url_format.format(k)
    if not osp.exists(target) or not verified(target, v):
        print('Downloading', target, url)
        download(url, fname=fname, dirname='data', overwrite=True)

加载数据 Load dataset

加载数据可以用mxnet.image.ImageDetIter,同时还提供了大量数据增强的选项,比如翻转,随机截取等等。

DataBatch: data shapes: [(32, 3, 256, 256)] label shapes: [(32, 1, 5)]

示意图 Illustration

加载的训练数据还可以显示出来看看到底是怎么样的。

import numpy as np


img = batch.data[0][0].asnumpy()  # 取第一批数据中的第一张,转成numpy

img = img.transpose((1, 2, 0))  # 交换下通道的顺序

img += np.array([123, 117, 104])

img = img.astype(np.uint8)  # 图片应该用0-255的范围

# 在图上画出真实标签的方框

for label in batch.label[0][0].asnumpy():
    if label[0] < 0:
        break
    print(label)
    xmin, ymin, xmax, ymax = [int(x * data_shape) for x in label[1:5]]
    rect = plt.Rectangle((xmin, ymin), xmax – xmin, ymax – ymin, fill=False, edgecolor=(1, 0, 0), linewidth=3)
    plt.gca().add_patch(rect)

plt.imshow(img)

plt.show()

[ 0. 0.75724518  0.34316057  0.93332517  0.70017999]

雷锋网

Vincross孙天齐:人机界面的突破将引发科技革命

8月23—27日,世界机器人大会在北京举办,全球各国机器人领域的优秀企业悉数亮相,五花八门的机器人及产业链上下游最新技术均能在这次盛会上找到踪迹,整个会场充满了未来感与时代发展的气息。

大会中智慧城市服务机器人技术与应用专题论坛上,智能机器人研发的科技公司Vincross的创始人、CEO孙天齐在大会上发表了名为《智能机器人与新一代人机界面》的主题演讲。

人机界面的突破将引发科技革命?

孙天齐在演讲中提出,手机与电脑长期成为人与机器发生交互载体的时代会成为过去,人类将进入机器人时代,而“机器人作为新一代的人机交互界面,它的突破将引发新一代科技革命!”

首先从新一代人机交互的目的来看,无论是工业机器、服务机器人、还是消费机器人,机器人设计的本质目的,都应该是为了解决人和物理世界的实体进行交互的问题,而电脑和手机并不能实现这个功能。

其次是人机交互的方式不同。在传统的信息交互中,人总是采用机器更加容易接受的方式进行交互,比如给机器输入信息是通过打字,通过点击来完成。但对未来的人机交互,孙天齐认为,“机器人越来越不能依赖屏幕,交互方式越来越从机器的方式走向人类的方式,应当是像人与人交流一样。”

最后,新一代人机交互界面相较于上一代,最大的革新是机器人运行程序、执行程序的方式从指令式进化到学习式。所谓学习式,也就是我们经常提起的人工智能和深度学习。

孙天齐在现场解释道:“通过提供大数据、样本的方式给机器人,机器人就能自动从中学会这件事情该怎么做。最典型的例子,就是我们知道的Google AlphaGo,通过上千万盘的围棋图谱的训练,现在它的围棋水平已经远远超过了人类的最高水平。这也是人工智能领域很让公众惊诧的一个新突破。”

最有投资价值的人工智能技术是什么?

“上述的几点不同,其实体现出的是当前在消费机器人领域中,大家最关注、资本最密集的几个技术”,孙天齐在演讲中,针对智能机器人与人机交互的未来发展机遇,提出了他所理解的最具商业投资价值的技术发展方向。

首先是针对人机交互输入方式的创新技术,孙天齐认为这块儿的技术热点体现在语音识别、自然语言处理以及计算机视觉等方面。

“机器人要通过听、看的方式获取信息,就需要语音识别,它能听得见,把听到的语言翻译成文字,并且从中理解其中表达的意思。视觉则包括人脸识别、物理识别等等,来让机器通过一张照片获得到一些信息,比如从这些像素中获得信息,是什么物体?是哪个人……”

从人机交互输出的角度上,利用语音合成、自动化等技术,则要让一个机器人通过说话的方式来输出信息,而不仅仅是通过显示,要让机器通过一些更加自然更加“傻瓜”的方式跟人进行交互。

“让一个机器变成傻瓜,实际上不是让机器真的更傻,其实是让一个机器更智能。当它是一个更加智能的机器,才会让用它的人觉得它更傻瓜。”孙天齐说。

最后一个技术热点则体现在学习式执行程序,也就是我们广义上俗称的人工智能。在近两三年的工业产业应用情况来看,现在的机器学习,大都基于大数据统计、深度学习,将传统机器学习和神经网络的技术结合。孙天齐认为这是目前人工智能领域绝对的热点,同时也将是最先能应用、产生商业价值的研究方向。

机器人产业发展的未来向何处去?

“未来,机器人的发展必将会成为类似电脑、手机的庞大产业,但是目前机器人产业还缺乏一个基本的横向分工。”孙天齐在演讲中分享了他对机器人产业未来发展的看法。

他认为,目前机器人领域垂直分工的情况很严重,每个公司都在独立发展,要生产一款新品,就得从最基础的开始,从配件到本体、从系统服务到软件,都要独立设计,“这导致机器人产业发展非常缓慢。就像智能手机之所以发展快,是因为大家只需要在一个现成的手机上编程即可,我不需要关心基站、信号的原理是怎么回事。”

机器人产业想要快速发展,也是同样的道理:需要让开发者拥有进入机器人领域的途径,进而让机器人领域实现规模化创新。

就在大会举办前不久,Vincross公司在全球著名的众筹平台Kickstarer众筹成功,其推出的可编程六足全地形机器人HEXA仅用3天就完成了10万美金的预期目标,这款机器人从硬件、操作系统、开发平台到网络服务均为自主研发,曾获CES Aisa创新奖、iF设计奖等多个国内外奖项。

可编程六足全地形机器人HEXA并非一个具体应用的机器人,而是一个机器人开发平台。六足的结构使它可以灵活适应各种地形,同时它搭载了多种传感器和接口,还提供了丰富的编程和开发工具。

“我们希望给想进入机器人领域的人,提供一个了解和研究机器人的机会,他们不需要关心艰难复杂的硬件问题,就可以在这个平台上,做一些开发机器人应用的尝试,这同时也是我们对机器人产业未来发展方向的一种探索和努力。”

孙天齐认为,目前中国在人工智能这一轮科技革命的浪潮中已经走得非常靠前了,这轮浪潮,对每个雄心勃勃的创新技术公司来说,都将是非常好的发展机遇。

雷锋网

苏宁也做无人商店了 技术与运营是他的壁垒

以传统零售基因为荣的苏宁,踩上无人店风口时,会比其他参与者具备哪些优势与不足?

8月28日,苏宁全国首家无人店——苏宁体育Biu——在南京徐庄苏宁生活广场开业。之所以起这个名字,该店负责人张力对雷锋网表示,Biu 主要用来形容速度快,代表着“年轻、快速、活力”。

首家苏宁无人店商品主要为体育用品,包括运动服、运动背包等品类,并不涉及生鲜等其他品类。之后,苏宁所有的无人店都会将拟声词“Biu”用作统一店名。

张力同时对雷锋网表示,该苏宁体育Biu店筹备于三四月份,目前也正在北京、成都等地选址,近期将新开5-10家新店。北京目标地锁定在联想桥与八里庄位置。

具体体验流程上,首次进店的用户需要先进行下载苏宁金融APP进行“绑脸”、绑定银行卡等操作,完善身份认证。张力称,目前苏宁无人店暂时仅支持绑定银行卡支付方式,微信与支付宝暂未开通。

所谓的“绑脸”操作,首先会有摄像头对用户进行人脸识别,再采用智能技术,识别所购商品,之后完成支付,款项则直接从所绑定的苏宁金融账户中扣除。

例如当你挑好东西之后,需站在支付闸门前,面对上方摄像头,经其识别,屏幕上会显示你的名字和价格,被扣钱之后打开APP可以看到支付详情。如果你没有买任何东西,可以走无购物通道。但雷锋网观察到,流程中有一个问题是,在付款时,消费者需要站在一个不算大的固定区域内,不能偏移,否则会影响支付结果。

苏宁云商IT总部执行副总裁向江旭对雷锋网表示,苏宁的识别闸门也可以做高,像阿里的淘咖啡那样将人关在里面识别,但他认为那样体验不够好,且闸门的设计还需要跟现场的整个装潢和调性配合。另外,即便是有人店,一样可以会有商品损耗与偷窃行为。

在具体支持技术上,向江旭对雷锋网表示,苏宁无人店的根本目的不是为了智能而智能,核心还是用智能技术来支持购物体验。

目前苏宁无人店核心技术仍是以RFID为主,此方案由来已久,技术上较为成熟,但成本较高。此外RFID芯片也存在雷雨天气和液体箱内感应困难等致命缺陷。在遇到液体、金属等材质时,会发生衰减屏蔽等情况。也正因此,目前RFID技术主要用于服装行业,或当做储存、物流的统计功能。此前,无人零售商深兰科技创始人陈海波曾吐槽称,“用RFID技术做无人零售太扯了”。

但未来,向江旭向雷锋网表示,会逐步加大图像识别与视频跟踪等技术的应用。

除了线上,在苏宁的线下门店,诸如苏宁无人店,大数据也被应用得淋漓尽致。据雷锋网了解,苏宁门店采用客流分析系统这样一个大数据应用工具,可以应用在各种门店业态,建立人和门店的关系,计算每天进出门店的客流人数,最终产生了多少销售,并且快速计算出销售转化率;可以精确到消费者的整个活动轨迹,用户在哪个柜台逗留的时间最长,哪些商品被拿起的次数最多,并可依此绘制出专柜/区域的热力图、用户店内活动热力图,甚至是到店新老会员占比都可以了如指掌。

对于苏宁无人店相较于其他同类竞品的壁垒,向江旭对雷锋网表示,主要在于技术与运营两点。技术自不必说,无论是目前的RFID,还是之后将加大推广运用的图像、视频、蓝牙等,都还有漫长的攻坚道路要走。

其次,向江旭强调,无人便利店,归根到底是落地在店面,技术是为经营起辅助作用。而苏宁做无人店主要是希望将门店智能化,通过“无人店”解决方案,提高支付效率,减少消费者排队时间,减少未来收银员的数量。他认为:“无人店追求的目标并不是无人,而是更好的客户体验。”

同时,向江旭对雷锋网称,过去他们在调研市面上存在的几家无人店时,惊讶于对方的“水”——很不正规、很不专业。商品的类别、货架的顺序、展台的摆放等,杂乱无章,还无技巧。也正因此,向江旭认为,到目前无人店面临最大的阻力,仍旧是技术与运营的不成熟。

雷锋网

京东推出教育+战略,打造一站式教育服务平台

8月30日雷锋网消息,昨日,京东推出教育独立品牌“京东教育+”,构建一站式教育服务平台。

据雷锋网了解,“京东教育+”主要依靠四个概念做支撑,即通过聚焦安全、健康、快乐和学习四个板块,使厂商、名师、教服及行业形成合力,为家长提供聚焦、高效的教育产品服务,为厂商降低营销成本,帮助获取更多用户。

具体来说,京东教育+将整合硬件厂商、教育机构产品及服务,利用京东数据云平台推送至潜在用户,线上线下整合联动,降低各自的营销成本;在内容方面,京东则引入新东方、环球雅思、vipabc线上课程,与厂商合作,制作教育相关内容等。

如此看来,京东教育+就本质而言,即通过电商平台优势,更高效、精准地连接消费者与数码厂商。

京东3C事业部市场营销部总经理汪延领表示,2017年是京东从单一的硬件售卖平台走向一站式教育服务提供平台的元年。京东布局教育产业,不是要取代产业链上的哪一环,而是要通过12年积累的技术和经验,通过平台的力量,让家长更容易选择适合自己孩子的产品及教育服务,推动共享优质教育资源,让厂商更有效触达有需求的家长,也为行业提供了一个统一而高质的认证标准。

现场,京东针对性地发布多款教育新品,如可实现双向智能通话的小天才电话手表Y02定制款新品,可控制上网时间的华硕(ASUS)RT-AC1200与实现急速上网的华硕(ASUS)RP-AC51双频无线扩展器,步步高(BBK)H9S家教机与分音塔科技发布的准儿(Alcorrect)翻译机,以及小鱼在家发布的分身鱼视频通话智能机器人等。

雷锋网

贾跃亭姐弟掏空乐视:钱全抽走了;今日头条给知乎挖墙角,双方回应;三星在李在镕一审判决后首发声 | 雷锋早报

  • 贾跃亭姐弟俩掏空乐视:钱全抽走了!

8月28日,乐视网发布了2017年上半年报,净亏损达6.36亿元,而去年同期还是盈利2.84亿元。同时财报还披露,贾跃亭及其姐姐贾跃芳分别从乐视网抽走了260万元、4.337亿元对乐视网的借款。这样一来,贾跃亭、贾跃芳已经将套现时承诺借给乐视网的无息借款,全部都拿走了。

  • 今日头条挖走300+知乎大V,双方回应


昨日知乎大V“恶魔奶爸”的朋友圈截图引发热议,截图中恶魔奶爸称:“今日头条今年一口气签了300多个知乎大V,刚把我也签了,而且是给钱的,年收入比普通白领高。签完以后所有内容不可以再发知乎。优质的内容创作者被抢完了,所以知乎的质量每况愈下。

对此知乎官方回应称:“有价值的知识分享,是无法简单粗暴地用批量生产的方式实现的,也无法批量计价。”

今日头条悟空问答也给出回应:“签约答主不止300人,但从未禁止任何人在其他平台发布内容。”

  • 三星在李在镕一审判决后首发声 敦促员工努力工作

据媒体报道,在李在镕一审判决后,三星电子首席执行官权五铉在公司内网的公告上发布讯息,敦促员工继续努力工作,不要分心,并强调业务将一如既往。权五铉在备忘录中将李在镕被监禁描述为前所未有的挑战,并鼓励员工在等待真相水落石出之际继续努力工作。

国内新闻

  • 580万人参与“一元画”捐款,款项用于特殊人群帮扶

昨日早间,微信朋友圈被一幅幅充满生命力、感染力的"小朋友"画作刷屏,刷屏的背后是由腾讯公益平台发起,由患有自闭症、智力障碍、脑瘫等病症的特殊人群创作,微信用户可以以一元钱的价格购买画作,帮助这类特殊人群。

截止到昨日晚间,此次捐款人数超过580万人次。腾讯公益表示,善款将直接存入接受善款的公募机构账户,用于帮助精智障碍的特殊人群融入社会。

  • 微信支付接入苹果App Store

雷锋网消息,昨日,微信支付正式支持用户在中国大陆的App Store进行选购或订阅Apple Music。用户可在App Store或Apple Music相关账户设置页面中选择绑定和使用微信支付,并开通免密支付,也可以通过Mac或PC在iTunes中进行设置。

  • iPhone在北京能刷公交卡了,但不是NFC

尽管此前有消息称苹果会在未来开通iPhone的公交卡功能,但到目前为止,苹果官方还没有在公开场合透露过这一消息。

但日前,北京市政交通一卡通公司旗下北京一卡通App悄然上线“电子卡扫码乘车功能”,苹果用户可绑定公交卡,通过二维码的形式刷卡上车(并非NFC),但需要注意的是,该功能仅限部分公交车使用,地铁暂不支持。

  • 顺丰:将会认真研究并积极参与中国铁路总公司改革

随着中国联通混改方案落地,央企混改再度成为市场热点。在8月28日下午举行的业绩说明会上,顺丰控股表示,将会认真研究并积极参与中国铁路总公司(简称“中铁总”)的改革。

  • 青岛将人脸识别应用于啤酒节安保,抓获逃犯25名

雷锋网消息,在第27届青岛国际啤酒节期间,青岛开发区警方首次将“人脸识别系统”应用于大型安保活动实战当中,利用高清摄像头捕捉采集人脸图像,0.8秒内就能锁定可疑人员,完美再现了电影中的这一场景。

  • 共享豪车现身杭州:49.9元开劳斯莱斯

继沈阳出现1500辆共享宝马之后,杭州又出现了共享“豪车”,只要50元就能开劳斯莱斯。据悉,这家名为“至尊宝”的豪车共享平台位于杭州嘉里中心,共有十几辆豪车,总价约3亿元。

目前推广期,19.9元可以开GTR,49.9元可开劳斯莱斯。正式上线后价格会在300到600元每小时,2000万的迈凯伦P1,开一个小时为15000元。

  • 百度Apollo计划结出第一批果,2019年与江淮汽车下线首批自动驾驶量产车

8月29日,百度·江淮汽车高精地图采集车交车仪式在百度上海研发中心举行,江淮汽车向百度交付了32辆瑞风S3汽车,助力百度高精地图采集。

对于双方的合作规划,百度也给出了回答:2019年推出自动驾驶量产车型,这也成为百度发布Apollo开放平台以来,其自动驾驶解决方案首批量产落地的里程碑式事件。

国际新闻

  • 苹果要卖4K电影每部仅20美元 但好莱坞不同意

北京时间8月29日晚间消息,《华尔街日报》今日援引知情人士的消息称,为了配合即将发布的4K Apple TV机顶盒,苹果公司(以下简称“苹果”)正与好莱坞工作室谈判,希望通过iTunes销售4K电影。

知情人士称,双方目前尚未达成一致,主要在价格方面还存在分歧。苹果计划以每部20美元的价格出售4K电影,该售价与当前许多新上映的高清(HD)电影售价一致。与1080P高清电影相比,4K电影的分辨率理论上要高出三倍,因此清晰度更高。但好莱坞工作室认为该售价较低,合理价格应该在25美元至30美元。

因此,到目前为止一些好莱坞工作室尚未与苹果达成协议,也不清楚苹果能否在短期内与这些工作室达成一致。

  • 谷歌在最后期限内向欧盟提交整改方案 免受巨额罚款

谷歌周二宣布,今日将向欧盟委员会提交关于调整Google Shopping服务的计划,以满足欧盟的反垄断法。

今年6月27日,欧盟针对Google Shopping反垄断作出了裁决,称由于谷歌在搜索结果中偏袒自家服务Google Shopping,已决定对谷歌处以24.2亿欧元(约合27亿美元)的罚款。

欧盟当时还要求谷歌在8月29日之前提交整改方案,并在9月28日前停止反垄断行为,否则将追加巨额罚款。

  • 谷歌再次下架App:疑似应用遭挟持并会发动DDoS攻击

如果您最近下载的某个存储管理器或视频播放器已经从您的Android手机中消失,那不必担心。Google已经从Play商店中移除了300个应用程序,这些应用程序显然只是为了伪装成合法App,实际上他们在您打开手机时将会进行分布式拒绝服务(DDoS)攻击。

据了解,这次添加的300款涉嫌发动DDoS攻击的应用程序,令全球约7万台安卓设备受到攻击,波及上百个国家的用户。

这已经不是谷歌Play Store第一次发现恶意攻击APP。本月早些时候,谷歌就已经下架过一些隐藏监控软件的APP。就在上周,研究人员还在Play Store发现一款提供银行业务的恶意软件。

  • 送披萨也要自动驾驶:福特将与达美乐合作测试自动驾驶外卖业务

今日,福特汽车和披萨品牌Domino’s宣布,将于9月在美国的密歇根州安娜堡测试自动驾驶汽车外卖服务。

此次采用的是装载有自动驾驶技术的福特混合动力车。消费者可以通过GPS追踪运送轨迹,并在车辆达到目的地后收到提货短信。消费者只需要在车辆后部的平板电脑上输入提货码,就能打开最多可容纳4个披萨和5份小食的加热隔间。

不过这次的服务并不是真的采用自动驾驶技术,每辆车仍将由福特的工程师驾驶。福特方面表示,由于自动驾驶汽车还无法在一些公共道路上行驶,所以目前只是模拟汽车处在自动驾驶模式下运行。

雷锋网

连卖汉堡的都开始玩区块链——汉堡王在俄罗斯发布“皇堡币”

区块链和数字货币究竟有多火?

答案来了:连汉堡王都打算用它来代替会员积分制。

雷锋网消息,汉堡王在俄罗斯发布了它的虚拟数字货币——“Whoppercoin”,即“皇堡币”。用自家的明星产品 “Whopper 皇堡”来命名。

Whopper,皇堡

这个币能干什么?

——当然是攒币换皇堡啦。

俄罗斯的消费者每在汉堡王消费一卢布,将获得一个“皇堡币”。每 1700 “皇堡币”将可换一个皇堡。汉堡王和 Waves 目前已发行了十亿“皇堡币”。两家公司表示将来会发行更多, 该项目的 Android 和 iOS APP 即将推出。

不过,数字货币的部分功能,它也有,比如自由兑换和交易。

汉堡王和区块链初创公司 Waves 合作,在后者平台上发行和交易“皇堡币”,用户能在该平台上对“皇堡币” 进行 P2P 的交易。

汉堡王俄罗斯的外部沟通负责人 Ivan Shestov 表示,该项目会把“皇堡变成一个投资渠道”。

这话绝对不是我们编出来的。

剑桥大学非主流金融研究中心的研究员 Garrick Hileman 表示:

“传统的会员积分项目,比如航空公司的里程,交易选项要么没有,要么会受到极大限制。但有独立品牌的加密货币,能与其它国家货币自由兑换,甚至能换取其它资产,将会让它比其它会员积分制更有吸引力。”

目前,该项目仅限俄罗斯。

雷锋网

自动驾驶公司Torc Robotics与达成NXP合作,布局雷达等系统感知技术研发

雷锋网·新智驾消息,日前,一家名为Torc Robotics的自动驾驶技术研发公司宣布与车机芯片领域巨头NXP达成合作,共同进行自动驾驶系统的技术研发。具体而言,Torc将使用NXP专为雷达设计的芯片技术,加速自动驾驶车辆360视觉感知,以及其他自动驾驶系统的周边环境感知技术研发。

在如雨后春笋般的自动驾驶研发初创中,Torc Robotics算是一个生面孔,但事实上,这家公司的历史却能追溯到2005年。据雷锋网·新智驾了解,Torc Robotics脱胎于美国弗吉尼亚理工学院一个学生研发团队,并先后参加了AUVSI(国际无人车系统协会)智能车挑战赛以及DAPRA挑战赛,并获得优秀名次。随后,这个团队将研发成果转化成这家叫作Torc Robotics的公司,起初公司面向商业车做自动驾驶研发,今年上半年,公司已经发布了面向乘用车市场的一些成果。

如今,伴随着与车机领域响亮的名号NXP的合作,Torc Robotics被进一步放大在公众的视野中。

据外媒透露,与NXP的合作,将助力Torc将Level 4(SAE)以及Level 5(SAE)级别自动驾驶更快得推向乘用车市场。同时,合作也将不止局限在零部件供应的模式,据悉,双方将共同进行自动驾驶系统中的新型雷达技术的测试、研发等工作,布局更高性能的车辆环境感知技术等。

虽然如Torc官方介绍所言,团队从2005年起就开始了自动驾驶汽车技术的研发先行,但其实真正的商业化动作是近几年开始,分别在商用车、工业和军事等市场做了布局。今年6月,随着Torc全新乘用车自动驾驶平台计划的发布,Torc正式进入乘用车自动驾驶市场,目前有两辆雷克萨斯RX SUV测试车用于真实道路测试。

据雷锋网了解,Torc的最终目标是,基于自身在自动驾驶和软硬件平台上的经验,为汽车主机厂以及顶尖零部件供应商们,提供自动驾驶未来下新的产品图景和技术支持,以填补车厂与新兴技术间的鸿沟。

雷锋网

Google正面迎战苹果,用ARCore阻击ARKit

雷锋网消息,美国时间29日,Google正式推出了ARCore预览版。顾名思义,ARCore是Android平台的ARKit,一个为开发者准备的增强现实AR平台。

ARCore功能较简单,目的是想让更多人使用AR。它目前支持Google Pixel手机和Galaxy S8,系统要升级到Android 7.0 Nougat或最新的Android 8.0 Oreo。ARCore会在今年冬季正式推出,Google估计到时会支持1亿台现有手机和即将推出的手机。

根据Google的描述,ARCore有三个基本组件。

第一是运动跟踪,它基于内部传感器和视频素材来估算手机的相对位置,因此使用时可以将虚拟对象固定在一个位置,并围绕它移动。


第二是环境理解,也就是使用相机检测到平坦的表面。


第三是光线预测,这能让虚拟物品或角色投射产生阴影,适应周围的环境。

通过上面这些组成部分,会产生一些有趣的互动。比如,可以在桌面上摆放一群小小的Android吉祥物,当相机手对准它们的脸部时,它们会朝你挥手;又或者,如果你突然把灯熄灭,虚拟角色会做出害怕的动作。

ARCore支持使用Java/OpenGL、Unity和Unreal开发虚拟角色,还支持从Tilt Brush VR绘画应用或Google上个月推出的VR建模工具Blocks,直接导出ARCore对象。

Google还发布了两个实验性的,以AR为重点的Chromium浏览器版本:一个是基于Android,可使用ARCore的浏览器;一个是基于iOS可使用ARKit的浏览器。这样,使用浏览器也能用上AR功能,比如在购物网站预览家具,不用在手机上下载应用。

苹果的压力

ARCore能实现的,与苹果的ARKit大同小异,将两家的平台做严格的比较似乎也没多大必要。但毫无疑问,两者都是想在普通的手机上实现最佳的AR体验。

根据外媒的测评,ARCore现在在检测平面上表现很好,在人体或面部特征检测上则不是它的重点。Google表示,对于基本的AR跟踪,它优化了ARCore的性能,这是外部开发者很难做到的。能做到的质量水平、能力和可以完成的任务,无疑会比普通的解决方案高出不少。

Google内部已经开发出了一些有趣的AR应用,他们发现,当能把不存在的物体放在现实世界中时,人们的创造力大增。有人甚至为Google办公室的咖啡机开发了一个应用,通过手机看它时,会看到一些操作指示。

Google还在探索增强现实与视觉搜索的结合。将ARCore与Google  Lens(拍一张照片,即可识别出是什么物体、文字等)这样的视觉搜索工具结合,比如可以通过搜索来识别物体,而增强现实可以提供动态的操作指示,而不是像以前一样链接到YouTube视频或操作手册。

Google表示,正在与华为,华硕,LG等手机厂商合作,希望在今年冬季达到1亿台设备支持ARCore的目标。

毫无疑问,Google面临来自苹果的压力。

雷锋网曾报道,苹果在今年6月的WWDC上推出ARkit开发者版后,掀起了一股AR的热潮。现在基本确定,9月12日苹果会召开新品发布会,新iPhone与新的iOS 11正式推出时,ARKit也会随之而来。按照苹果系统的升级率和手机换新率,几周内就能将AR带入数亿台移动设备。

这对Google来说是一个问题,而就在约苹果发布会的前两周推出ARCore,看来是要搞事情。

Tango去哪了

提起Google的AR,外界最开始想到的或许是Tango。现在,Google要将Tango的关键同部分分离出来,让它适用于普通手机。

在过去三年中,Tango虽然一直受到公众的关注,但Google也仅将它带到了两款手机上:联想Phab 2 Pro,和华硕的Zenfone AR,后者本月初才发布。这两款设备都支持Tango,而且是其最大卖点,但没有在市场上掀起波澜。

Tango整个系统还有专用的红外深度感应摄像头,可以创建丰富的3D纹理。ARCore的环境理解,可以简单理解为检测平坦的表面,然后在上面放置虚拟物体,它并不是了解到了周围完整的3D结构,能做的是根据像机反馈进行估计。但Tango是直接测量距离,这让它能实现更逼真的虚拟效果。ARCore本质上就是简化版的Tango。

但然并卵,Tango的硬件要求让一般的智能手机承受不起。Google也高估了OEM厂商将昂贵的新相机集成到手机上的意愿,毕竟还没有谁开发出特别成功的,如当年愤怒的小鸟一样的现象级应用。

雷锋网曾报道,去年6月,Tango项目在公司内部终于不再是Beta版,但却也没有超出实验阶段。

缺乏设备的支持也阻碍了平台的发展。根据Google Play的指标,只有数得清的Tango的应用下载量突破了1000次。亚马逊这样的大IP也开发了一个名叫Product Preview的Tango应用,可以直接看想买的电器(比如TV)是否适合自己家的环境,但下载量只有1000多次。

根据外媒报道,Google已确认,具备Tango那样深度传感能力的手机将为定义为ARCore兼容设备。看来,Tango品牌的设备(比如才刚推出的华硕ZenFone AR)似乎没必要存在了。技术上,Tango没有消失,Google应该会继续推出基于Tango技术的新型摄像头。但这些也将作为ARCore的一个元素添加到手机中,不再是一个独立的功能。

最终,Google起了大早却赶了晚集,枉当了智能手机AR热潮的排头兵。到底是苹果抢占了手机AR的先机,还是Google太偏执于完美的技术呢?

当然,在Google的说法中,ARCore被描述为源于Tango的长期有意形成的产物,后者虽然正退居幕后,便仍扮演了技术使能者的角色。现在,它认为ARCore已经可以推向更广泛的市场了。

增强现实是一种全新的观察世界的方式,这或许是Google现在想做的。

雷锋网

英特尔发布 18 核 Xeon W,这大概就是 iMac Pro 里的那颗芯片

IFA 2017 尚未正式开幕,各家厂商就纷纷提前放出了新产品。昨日,微软公开了 Windows MR 平台。今天,雷锋网得到消息,英特尔发布了 Xeon W 系列处理器。

Xeon W 是为单 CPU 插槽主流工作站而推出的处理器,“W” 即 “Workstation ”,直接取代的是以往的 Xeon E5-1600 系列。如下图所示,在英特尔修改了 Xeon 系列的命名规则后,Xeon E3 仍是入门工作站级别,Xeon W 定位中端;7月发布的 Xeon Salable Platform(Purley)处理器,面向的则是是双 CPU 插槽的高端工作站,继承的是 E5-2600 系列。

本次 Xeon W 系列共发布八款 SKU,规格最高的一款 Xeon W-2195 有 18 核 36 线程,基础频率 2.3 GHz,可加速到 4.3 GHz,将于今年年底出货。苹果将于 12 月发布的史上最强 iMac 图形工作站——iMac Pro,高配型号就将搭载 18 核  Xeon CPU。

雷锋网获知,有非常大的可能,Xeon W-2195 就是高配 iMac Pro 里的那颗芯片。

规格

Xeon W 面向的是传统工作站场景,比如金融交易、CAD 制图、图像渲染以及 3D 高清内容制作。英特尔还特别提到,人工智能大数据分析与 VR 3D 内容制作也是 Xeon W 系列芯片的服务重心。

全系 Xeon W 处理器均基于 14nm+ 制程、支持全部 48 条 PCI-E 3.0 通道,最高支持 512GB 的 ECC RDIMM/LRDIMM 四通道内存(DDR4-2666),以及双 512-bit FMA。另外, Xeon W 配备的是英特尔第二代睿频加速技术,而不是最新的第三代。虽然和 Skylake-X (Core i9) 共享 LGA 2066 插槽,但 Xeon W 需要一个全新的芯片组  C422,新的主板是跑不了的。

基本上,大家可以把  Xeon W 看作是专业版本的 Skylake-X:增加了内存扩展支持、AMT、vPro、以及专业领域必备的 Reliability、Serviceability 和 Availability (RAS) 属性。

雷锋网获知:英特尔宣称,相比上代 Xeon E5-1600,Xeon W 有 38% 的性能提升。

八款 SKU 的规格如下图:

可以看出,Xeon W 并没有与 Skylake-X 产品线 12 核与 16 核产品相对应的 SKU。英特尔也没有提到未来 Xeon W 家族是否会增加新成员。

雷锋网