about 2 months ago

无人驾驶主要分为三个大系统:算法端、用户端、云端

一、算法端:感知、决策、控制,无人驾驶的灵魂

1.感知

通过各种传感器得到的信息解析周围的环境,如障碍物的位置、距离和速度,道路的宽度和曲率等

0)首先作为背景知识介绍一下各种传感器

(1)GPS/IMU:帮助无人车完成自我定位

GPS是全球卫星定位系统(Global Positioning System)的简称
在空旷的场地定位精度较高,在复杂的城市道路由于信号受到诸多高楼建筑的反射与折射(多路径问题),定位精度会受到影响
定位频率为10HZ,即每秒产生10次定位信息,无法满足无人驾驶的定位需求(想象一下,一辆以120km/h高速行驶的汽车,在0.1s内已经向前行驶了3.3米的距离,这就是说在3.3米的长度范围内,整个车辆的位置处于未知状态,这一点是另人无法接受的)

IMU是惯性测量单元(Inertial measurement unit)是测量物体三轴姿态 角(或角速率)以及加速度的装置,属于惯性导航
导航精度很差,很容易收到外界干扰,唯一的好处就是导航频率很高,可达到1000HZ

结合以上优缺点,GPS通常和IMU联合使用:IMU以200HZ的频率进行工作,在此期间产生的误差由10HZ工作的GPS进行修正,从而满足定位信息的实时性(比如刚刚的3.3米一下子就变成0.16米啦)

(2)Lindar:激光雷达,可用来绘制地图、定位和避障

采用激光雷达获取周围环境的实时信息,准确率极高,在10cm精度内达到实时定位的效果,因此作为无人驾驶中的主传感器使用
以Velodyne 64束激光雷达为例,它可以完成10Hz旋转并且每秒可达到130万次读数
即使申昊科技使用的PRLindar低成本2d激光雷达,也可以完成10Hz旋转并且每秒可达到1.6万次读数

(3)摄像头:广泛用于物体识别与追踪,如车道信息、交通标示、车辆、行人等

采用摄像头直接获取周围环境的图像信息
使用单目摄像头缺乏物体的深度(即长度,或者是距离)信息,通常使用双目摄像头
为了加强安全性,一台车至少使用8个摄像头(4对双目摄像头),分别布置在车辆的前后左右四个方向
这些摄像头通常以60HZ的频率进行工作,当它们同时工作时,每秒产生1.8G大小的巨额数据量

(4)雷达和声纳

雷达和声纳产生的数据通常用来表示在车的行进方向距离最近的障碍物,是车辆安全的最后一道防线
1.超声波雷达:由于反应速度和分辨率的特性主要用于倒车雷达
2.毫米波雷达,配合激光雷达主要承担中长距测距和环境感知(车辆与其他物体之间的相对距离、相对速度、角度、运动方向等)的功能
相对于激光雷达的易受空气中悬浮物的干扰,毫米波雷达抗悬浮物干扰性强,能适应较恶劣的天气,但是需要防止其他通信设备和雷达之间的电磁干扰。
相比激光雷达,毫米波雷达精度低、可视范围的角度偏小,一般需要多个雷达组合使用
其中24GHz 雷达系统主要实现近距离探测(SRR),而77GHz 系统主要实现远距离的探测(LRR)

1)定位

使用GPS和IMU结合,但不能把这个定位作为唯一的定位方案,原因有三:
(1)定位精度不高:即使这样定位精度也只能达到一米
(2)GPS天然的多路径传播容易引入信号干扰
(3)GPS只能在非封闭环境下运行,在隧道、电梯,甚至电磁干扰的变电站就无法有效工作

所以还需要借助摄像头定位,简单来说,由三个基本步骤构成:
(1)通过对立体图像(双目摄像头获取的图像进行处理后得到)的三角剖分,获得视图差用于计算每个点的深度信息
(2)通过匹配连续立体图像帧与帧之间的显著特征,建立两帧之间的相关性,由此估算出两帧之间的运动情况
(3)通过捕捉到的图像中的显著特征和地图上的点进行匹配,从而计算车辆的当前位置
摄像头对于照明条件非常敏感,因此其使用具有局限性
比如著名的tesla致死苹果工程师案,就是因为逆光导致摄像头无法正确识别其他车辆,从而发生车毁人亡的惨剧

激光雷达Lidar的准确率很高----10cm精度内达到实时定位的效果----因而作为车辆定位识别的主传感器
(1)由激光雷达产生的点云(激光雷达每旋转一周,收集到的所有反射点坐标的集合)对周围环境产生“形状式描述”(当然这里的点云只能用于描述形状,不足以区分各自不同的点)
(2)根据识别出的形状跟已知地图进行匹配,以减少位置的不准确性
它的精度主要容易受到空气中悬浮颗粒的影响,比如雨雪、灰尘等(会影响激光的直线传播)

由于每种传感器都有各自的缺点,所以无人驾驶领域不会单独使用某种单一传感器,而是综合多种传感器信息进行定位

2)物体识别与追踪

对于车道信息、交通标识、其他车辆和行人的识别和追踪,主要使用CNN网络中的各种目标检测方法:RCNN系列、Yolo、SSD

2.决策

根据感知模块解析出的环境信息,如何控制汽车的行为达到驾驶的目标,如输出汽车的加减速、转向、换道、超车等信号
常规使用基于规则的决策系统,难以应对所有的突发情况,于是引入增加学习方法

1)行为预测

车辆驾驶中主要考验的是司机如何应对其他行驶车辆的可能行为
为了预测其他车辆的行驶行为,无人驾驶系统的决策模块可以根据周围车辆的行驶状况,使用随机模型产生这些车辆的可达位置集合,并采用概率分布的方法预测每一个可达位置集的相关概率

2)路径规划

不仅仅指导航,当然这里的导航依赖的是专为无人驾驶绘制的高精度地图,和传统导航有本质区别
还包括在道路上正常跟车,遇到交通灯和行人时的等候避让,以及在路口和其他车辆的交互通过
动态环境中的路径规划比较复杂,尤其是车辆在全速行驶的状态下
1.常规使用完全确定模型:搜索所有可能的路径,并利用代价函数确定最佳路径
完全确定模型对计算性能要求极高,很难达到实时性效果
2.为了避免计算复杂性并提供实时的路径规划,使用概率性模型成为主要的优化方向

3)避障

至少采用两个层级避障机制保证车辆不会在行驶过程中产生碰撞
1.根据交通情况预测的前瞻层级
根据现有的交通状况比如拥堵、车速,估计出碰撞发生时间与最短预测距离等参数,执行本地路径的重新规划
2.如果前瞻层级预测失效,则第二级实时反应层将使用雷达数据再次进行本地路径重规划
一旦雷达侦测到路径前方出现障碍物,则立即执行避障操作

3.控制:油门、刹车、方向盘转角等

当我们有了一个目标,例如右转30度,如何挑战汽车的机械参数达到这个目标
目前已经有相对成熟的算法能够解决,不在本文讨论范围内

二、用户端:即移动端,指安装在车辆上的操作系统及其硬件

用户端系统整合上述路径规划、避障等算法,以满足可靠性及实时性等要求
需要克服三个方面的问题:
1.系统需要保证采集到的大量数据得到快速及时处理
2.如果系统某部分失效,则系统需要足够的健壮性迅速恢复
3.系统必须在有限的资源限定下,有效地完成所有的计算操作(貌似跟第一条很像)

1.软件:机器人操作系统ROS

ROS是现今广泛使用的、专为机器人应用裁剪的、强大的分布式计算框架,非常适用于无人驾驶场景
目前依然有一些问题需要解决

1)可靠性

ROS使用单主节点结构,没有监控机制以恢复失效的节点
当主节点失效时,整个系统就崩溃了,这对于行驶中的汽车是致命的
因此作者的团队增加了备用主节点,执行功能和任务同主节点一模一样。当主节点失效时,能无缝切换至备用主节点
可以看到百度的Apollo采用了另外一种完全不同的方案:去中心化

2)性能

ROS节点之间的通信非常频繁,因此设计高效的通信机制对保证ROS的性能势在必行

