AI 写代码?| AI coding?
本文所指AI,仅包括ChatGPT(GPT3.5),Copilot以及文心一言。其他模型没有进行尝试。
用AI写代码在过去的一年中可能已经很常见了,不过我则是几乎没有使用过。这一周为了迁移代码从Python到C++,可是和AI斗法废了一番功夫。
先介绍一下背景吧,毕设涉及到了汽车的图像识别,考虑各种情况最后选择了intel的神经计算棒加速,自然也就用了OpenVINO。因为我负责的是项目其他部分,所以并没有在意这个部分,直到我们的Python版本测试效果不错,需要合入C++版本的时候,“噩梦”才开始了。
因为之前在RoboMaster时有干过Python转C++的活,干的也是Opencv的东西。所以一开始听说转换有问题的时候,觉得我应该能搞定,就跟着一起搞,觉得opencv的api在cpp和python上基本一样,一行行照抄改不就是了。然后就发现遇到了问题,有这样一行代码:image = image.transpose((2, 0, 1))
用于对opencv读到的图片进行维度转换以符合模型的输入要求,然而当我去查opencv的api时,发现opencv的transpose并不长这样,只有一个输入和输出。搜索后发现,这里是用了numpy的函数进行了转换。可是cpp没有numpy啊,为了一个这个功能再搞eigen?好像也不合适。此时cpp的代码已经写好了可以编译运行,只是模型结果和python的不一样,识别不出车子来。于是去看cpp代码是怎么写的,发现是cvtColor,emm?于是队友就开始问了AI,给出的方案是手动三重循环转换,copy进代码跑,发现还是不行。于是反复循环问ai,copy进代码,发现不行。我也试了copilot的翻译代码功能到cpp,结果照样不行。反复尝试换模型(FP32,FP16),修改遍历顺序,修改不同的api,都不行。
我于是尝试搞到自己电脑上跑。原来的编译是直接g++跑,但是换了环境之后自然是跑不了了,再加上其他部分代码都是cmake编译的,便尝试搞成cmake,弄了好久搞定了,在编译时会提示使用了2024要被废弃(如废)的框架。于是我想到不如用新框架也许能更好写,便问了队友初始的python代码是从哪个文档里面学来的,得知也是AI生成的。
我想着AI只能出旧框架,那我要不上网搜索有没有新框架。于是花了可能就一分钟就找到了知乎上的文章,然后照着抄,抄的时候看到文章里面的转换,感觉和我们的代码一样,可能还是不行的时候,突然反应过来不一样的地方:之前的尝试,都只是在改模型部分的类型在各种变化,但是Mat读的时候,一直是at成float读的,但是我们的图片读进来是int啊,到原来代码里面一改,模型输出正确了。
唉,与其去搞AI问答,不如当初就直接搜索引擎搜索,早解决了。看起来C++开发暂时还是不会被AI取代的,需要的各类信息比Python一类的代码多得多。