基于地平线 HAT 训练与部署 FCOS 全流程

前言 最近想要使用自己采集与标注的数据集来训练与部署一下地平线微调过的 FCOS 网络,在询问和查看文档后发现如果想基于官方微调的模型训练,需要使用提供 HAT(Horizon Algorithm Toolkit,海图) 来进行,具体的文档可以查看:Horizon Algorithm Toolkit 文档,这是在线的版本,版本可能会比较旧,想看最新版的可以查看离线的版本,位置在 OE(Open Explorer,天工开物) 包的 doc 目录下,如下图: 想要方便的查看离线文档可以通过 Python 来实现,在 doc 目录下执行: python3 -m http.server 3000 这样就可以在本地的 0.0.0.0:3000 地址开启一个 http server,随后可以在本地浏览器使用 localhost:3000 或者其他电脑浏览器使用 {ip}:3000 来访问文档。 但是查看 文档 过后会发现,文档其实也没有那么的全面,讲的比较简单,尝试了一下中间坑还挺多的,社区里面关于这方面的帖子也不多12,因此想记录下我尝试的全流程,也可以作为对上面教程文档的补充。 下面主要分为三部分: 训练的环境配置。 如何基于官方的 COCO 数据集训练?这里就是指基于 mscoco 发布的包含 80 类的数据集。 如何基于自己的数据集进行训练?这里就是指自己建立的,自定义类别的,可能只有四五类,没有 80 类的数据集。 下方涉及到的一些代码、脚本和模型等,可以在 Github 仓库 中找到。 训练的环境配置 我自己环境配置如下: OS: Ubuntu 20.04 Docker: 20.10.23 Nvidia Docker: 2.11.0-1 GPU: RTX3090 NVIDIA Driver Version: 515.65.01 CUDA Version: 11.7 OE Version: v2.4.2( gcc-9.3.0 For XJ3 ) ...

February 25, 2023 · 9 min · zzsqwq

2022 年度总结

2022 依旧是被疫情伴随的一年,时间正着看总是要比回看慢很多,现在回头看过往一年似乎一瞬间就过去了。 今年共发了 11 篇文章,其中还包含了两篇碎碎念,还是没有达到月更,新的一年希望可以。2022 年对我来说变化很大,算是暂时摆脱了学生生活,体验了社畜的感觉,打卡了北上广深中的北和深。 接下来按月份盘点一些值得纪念的事情吧。 一月: 这一月大多是在学校里度过的,封校了很长时间,封校期间报名了送餐志愿者,每天都负责给大家配送三餐,有点累,但是感觉能听到大家感谢的声音以及幸福的笑容还是很值得的,我感觉我一直还挺乐于助人的,帮助别人其实还挺快乐的。值得一提的是,因为之前总喜欢续费超级会员,疫情期间还建了一个宿舍群,送餐期间也兼职在群里传达各种信息,虽然是个吃力不讨好的活,还因为一些过激的言论被挂到知乎说是官僚主义。 二月: 二月换了手机(iPhone 13),加入了果粉的队列,并在心中种下了苹果全家桶的种子。还和家人一起去了青岛的海洋馆玩,和从未见过的网友学弟面了基。 三月: 三月报名参加了 RMUS 2022 ,同时也在备赛 RMUA 2022 和准备大创的中期检查。搭建了一个新的 RMUA 场地。 四月: 移植了一个学术风的 Hexo 主题,搞了一个自己的学术主页,计划用于后面的申请夏令营等。 五月: 带队参加了 RMUA 2022,也担任了其中的赛事志愿者。今年的分组不错,可惜还是因为各种原因惨败了,很难受的一个月。回来还被隔离了七天,隔离的时候也无心学习,后面有考试和各种大作业的检查,这段时间是一年中最难受的时候。 六月: 六月是考试月,各种考试、各种大作业、各种 DDL,压的人喘不过气来。 在 6月12日,基地也搬了新的场地,大二上学期刚加入基地的时候,基地也是新搬场地,现在,基地又新搬了场地,我也该退休了。 七月: 六月的结束也意味着学期的结束,假期的开始。七月学长邀请我去他公司实习,我欣然答应,于是我们就在学期结束后一起飞到了深圳,开始了社畜生活。在深圳的生活很愉快,也有了自己可以支配的收入,不再依赖于家里面的生活费了,也可以攒些小钱买自己想买的东西,这种感觉很棒。同时这个月还入手了 Airpods 3,空间音频给人的感觉很震撼。 八月: 八月继续社畜,做了社畜以后有了比学生生活期间更多的活动,也吃了更多的好吃的,成了KFC、麦当劳、海底捞、肉蟹煲的常客,每天都稳定点两次外卖。这个月还看了《请回答1988》的解说,真的很好看,是令人暖心的剧集。 九月: 九月要开学了,但是因为大四上学期已经没什么课了,而且深圳的疫情非常严重,没有返校。本月最重要的是我成了一名铲屎官(猫屎真的好臭😷),已经是人生赢家了,Siri 给他起名为卓卓。 同时九月也是保研名单公布和保研结束一段时间,再三考虑后决定放弃了保研名额,跟学长一起创业,先在港中文做 RA,后面或许可以去那里读 Ph.D,想出去看看。 这个月还因为要做 iOS 开发公司给配了 Mac,现在已经拥有 iPhone、iPad、Mac、Airpods,距离 Apple 全家桶只有一步之遥。 哦对了,这个月还搬了新的住所,因为人逐渐变多了,之前的屋子已经住不下了。九月,真是繁忙的一月。 十月: 这个月初入手了 Apple Watch,补齐了个人设备的最后一块拼图算是。iMac 这种没有算进来,因为 iOS、iPadOS、MacOS、WatchOS 四个系统已经集齐了,苹果生态给人的感觉真的很不错。 ...