(1)节点间通信:这里的节点间指的是同一个操作系统不同的功能模块之间,比如导航模块和算法模块

原本节点间通信使用TCP/IP全协议栈,这讲导致每次通信都会产生高达20微秒的延迟
为了消除本地通信代价,作者团队使用共享内存的方法完成节点通信

(2)当ROS节点广播通信消息时,消息经过多次复制和传输,消耗了大量当系统带宽

如果改成目的地更加明确的多路径传输机制,则将极大地改善系统的带宽和吞吐量

3)安全

目前的ROS没有加密机制,黑客很容易在节点之间窃听消息并完成系统入侵
作者团队从两个方面进行完善:
1.对通信进行加密,防止黑客窃听
2.使用Linux containers(LXC)的方法限制每一个节点可供使用的资源数,并采用沙盒的方式确保节点独立运行
这样防止当ROS被劫持后,不停进行内存分配,整个系统因为内存耗尽而导致的系统奔溃

2.硬件平台:无人驾驶的肉体

1)之前提到各种车载传感器,另加V2X通信传感

2)计算平台

书中介绍了一个L4级别的无人驾驶产品的计算平台构成(具体哪个平台没有指出)
该平台由两个计算盒组成,每个装备有INTEL Xeon E5处理器及4到8个Nvidia Tesla K80 GPU加速器
两个计算盒执行完全一样的工作,第二个作为备份,在第一个计算盒发生故障的情况下,无缝接受所有的计算工作

每个计算盒高达2万到3万美金,同时功耗惊人:两个计算盒峰值运行功率高达5000W,需要解决散热问题
现有无人驾驶方案存在的功耗问题、散热问题以及造价问题,大大增加了无人驾驶的普及程度

现有计算解决方案:GPU(适合训练)、DSP、FPGA、ASIC、TPU(适合训练后的分析决策)、概率芯片

3)控制平台

(1)电子控制单元ECU:车载电脑、汽车专业微机控制器、汽车专业单片机

宝马、奔驰、奥迪的告诫车款已包含超过一百个ECU,分别控制汽车的防抱死制动系统、四轮驱动系统、电控自动变速器、主动悬架系统、安全气囊系统、多向可调电控座椅等
这数百个ECU,在汽车内部组成一个局域网,这就需要采用一种称为多路复用的网络通信协议进行信息传递,控制器局域网(CAN,Controllers Area Network)总线是其中之一

(2)通信总线

1.A类总线:面向传感器或执行器管理的低俗网络,传输速率通常小于20kb/s
以LIN(Local Interconnect Network,本地互联网)规范为代表,有摩托罗拉与奥迪等企业联手推出的一种新型低成本的开放式串形通信协议
主要用于车内分布式电控系统,尤其是面对智能传感器或执行器的数字化通信场合
2.B类总线:面向独立控制模块间信息共享的中速网络,位速一般在10-125kb/s
以CAN(Controller Area Network,控制器居于网络)为代表,Bosch公司开发
3.C类总线:面向闭环实时控制的多路传输高速网络,位速多在125kb/s-1Mb/s
汽车厂商大多使用“高速CAN”作为C类总线
主要用于车上动力系统中对通信的实时性要求比较高的场合,主要服务于动力传递系统
4.D类总线:面向多媒体设备、高速数据流传输的高性能网络,位速率一般在2Mb/s以上

三、云平台:也叫远程端,或者服务器端

无人车是移动系统,因此需要云平台的支持:云平台提供分布式计算和分布式存储两方面的支持。
无人驾驶系统的很多应用,保证验证新算法的仿真应用、高精度地图的产生以及深度学习模型的训练都需要云平台的支持
作者团队使用Spark构建分布式计算平台,使用OpenCL构建异构计算平台,使用Alluxio作为内存存储平台,从而为无人驾驶提供高可靠、低延迟及高吞吐的云端支持。

1、仿真计算

当研究人员为无人驾驶开发出新算法时,需要先通过仿真对该算法进行全面测试,测试通过后才用于真车测试
真车测试成本高昂且迭代周期异常漫长,因此仿真测试的全面性和正确性对降低生产成本和生产周期尤为重要

在仿真测试环节,通过ROS节点回放真实采集的道路交通情况,模拟真实驾驶环境,完成对算法的测试
如果没有云平台,单机系统耗费数小时才能完成一个场景的模拟测试,即耗时测试覆盖面又有限
而在云平台中,Spark管理着多个分布式节点,在每个计算节点中,都可以部署一个场景下的ROS回放模拟,大大节约测试时间

2.高精度地图生成

高精度地图的产生过程非常复杂,涉及原始数据处理、点云生成、点云对齐、2D反射地图生成、高精地图标注、地图生成等
使用Spark可以将所有这些阶段整合到一个作业中。
由于Spark天然的内存计算特性:作业运行过程中产生的中间数据都存储在内存中
当整个地图生产作业提交之后,不同阶段之间产生的大量数据不需要使用磁盘存储,数据访问速度加快,从而大大提高了高精度地图的生成效率

参考资料:
百度百科:GPS
百度百科:IMU惯性测量单元
互动百科:电磁波
刘少山:《第一本无人驾驶技术书》
究竟什么是高精度地图(一)
汽车ADAS系统和无人驾驶技术的重要传感器,77GHz毫米波雷达正在替代24GHz成为主流

 
about 2 months ago

在改革开放前,经过多年运动的碾压,中国社会形成了工人阶级、农民阶级和知识分子阶层组成的“两阶级,一阶层”的格局
对此梁晓声曾经这样比喻:生产力就像一把梳子,在落后的时代,梳齿稀少,只能将人群划分成几个有限的群体。

但扁平只是表面现象,底下早已暗流涌动。
1978年前的平均主义和群众运动,碾碎的只是家庭积累的经济资本,而阶层跃迁的另外两个重要的资本——政治资本和知识资本——正在悄无声的沉淀和聚集。这两种压抑多年的力量,将在日后成为撬动阶层分化的重要元素。

1978年之后,中国的经济进入腾飞的四十年,而中国的阶层也以前所未有的速度重塑。
革命导师说过:历史是由人民群众创造的。人民群众在铸造伟大时代的同时,他们自己本身也有7次较大的改变阶层的机遇
应该说中国几千年以来,这样高密度的跃迁时机屈指可数。

穿越阶层的秘密和方法,是治愈固化焦虑的良药,看得清昨日是如何发生,才能辨得明未来该怎样前行。

第一次:高考归来 ---- 被文革耽误青春的知识青年改变命运,1977-1979

通过考试改变命运,在中国历史悠久,这是朝堂和民间之间长达千年的默契。

1977年恢复高考,由于时间紧急,卷子是抽调《毛泽东选集》第五卷的纸张印的,这种寓意极强的动作令人感慨万千

77年~79年上大学的这批人,作为知青上山下乡,在农村都有过摸爬滚打的经历,身上都有一股韧劲儿----求知若渴

十年动乱,毁掉了多少人的大好青春。时代亏欠这代人的东西,会用另一种方式进行补偿。
他们不知道的是,这种补偿会是无比的丰厚。1977年到79年,三年高考录取人数大约有100万,被称为“百万雄师”,绝大多数人的命运都得到了彻底的改变。

在整个80年代甚至90年代的大部分时间里,大学生仍然是稀缺资源,是社会公认的“天之骄子”,考上大学依然是贫寒子弟阶层跃迁的最简捷的方式。
当然,1999年大学扩招之后,普通高校已经很难承担阶层跃迁的职能,需要211、985甚至更高的学校,才能有机会改变命运。

这正如韩寒所总结的:成熟的向上流动通道,寒门子弟应高度重视和充分利用,学别人那样潇洒地弃如敝屣,最终倒霉的都是自己。

第二次:乡镇企业 ---- 胆大的农民阶层由农入商,1984-1988,1992-1995

我们完全没有预料到的最大的收获,就是乡镇企业发展起来了。
——邓小平,1987年
农民,几千年来都处于中国社会的最底层,是食物链的最末端,改变阶层的机会少之又少。

