本文仅供学习交流。
1.主要任务:
把u2net的detect部署到cvat工具上,提供接口给用户使用,这样用户就可以自动标注了。
2.遇到的问题的解决:
2.1 主要是配环境时候会出现各种报错,主要的解决办法是针对具体问题具体分析(百度+google+youtube)。
2.2 在部署的时候,cvat会默认调用自己内部的python解析器,但是这个解析器可能缺少我们代码里面import的库,此时不能过在ubuntu终端直接安装缺少的库,而是需要在yaml文件里面安装(官方没有说,纯靠自己感觉出来的)。
2.3 端口号冲突问题,有些进程已经占用了8080,cvat的yaml配置文件对接的端口号也是8080,此时运行程序,会出现超时的问题,(解决:杀死已有占用8080的进程or改变yaml配置文件中的端口号,参考官网中的issue中有人遇到了该类问题)。
3.脚本对接:
部署到了cvat,但是暂时无法调用,可能原因是代码上的冲突,需要修改源代码。最大的难点是只能在网页上看到报错,且并没有返回调用源头的文件,没有调试的界面,所以暂时不知道我们的代码哪一行错了,可能需要看日志文件,看能不能找到调用关系,或者选择debug版本。(重写代码,本地调试后再上传)。
要注意生成的结果results是字典格式,这是CVAT的要求。
总结:需要注意的是,CVAT官方就是要求我们提交三个文件,一个function.yaml,一个main.py,一个model_handler.py,我们只需要模仿其他案例就行,案例在CVAT/serveless里面找,然后写yaml文件的时候,需要安装什么就在这里面安装,当时遇到很多nu module torch等问题都是在这个里面安装的。另外写后面两个py文件就是写4个函数,只需要把自己写的输入输出和案例对齐就行,中间写你自己的东西。然后部署成功可能会没法运行,这个时候可以在CAT的界面上点击一下自动标注的按键,他会报错,这个网页的报错没太多参考价值,可以去看日志的报错(就是下面的查看docker的日志),就可以找到你代码报错的地方,然后根据提示修改代码,基本上就可以实现debug的功能。
以上就是我当时的报错,可以定位到我的main.py的43行,基本上就解决了问题。
如果还是不行,可以参考官方的debug模式的教程,写的很粗糙,配置也有点麻烦,我因为监控日志就搞定了,所以最后没用。
Serverless tutorial | CVAT (opencv.github.io)
4.几个常用命令
查看nuclio的日志:nuctl invoke my-function --namespace nuclio --via external-ip
查看docker的日志:docker logs cvat
docker logs --follow nuclio --tail=1
5.参考连接:(主要是官网和github)
Semi-automatic and Automatic Annotation | CVAT (opencv.github.io)
Issues · nuclio/nuclio (github.com)
Issues · opencv/cvat (github.com)
Serverless tutorial | CVAT (opencv.github.io)