January 1, 2023 · 1 min · zzsqwq

使用 OrangePi 4 LTS 做旁路由

前言 最近同居的学长从香港带了个最新版的 Apple TV 回来,但是 Apple TV 在国内用不了,必须要代理才可以,所以考虑到了路由器代理的方案。但是现在家里在用的路由器是 Redmi AX3000,没法刷固件,也不想再买个 R2S 这种软路由了,因此就计划将公司之前用完的 香橙派(OrangePi) 4 LTS 利用一下。它的芯片是 RK3399,用来做路由器绰绰有余,不用可惜了。 为什么是旁路由? 不熟悉旁路由的同学可以看篇指南:从听说到上手,人人都能看懂的旁路由入门指南 找了一些常见的固件,貌似只有针对于 OrangePi R1 和 OrangePi R1 Plus 编译的软路由固件,并且讯龙官方也有放出针对这两个板子的 Openwrt 固件1,可以说是就是为软路由而生,价格也比较便宜,200 左右,性能和 R2S 差别不大。 试了一下在 4 LTS 上跑 R1 和 R1 Plus 的固件2,都无法正常点亮,可能可以自己编译一个对应架构的 OpenWrt,但是有点麻烦,还是没尝试。 考虑到 4 LTS 上可以使用 Docker,因此可以在上面用 Docker 跑一个 OpenWrt 然后做旁路由,到时候只需要把 Apple TV 或者路由器的网关和 DNS 改一下就可以,因此最终选择使用旁路由方案。 具体方案 这里直接参考了小苏的教程:https://mlapp.cn/376.html,写的很清晰,而且很好的考虑了没有基础的同学,赞一个! 里面写的很详细,但是需要注意的是,因为香橙派4 LTS是 ARMv8 架构的,但是直接拉教程里面的默认 latest 镜像是 ARMv7 的,因此需要指定一下镜像的版本,具体的镜像版本可以看 Docker Hub 中的介绍。 ...

December 31, 2022 · 1 min · zzsqwq

C++ 类使用注意事项

前言 本文包含一些在使用 C++ 类时的注意事项,可避免一些常见问题,并能让你在写代码时更加自信。 因为目前我使用的是 C++ 17,所以仅保证以下内容在 C++ 17 中正确。 构造函数 对于单个参数的构造函数,推荐添加 explicit 关键字,防止隐式转换错误调用构造函数。 class DemoClass { explicit DemoClass(int test) { this->test_ = test; } } 显式声明有参构造函数后,编译器不会自动生成无参构造函数,若需要,请添加 DemoClass() = default; class DemoClass { explicit DemoClass(int test) { this->test_ = test; } DemoClass() = default; } 若子类中没有显式调用父类的构造函数,子类会默认调用父类的无参构造函数,如果父类没有无参构造函数,会报错。 析构函数 基类析构函数应该声明为 virtual,这样可以防止子类无法正确的析构。 由于基类析构函数为 virtual,派生类的析构函数应该显式的 override。 class DemoClass { virtual ~DemoClass() = default; } class ChildClass: public DemoClass { ~ChildClass() override { xxx; } } 成员变量默认值 对于类或局部作用域中未明确指定默认值的成员变量,其值遵循以下规则: 对于原生类型(primitive types),即 int、float、int*、string* 等,默认值为随机的脏数据。 对于对象(objects),例如自定义类、或 std::string 等,会调用默认(无参)构造函数,若没有默认(无参)构造函数,则报错。 对于引用(reference)类型,例如 std::string&,必须赋初始值或在构造函数中初始化,若为初始化,则报错。 float age; // 脏数据、随机值(无意义),此时访问会出现未定义行为 int *ptr; // 脏数据、随机值(无意义),此时访问会出现未定义行为 string name; // 调用默认构造函数,对于 std::string 来说为空字符串 "" DemoClass demo; // 若 DemoClass 存在无参构造函数,则调用,否则编译错误 string *pname; // 脏数据、随机值(无意义),此时访问会出现未定义行为 string &rname; // 编译错误,必须显式初始化 const string &crname; // 同上,编译错误 成员变量初始化方式 初始化成员变量一般而言有四种方式,一般而言第二种和第四种方式为等价的,不过在下面我们会看到一种例外: ...