1955年,旨在消灭农民私有制的“合作化”运动兴起,农民加入合作社后集体劳动,吃大锅饭,而后全国兴起了“割资本主义尾巴”风潮,禁止农民自养牲畜、发展家庭副业。
这股风潮一致持续到改革开放。生产资料被没收,中国农民传统靠劳动发家致富的可能性,也几乎被消灭殆尽。

1978年,安徽凤阳小岗村8位不堪忍受穷困生活的村民,用生死状撕开了中国农村经济改革的一道口子,农村生产力得到释放。
家庭联产承包责任制让农民获得了温饱,但仍然无法改变农民的身份和阶层
此时,一批脑子活的农民开始寻求新的出路,在70年代末80年代中,乡镇企业借势崛起。

1984年,中央下发了4号文件,第一次明确了乡镇企业的含义和地位。
文件中,将农名户办、联户办的企业与原有社队集体企业统称为乡镇企业。
并且提出鼓励三者共同发展,要求各级政府对乡镇企业与国营企业同等对待,一视同仁,给予必要的扶持。

在整个乡镇企业历史上,有两次大的飞跃期:第一次是1984~88年,第二次是1992~95年。
到1995年时,乡镇企业创造的工业附加值已经占到全国工业附加值的的1/3左右
不仅如此,乡镇企业的崛起还解决了大量的农民就业问题,“到88年前后差不多能达到1700万到1800万”。

这是中国历史上,农民群体唯一的一次大规模“由农入商”,有相当一部分人摆脱了土地的束缚,完成了阶层跃迁。
而随着城镇化接近尾声,这种机遇恐怕也将成为绝响。

第三次:双轨生意 ---- 政治资本的套利,1984-1989

80年代,政治资本迎来了第一次大规模兑现高潮:价格双轨制套利。

价格双轨制是80年代的一种特殊经济制度。
79年后,国家对原材料实行价格管制,同时又允许企业生产自销产品,这就形成了“计划”和“市场”的两个价格。
从1984年提出到1989年十五届三中全会“双规变单轨”,价格双轨制只存在了短短数年时间,却催生了一个一夜暴富的阶层:倒爷。

倒爷们利用关系,拿到计划经济下商品供应的批条儿,用计划内的低价买来,再用计划外的市场价卖出,赚取官方价格和市场价格价差利润,“空手套白狼”。这对于有政治资本积累的部分中国人来说,无疑给了他们一种合法的套现通道,他们疯狂地复制这种倒卖,赚取暴利。

倒爷阶层赚取的暴利,归根结底还是来自于国家和老百姓。
曾经有学者做出估计:因为价格双轨制而流出的财富高达几百亿。
这是一笔惊人的财富转移,让一整批人完成了原始积累和阶层跃迁。
但这场财富狂欢,是80年代社会不公的主要表现,产生了极大的副作用,最终成为诸多事件的导火索。

利用制度的缺陷和窗口进行套利,在90年代还会发生很多次,甚至直到现在,我们都能看到它们的影子。

第四次:九二下海 ---- 官员和知识分子的由农入商,1992

春江水暖鸭先知,看清方向的人已经开始蠢蠢欲动。
1992年南巡讲话结束后,两个里程碑式的文件《有限责任公司规范意见》和《股份有限公司规范意见》出台,使得1992年成为中国公司的元年。到了10月份,中共十四大召开,“市场经济”被写进党章,直接引爆了下海经商的热潮。

资源丰富、嗅觉灵敏的官员们,成为下海的主力,长长的名单包括:泰康人寿创始人陈东升、华泰保险创始人王梓木、中诚信创始人毛振华、爱国者集团总裁冯军、汇源果汁创始人朱新礼、巨人集团创始人史玉柱、中国国际期货公司董事长田源、北京中坤集团董事长黄怒波……

这批人在下海前,大都在体制内拥有体面的待遇:华泰的王梓木是国家经贸委综合司副司长,汇源的朱新礼是副县长的热门人选、中诚信的毛振华在国务院政策研究室担任处长,中坤的黄怒波在中国市长协会担任副秘书长,建业的胡葆森已经是河南外贸部门的正处级干部……

放弃体制内的舒适待遇,显然是看到了更丰饶的蜜糖之地。
比如,92派下海多从事房地产、金融等“政策密集型”的管制行业,巧妙地避免了在纯市场化的行业里厮杀。
陈东升后来总结道:“用计划经济的余威,抢占市场经济的滩头。”这句话里,“余威”是关键词。

当然,下海潮并非只属于体制内的官员,也属于普通的知识分子。
在1992年前后,复旦大学青年老师郭广昌辞职,成立广信科技咨询公司;北京大学青年老师俞敏洪辞职,成立了北京新东方学校;而34岁的河南舞阳钢铁厂车间主任许家印,也在1992年辞职南下,投入到商海大潮中。

清华大学李强教授将建国后中产阶级的形成渠道分成三类[5]:教育渠道、专业技术渠道和市场渠道。
这三条路径翻译成白话就是:考大学、学技术、做生意。
其中“做生意”是最直接的途径,无论是面朝黄土的农民,还是满腹经纶的书生,只要有能力,都可以在市场经济中赚取改变阶层的财富。

而“两阶级一阶层”中剩下的工人阶级,需要经历1998年国企阵痛和2001年世贸开门,才会成规模地向私营领域转移。
在工商鼎盛的年代,其实每个人都有机会。

第五次:资源巨潮 ---- 中国第一个工业十年造就的大宗商品上涨

2001年,加入WTO、城镇化提速、制造业崛起等一系列因素,推动中国进入前所未有的重化工业进程,中国对以大宗商品为代表的原材料需求以惊人的速度增加。到了2009年,中国的钢消费已经占据世界的50%、铜消费占36%,铝占41%,锌占40%,铅占41%,大豆占24%。

货币对资源价格的上涨,也起了推波助澜的作用。加入WTO后,国家外汇储备从2000亿突破3万亿美金。
以外汇为锚的货币发行机制,导致国内出现货币供给宽松的局面,加速了资产水平价格的上涨。
而作为一个典型的周期性和资源型行业,煤炭价格完美的享受到了这一波超级红利。

行业黄金十年的起点是2002年。
在这一年,国家发文取消电煤指导价,煤价开始蹭蹭上涨,从2000年的每吨129元,涨到了2007年的330元,并在2011年突破了800元。煤炭行业收入占GDP的比重,也从2000年的不足2%,一直攀升至2011年的6.5%。这是一场史无前例的资产价格飙涨。

煤炭,成了山西大地上新的造富图腾,暴富神话就像失控的火山口,挖煤、洗煤、贩煤、设备、运输甚至路边的饭店,也都跟着腾飞起来。伴随着煤价的疯涨,曾经落后贫困的山西突然迎来了煤炭行业高歌猛进的十年,而这背后,正是2000年后中国第一个工业化黄金期。

黑金狂潮下,内蒙古鄂尔多斯、陕西榆林等城市强势进入大众视野,并贡献了无数关于权谋、香艳、暴力和挥霍的故事。

煤老板的财富故事,曲终人散于2008年。这一年,山西襄汾发生尾矿库溃坝事故,277人在灾难中死亡,这场事故是压倒骆驼的最后一根稻草。随后,山西用强力的行政手段进行煤炭整合,大量煤老板的矿被国进民退,整个山西的办矿主体从2200多家减少到130家,血煤逐渐退出历史舞台。

历史的讽刺还在于:煤老板被国营煤矿整合时,通常都拿到了丰厚的补偿款或者转让款,多数人转手就去买了大量北京上海的房子,避开了2012年之后煤价的暴跌。而当年背景够硬可以不被整合那些煤老板,反倒是在煤价暴跌中负债累累,甚至没能熬到供给侧改革的那一天。

如果把视野放到全球,这波大宗商品超级牛市里的煤老板以及同样逻辑的钢老板、铜老板、铝老板等,是每一个超级经济体崛起必然会出现的一个群体,可以与之类比的是美国19世纪诞生的石油富豪阶层。但由于中国的制度因素,他们的财富额、影响力和活跃度远低于西方国家的可类比群体。

所以,随着中国基建周期的临近尾声,以及资源领域持续的“大鱼吃小鱼”,矿产老板们的野蛮故事,未来已经没有重现的可能。

第六次:楼市疯狂 ---- 全民炒房,1998-2018

