第一次实习,具身智能?聚身智能!Embodied Intelligence? Assembled Intelligence!
我的第一次实习非常的戏剧性。。。

我当时对具身智能比较感兴趣,即使我还不知道我其实是对VLA比较感兴趣,无论如何,我还没有那么多时间去学习自己感兴趣的事情。事实上,我对很多技术都感兴趣,嵌入式、通信、saas、全栈项目(我觉得这是以后的趋势)等等。像每一个热爱技术但又迷茫的小伙子,我觉得我不会放弃学习,但是可能要先找一份工作吧。
总之,我还没有实习过,我不知道工作是一种什么感觉,可能和学校里差不多吧,付出一些劳动、换取一些工资、认识一些朋友,重要的是自己能学到什么并丰富自己的经历。我们在展厅里来回闲逛,女友是经济法律双学位,可是就算这样市场上符合要求的岗位数量还是恨少,她难免有些失落。我是一个传统工科(虽然我不是很喜欢这个专业。。。),再加上学历背景还不错,感觉找到工作还是比较简单的。说实话,我觉得大多数工作任何一个学校的本科生或者研究生来做都完全可以胜任,只不过是因为人太多了,人太多了。(总是难免会谈论到分配制度的问题,这是我最不想谈论的话题,也是个禁忌的话题。。。)我问了几家公司,给了一些简历(好像当时还是彩印的,1块钱还是5毛钱一张呢),问他们招不招实习生。后来也只有这家公司给我来电话了。
其实是因为他们是个初创公司,非常、非常缺人,但是工资给的还挺高的,一天300块钱,而且能从头开始跟一些项目。虽然我当时不太知道这些东西是怎么运转的,不过现在我的感受是初创公司相比大厂更能学到东西,因为人少就承担更多的核心工作,和其他人的合作也更密切,迭代也更快,但是会更累就是了。当时公司的处境相当于是盘古开天,只有一把斧头。。。和几个机器狗。我理解的是老板夸下海口说项目他们肯定能做,但是其实一切都还没有开始,于是他飞快的招兵买马,话说开一家公司还挺容易的哈(如果有钱的话)。
这个公司具体来说是在用具身智能而不是广义的研究具身智能(商业、赚钱,肯定是这样的嘛),我应该不能随便说甲方是谁吧。总之机器小狗要用在一个巡检场景,看这里那里有没有异常情况,看看这个压力表的读数正不正常,看看那个瓶瓶罐罐有没有泄漏,来代替一些辛苦的工人(话说这样工作岗位倒是增多了,替代了一些辛苦的劳力,但是又会多了很多维护和开发机器狗的人,但话说回来其实很多人也没有选择这种职业的自由,谁又能说自己的工作更有意义呢?)。这个事要咋做,首先就是买买买,很多工业相机里已经内置了很多解决方案,比如火灾监测,红外热辐射检测等,把它安装到机器狗上就完事。可是甲方肯定是还有一些要求,比如识别仪表读数,腐蚀生锈,漏液漏气等等,这就需要一些基于相机的视觉方案(实际上漏液漏气利用一些其他的传感器更好检测,但是这和硬件以及信号处理都有关系,公司好像没有擅长这方面的人,事实上公司的人好像都不太清楚自己在干什么)。
其实要是真能用上VLA那真是神中之神了,现在我明白这个技术的实际应用还是非常有难度的,和Agent可不一样,生产环境中的风险其实非常难以预测,就连Agent也不好说真的部署在生产环境中。这里我选择靠谱的OpenCV,接收摄像机传回的视频数据,切分成图片帧然后识别图片中的表盘并读数。整个任务可以简单的划分成两部分,定位(也就是识别)和读数,先识别整个表盘,再识别表盘中的刻度、指针等,再根据刻度和指针读数,就是这样。实际上最重要的就是数据集,这个任务并不算困难,可是生产环境中的图片?没有!表盘的图片?只有一两种!让表盘的指针动?不能随便动!最后还是我在淘宝找到卖相同表盘的厂家,然后弄了一些图片来补充数据集,就算这样数据集还是远远不够的。我通过网络上的开源表盘数据集做训练,然后针对具体场景做微调,才实现了比较好的效果。因为它实际上在这整个工厂里,需要识别的表盘也就是那么几种。具体而言,我只是把yolov12的前10层冻结然后用表盘数据微调后面的检测头。
定位到表盘后,我找到了一个开源数据集,能够识别表盘的指针头、最大最小刻度和表盘中心,这样只要将最大最小值通过OCR识别出来,然后根据指针头和表盘中心计算指针弧度,就能算出现在的读数了。但是数据集中的表盘占满整个图片,实际拍摄时仪表只在图片中的一小块地方,因此识别到之后根据YOLO框进行裁剪,然后再输入进下一个模型进行检测,过程中还遇到了很多比如OCR的识别问题,读数计算的逻辑问题等等啰哩啰嗦一大堆,总之加了无数的专家规则之后能到一个可用的状态了。
其实部署这块我学到更多有用的东西。这整个平台并不是一个在线检测的解决方案,机器狗巡检一圈之后将视频传回云服务器,然后再出检测结果,这样开发起来也更方便一些了。整个方案基于一个平台,平台发布任务之后通过Redis消息队列的形式分发给各个消费者组,被消费之后各个微服务执行任务之后的结果通过API回传,各个微服务运行在Docker中,通过API端口通信,定义好payload字段,保证互相的消息能够按照正确的逻辑传递。我就开发了其中的一个微服务,并最终和机器狗在Linux服务器上联调成功。
My first internship was incredibly dramatic...

