[英]tf.keras(tf2) problem: can't run custom gradient layers, OperatorNotAllowedInGraphError. May caused by tf.Keras API
[英]Yolov3 to Tensorrt : Custom Plugins for tf-keras Lambda Layers
我使用這個 repo 在 Tensorflow 2.0 中訓練了一個 yolov3-tiny model: https://github.com/zzh8829/yolov3-tf2
據推斷,model 使用兩個封裝在 tf-keras lambda 層中的函數進行后處理,它們是:
boxes_0 = Lambda(lambda x: yolo_boxes(x, anchors[masks[0]], classes),name='yolo_boxes_0')(output_0)
boxes_1 = Lambda(lambda x: yolo_boxes(x, anchors[masks[1]], classes),name='yolo_boxes_1')(output_1)
outputs = Lambda(lambda x: yolo_nms(x, anchors, masks, classes),name='yolo_nms')((boxes_0[:3], boxes_1[:3]))
我已經創建了這個推理 model 的凍結 pb,並將其轉換為 ONNX。 但我無法弄清楚如何進行。 如何為 yolo_boxes 創建一個 python Tensorrt 插件? 我無法在網上找到 Lambda 層插件的任何資料,並且在沒有 yolo_boxes 插件的情況下無法測試 tensorrts 自定義 NMS 插件。
我過去曾通過兩種方式為 yoloV3 完成此操作:(兩者都適用於 yolov4 和 yolov3-tiny):
它們都先轉換為 ONNX,然后再轉換為 TensorRT。 對於第二個鏈接,您需要 Pytorch。
請注意,需要正確版本的 ONNX 和 TensorRT 才能完成這項工作。 舊版本的 ONNX 沒有正確的 opset 來工作。 但是這些信息都可以在這兩個鏈接上找到。
感謝@joostblack 的幫助。
參考您的資源和其他一些資源,我能夠使用 BatchedNMSDynamic_TRT 插件來解決我的問題。 我只是將 combined_non_max_suppression function(yolo_nms 中的那個)作為 model 的 output 進行輸入,並將 graphsurgeon 用於 append 批處理的 NMSDynamic_TRT 插件作為節點,將 8957605 的輸入作為 8957616 插件的輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.