我不认为在我的有生之年,能看到房价大幅下降的情况。
——任志强,2016年10月

2001年,《温州晚报》选了8月18号这个吉利的日子,组织了150多个温州人,挤满三节火车车厢来到上海,花了时间三天狂扫100多套房子,豪掷5000万元。

消息像野火一样在温州这个三线城市的小圈子里传播着,一批又一批的温州人踏上北上的火车,6800万、8000万、1.2亿,不断刷新的金额终于引爆了大众舆论,“温州炒房团”正式登上历史舞台。在第二年,单是《温州晚报》一家组织的购房团,就买掉了上海价值2.5亿元的几百套房子。

现在回过头来看,专业炒房团是市场嗅觉最灵敏的食利者,他们的线索通常来自新闻联播和权威报纸,政策的变化,往往就隐藏在那些公文格式的句子里。

政策的松动始于1998年。当年为了抵御亚洲金融风暴的影响,国务院决定将房地产作为经济发展的支柱产业,以“取消福利分房,实现居民住宅货币化、私有化”来推动房产改革。这开启了中国的商品房时代,伴随着中国城镇化的狂飙猛进,房地产开启了“黄金十年”。

中国历史上最大的单一品类资产价格牛市到来了,无数人被疯涨的房价而改变了财富地位,也同样有无数人被疯涨的房价抛落了时代火车。

根据天风证券的统计[13],“黄金十年”的数据惊人:从1998-2007年,房地产投资平均增速24%,拿地面积平均增速21.1%,新开工面积平均增速17%,商品房销售面积平均增速20%,而同期中国经济增速只有12%。在这期间,无论是豪掷千金的专业炒房团,还是多供一套的老百姓,都获利丰厚。

2008年金融危机之后,房地产突飞猛进的十年告一段落,一二线城市积累了大量难以消化的库存,但随后而来的“四万亿”和央行货币政策的松绑,拯救了岌岌可危的房地产市场,2009-2010年之间房价再次全面上涨,直到中央连续出台严厉的调控政策,才将疯狂之势摁了下去。

从2004年到2014年,中国GDP从16万亿增长到64万亿,涨幅4倍,但大部分一二线城市的房价涨幅都远超这个水平。当然,房地产的最后疯狂还没有到来。

2014年下半年,央行再次降息,南方的深圳楼市率先开涨,并逐步蔓延到京沪。2015年9月30号,央行降低首套房首付比例,4个月后更是降低到20%,去库存的号角吹响,楼市烈火烹油。到了2017年,一二线溢出的资金与棚改货币化一道,疯狂地涌入二三四线城市,全国呈现燎原之势。

如果说之前的房价是从1涨到了5,那么这次就是从5涨到了10,涨幅虽然没有之前可观,但付出的代价却更大:居民部门的住房贷款按揭余额在2014年突破10万亿,2015年达到14万亿,16年更是直接达到了19万亿。这些增加的负债,将在很长一段时间内压缩居民的消费空间。

应该说,无论是不是炒房,凡是在1998-2014年这期间购买了多套房的人,都获得了可观的财富,这些财富足以改变很多人的阶层。

东亚经济圈对房子的热爱有目共睹,日本、韩国、台湾、香港都经历过房价疯涨、泡沫、破灭的周期轮回,大陆的群众也未能免俗,并且将房子与择偶等个人生活深度捆绑。电影《甲方乙方》里刘蓓说:“没有爱情的婚姻是不幸福的。”葛优回答:“没有房子的婚姻才是不幸福的。”

在各种因素的环绕下,楼市具备了门槛低(大部分普通人都能参与),时间长(上涨时间长达二十年),涨幅大(多数城市房价涨幅超过10倍),带杠杆(可以方便的按揭)等众多特点。这是既是一次史无前例的价格牛市,也是一场全民都能参与的资产游戏,前无古人,后无来者。

当然,房价的上涨让所有的参与者都获得了财富增值,但要到改变阶层的程度,条件还需要进一步压缩:一二线城市+3套以上住房+无负债或者少量负债 ≈ 从小康跨入了富裕。尽管条件严苛,但在北上广深人口接近1亿的背景下,中国达到这个标准的家庭至少是百万的量级。

如果按照代际的观点看,出生在1970-1985年之前的人充分享受了房地产大牛市的红利。对于85后和90后来说,属于他们的同级别机会,可能还要等很多很多年。

第七次:网络红利

改革开放后中国有四波创业浪潮:84派、92派、99派和11派。以BATJ为代表的99派和以TMD为代表的11派是典型的“互联网创业家”,这两波创业者都是依托经济发展史上的第五次经济周期——信息技术革命的红利发展而来。这波技术创新肇始于上世纪90年的美国,千年后逐步转移到中国。

信息技术革命带来社会阶层的明显变化,就是IT精英的崛起。例如美团上市,近五万员工中,造就了4614名百万富翁。小米上市,据说工号1000以内的都能一把付得起北京的首付了,其中一位没有上海户口的老码农松了口气:2000万的财富,小孩上学毫无问题,国际学校一年也就才多交30万。

早在2005年,在纳斯达克上市的百度一夜之间造就240多个百万富翁,那时候百度只有750人。2014年阿里巴巴上市是当时全球第一大IPO,号称史上最大规模的互联网上市造富运动,不仅让马云成为荣登首富宝座,还创造了上万名的百万富翁,直接大幅拉升了杭州的房价,直逼缺乏互联网公司的上海。

2015年后,赴美赴港上市的互联网公司更是如过江之鲫,众安保险、爱奇艺、B站、映客·、搜狗、阅文、拼多多·····还有排上日程的头条、滴滴、蚂蚁金服……

中国第一波互联网创业者多为60后和70后:马云(64年)、李彦宏(68年)、丁磊(71年)。第二波互联网创业者则多以80后居多:王兴(79年)、程维(83年)、张一鸣(83年)。第一波创业者抓住了互联网普及的红利,而第二波创业者则抓住了移动互联网兴起的红利,

受益的不仅仅是创业者。1999年,高校开始扩招,计算机专门作为热门专业,吸纳了大量储备人才。高歌猛进的人才培养和互联网公司的腾飞在这20年形成了一个漂亮的双曲线。大量的资本涌入,IT产业化应用的黄金时代,这些都是推升程序员走上社会高收入人群的推手。

任职互联网公司的码农,则成了房产中介最爱的人选。一个拿着热包子,喝着豆浆,穿着冲锋衣或者格子衫,背着双肩包在西二旗挤地铁的码农,很有可能月薪五万+,手里握着价值几百万元甚至更多的股权,秒杀90%以上的北漂。

中国很多行业都享受过过所谓的“风口”,如钢铁、煤炭、地产、金融、电子等领域。但跟这些领域出现的“老板吃肉,高管喝汤,员工苦逼”不同的是,互联网在风口释放的红利更加普惠,主要原因在于互联网是人才密集型行业,商业模式杠杆高,单位密度产出高,激励制度更加合理。

尽管距离中国人合法拥有财富只有短短四十年,但企业家群体已经有了old money和new money之分。应该说,崛起过程原罪较少(但不是没有)、创始人履历透明阳光、基础员工收入高企、企业社会形象健康(当然也有很烂的)的互联网行业,就是中国new money的代表。

站在当前时间点上,移动互联网的红利期接近结束,估值泡沫尚待消化,但互联网行业的新模式、新技术、新生态仍然层出不穷。因此,只要中国工程师红利没到殆尽的那一天,通过这个行业实现阶层逆袭的大门,就仍然没有关上。

对历史的总结

改革开放四十年的七次的阶层跃迁的机遇,到今天仍然具有指导意义。我们把这其中的方法论总结为:合法通道、制度套利、行业风口和资产红利。

合法通道:目前在中国,通过读书和考试改变命运,仍然是可以走通的模式,高考、考研和考公务员都是成熟的向上通道。这些通道尽管有种种问题,但还是比较依赖个人的智力和勤奋,而且受制于社会舆论,它们的大门会变窄,但很难被完全关闭。

对于毫无背景的年轻人来说,合法通道是他们改变阶层的第一次机遇,应该坚决地抓住。但可惜的是,大部分学生都没有这样的觉悟,很多人在参加工作后才追悔莫及。