At that time, I was more interested in embodied intelligence, even though I didn't realize I was actually more interested in VLA. In any case, I didn't have much time to dive into the things I was passionate about. Actually, I'm interested in many technologies: embedded systems, communications, SaaS, full-stack projects (which I think are the future trend), and so on. Like every young guy who loves tech but feels a bit lost, I thought I wouldn't stop learning, but maybe I needed to find a job first.
In short, I had never interned before and didn't know what working was like. Maybe it's similar to school: put in some effort, get a salary, make some friends, and importantly, learn something and enrich your experience. We wandered around the exhibition hall. My girlfriend had a double degree in economics and law, yet even so, there were very few suitable positions on the market, and she couldn't help feeling a bit disappointed. I was from a traditional engineering background (even though I didn't really like that major...), and with a decent academic record, I felt it was relatively easy to land a job. To be honest, I think most jobs could be done perfectly well by any undergraduate or graduate student from any school; it's just that there are too many people—too many people. (That inevitably leads to talk about distribution systems, which is the topic I least want to discuss, and it's also a taboo one...) I asked a few companies, handed out some resumes (I remember they were color-printed, costing 1 yuan or 50 cents per sheet), and asked if they were recruiting interns. In the end, only this company called me back.
Actually, it was because they were a startup and were extremely, extremely short-staffed, but the pay was quite good—300 yuan a day—and I could get involved in projects from the ground up. Although I didn't really understand how these things worked at the time, now I feel that startups teach you more than big companies, because with fewer people, you take on more core tasks, collaborate more closely with others, and iterate faster—but it's also more exhausting. At that time, the company was like Pangu opening up the world: they only had an ax... and a few robot dogs. As I understand it, the boss had boasted that they could definitely do the projects, but in reality nothing had even started yet. So he quickly recruited staff. Making a company is pretty easy, huh (if you have money).
Specifically, the company was using embodied intelligence rather than researching it in a general sense (it's all about business and making money, obviously). I probably shouldn't reveal who the client was. Anyway, the robot dogs were to be used in an inspection scenario: checking around for anomalies, seeing whether the pressure gauge readings were normal, and checking whether those bottles and tanks were leaking, in order to replace some hard-working workers (though this actually increases job opportunities—it replaces some physical labor, but also creates more positions for maintaining and developing robot dogs; but then again, many people don't have the freedom to choose another occupation, and who can say their own job is more meaningful?). How to do this? First of all, it's all about buying things. Many industrial cameras already have built-in solutions, such as fire detection, infrared thermal radiation detection, etc. Just mount them on the robot dog and you're done. But the client certainly had additional requirements, like recognizing instrument readings, corrosion and rust, liquid and gas leaks, etc. These required camera-based vision solutions (though for leaks, other sensors would actually be better, but that involves hardware and signal processing, and the company didn't seem to have anyone skilled in those areas—actually, the people in the company didn't seem to really know what they were doing).
Actually, if we could really use VLA, it would be the best of the best. Now I realize that the practical application of this technology is still very challenging—unlike an Agent, the risks in a production environment are extremely difficult to predict, and even an Agent can't be said to be truly deployed in production. So I chose the reliable OpenCV, received the video data from the cameras, split it into frames, and then identified the gauge dial in each image to read the numbers. The whole task can be simply divided into two parts: localization (i.e., detection) and reading. First, detect the entire dial, then identify the scale markings and pointer, and finally calculate the reading based on the scale and pointer. That's all there is to it. Actually, the most important thing is the dataset. This task isn't hard, but images from the production environment? None! Images of the dial? Only one or two types! Make the dial pointer move? You can't just move it! Eventually, I had to find a manufacturer selling the same gauge on Taobao and obtained some images to supplement the dataset. Even so, the dataset was still far from sufficient. I trained on open-source gauge datasets from the internet and then fine-tuned for the specific scenario, achieving decent results. Because in the entire factory, there were only a few types of gauges that needed to be recognized. Specifically, I just froze the first 10 layers of YOLOv12 and fine-tuned the later detection heads with the gauge data.
After localizing the dial, I found an open-source dataset that could identify the pointer tip, maximum and minimum scale markings, and the gauge center. Then all I had to do was use OCR to read the maximum and minimum values, calculate the pointer's arc based on the pointer tip and the gauge center, and thus determine the current reading. However, in the dataset, the dial filled the entire image, while in actual shot images, the dial only occupied a small region. So after detection, I cropped the image according to the YOLO bounding box and then fed it into the next model for detection. Along the way, I encountered many issues, such as OCR recognition problems, logic issues in reading calculation, and a bunch of other tedious stuff. In short, after adding countless expert rules, it reached a usable state.
Actually, I learned a lot more valuable things from the deployment side. This entire platform wasn't an online detection solution; after the robot dog completed its inspection round, it uploaded the videos to a cloud server, and then detection results were produced. This made development easier. The whole solution was based on a platform that published tasks and distributed them via Redis message queues to various consumer groups. After consumption, each microservice executed its task and returned results via APIs. Each microservice ran in Docker, communicating through API ports, with defined payload fields to ensure messages were passed correctly according to the logic. I developed one of these microservices and finally got it successfully integrated with the robot dog on a Linux server.