Nanaiky ny fanamby iray aho: mamorona fandaharana video YOLOv8 amin'ny fotoana tena izy amin'ny fampiasana vanilla ONNX Runtime. Tsy misy tetikasam-pifamoivoizana. Tsy misy fanakanana Python. Aoka isika ho marina: Python no mpanjakan'ny laboratoara fikarohana. fa raha miezaka manidina H.264 lahatsary amin'ny alàlan'ny tambajotra neuronal amin'ny habetsaky ny fitaovana? Python's Global Interpreter Lock (GIL) sy ny aretina ara-pitsaboana amin'ny famerenana ny fahatsiarovana dia mahatsiravina andraikitra. Vao haingana aho dia nahazo tanjona tsotra: mamorona fanapahan-kevitra haingana ho an'ny fandefasana lahatsary mampiasa vanilla ONNX runtime sy YOLOv8 segmentation model. Ity no nihaino tsotra tamin'ny taratasy. Ity no fomba nanintona ny prototype 10 FPS maotera ho an'ny biby 29 FPS maotera, ary ny "boss final" bugs tsy maintsy namono ahy teny an-dalana. In reality, it was a journey through engineering hell. (Ny loharano feno ho an'ny masochists: video-yolo-dash-processor) Video-yolo-dash ny famolavolana Ny FogAI Sandbox: Validation alohan'ny Integration Ity toeram-pivarotana ity dia tsy kilalao tsy miankina - izany no Izaho dia mampiasa ity tontolo iainana ity mba hanandrana mafy ireo modely manokana momba ny fahitana amin'ny solosaina, ny fananganana ny motera, ary ny fanatsarana ny endrika alohan'ny hampiakatra azy ireo ho amin'ny . dedicated testbed FogAI core Raha ny sehatra (ohatra ny Zero-Copy hardware mapping) dia tsy afaka mitoetra eto amin'ny 29 FPS, dia tsy misy raharaham-barotra ao anatin'ny rafitra ara-toekarena ara-nofo ara-toekarena. Previous Chapters in the FogAI Saga: Ny Manifesto: Ny Prompts dia avo lenta. Ity no fomba nanorina ny Zero-Copy Fog AI Node tsy misy Python The Career Story: Prompts dia mihoatra: Nivoaka ny Zero-Copy Fog AI Node tsy misy Python (Ary mahatonga ny ratsy) Ny loharanon'ny fahoriana: GitHub: NickZt/FogAi Ny tranga "Memory Copy Tax" Ny ankamaroan'ny prototypes ny maso amin'ny solosaina dia lava satria miasa amin'ny fahatsiarovana toy ny lalao Hot Potato. Ny famolavolana voalohany dia ny tsy fahampian'ny "standard": ny FFmpeg dia nanala H.264 ho an'ny format YUV, niova azy ho OpenCV (BGR) mba hanome ny modely, nametraka masks amin'ny RGB sary, niova izany nankany amin'ny YUV, ary farany dia nandray ny encoder. cv::Mat Miverena Ao amin'ny CPU ARM miasa amin'ny sary 4K, dia mihazakazaka hatramin'ny Mandeha ny bits manodidina. That's three unnecessary memory copies and two heavy pixel-format conversions. 30% of your cycles Nanao izany aho amin'ny alalan'ny fametrahana Ankoatra ny hamerina ny sehatra, dia nametrahako ny Hardware Y-plane (Luminance) mivantana amin'ny OpenCV Ny vovoka. Zero-Copy Hardware Mapping AVFrame cv::Mat Ny C + // Mapping the hardware Y-plane natively - zero memcpy, zero overhead. cv::Mat y_plane(yuvFrame->height, yuvFrame->width, CV_8UC1, yuvFrame->data, yuvFrame->linesize); // YOLO segmentation masks now inject binary modifications directly // onto the hardware Y sequence. y_plane(bbox).setTo(0, valid_mask); Amin'ny alalan'ny fivoahana ny fifanakalozan-kevitra, dia nandositra tanteraka ny fihenan'ny CPU aho. Fa mbola voafetra tamin'ny 23 FPS aho. Why? Mutability sy ny Asynchronous Reorder Ny profiling dia maneho fa ny fitaovako dia voasambotra ao amin'ny famonoana fahafatesana. Ny fanadihadiana dia miankina amin'ny fametrahana ny buffers an-tserasera mifandray. Raha niteraka fitaovana maromaro aho tamin'ny modely iray, dia nanimba ny hafa izy ireo, ary ny rafitra dia niala. YOLO Nandray anjara tamin'ny fifaninanana iray avy amin'ny modely --- iray ihany ONNX modely instance isaky ny mpiara-miasa thread. The Fix: std::unique_ptr<YOLO_Segment> Na izany aza dia nisy ny fanafihana: Satria ny mpiasa dia mifarana amin'ny fotoana samihafa, ny Frame 2 dia mety mifarana alohan'ny Frame 1, izay mahatonga ny lahatsary hiverina toy ny 90s hop-cut. Mba hahazoana antoka fa tsy misy dikany ny H.264 synchronization. DASH video requires strict frame order. std::map Ny C + // Reorder buffer logic to keep the stream sequential std::map<int64_t, FramePayload> reorderBuffer; int64_t expected_pts = 0; while (true) { auto payload = inferenceQueue.pop(); // Workers drop processed frames here reorderBuffer[payload.pts] = payload; // Emit frames only when the sequential timestamp flags align while (!reorderBuffer.empty() && reorderBuffer.begin()->first == expected_pts) { auto it = reorderBuffer.begin(); encoder.writeFrame(it->second.yuvFrame, it->second.pts); reorderBuffer.erase(it); expected_pts++; } } Ny mpitarika farany: Thread Cache Thrashing Ao amin'ny taratasy, ny fahamarinana dia tonga lafatra. Ao amin'ny fampiharana, ny FPS dia niala tamin'ny Ny fahatarana Time-To-Inference (TTI) dia niakatra avy amin'ny 43ms ho 890ms mahatalanjona. 10 FPS I was a victim of CPU Cache Thrashing. Na dia niala tamin'ny fanakanana aza aho, dia nanampy ahy ny library ML (OpenCV sy ONNX) amin'ny alalan'ny famokarana ny fitaovana anatiny. ONNX Runtime: Defaults to hardware_concurrency() / 2 thread per session. Amin'ny 10 mpiara-miasa, dia niteraka 100+ internal threads amin'ny CPU 20-core aho. OpenCV: Automatically deploy workers for operations toy ny .setTo(). Ny mpiasa nomena ahy dia niady tamin'ny loharano ONNX, izay niady tamin'ny loharano OpenCV. Thousands of context switches were destroying my L1/L2 caches every second. Ny fanitsiana dia "tsy" mahery vaika ho an'ny fifanarahana tsy ara-dalàna. Nalaiko ny boky amin'ny zon'izy ireo hiteraka tsipika: Ny C + int main() { // Globally disable implicit OpenCV threading cv::setNumThreads(1); // Cap ONNX Runtime to a single thread per op Ort::SessionOptions session_options; session_options.SetIntraOpNumThreads(1); session_options.SetInterOpNumThreads(1); } Ny feon'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny fifandraisan'ny miaraka amin'ny tavan'ny TTI ~ 329ms. 29 FPS Ny fametrahana ny ego: ny rafitra vanilla Ny fanontaniana mahazatra ananako dia: "Raha mifantoka amin'ny fahombiazana ianao, nahoana ianao no tsy manamboatra ny motera sy manatsara ny kernels ianao?" Ny valiny dia Technical Debt avoidance. Raha manimba ny ankapobeny ao amin'ny milina ianao, dia misoratra anarana ho an'ny fanamafisana tsy misy farany. Isaky ny famoahana dikan-baovao vaovao miaraka amin'ny fanohanana ny fitaovana vaovao --- toy ny (57% ny fanamafisana ny fanamafisana) na --- dia tsy maintsy miverina amin'ny fomba amam-panao ny fanatsarana manokana. Amin'ny alalan'ny fanamafisana amin'ny , Azoko atao ny "manangona" ireo fanavaozana fitaovana maimaim-poana fotsiny amin'ny alàlan'ny fandefasana isa version. ARM KleidiAI Intel DL Boost (VNNI) Vanilla Inference Engine Toy izany koa, nifidy ny tsy hanatsarana ny famoahana / decoding pipeline. Nahoana? Satria efa nanao izany ny mpamatsy fitaovana. Na izany na tsy izany Na ny , ireo singa ireo dia manana fanamafisana amin'ny habetsaky ny silicon ho an'ny H.264. Aoka ny codecs ho amin'ny metaly izay natao ho azy ireo. Intel QuickSync Rockchip VPU Zero-Copy Bridge Fanapahan-kevitra: Atsaharo ny fanapahan-kevitra, manomboka ny profiling Ny fanamafisana ny AI ho an'ny izao tontolo izao dia mitaky ny famerenana ny habetsahan'ny abstraktion izay nahatsapa amintsika be dia be. Python mitahiry ireo saram-pitsarana ireo mandra-pahatongan'ny famokarana ny rafitra. Raha toa ianao ka mandray anjara amin'ny lozam-pifamoivoizana lehibe ao amin'ny lahatsary: Maty ny pixel conversions --- miasa amin'ny sehatra fitaovana mivantana. Isolate ny modely - iray isaky ny mpiasa. Reorder sequential outputs --- Aza mamela ny async famaranana fotoana manimba ny fe-potoana. Aza avela hiteraka ny bokinareo amin'ny alàlan'ny filazany manokana. Stay Vanilla --- manatsara ny rafitrao, fa tsy ny milina, mba hitazonana ny trosa teknolojia ambany. Ho an'ny FogAI node? isika dia manomana Ho an'ny zero-copy run ... Grounding DINO