制度红利:过去四十年是一部经济发展史,也是一部制度改革史。这意味着在改革的进程中,总会有短暂的制度红利释放出来。双轨套利是利用了定价机制的漏洞,而乡镇企业和九二下海则是抓住了计划经济向市场经济过渡期间的空白期,实现了企业和个人的原始积累。

中国的制度改革还有相当长的路要走,因此制度红利的机会还会不断出现,如农村土地流转、国企改革、垄断行业准入等,当然,它们给普通人参与的机会也越来越少。

行业风口:无论是财大气粗的煤老板,还是待遇优厚的程序员,都受益于自身行业的快速发展。俗话说“男怕入错行,女怕嫁错郎”,选择比努力更重要。对于两个同样能力的年轻人,新兴行业和传统行业赋予的职业回报往往相差十倍。

对于普通人来说,想要依靠行业红利来穿越阶层,主动寻找一个有前途的行业,跟在一个衰落的行业里摸索折腾,前者的难度会更小,成功率也更高。

资产红利:周金涛说过:十年前你在中信建投找了一份工作不重要,十年前在朝阳门的中信建投证券旁边买了一套房子真的很重要。资产红利是人们在勤奋劳动之外的一条极为重要的阶级跃迁通道,至少在过去十几年里,如果不去主动参与,不但无法完成阶层跃迁,甚至还有跌落阶层的风险。

在地产牛市已经临近尾声的时点,普通中国人希望通过资产红利来翻身和跃迁,可能只能寄希望于证券市场的长牛和长红,而像匹凸匹和比特币这种“机会”,普通人还是不要参与的好。

综合来说,在不同阶段,各个要素对人发财致富的作用不同。计划经济时代,收入平均化,考大学填补干部空缺,办乡镇企业填补市场空缺,均能获取最大回报;市场经济全面启动后,下海经商成为阶层跃迁的重要途径;而到了新世纪,选择开始大于努力,资产升值和行业风口变得比个人勤奋重要。

这些改变命运的机遇,大约5~7年会出现一次,绝大多数中国家庭都离其中的2~3次非常之近。如果一次都没能抓住,大概率四十年原地踏步甚至倒退;抓住一次就不会被这个时代所抛下;抓住两次,便能大幅提升家庭在社会上的阶层;抓住三次或三次以上的,基本上就是国民级的励志故事了。

以许家印为例:1978年以周口市第三的成绩考入武汉钢铁学院(抓住第1次机遇),毕业后被分配到河南舞阳钢铁公司工作。1992年辞去国企工作来到深圳下海(抓住第4次机遇),1996年创办恒大专注于房地产行业(抓住第6次机遇)。连续三次踏准节奏,让许家印成为中国首富。

不过在品读励志故事的同时,我们需要清楚地认识到:尽管过去四十年中国人的生活得到了翻天覆地的变化,但大多数人在社会中的相对位置其实并没有改变。

从种地的贫寒农民,到富士康的流水劳工,这并没有改变阶层;从陋巷的拮据市民,到艰难经营的街边店主,这并没有改变阶层;从车间的蓝领工人,到写字楼里的廉价白领,同样也没有改变阶层。普通人改善生活际遇不难,但要改变在社会里的相对位置,几千年来都是一项艰巨的修行。
趟过阶层的河流,需要善于向时代借力的智慧,需要勇于做关键选择的睿智,也需要敢于告别舒适的魄力,作为普通人的我们来说,永远都不该有放弃努力的那一刻。

对未来的展望

目前来看,房地产红利已经接近尾声,码农工程师红利依然存在
未来人工智能是在的趋势,现在选择人工智能就像1999年选择当码农是一样的
而且从世界范围来看:人工智能领域美国和加拿大占据技术优势,中国占领市场优势
双方并驾齐驱,在新时代中国有望在人工智能领域屹立于世界名族之林
在人工智能领域,如果想积累技术,那就去无人驾驶领域;如果想赚钱,那就去金融领域
同时不能忽视人工智能在垂直领域的发展,比如医疗行业
我的打算是在目前的电力巡检机器人公司呆上一到两年,然后转到无人驾驶领域,更快的积累技术
原以为这个公司技术很强,有浙大博士带队
后来发现技术实力一般般,浙大博士和主导产品的都是机械出身,而且博士偏管理路线
所以时刻准备好,一年后准备跳槽

参考资料:
大江大河40年:改变命运的七次机遇
为什么BAT干不掉海康威视?——关于人工智能的思考

 
2 months ago

1.产品初见面


公司变电站智能巡检机器人通过在自主移动平台上搭载可见光摄像机、红外热像仪和声音采集器等检测模块组成
整个智能巡检系统包括:机器人车载子系统,本地监控后台,远程集控后台
以此来代替人工完成对变电站内的各类电力设备进行外观检测、仪表读数、指示灯状态识别、开关刀闸分合状态、红外测温、位置识别以及噪声诊断、感知周围环境自建地图等工作。
适用于全天候(无光/逆光/强光,雨/雪/雾/霾)的环境,电力、石化、核应急与核退役、军警、市政、家庭等多个场景

红外热成像仪客队巡检设备进行热成像视频采集
可见光摄像机客队变电站内设备巡视,读取各种仪表数据、断路器和隔离开关的分合状态
补光灯可对按环境下可见光摄像机进行补光
拾音器可检测变电站内噪音
激光传感器建立变电站地图,确定机器人所在精确位置,识别道路区域和障碍物区域
超声波长安起协助激光传感器实现机器人避障

2.行业竞争对手




3.工艺流程

4.核心技术

1.移动机器人四轮驱动、四轮转向运动控制技术

通过建立包括运动学、动力学和电机模型在内的完整的机器人数学模型,实现基于 Backstepping 方法的鲁棒轨迹跟踪控制方法
四轮驱动,四轮转向:这里有四个步进电机,分别负责四个轮子的转向,另外有四个直流电机,负责轮子的直线行驶


专利一种带有独立转向系统的巡检机器人(申请号:201720989376.9)对这一驱动系统进行了详细描述

配电房机器人两个小前轮负责转向,两个大后轮负责驱动(总重35kg)

还有一个机器人,在配电房机器人的基础上增加了一个局放检测,重量(75kg)和体积增加了一倍
采用四轮驱动,利用差速器实现原地转向,实现原理比较简单:转弯的时候,内侧两轮和外侧两轮 线速度不同
左转弯:左侧两轮不动,右侧两轮向前行驶
加速左转弯:左侧两轮向后行驶,右侧两轮向前行驶
右转弯是同样的原理,不再赘述
这样的转弯实现方式,轮胎的方向改变充斥整个过程,在室内运行时摩擦声尖锐且持续时间长,难免让人怀疑轮胎的寿命

2.自主充电技术

通过开发自主充电装置机构设计技术、防拉弧保护技术和机器人充电定位技术实现机器人的全自主充电

3.机器人定位与导航技术

采用激光雷达与里程信息相融合的方法实现机器人的自主定位与导航

4.基于视觉的云台纠偏技术

通过采用模式识别与图像匹配算法对云台在拍摄图片过程中出现的转动偏差进行智能化纠正

5.红外图像小目标精确匹配技术

采用一种基于绝对误差总和与分支定界法的具有仿射变换不变性的红外图像匹配算法
可有效解决红外图像特征模糊及强风引起的测区域发生形变导致匹配率低的问题

6.基于深度学习的图像识别技术

将深度学习与支持向量机相结合,将多个限制性玻尔兹曼机与 SVM 连接构建多层分类模型,用深度学习的方法提取样本特征,然后用 SVM 方法进行分类,并将其应用到图像识别任务中

7.室内巡检机器人导轨设计技术

采用包括导轨截面设计技术、弯道稳定技术和轻量化结构设计技术等实现室内巡检机器人的吊装导轨设计

8.室内巡检机器人弯道运行控制技术

采用角度传感器反馈控制室内巡检机器人在导轨弯道处的运动控制

5.产品创新点

