VoTT自定义SSD模型,实现自动标注
tfjs模型准备
我这里是先用pytorch的yolo模型尝试转换,后面放弃了,直接用SSD的tensorflow模型直接转换。
tip:
部署的时候不要心急,按照官网的模型一步步改成自己的模型,否则容易前功尽弃,报错了也不确定是不是模型的原因,像我弄完yolo模型出错了,又得回去弄SSD模型来排除yolo模型的原因。
模型转换流程介绍
仅以我自己转换的两种情况,最终需要转换到tensorflowjs模型给VoTT调用
pytorch模型
pt文件(pytorch模型) --> onnx文件 --> tensorflow模型 --> tfjs模型
pt文件 to onnx文件
参考https://zhuanlan.zhihu.com/p/422290231
自己的yolo模型读取和转换过程
# 加载模型,这里可以用自己加载模型的方式
model = attempt_load(r"C:\Users\Burt\Desktop\test\best.pt")
model.eval()
model = model.cuda()
# 转换成ONNX,加载模型后,只要这个就行了
torch.onnx.export(model,
dummy_input,
"C:/Users/Burt/Desktop/test/best.onnx",
input_names=['inputs'],
output_names=['outputs'])
转换完成后是这样的:
onnx转tensorflow文件
我是从GitHub上下载一个库进行转换的
# 下载库
git clone https://github.com/onnx/onnx-tensorflow
# 转换
onnx-tf convert -t tf -i /path/to/input.onnx -o /path/to/output.pb
生成的tensorflow.pb文件夹结构如下:
best.pb
|—assets
|—variables
—|—variables.data-00000-of-00001
—|—variables.index
|—best.pb
其中variables文件夹可能是空的,因为pb模型里的参数都是constant,就没有变量。
tensorflow文件转tensorflowjs文件
当时我是用这个进行转换。
https://blog.csdn.net/qq_41158484/article/details/126706102?spm=1001.2014.3001.5502
至此,模型准备部分完毕。
VoTT下载与运行
两种方式:
- exe
- 自行编译的方式
exe文件
这个👇
https://github.com/microsoft/VoTT/releases
官方编译(踩坑)
下载
- 官方地址,直接下载到文件夹
https://github.com/microsoft/VoTT
- 打开终端(打开win+R,输入cmd)
cd path/to/you/want/to/save
git clone https://github.com/microsoft/VoTT.git
就可以从外网下载这个项目了,需要翻墙
安装依赖库和运行
# 1. 进入下载的项目
cd VoTT
# 2. 配置相应的库
npm ci
# 也可以用这个配置相应的库,一样的,如果没报错就是成功了
npm install
# 3. 运行项目
npm start
运行项目后,生成了一个应用软件和一个网页软件。
这里是应用程序的,有open local project的选项,同时connection那里可以连接custom file
这里是网页生成的VoTT,不具备上面这些功能,还有其他差别目前没发现
下面是安装依赖库和运行的时候遇到的报错
报错1 :error code 1
解决方法:
这个是版本对不上的原因,网上很多方法都说是替换版本就可以,我尝试了多种方法还是会有其他错误,最终在这里找到了解决方法:
https://tree.moe/deal-with-gyp-err-caused-by-node-sass/
其实还是版本问题,只是需要修改项目中的package.json文件的node-sass版本修改为node对应的版本,然后安装的时候加上–force强制安装就搞定了!!!
报错2:node-sass版本不变
安装node-sass后,还是原来的node-sass版本。
解决方法:
安装node-sass之前要uninstall掉之前的node-sass才能安装成功,所以每次安装完后都要检查一下能不能安装。
# 删掉之前的node-sass
npm uninstall node-sass
# 安装正确版本的node-sass
npm install node-sass@对应的版本
# 最好rebuild一下,不知道rebuild有没有用,反正我rebuild了一下
npm rebuild node-sass
tips:
下载的时候速度慢,就换国内源
报错3:Error: Node Sass version 7.0.1 is incompatible with ^4.0.0.
Error: Node Sass version 7.0.1 is incompatible with ^4.0.0.
当时没截图就用文字代替吧
出现这个报错的时候,Error: Node Sass version (安装的版本) is incompatible with ^4.0.0.
我当时尝试了很多个版本的node-sass,但是不管是什么node-sass版本都会报这个错。
解决方法:
参考报错2,当时按照报错2安装成功后,理论上版本应该没什么问题,就怀疑是有什么缓存,一直是用那个缓存运行的所以报这个错,于是重启了一下电脑,然后
npm start
就能跑通了!!!
如果我的方法帮不到你,可以参考网上我之前尝试过的解决方法,或许可以帮到你。
https://blog.csdn.net/u012069313/article/details/123542705
https://blog.csdn.net/m0_49714202/article/details/123483875
https://blog.csdn.net/Sheyami/article/details/125386157
https://blog.csdn.net/ouyangchangxiu/article/details/123373118?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-123373118-blog-123483875.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-123373118-blog-123483875.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=1
标注,调用自己的模型
编译完成后
建立连接
建立新的project
选择刚刚创建的connection,下面的红框是生成的vott工程文件保存的地址,其他的看着填就行了。
然后到这里就可以进行标注了。
调用自己的模型
- 设置一下自己的模型的路径
- 开始自动标注
但是我在这里调用SSD模型的时候出现了error loading active learning model.
但是后面编译完VoTT,加载tfjs模型的时候出现了这个错误,网上找了好久,甚至去对照了生成的json文件内容,但是还是不行。
然后在github讨论区中有人说要用这个方法,参考
https://github.com/microsoft/VoTT/issues/846
里面提到
安装tensorflowjs的时候
pip install tensorflowjs==0.8.6
可能会有以下问题:
报错 error:could not find a version that satisfies the requirement tensorflow==1.13.1
解决方法:
这个是因为python版本太高了,我这里是python3.10的环境,换了个python3.6的环境就可以下载了。
报错 error:cannot install tensorflowjs because these package versions have conflicting dependencies
基于版本冲突的想法:
- 我去升高了下keras的版本,重新安装tensorflowjs==0.8.6;
- 降低了tensorflow版本,重新安装tensorflowjs==0.8.6;
但是发现还是会报这个错,然后我去看了下安装过程,发现
tensorflowjs 0.8.6 在安装的时候会自动选择安装keras 2.2.2 和tensorflow 1.13.1 ,但是这两个库依赖的keras-application又不一样,于是卡在这里了。
更新一下,这里说tensorflow0.8.6由于依赖问题无法安装!!!放弃这个思路。
https://blog.csdn.net/HGGshiwo/article/details/120142822
更新一下,看了下GitHub上讨论区,还有一个人的解决方案就是:
自己写了个脚本,读取模型,将结果放进VoTT里的xml文件里。
太麻烦了,最终决定换一个自动标注工具。