November 9, 2022 · 2 min · zzsqwq

关于美的一些思考

楔子 昨天听了学弟们关于博客搭建的一些教程,在听的过程中,也想起了我之前对于博客的种种尝试,发现整体的趋势就是,简约再简约。 这引发了我对我过去几年的审视,感觉自己的审美一直在变化,对于美的认识和感受也是一直在变的,故写此文来记一些我对美认识的思考。 简约是我最终的归宿 遥记得我还在小学和初中时,非常迷恋 QQ飞车 这款游戏,这款游戏里面有一个虚拟人物,人物可以搭配各种装饰,包括但不限于上衣、裤子、发型、发饰、翅膀等,起初我是喜欢要多花哨有多花哨造型,各种发饰、翅膀、脸部特效搞的飞起,现在想起来真是非常搞笑,而且喜欢五颜六色的,当时觉得,真的是太好看了。 但是过了一段时间,就开始感觉不对劲了,这么花哨,这么丑,这怎么可能是我当时亲手选择的造型。后来就逐渐向简约范靠拢,装饰越简单,色调越单一越喜欢。 下面的几张图大致可以窥见这个过程: 而长大后,对于 Blog 的搭建貌似也是这个过程。一开始喜欢相对花哨的,包括各种炫酷的背景、动效等,因此一开始选择了高定制度、有各种花哨特效的 Hexo 框架,不过当时已经在飞车中喜欢上了简约风格,因此主题也选择了 Hexo 中相对简洁的 NexT 主题。 后来发现 Hexo 实在操作过程有些过于繁杂,从操作的意义上来说,他无法做到足够的简洁、简约和高效。 故而我选择了操作更加方便(例如发表博文、操作主题元素)更加方便的动态博客——Typecho。 起初,我选择延续了在 Hexo 上的 NexT 主题,后来发现了更加符合我审美的 Handsome 主题,第一眼就是非常喜欢,后来忍痛买了主题,用了一段时间后,又逐渐觉得主题没有那么好看,有些看腻了,而且动态博客的升级、安装插件,也是十分繁杂。 最后,偶然之下,发现了现在在使用的 Hugo 框架,它生成迅速、无需升级、也有着很多简约风的主题,完美符合我的需求,果断迁移了过来,具体流程可见:记一次博客迁移记录 - Zs’s Blog ,一直用到现在,还是对这个框架和主题算是相对满意的。 总体而言,无论是操作还是页面,都是越来越简约、统一了。不知道未来,我会不会觉得这个也不够简约和统一,再去找寻其他的框架呢。 各种产品的变迁 除了上面我自己对美认识的变化,我觉得整个社会对美的认识也是存在变化的。 往大了讲,是各种建筑、各种设施外观的变化。 往小了讲,我们用的手机、手机上的软件(例如 QQ、微信),他们的外观每年都在迭代,可能每次变化时有人吐槽有人叫好,但是整体而言,至少对我来说,他是整体都是越来越好看的,虽然逐渐变得臃肿,但是 UI 确实是“实打实”的在进步。下图是 QQ 的变化(左侧是网友仿的一个老版 QQ 界面1,右图是最新版 Mac QQ),可见一二: 那就引发了我一个思考,大家对于美的认识是被塑造了呢,还是说这个东西就是客观上的变好看了,美毕竟是一个比较主观的东西。 如果他是主观上变好看了,那么他是真的好看了吗?而且为什么可以做到如此的统一,让大多数人都觉得变好看了。 如果他是客观上变好看了,那么到底是什么因素的存在让人觉得他好看呢? 我觉得美这个东西,很不像生活中常见的发展规律,例如芯片的研发,需要数学、物理、化学等学科实际理论的支持。 2001 年的人是没有办法设计出 Apple M2 的芯片的,因为受到了各种硬件的制约。而 2001 年的设计师有没有可能设计出最新版 Mac QQ 这样的界面呢,如果不能,是什么制约着它呢?如果能,为什么没有出现这种设计,是因为当时大家觉得他不好看吗? 因为我不是学设计和美术等专业的,并且这种很很直觉的东西我不知道该怎么去搜索,因此想在这里和大家探讨一下。如果有已经相对成熟的理论,还请大家能够告知与我,解答困扰我好久的疑问。 AI 绘图 看网上有人调侃说,愿意称 2022 年为 AI 绘图元年。 ...

October 30, 2022 · 1 min · zzsqwq