(1)基于自适应蒙特卡洛定位算法(AMCL:Adaptive Monte Carlo Localization)与零点位置移累积方法融合的激光雷达定位算法,实现全局位置与相对位置的双重定位,解决变电站非固定环境的干扰,可实现环境变化条件下的精准定位。
公司申请了专利一种适用于变电站环境下的巡检机器人定位方法 申请号:201710239729.8来介绍这种算法
(2)基于集成学习的指针型彼表图像识别算法,解决多类型仪表识别定位以及样本数据不平衡问题,解决了指针型仪表识别率问题。
公司申请了专利基于自主巡检机器人的变电站仪表设备图像识别方法 申请号:201610324868.6介绍和保护这种算法
(3)基于视觉显著性区域的油位识别算法,可快速定位油位窗区域并进行识别。
(4)基于绝对误差总和一分支定界法的具有防射变换不变性的红外图像匹配算法,解决红外图像特征模糊及强风引起的待测区域发生形变导致识别低的问题。

6.一代机所用驱动电机:moons AM24HS2402-08N

供应商产品手册


7.一代机所用激光雷达:sick LMS511-20100

属于固态激光雷达,它通过光学相控阵列(OpticalPhasedArray)、光子集成电路(PhotonicIC)以及远场辐射方向图(FarFieldRadiationPattern)等电子部件代替机械旋转部件实现发射激光角度的调整。

固态激光雷达优势:响应速度快,控制电压低,扫描角度大,价格低。

固态激光雷达尺寸较小、性价比较高、测量精度相对低一些,但可隐藏于汽车车体内,不会破坏外形美观。
产品详细说明书

8.三代机所用激光雷达:slamtec公司的RPLIDAR

这家公司产品有A1,A2,A3三代产品,均属于二维激光测距雷达
公司主流使用A2,采样频率8k/s
A3是2019.2.1才发布,采样频率16k/s,已经看到一个样品在机器上测试了
优点就是轻灵小巧,A3产品总高度只有41mm,秒杀申昊一代机的sick激光雷达
机械激光雷达带有控制激光发射角度的旋转部件,由光电二极管、MEMS反射镜、激光发射接受装置等组成,其中机械旋转部件是指可360°控制激光发射角度的MEMS发射镜。
机械激光雷达体积较大、价格昂贵、测量精度相对较高,一般置于汽车外部。但是现在用的这个激光雷达真的很小巧

9.Velodyne激光雷达

无意中看到有辆车上装了Velodyne激光雷达,这可是百度和谷歌等无人驾驶车辆采用的品牌硬件
具体型号和技术参数不详,这辆车貌似处于研发测试阶段
今天(20190411)听销售人员,有辆车采用16线固态激光雷达,最近每天下午围着厂房测试

10.一代机云台

山东飞越SP0505

11.产品参数

视频分辨率:1080P 1920x1080
红外热像仪分辨率:320x240

参考资料:
杭州申昊公司开发研制的“SHIR-3000X变电站智能巡检机器人”项目通过产品鉴定
申昊科技:招股说明书
朗驰欣创 竞品质
电力巡检机器人市场调研报告2017
红外热像仪和普通摄像机的区别
RPLIDAR A3产品说明书
刘少云《第一本无人驾驶技术书》
国内团队RoboPeak推出激光雷达RPLidar,成本仅为工业级产品的十分之一
激光雷达类型分类,知名激光雷达公司介绍,三角测距激光雷达与TOF激光雷达原理
激光雷达深度剖析
实锤RPLIDAR A3性能测评

 
2 months ago

一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点:
1、不开源,价格贵
2、软件容量大。一般3G以上,高版本甚至达5G以上。
3、只能做研究,不易转化成软件。
因此,我们这里使用python这个脚本语言来进行数字图像处理。

一、opencv实际上是一个c++库,只是提供了python接口,更新速度非常慢

OpenCV的全称是:Open Source Computer Vision Library,是一个基于(开源)发行的跨平台计算机视觉库
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。

import cv2 
img = cv2.imread('image.jpg')
if img == None: #判断图像是否存在
    print ('This file may not be available') 
cv2.imshow('the window name',img)
cv2.waitKey() #在imshow之后如果没有waitKey语句则不会正常显示图像。
cv2.imwrite('new_image.jpg',img)

此时获取的img直接就是numpy数组矩阵
注意: cv2读取的图片通道使按B、G、R排列的,而非RGB顺序。
因此工程中opencv库与其他库混用时要注意,可以用img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)转化为RGB通道。

二、PIL只提供最基础的数字图像处理,功能有限

PIL(Python Imaging Library),即Pillow,相比opencv更为轻巧。

1.图像的读取与存储

from PIL import Image
import numpy as np
#读取图像
img = Image.open('image.jpg') #可以读取tif格式图片
img.show()              #显示图像
img_arr = np.array(img) #3维矩阵
#存储图像
new_img = Image.fromarray(img_arr)
new_img.save('newimage.jpg') #如果不转矩阵可直接用'.save'保存

PIL读取图片获得的不是矩阵,而是Image格式,可以利用numpy进行转化。
注意: img.size返回的是图像的宽高(w,h),不包含通道;而opencv与matplotlib中返回的是图像的像素总数。

2.图像增强

PIL的ImageEnhance类专门用于图像增强处理,可以增强(减弱)图像的亮度、对比度、色度、以及锐度。

from PIL import Image
from PIL import ImageEnhance

#原始图像
img = Image.open('image.jpg')
#亮度增强
img_bright = ImageEnhance.Brightness(imag)
brightness = 3
image_brighted = img_bright.enhance(brightness)
image_brighted.show()
#色度增强
img_color = ImageEnhance.Color(img)
color = 2
image_colored = img_color.enhance(color)
image_colored.show()
#对比度增强
img_contrast = ImageEnhance.Contrast(img)
contrast = 3
image_contrasted = img_contrast.enhance(contrast)
image_contrasted.show()
#锐度增强
img_sharp = ImageEnhance.Sharpness(img)
sharpness = 2
image_sharped = img_sharp.enhance(sharpness)
image_sharped.show()

3.图像滤波:抑制噪声,检测边缘,特征提取

由PIL中的ImageFilter类实现。

from PIL import ImageFilter
#模糊滤波
img_blur = img.filter(ImageFilter.BLUR)
#轮廓滤波
img_contour = img.filter(ImageFilter.CONTOUR)
#细节滤波
img_detail = img.filter(ImageFilter.DETAIL)
#边界增强滤波
img_edge_enhance = img.filter(ImageFilter.EDGE_ENHANCE)
#锐化滤波
img_sharp = img.filter(ImageFilter.SHARPEN)
#高斯模糊滤波
img_gauss = img.filter(ImageFilter.GaussianBlur(radius=2))  # radius指定平滑半径,也就是模糊的程度。

三、scikit-image

基于scipy的一款图像处理包,对scipy.ndimage进行了扩展,scipy 社区开发和维护
用于图像处理和计算机视觉的算法,它将图片作为numpy数组进行处理,正好与matlab一样
skimage包由许多的子模块组成,各个子模块提供不同的功能。主要子模块列表如下:
1.io:读取、保存和显示图片或视频
2.data:提供一些测试图片和样本数据
3.color:颜色空间变换
4.filters:图像增强、边缘检测、排序滤波器、自动阈值等
5.draw:操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等
6.transform:几何变换或其它变换,如旋转、拉伸和拉东变换等
7.morphology:形态学操作,如开闭运算、骨架提取等
8.exposure:图片强度调整,如亮度调整、直方图均衡等
9.feature:特征检测与提取等
10.measure:图像属性的测量,如相似性或等高线等
11.segmentation:图像分割
12.restoration:图像恢复
13.util:通用函数

四、matplotlib

Matplotlib是一个Python 2D绘图库,很擅长做数据可视化

参考资料:
python skimage图像处理(一)
python数字图像处理(1):环境安装与配置
skimage官方文档
Python各类图像库的图片读写方式总结
python skimage图像处理(二):图像简单滤波
Python的图像库(Opencv、PIL、matplotlib、skimage)的使用(读取、存储、变换、滤波)

 
2 months ago

一、GCC: Linux 下默认的 C/C++ 编译器

1.这里有一个头文件:so-test.h,三个.cpp文件:test-a.cpp、test-b.cpp、test-c.cpp

