sophgo / sophon-stream

Other
68 stars 10 forks source link

关于distributor插件的疑问 #19

Open fygroup opened 6 months ago

fygroup commented 6 months ago

我现在在做全结构化,假如我检测到类型为car,要分发给多个模型进行处理比如号牌颜色、车辆颜色、车辆品牌等分为多个模型,这个要要怎么通过distributor处理。

yizhou-xu commented 6 months ago

串联就可以吧

fygroup commented 6 months ago

串联,那么 问题一:最后提取数据的时候,假设我这些号牌颜色、车辆颜色、车辆品牌这些小模型都是采用yolo的话,metadata里的mClassify假设都是0,那么我怎么区分这是哪个属性。 问题二:假设号牌颜色->车辆颜色->车辆品牌,假如我的号牌颜色没有推理结果,后满是不是都没结果了? 问题三:整个处理时间会不会很长?

yizhou-xu commented 6 months ago
  1. 我理解号牌颜色、车辆颜色、车辆品牌应该是分类任务吧?这里按照resnet的代码来说明:代码里看,后处理末尾的保存结果是obj->mRecognizedObjectMetadatas.push_back(RecogObj);,所以识别结果是顺序push_back的。也就是说:只要知道graph中element的顺序,就可以区分;
  2. 不会,各个模型是独立的;
  3. 时间应该会比并联的长。如果要并联可以这样修改:由于目前json里port属性是int,所以可以重复写{ "classes":["car"], "port" : x }。查阅sophon-stream/element/tools/distributor/src /distributor.cc 525-548行代码,类别-端口分发关系会在每次触发分发动作时更新,所以不会有重复的crop。
fygroup commented 6 months ago
  1. 我理解号牌颜色、车辆颜色、车辆品牌应该是分类任务吧?这里按照resnet的代码来说明:代码里看,后处理末尾的保存结果是obj->mRecognizedObjectMetadatas.push_back(RecogObj);,所以识别结果是顺序push_back的。也就是说:只要知道graph中element的顺序,就可以区分;
  2. 不会,各个模型是独立的;
  3. 时间应该会比并联的长。如果要并联可以这样修改:由于目前json里port属性是int,所以可以重复写{ "classes":["car"], "port" : x }。查阅sophon-stream/element/tools/distributor/src /distributor.cc 525-548行代码,类别-端口分发关系会在每次触发分发动作时更新,所以不会有重复的crop。

好的大概明白了,但是1还有个问题,我们有个场景是一张图片要经过多次yolo检测,结果都是mDetectedObjectMetadata,我通过objectMetadata->mSubObjectMetadatas->mDetectedObjectMetadatas是可以取到,但是我不知道他的mClassify是哪个模型的

yizhou-xu commented 6 months ago

这个问题暂时看确实没法区分。可以考虑在Box里面加入一个element_id的字段,标识来自哪个yolo element,这样就可以在最后用它来区分模型。element的id属性可以通过getId()接口获取,在后处理填入Box。

fygroup commented 6 months ago

这个问题暂时看确实没法区分。可以考虑在Box里面加入一个element_id的字段,标识来自哪个yolo element,这样就可以在最后用它来区分模型。element的id属性可以通过getId()接口获取,在后处理填入Box。

收到,明白