指南)
Atlas這個詞在AI硬件圈子里這幾年出現的頻率是越來越高。我后臺經常收到兩類私信一類直接問“Atlas 300V 24G是不是運算加速卡”另一類更直接——“Atlas到底能不能部署YOLO跑目標檢測怎么樣”。這兩類問題其實可以合并成一個話題因為大多數人接觸Atlas都是從國產AI加速卡上跑YOLO這類目標檢測模型開始的。這篇博文就圍繞Atlas 300V 24G這個具體型號先把它在硬件家族里的定位講清楚再帶你走一遍YOLOv5/v8模型從PyTorch導出、ONNX轉換到OM離線模型最后在Atlas上完成推理的完整流程。整個過程里涉及的一些開關參數、報錯處理、性能瓶頸我都會結合自己的實操經歷展開盡量做到你照著就能跑起來。1. 先搞懂Atlas 300V 24G是什么類型的卡別被名字繞暈1.1 Atlas產品家族里的定位一張圖看明白華為的Atlas系列其實是一個相當龐大的產品線從芯片到模組、加速卡、服務器、集群都有。如果不先把這個家族關系捋清楚很容易在選型和部署時犯方向性錯誤。整個Atlas產品線大致可以分成四層芯片層昇騰310主打推理、昇騰910主打訓練。模組/板卡層Atlas 200 DK開發(fā)者套件、Atlas 300I 推理卡主打訓練后的推理、Atlas 300V 視頻分析卡面向視頻流場景、Atlas 300T 訓練卡等。服務器層Atlas 800推理服務器、Atlas 900訓練集群節(jié)點等其實就是在服務器里插多張加速卡。軟件棧層CANN昇騰計算架構、MindSpore框架、MindX推理套件等。我們日常聊到的“Atlas 300V 24G”屬于板卡層而且是專門為視頻分析和推理場景優(yōu)化過的產品。很多人問“24G是不是顯存是不是運算加速卡”這個問題問到了點子上因為它直接決定了你能不能用它來跑YOLO、能跑多大的模型。1.2 300V 24G到底算不算運算加速卡答案是“算但有側重”直接回答這個熱詞問題Atlas 300V 24G是一塊AI推理加速卡確確實實是運算加速卡。它和普通GPU比如NVIDIA的A10、T4、RTX 3090等核心區(qū)別在于它的定位和運算資源分配。算力側重不同300V的設計目標是用在數據中心或邊緣服務器的視頻分析、圖像分類、目標檢測推理場景。它集成了昇騰310芯片的算力并且針對視頻解碼做了專門的硬件模塊。你可以把它理解成“專屬裁縫”專門為視頻和圖像推理優(yōu)化而通用GPU更像“全能選手”啥都能干但單項未必最專業(yè)。24G不是顯存而是內存嚴格來說Atlas 300V 24G板載的是24GB的LPDDR4X內存而不是GDDR6這種“顯存”。這個內存用來存放模型權重、中間特征圖和輸入輸出數據。它和顯卡的顯存功能類似但帶寬和架構不同不能直接教條地對標。沒有顯示輸出它和游戲顯卡最大的區(qū)別之一就是沒有顯示輸出接口它只負責計算不為顯示器服務。所以如果你拿它插到PC上想玩游戲或者當視頻輸出卡那是完全行不通的。需要專用的軟件棧Atlas卡不像NVIDIA顯卡那樣插上裝個驅動就能用CUDA它必須依賴CANN、MindSpore或MindX等專用工具鏈才能發(fā)揮算力。所以如果你要跑的目標是深度學習推理、尤其是YOLO這類目標檢測模型300V 24G完全夠格是AI推理領域的運算加速卡只是它的算力更多集中在INT8推理上不適合做浮點訓練。1.3 為什么很多人選Atlas部署YOLO而不是直接用GPU我自己在幾個項目里對比過選Atlas做推理部署有幾個現實原因這也是它熱度一直在漲的原因。功耗和密度優(yōu)勢300V這類加速卡功耗比同性能的GPU低不少一臺2U服務器可以插多張卡單機推理吞吐量可觀。功耗低對機房散熱和電費壓力都小這在規(guī)?;渴饡r優(yōu)勢明顯。國產化需求很多政企項目、工業(yè)質檢項目明確要求使用國產化算力。Atlas從芯片到軟件棧都是自主可控的在招投標和合規(guī)驗收上有天然優(yōu)勢。視頻流處理集成度好300V 24G板載了硬件視頻解碼能力H.264/H.265配合昇騰的DVPP模塊可以直接把視頻流解碼、縮放、色域轉換、摳圖等預處理交給硬件完成CPU占用率很低。這個特性在需要同時跑幾十路視頻流做目標檢測的場景下非常香。不過我要潑一盆冷水如果你是個人開發(fā)者或者項目規(guī)模比較小手頭已經有NVIDIA GPU暫不需要非得遷移到Atlas。Atlas的軟件棧相對封閉社區(qū)資料、排錯經驗遠不如CUDA生態(tài)成熟學習曲線是真真實實的陡。但如果你的目標是國產化交付或大規(guī)模視頻分析服務器那Atlas是繞不開的選擇。2. 部署YOLO以前先把Atlas的軟件棧和環(huán)境理清楚2.1 CANN工具鏈到底是什么為什么繞不開很多從GPU生態(tài)轉過來的朋友剛開始接觸Atlas時最懵的一個概念就是CANN。你可以把CANN想象成Atlas的“驅動CUDA底層優(yōu)化庫編譯器的合集”。NVIDIA那邊裝個驅動再配上CUDA Toolkit和cuDNN就能跑Atlas這邊對應的就是安裝昇騰驅動NPU Driver和CANN Toolkit。CANN里面對部署最關鍵的一個模塊是ATC模型轉換工具Ascend Tensor Compiler。它的作用是把其他框架訓練出來的模型如ONNX、TensorFlow的PB、MindSpore訓練好的模型轉換成昇騰芯片可以高效執(zhí)行的**.om離線模型**。可以理解為“翻譯官”把PyTorch等訓練框架的“外語”翻譯成NPU的“母語”。另一個重要組件是昇騰推理應用開發(fā)工具也就是我們常說的pyACLAscend Computing Language的Python接口或者MIndX推理套件。它類似CUDA的Runtime API負責把模型加載到NPU上、分配內存、執(zhí)行推理、取回結果這些臟活累活。我用一個對比幫助理解對比項NVIDIA GPU生態(tài)Atlas昇騰生態(tài)驅動NVIDIA Driver昇騰NPU Driver計算庫CUDA cuDNNCANN含ATC、算子庫等模型格式EngineTensorRT或直接跑OM離線模型Python接口Pytorch直接調用或TensorRT的Python APIpyACL或MindX的Python接口預處理CPU/GPU常規(guī)操作或DALIDVPP硬件加速 AIPP2.2 版本適配關系萬惡之源是版本不匹配我不止一次看到有人在群里報錯排查到最后就是驅動、CANN、框架、系統(tǒng)版本四不匹配導致的。Atlas生態(tài)對版本非常敏感強烈建議你安裝前先翻看官方的“版本配套表”不要裝最新的而是裝配套表里明確驗證過的版本。一個比較常見且穩(wěn)妥的配套模板大致是操作系統(tǒng)Ubuntu 20.04.x或22.04.x x86_64/aarch64使用鯤鵬CPU服務器時一定要選aarch64版本NPU驅動比如版本為23.0.3或24.1.rc1根據你的卡而定CANN Toolkit軟件包版本必須跟驅動版本匹配。比如驅動是隨CANN 7.0配套發(fā)布的那CANN也裝對應版本Python環(huán)境推薦3.8或3.9部分CANN版本對更高Python版本支持不好容易遇到依賴包編譯失敗這里有一個排查技巧當你裝完驅動之后用npu-smi info命令查看NPU狀態(tài)。如果命令能正常顯示卡的溫度、內存、算力使用率說明驅動和固件大概率沒問題如果命令報錯那基本是驅動和固件不匹配或者沒有裝固件包。注意昇騰的驅動driver和固件firmware是兩個不同的安裝包。只裝驅動不裝固件或者版本交叉錯位都會導致設備狀態(tài)異常。踩過的朋友肯定懂那種“明明剛裝好怎么一會就報錯”的崩潰。2.3 硬件環(huán)境準備以Atlas 300V 24G為例Atlas 300V 24G是一塊標準全高全長PCIe卡實際上有部分型號是半高半長注意自己手上板卡的物理規(guī)格需要插在主板的PCIe x16插槽上。安裝時注意確認主板BIOS里開啟了PCIe 4.0或3.0模式并關掉可能導致不穩(wěn)定的一些節(jié)能選項比如ASPM電源管理省電協(xié)議。查看電源供電能力300V 24G的TDP大約在72W到100W之間不同子型號有差異對供電要求不高但建議電源額定功率留足余量。服務器上電后先看風扇是否正常轉我在實際項目中遇到過卡沒插緊導致溫度飆升然后自動降頻的情況性能直接掉一半。系統(tǒng)層面檢查是否識別到卡可以用lspci | grep -i processing如果能看到類似Processing accelerators: Huawei Technologies Co., Ltd. ...的輸出說明PCIe枚舉層面識別到了設備。如果再執(zhí)行npu-smi info能看到Device信息那么硬件層面的準備就基本就緒。3. 摩爾線程級的實操在Atlas 300V上跑起YOLO目標檢測3.1 訓練側準備導出和模型轉換在Atlas上部署YOLO并不是直接把PyTorch權重扔給NPU就能跑而是需要先做模型轉換。整個流程我用圖來描述的話是這樣的PyTorch模型權重 → ONNX中間格式 → OM離線模型 → pyACL加載推理為什么要經過ONNX這一步因為CANN的ATC工具里ONNX是最成熟、兼容性最好的輸入格式。PyTorch通過torch.onnx.export導出的ONNX模型能最大程度保留網絡結構和算子信息ATC轉換起來最順。這里以YOLOv5s為例先導出ONNXimport torch # 假設你已經加載了yolov5s.pt權重 model torch.load(yolov5s.pt, map_locationcpu)[model].float() model.eval() # 構造一個輸入張量YOLOv5默認輸入是640x640 dummy_input torch.randn(1, 3, 640, 640) # 導出ONNX注意opset版本不要太高11~12比較穩(wěn) torch.onnx.export( model, dummy_input, yolov5s.onnx, opset_version12, input_names[images], output_names[output0] ) print(ONNX導出完成)這一階段有幾個需要注意的坑opset版本別一上來就選最新的。ATC對過新的opset支持不一定及時比如ONNX新增了一些算子Atlas的算子庫可能還沒實現轉換時直接報不支持的算子錯誤。建議先試低版本有算子報錯再考慮升級。輸出節(jié)點盡量只保留預測頭部分。YOLOv5的官方倉庫在導出ONNX時會默認帶上NMS等后處理邏輯或者你需要手動裁剪模型輸出只導出neck輸出的三個特征圖把NMS放到推理側自己實現。這樣既減少ONNX的復雜度又能在NPU側保持更大的靈活性后面我會講到原因。輸入分辨率YOLOv5的訓練默認是640x640。如果你的場景需要更高精度比如小目標檢測可以考慮導出成1280x1280的輸入但推理耗時也會同步上升。3.2 ATC模型轉換命令與關鍵參數解讀拿到了ONNX文件下一步就是用ATC工具把它轉成OM文件。ATC工具的調用本質是一個命令行按照你自己環(huán)境和CANN安裝路徑的不同參數略有差別但核心參數完全一致。一個面向YOLOv5s的ATC轉換命令大概是這樣的atc --modelyolov5s.onnx \ --framework5 \ --outputyolov5s_aipp \ --input_shapeimages:1,3,640,640 \ --soc_versionAscend310P3 \ --insert_op_confaipp.cfg \ --output_typeFP32 \ --input_formatNCHW我來逐條解釋這些參數因為很多人就是在這里開始犯迷糊。--model輸入的ONNX模型路徑。--framework輸入模型的框架類型5代表ONNX。這里固定是5別瞎改。--output輸出OM模型的名字。建議用帶后綴說明的名字比如yolov5s_aipp方便記住這個模型是用哪個預處理配置生成的。--input_shape指定輸入張量的形狀。這里寫了images:1,3,640,640對應batch為1、3通道、640x640分辨率。如果你之后想用動態(tài)batch可以寫成images:-1,3,640,640或者用--dynamic_batch_size1,2,4,8但動態(tài)shape在ATC里會增加轉換時間且有性能損失我建議能固定就固定能靜態(tài)就靜態(tài)。--soc_version指定芯片型號這行是重中之重。Atlas 300V 24G使用的是昇騰310P系列芯片實際上300V的芯片型號會印在板卡標簽或者由驅動自動上報你可以用npu-smi info或者看驅動安裝信息來確認。常見的有Ascend310P1、Ascend310P3等。寫錯了ATC會在轉換時報錯或者轉出來的模型在NPU上加載失敗。--insert_op_conf插入AIPP預處理配置文件。這一步是Atlas部署YOLO時非常關鍵的一環(huán)我會單獨展開。--output_type輸出數據類型一般取FP32就行。如果你對精度有更大容忍度想要更高性能可以設置為FP16模型里的權重和中間結果會以FP16計算速度快不少但精度會有輕微損失。--input_format輸入圖像的排布格式NCHW是PyTorch默認格式。如果你的輸入圖像在預處理階段已經轉成了NHWC就要改成NHWC否則后面推理結果會錯得離譜。3.3 AIPP預處理配置為什么YOLO推理必須要它很多從GPU直接轉Atlas的人上來就忽略了AIPP配置結果發(fā)現推理耗時高、CPU占用高、精度還不對。這里就體現出Atlas和GPU的差異了。在GPU上我們通常用PyTorch的transforms或opencv做resize、歸一化、通道變換這些是放在數據加載階段使用CPU或GPU算子完成的。而在Atlas上更高效的做法是把norm歸一化、圖像縮放、通道變換、數據排布轉換等操作通通一股腦寫進AIPP配置里讓NPU硬件去完成。這樣既減輕CPU負擔也讓數據在加載到NPU前的預處理耗時接近為零大幅提升整條pipeline的吞吐效率。一個典型的AIPP配置文件aipp.cfg如下aipp_op { aipp_mode: static input_format: YUV420SP_U8 src_image_size_w: 640 src_image_size_h: 640 crop: true load_start_pos_h: 0 load_start_pos_w: 0 crop_size_w: 640 crop_size_h: 640 csc_switch: true rbuv_swap_switch: false matrix_r0c0: 256 matrix_r0c1: 0 matrix_r0c2: 359 matrix_r1c0: 256 matrix_r1c1: -88 matrix_r1c2: -183 matrix_r2c0: 256 matrix_r2c1: 454 matrix_r2c2: 0 input_swap: false mean_chn_0: 0 mean_chn_1: 0 mean_chn_2: 0 min_chn_0: 0 min_chn_1: 0 min_chn_2: 0 }這個配置的語義比較晦澀但核心其實就是兩件事輸入圖像是YUV420SP的格式時硬件自動做色彩空間轉換CSC轉成RGB然后做歸一化、通道均值減除和縮放最后輸出成模型需要的NCHW數據。如果我們的輸入本來就是RGB圖像比如cv2.imread讀出來的BGR先轉成RGB前端預處理不想用硬件AIPP我們可以把input_format改成RGB888_U8然后不做CSC只做Resize和歸一化。實際項目中我建議優(yōu)先使用RGB輸入格式推導和調試更直觀性能差異在YOLO這種模型上并不大。這里給個建議AIPP配置文件和模型是一一綁定的。也就是說如果你更改了輸入分辨率或者預處理邏輯必須重新生成OM模型。不要試圖在推理代碼里改個參數就讓舊模型適配新輸入這個坑我實測踩過推理結果會變成一堆亂框。3.4 推理代碼實現用pyACL加載OM模型跑YOLO模型轉好了OM文件也生成了現在輪到推理側工作。Atlas上跑推理的Python接口主要是pyACL。下面我寫一個簡化版的推理流程展示在Atlas 300V 24G上跑yolov5s_aipp.om模型的核心代碼框架。import acl import numpy as np import cv2 # 初始化ACL ret acl.init() ret acl.rt.set_device(0) # 加載OM模型 model_path byolov5s_aipp.om model_id, ret acl.mdl.load_from_file(model_path) # 獲取模型描述信息比如輸入/輸出維度 model_desc acl.mdl.create_desc() ret acl.mdl.get_desc(model_desc, model_id) input_size acl.mdl.get_num_inputs(model_desc) output_size acl.mdl.get_num_outputs(model_desc) # 準備輸入數據讀取圖片并做最基礎的resize img cv2.imread(test.jpg) img cv2.resize(img, (640, 640)) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_rgb img_rgb.astype(np.float32) / 255.0 # 構造輸入Tensor input_data np.expand_dims(img_rgb.transpose(2, 0, 1), axis0) # 申請device內存拷貝輸入數據 input_ptr acl.util.numpy_to_ptr(input_data) # 這里做了簡化處理實際需要調用acl.rt.memcpy把數據拷貝到NPU側 # 輸出側也需要先申請輸出內存并將輸出指針傳給執(zhí)行函數 # 執(zhí)行推理 # ret acl.mdl.execute(model_id, input_ptr, output_ptr) # ... # 推理后拿到輸出特征圖做后處理 # 后處理部分解析三個尺度的輸出進行解碼、非極大值抑制、畫框代碼里的注釋我寫得很簡略因為實際項目代碼往往需要幾百行涉及輸入輸出內存申請、數據同步、流管理等大量ACL API調用。這里我想強調的一個核心思想是pyACL編程模型跟CUDA是有幾分神似的——同樣有一個Context、一個Stream需要把數據搬運到Device側執(zhí)行完再搬回來。如果以前寫過CUDA代碼適應起來會快不少。值得單獨提醒的細節(jié)輸入圖像的數據格式走AIPP走還是不走AIPP決定了你在Python端要不要做歸一化和通道轉換。如果OM是用AIPP靜態(tài)模式生成的那Python端只需要把圖片resize后轉成uint8的CHW存儲再拷貝即可不需要除以255。輸出的維度YOLOv5的OM輸出一般是3個特征圖的拼接數組形狀為(1, 25200, 85)這種結構。其中2520080x8040x4020x2085580若COCO數據集80類就是85。拿到這個輸出后在CPU端做解碼和NMSAtlas不負責后處理邏輯。后處理優(yōu)化當檢測目標很多時Python端的NMS會成為性能瓶頸。建議在服務里把后處理邏輯搬到C實現或者用numba/cupy優(yōu)化更極端的情況下可以在推理前就把后處理移植成ONNX的Decode算子但那會引入落地復雜性需要根據項目周期決定。3.5 實際推理性能數據與調優(yōu)方向我用一個很常見的小目標檢測場景來舉例輸入640x640的YOLOv5s模型在Atlas 300V 24G上純模型推理部分在FP16模式下耗時大約是4~6ms。如果將預處理交給AIPP、后處理用C實現那么單路視頻流處理耗時可控制在10ms左右也就是100FPS以上的處理能力。對于視頻分析服務器來說單卡同時跑4路1080p視頻流做實時檢測是可行的。但是有幾個性能優(yōu)化的關鍵點你不注意可能會讓實測數字大打折扣batch size調優(yōu)單路數據推理時芯片利用率往往不高。此時可以嘗試同時推理4~8張甚至16張圖充分利用算力。把batch從1提到4整體吞吐量可以提升到單張的2~3倍。動態(tài)batch會犧牲一點轉換時間但收益往往值得。多stream并發(fā)在pyACL中創(chuàng)建多個stream每個stream獨立執(zhí)行推理可以利用好多核調度提高并發(fā)能力。比如一個視頻流對應一個stream多個流并行推理。AIPP大法一定要用如果模型用AIPP預處理CPU端基本只需做圖片解碼和resize其余交給NPU。千萬別在CPU端用opencv做縮放和歸一化那樣CPU會成為瓶頸推理卡還不夠吃。4. 常見報錯與避坑經驗都是真金白銀換來的4.1 模型轉換時報錯Unknown Op / 算子不支持這是Atlas上部署YOLO最常遇到的報錯之一特別是在ONNX版本比較新、模型結構比較花哨的情況下。常見的報錯信息類似[ERROR] FMK: ... op type [Slice] is not supported或者[ERROR] GE: ... The node type of [Cast] is unsupported處理思路有兩條升級CANN版本新版本會不斷補齊和支持更多算子這是最直接的解決辦法。建議先查一下當前CANN版本對應的算子支持列表如果列表里確實沒有這個算子升級是唯一出路。ONNX算子版本對齊導出ONNX時把opset_version改低一點比如11然后把一些特殊算子在導出前想辦法用更多基礎算子的組合代替。比如一些自研模塊里使用的Sliced、Gather組合在ATC里可能會解析出怪異結構可以在PyTorch端提前改寫成標準卷積或普通張量操作。還解決不了的話只能在ONNX模型層面做節(jié)點替換和重構了。onnxsurgeon、onnxsimplifier這些工具可以用來簡化模型有時能省去不少尷尬。實測中onnxsimplifier對YOLOv5這類模型效果很好轉換失敗時先跑一遍簡化再轉成功率提升很大。4.2 推理結果坐標錯亂 / 檢測框錯位嚴重這類問題通常在代碼邏輯不復雜的情況下基本可以鎖定是圖像預處理與模型輸入格式不一致引起的。常見情況有兩種一種是AIPP配置了輸入為RGB但你在Python端傳入的卻是BGR。比如cv2.imread默認讀BGR你沒轉就直接丟給了模型那推理出來的特征圖就是顏色通道錯亂的最終在NMS之后可能檢測出一堆亂七八糟的框。解決辦法很簡單讀取圖片后用cvtColor轉到RGB再傳。另一種情況是輸入分辨率與模型訓練分辨率不一致。YOLOv5訓練用的圖像是640x640但你在推理時給模型傳了1280x960沒有做letterbox的等比縮放導致圖片被壓扁拉伸檢測框的位置自然就飄了。正確做法是先對原圖做letterbox保證比例不變四周填充灰色再縮放至640x640。后處理坐標還原時再根據填充量和縮放系數反算回原圖坐標。這里我多說一句如果你在GPU上用Opencv的blobFromImage做預處理習慣了到Atlas上不能沿用那套邏輯因為AIPP配置里的縮放和letterbox方式需要你提前在C或Python端把圖片數據處理成和訓練時一致的方式然后再喂給AIPP做后續(xù)操作。很多人在這里來回調就是沒意識到訓練前處理與部署前處理必須完全對齊。4.3 推理速度慢NPU占用率卻很低出現這種現象基本可以斷定瓶頸不在NPU算力上而在數據搬運或者預處理環(huán)節(jié)。檢查是不是在做同步推理每次推理前都把數據從內存拷貝到設備推理完再拷回來。這種“同步一句話”的方式在IO量大的時候非常拖速度。建議改成異步模式比如用隊列或雙buffer機制利用設備的流水線特性一邊在CPU側讀取下一幀一邊等待當前幀推理結果。檢查是不是在CPU端做了歸一化和resize等操作。前面說過AIPP能幫你做這些不要把所有活都攬在CPU側否則NPU占用率可能只有個位數CPU卻跑滿。將這部分操作挪進AIPP后實測速度能提升50%以上。檢查是不是用的是單stream。單stream下NPU芯片的實際利用率并不高多個stream并發(fā)能更充分地利用芯片資源。把一個處理線程對應一個stream是標準的優(yōu)化姿勢。4.4 常見問題速查表問題現象可能原因解決建議ATC轉換報“不支持的算子”O(jiān)NNX版本過新或包含CANN未支持算子降低opset版本跑onnxsimplifier簡化升級CANN推理結果全是置信度極低的框輸入圖像預處理與訓練不一致檢查顏色通道、歸一化方式、letterbox是否對齊輸出shape和我預期不一致模型輸出裁剪方式與預期不同導出ONNX時只導出預測頭輸出NMS后處理放在Python/C實現NPU占用率低但CPU跑滿CPU端做了大量預處理把resize、歸一化交給AIPP在設備上加載OM模型失敗soc_version寫錯或驅動/固件版本不匹配用npu-smi info確認芯片型號核對版本配套表多次推理后內存持續(xù)上漲推理循環(huán)中沒有釋放device內存檢查acl.rt.mem_free對應釋放邏輯或復用一個固定的內存池Atlas 300V 24G這類芯片屬于昇騰310P系列雖然實際算力上限不如A100等旗艦卡但在推理側性價比、功耗、國產化屬性上都有不可替代的位置。跑YOLO部署這件事只要把ONNX轉換、AIPP、pyACL這三條線打通整個流程也就自然順了。從我實際操作的角度來說剛開始上手Atlas的那一兩周確實是最痛苦的文檔分散、報錯信息不直觀、社區(qū)案例少但一旦把工具鏈和思維模式從GPU切換到NPU之后后面再換別的模型、別的算法都會順暢很多。上面提到的這些坑基本覆蓋了大多數人第一次在Atlas上部署YOLO時會遇到的主要問題按照這個順序排查大概率能幫你省下不少摸索時間。