//so-test.h:

#include "stdio.h"
void test_a();
void test_b();
void test_c();

//test-a.cpp:

#include "so_test.h"
void test_a()
{
  printf("this is in test_a...\n");
}

//test-b.cpp:

#include "so_test.h"
void test_b()
{
  printf("this is in test_b...\n");
}

//test-c.cpp:

#include "so_test.h"
void test_c()
{
  printf("this is in test_c...\n");
}

2.我们将这几个文件编译成一个动态库:libtest.so

gcc test_a.cpp test_b.cpp test_c.cpp -fPIC -shared -o libtest.so

参数详解:
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

-shared:指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

-o:指定输出文件的文件名

3.动态库的调用

刚刚我们已经成功生成了一个自己的动态链接库libtest.so
下面我们通过一个程序来调用这个库里的函数,程序的源文件为:test.cpp。
//test.cpp:

#include "so_test.h"
int main()
{
test_a();
test_b();
test_c();
return 0;
}

将test.c与动态库libtest.so链接生成执行文件test:

test.cpp -L. -ltest -o test```
参数详解:
-L.:表示要连接的库在当前目录中

-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称----指的就是
刚刚生成的libtest.so文件
或者这个命令更简单


gcc test.cpp libtest.so -o test ```

4.执行

LD_LIBRARY_PATH=. ./test
LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。

当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的
不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了。

二、Cmake:一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)

详见github代码

参考资料
Linux下gcc编译生成动态链接库.so文件并调用它
GCC编译器(Linux gcc命令)30分钟入门教程

 
2 months ago

1.分别到官网下载opencv和opencv-contrib
记得要保证两个版本一致,千万不要用brew install XXX,版本无法得到有效控制
opencv最新版本是4.0,这里使用下载3系列的最后一个版本3.4.5
opencv opencv-contrib
两个安装包下载后解压,建议把opencv-contrib文件夹直接放入opencv文件夹中
进入opencv文件夹,mkdir release,opencv的安装编译都放在release这个文件夹中
2.安装一些依赖项

brew install build-essential git pkg-config

brew install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev

brew install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

brew install libgtk2.0-dev

brew apt-get install libatlas-base-dev gfortran

3.下载cmake和cmake-gui
brew install cmake安装的cmake版本都很低,建议手动下载
cmake-gui也建议手动下载
4.cmake-gui的操作详见参考资料一
注意:DOPENCV_ENABLE_NONFREE这个选项记得搜索出来然后勾上
经过几次compile后,点击generate
5.回到命令行
make -j8
make install
中间可能各种报错和失败,需要一一解决
6.安装后测试
详见参考资料二
7.使用过程中的一个巨坑:OpenCV3.4.X中Nonfree模块的使用
这是一个根本就没人提醒,特别容易踩坑的东西,图像识别领域肯定必须使用
万一前面在cmake-gui阶段忘了打上这个小勾,之前我是把整个opencv重新安装了一遍
今天搜到一个简单的解决方案:直接安装该缺少模块

参考资料:
OSX下编译安装opencv3.1.0与opencv_contrib_master
ubuntu卸载opencv并重装opencv3.0.0
mac下opencv配置
强烈推荐ubuntu14.04安装opencv3.4.5+opencv-contrib3.4.5详细教程

 
2 months ago

好久没装虚拟机了,新装虚拟机打开后一个小小的主窗口位于客户机的中间,看起来特别难受
传说中不装vmware-tool这个问题没法解决,甚至连跟windows之间的互传文件都没法解决

1.将vmware-tool安装包放入虚拟机光驱

可以全盘搜索"linux.iso",这个光盘镜像里面有vmware-tool安装包
我的电脑搜出来的结果是:D:\Program Files (x86)\VMware\VMware Workstation\linux.iso
按照参考资料一的"windows系统如何安装vmware Tools"过程,将以上光盘镜像放入虚拟机光驱中

2.安装vmware-tool

按照参考资料一的"linux系统如何安装vmware Tools"过程,实现安装
中间涉及到手动镜像光驱到本地文件夹的过程
操作结束后使用命令sudo umount /mnt解除镜像

Ps:如果虚拟机光驱没有被禁用的话,就可以省掉以上镜像过程了

3.apt-get更换阿里云源

默认为海外官方源,下载不动,需要切换成国内镜像源,比如阿里源
同时虚拟机刚刚装好,直接使用apt-get install ****会报错,apt-get需要先升级apt-get update

参考资料:
Vmware Tools 全系列版本下载及安装方法(vmware Tools 10~15)
ubuntu中手动挂载光盘
Ubuntu各版本专业介绍

 
2 months ago

在分类问题中,会遇到某些样本数据较少,导致不同类别样本比例失调,有几种解决方案

1.直接复制小样本数据

这样简单粗暴,准确率可能会差一点点,好在操作简单,执行速度快

2.大样本数据随机抽样

3.采用数据增强,增加小样本数据量

4.focal loss

针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的。
这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。
为了证明focal loss的有效性,作者设计了一个dense detector:RetinaNet,并且在训练时采用focal loss训练。
实验证明RetinaNet不仅可以达到one-stage detector的速度,也能有two-stage detector的准确率。

参考资料:
深度学习笔记八:focal loss
focal loss理解
如何评价Kaiming的Focal Loss for Dense Object Detection?

 
3 months ago

一、自动驾驶的六个级别分类

从0级到5级,汽车工程师学会定义了六个级别的车辆自动化:

0级自动驾驶:当前普及的全人工驾驶

1级自动驾驶是辅助驾驶系统,能持续提供转向或加速和制动控制,但只在限制条件和特定情况下提供。

如当前较普遍的自适应巡航:该系统可控制加速和制动,从而使汽车在公路上与前方车辆保持一定距离

2级自动驾驶也是辅助驾驶系统,但既提供转向,也提供加速和制动控制,同样是在限制条件下提供。

特斯拉最初的Autopilot虽然是比较先进的一个系统,但被认为属于2级自动驾驶系统。

3级自动驾驶是我们开始进入实际自动驾驶的级别。

该级别的自动驾驶是“有条件的自动驾驶”,这意味着只有在一定条件下自动驾驶系统才能运行。
但一旦开始运行,汽车就完全自动驾驶。
通用汽车公司新的Super Cruise系统就属于3级自动驾驶。
同样,特斯拉最新版本的Autopilot也属于该级别。
3级与2级自动驾驶的差异在于自动驾驶的程度:系统运行时,人类驾驶员通常无需进行干预,但仍需在一定程度上保持警惕,以在系统提示需要人类接管时介入。

4级自动驾驶属于“高度自动驾驶”。

一般来说,我们使用4级自动驾驶来描述完全自动驾驶的系统。除了某些特殊情况,一般无需人类干预。
依靠特殊地图工作的自动驾驶汽车(如目前正在研发中的大多数汽车)属于4级自动驾驶:只要是有地图的地方,这类汽车都能实现完全自动驾驶,而无需人类干预,但并非在任何地方都能自动驾驶。

5级自动驾驶属于完全自动驾驶:只要是人类能够驾驶的地方,该类型汽车都能驾驶。

只要有可通行的道路,这种车能去任何地方,任何时候都无需人类驾驶员干预。

以上内容看起来还是有点儿模棱两可,直接贴一张直观图,来自刘少山《第一本无人驾驶技术书》

二、无人驾驶的四大系统

1.环境感知:汽车周围的其他物体,如道路、行人、自行车、其他车辆等。
2.定位:GPS +本地标志(各种交通标示、地名标示)+ IMU(Inertial Measurement Unit惯性测量单元)。
3.决策:路径,速度和其他行为规划。
4.控制:操纵方向盘,油门,刹车等。

参考资料:
自动驾驶技术的六个级别分类
无人驾驶技术综述
无人驾驶技术入门(四)| 百度无人车传感器 IMU 深入剖析
自动驾驶计算机视觉研究综述:难题、数据集与前沿成果(附67页论文下载
刘少山:第一本无人驾驶技术书

 
3 months ago

1.偏差和方差之间的协调是什么?

2.什么是梯度下降?

3.解释过拟合和欠拟合以及如何与之对抗?

4.你如何对抗维度的诅咒?

5.什么是正则化,我们为什么要使用它,并给出一些常见方法的例子?

6.解释主成分分析法 (PCA)?

7.为什么在神经网络中ReLU比Sigmoid更好更常用 ?

8.什么是数据标准化,我们为什么需要它?

我觉得很有必要强调这一题。
数据标准化是非常重要的预处理步骤,用于对数值进行调节,使其拟合特定的范围,以确保在反向传播过程中更好地收敛。
一般来说,这可以归结为减去每个数据点的均值,再除以其标准差。
如果我们不这样做,那么一些特征(那些高量级的)将在成本函数中得到更多的权重(如果一个高量级的特征变化了1%,那么这个变化是相当大的,但是对于较小量级的特征来说,它是相当小的)。
数据标准化使得所有特征的权重相等。

9.解释降维,在哪里会用到以及它的好处?

降维是通过减少所考虑的特征变量数量来得到一组主变量(也就是重要特征)的过程。
特性的重要性取决于特征变量对数据信息表示的贡献,并取决于你使用哪种技术。
决定使用哪种技术取决于反复试验和偏好。通常从线性技术开始,当结果不拟合时,就转向非线性技术。
数据集降维的潜在好处有:
(1)减少所需存储空间
(2)加速计算(例如在机器学习算法),维度低意味着更少的计算,维度低也意味着可以使用不适合高维度的算法
(3)删除冗余特征,例如没有意义同时用平方米和平方英里来存储地形的大小(可能是数据采集存在缺陷)
(4)降低数据维度到2D或3D可能允许我们绘图和可视化它们,如观察模式,给我们深刻见解
(5)太多的特征或太复杂的模型可能导致过度拟合。

10.如何处理数据集中丢失或损坏的数据?

你可以在数据集中找到丢失/损坏的数据,你可以删除这些行或列,或者用另一个值替换它们。
在Pandas中,有两个非常有用的方法:isnull()和dropna(),它们将帮助您找到丢失或损坏数据的数据列,并删除这些值。
如果希望用占位符值(例如0)填充无效值,可以使用fillna()方法。

11.解释这种聚类算法?

我写了一篇很受欢迎的文章,是关于数据科学家需要知道的5种聚类算法,用各种可视化图形详细解释了每种算法。

12.你将如何进行探索性数据分析Exploratory Data Analysis(EDA)?

EDA的目标是在应用预测模型之前从数据中收集一些见解,也就是获得一些信息。
基本上,你希望以一种从粗到细的方式进行EDA。我们从获得一些高层次的全局见解开始。
看看一些不平衡的类。看看每个类的均值和方差。查看前几行,看看它是关于什么的。
运行Pandas df.info()来查看哪些特性是连续的、分类的、它们的类型(int、float、string)。
接下来,删除在分析和预测中不无用的列。
这些可能是看起来无用的列,其中一个是许多行具有相同的值(即该列没有给我们很多信息),或者它丢失了很多值。
我们还可以用该列中最常见的值或中值填充缺失的值。
现在我们可以开始做一些基本的可视化。从高层次的东西开始。为特征是分类和有少数组的做一些条形图。
最后类的条形图。看看最“宽泛的特征”。对这些单独的特征创建一些可视化,以尝试获得一些基本见解。
现在我们可以开始更具体的。在两个或三个特性之间创建可视化。
特性是如何相互关联的?你还可以用PCA查看哪些特征包含最多的信息。将一些特性组合在一起,看看它们之间的关系。
例如,当A = 0和B = 0时,类会发生什么?当A = 1,B = 0时呢?
比较不同的特征。例如,如果特征A可以是“女性”或“男性”,那么我们可以将特征A与他们呆在哪个小屋相对照,看看男性和女性是否住在不同的小屋。
除了条形图、散点图和其他基本图外,我们还可以绘制PDF/CDF、重叠图等。查看一些统计数据,如分布、p值等。
最后,是时候创建ML模型了。从简单的贝叶斯和线性回归开始。
如果你发现很糟糕或者数据是高度非线性的,那就使用多项式回归、决策树或者SVMs。
可以根据EDA中特征的重要性选择它们。如果你有很多数据,你可以使用神经网络。检查ROC曲线。精度、回忆 。

13.你如何知道应该使用哪种机器学习模型?

虽然人们应该时刻牢记“天下没有免费的午餐”,但还是有一些基本原则的。
我在这里写了一篇关于如何选择合适的回归模型的文章。
这里有个简单都图表可供简单参考

14.为什么我们对图像使用卷积而不仅仅是FC层?

这个问题很有趣,因为公司通常不会问这个问题。这个答案有两部分。
首先,卷积保存、编码并实际使用了图像中的空间信息。如果我们只使用FC层,就不会有相关的空间信息。
其次,卷积神经网络(CNNs)具有部分内建的平移方差,因为每个卷积核都充当自己的滤波器/特征检测器。

15.什么使CNNs不受平移影响?

如上所述,每个卷积核都充当自己的滤波器/特征检测器。
假设你在做物体检测,物体在图像中的什么位置并不重要因为我们要以滑动窗口的方式对整个图像进行卷积。

16.为什么分类CNNs 有最大池化?

正如你所预料的,这是为了计算机视觉中的一个角色。
CNN中的最大池化允许你减少计算,因为你的特征图在池化之后更小。
你不会丢失太多的语义信息,因为你正在进行最大限度的激活。
也有一种理论认为,最大池效应在一定程度上增加了CNNs的不受平移影响性。看看吴恩达关于最大池化的好处视频。

17.为什么分段CNNs通常具有编码器-解码器风格/结构?

编码器CNN基本上可以被认为是一个特征提取网络
解码器利用这些信息通过“解码”特征并向上放大到原始图像大小来预测图像的片段。

18.什么是批量标准化,它为什么有效?

深度神经网络的训练是复杂的,因为每一层的输入分布在训练过程中会随着前一层参数的变化而变化。
批量标准化的目的是使每一层的输入标准化,使它们的平均输出激活为0,标准偏差为1。
每一层中的每一个小批都会进行处理,即单独计算小批的均值和方差,然后标准化。
这类似于网络输入的标准化。这有什么帮助呢?
我们知道对网络输入进行标准化有助于其学习。但是网络只是一系列层,其中一层的输出成为下一层的输入。
这意味着我们可以把神经网络中的任何一层看作是更小的后续网络的第一层。
我们将神经网络看作是一系列相互馈入的神经网络,在应用激活函数之前对一层的输出进行标准化,然后将其馈入下一层(子网络)。

19.如何处理不平衡的数据集?

1.在损失函数中使用类 权重。
本质上,代表性不足的类在损失函数中接收更高的权重,使得该特定类的任何未命中分类将导致损失函数中的非常高的误差。
2.过度采样
重复(直接复制)一些包含代表性不足的类的训练示例有助于均匀分布。如果可用数据很小,这种方法效果最好。
3.欠采样
可以简单地跳过一些包含过多代表类的训练示例。如果可用数据非常大,则效果最佳。
4.少数群体的数据增加。
您可以综合地为代表性不足的类创建更多的训练示例!例如,直接更改小数据集颜色和光照,增加随机噪音。
数据增强技术网上介绍的方法比较多,随便贴上一些

20.为什么要使用很多小的卷积核,比如3x3,而不是几个大的?

这在VGGNet的论文中得到了很好的解释。有两个原因:
首先,你可以使用几个较小的内核而不是几个较大的内核来获得相同的接收域并捕获更多的空间信息,但是使用较小的内核可以使用较少的参数和计算。
其次,因为使用更小的内核,你将使用更多的过滤器,使用更多的激活函数,因此CNN将学习到更有鉴别性的映射函数。

21.你还有其他相关的项目吗?这是一道加分题

在这里,你需要在你的研究和他们的业务之间建立联系。你有没有做过什么事或学过什么技能,可能与他们的业务或你申请的职位有关? 不必是100%相关,只是某种程度上相关,这样你就可以证明你能够直接为公司增加很多价值。

参考资料:
数据科学和机器学习面试问题集锦
英文原版博客
选择哪种机器学习算法可以解决我的问题