Releases: roboflow/inference
v0.27.0
🚀 Added
🧠 Your own fine-tuned Florence 2 in Workflows 🔥
Have you been itching to dive into the world of Vision-Language Models (VLMs)? Maybe you've explored @SkalskiP's incredible tutorial on training your own VLM. Well, now you can take it a step further—train your own VLM directly on the Roboflow platform!
But that’s not all: thanks to @probicheaux, you can seamlessly integrate your VLM into Workflows for real-world applications.
Check out the 📖 docs and try it yourself!
Note
This workflow block is not available on Roboflow platform - you need to run inference server on your machine (preferably with GPU).
pip install inference-cli
inference server start
🎨 Classification results visualisation in Workflows
The Workflows ecosystem offers a variety of blocks to visualize model predictions, but we’ve been missing a dedicated option for classification—until now! 🎉
Thanks to the incredible work of @reiffd7, we’re excited to introduce the Classification Label Visualization block to the ecosystem.
Dive in and bring your classification results to life! 🚀
🚧 Changes in ecosystem - Execution Engine v1.3.0
🚧
Tip
Changes introduced in Execution Engine v1.3.0
are non breaking, but we shipped couple of nice extensions and we encourage contributors to adopt them.
Full details of the changes and migration guides available here.
⚙️ Kinds with dynamic serializers and deserializers
- Added serializers/deserializers for each kind, enabling integration with external systems.
- Updated the Blocks Bundling page to reflect these changes.
- Enhanced
roboflow_core
kinds with suitable serializers/deserializers.
See our updated blocks bundling guide for more details.
🆓 Any data can be now a Workflow input
We've added new Workflows input type WorkflowBatchInput
- which is capable of accepting any kind
, unlike our previous inputs like WorkflowImage
. What's even nicer - you can also specify dimensionality level for WorkflowBatchInput
- basically making it possible to break down each workflow into single-steps executed in debug mode.
Take a look at 📖 docs to learn more
🏋️ Easier blocks development
We got tired wondering if specific field in block manifest should be marked with StepOutputSelector
, WorkflowImageSelector
,
StepOutputImageSelector
or WorkflowParameterSelector
type annotation. That was very confusing and was effectively increasing the difficulty of contributions.
Since the selectors type annotations are required for the Execution Engine that block define placeholders for data of specific kind we could not eliminate those annotations, but we are making them easier to understand - introducing generic annotation called Selector(...)
.
Selector(...)
no longer tells Execution Engine that the block accept batch-oriented data - so we replaced old block_manifest.accepts_batch_input()
method with two new:
block_manifest.get_parameters_accepting_batches()
- to return list of params thatWorkflowBlock.run(...)
method
accepts to be wrapped inBatch[X]
containerblock_manifest.get_parameters_accepting_batches_and_scalars()
- to return list of params thatWorkflowBlock.run(...)
method
accepts either to be wrapped inBatch[X]
container or provided as stand-alone scalar values.
Tip
To adopt changes while creating new block - visit our updated blocks creation guide.
To migrate existing blocks - take a look at migration guide.
🖌️ Increased JPEG compression quality
WorkflowImageData
has a property called base64_image
which is auto-generated out from numpy_image
associated to the object. In the previous version of inference
- default compression level was 90%
- we increased it to 95%
. We expect that this change will generally improve the quality of images passed between steps, yet there is no guarantee of better results from the models (that depends on how models were trained). Details of change: #798
Caution
Small changes in model predictions are expected due to this change - as it may happen that we are passing slightly different JPEG images into the models. If you are negatively affected, please let us know via GH Issues.
🧠 Change in Roboflow models blocks
We've changed the way on how Roboflow models blocks work on Roboflow hosted platform. Previously they were using numpy_image
property of WorkflowImageData
as an input to InferenceHTTPClient
while executing remote calls - which usually caused that we are serialising numpy image to JPEG and then to base64
, whereas usually on Roboflow hosted platform, we had base64
representation of image already provided, so effectively we were:
- slowing down the processing
- artificially decreasing the quality of images
This is no longer the case, so we do only transform image representation (and apply lossy compression) when needed. Details of change: #798.
Caution
Small changes in model predictions are expected due to this change - as it may happen that we are passing slightly different JPEG images into the models. If you are negatively affected, please let us know via GH Issues.
🗒️ New kind inference_id
We've diagnosed the need to give a semantic meaning for inference identifiers that are used by external systems as correlation IDs.
That's why we introduce new kind - inference_id
.
We encourage blocks developer to use new kind.
🗒️ New field available in video_metadata
and image
kinds
We've added new optional field to video metadata - measured_fps
- take a look at 📖 docs
🏗️ Changed
- Disable telemetry when running YOLO world by @grzegorz-roboflow in #800
- Pass webrtc TURN config as request parameter when calling POST /inference_pipelines/initialise_webrtc by @grzegorz-roboflow in #801
- Remove reset from YOLO settings by @grzegorz-roboflow in #802
- Pin all dependencies and update to new versions of libs by @PawelPeczek-Roboflow in #803
- bumping owlv2 version and putting cache size in env by @isaacrob-roboflow in #813
🔧 Fixed
- Florence 2 - fixing model caching by @probicheaux in #808
- Use measured fps when fetching frames from live stream by @grzegorz-roboflow in #805
- Fix issue with label visualisation by @PawelPeczek-Roboflow in #811 and @PawelPeczek-Roboflow in #814
Full Changelog: v0.26.1...v0.27.0
v0.26.1
What's Changed
- Make skypilot optional for inference-cli by @sberan in #792
- Add usage_billable to BaseRequest by @grzegorz-roboflow in #793
- Handle malformed usage_fps by @grzegorz-roboflow in #795
- Feature/extend line counter block outputs by @grzegorz-roboflow in #797
- Add turn server configuration to webrtc connection by @grzegorz-roboflow in #799
Full Changelog: v0.26.0...v0.26.1
v0.26.0
🚀 Added
🧠 Support for fine-tuned Florence-2 💥
As part of onboarding of Florence-2 fine-tuning on Roboflow platform, @probicheaux made it possible to run your fine-tuned models in inference
. Just complete the training on the Platform and deploy it using inference
, as any other model we support 🤯
🚦Jetpack 6 Support
We are excited to announce the support for Jetpack 6 which will enable more flexibility of development for Nvidia Jetson devices.
Test the image with the following command on Jetson device with Jetpack 6:
pip install inference-cli
inference server start
or pull the image from
docker pull roboflow/roboflow-inference-server-jetson-6.0.0
🏗️ Changed
InferencePipeline
video files FPS subsampling
We've discovered that the behaviour of max_fps
parameter is not in line with inference clients expectations regarding processing of video files. Current implementation for vides waits before processing the next video frame, instead dropping the frames to modulate video FPS.
We have added a way to change this suboptimal behaviour in release v0.26.0
- new behaviour of InferencePipeline
can be enabled setting environmental variable flag ENABLE_FRAME_DROP_ON_VIDEO_FILE_RATE_LIMITING=True
.
❗ Breaking change planned
Please note that the new behaviour will be the default one end of Q4 2024!
See details: #779
Stay tuned for future updates!
Other changes
- Pass countinference to usage collector by @SolomonLake in #774
- Do not run tests if branch is not up to date with main by @grzegorz-roboflow in #767
- Include resource_details.billable in workflows usage by @SolomonLake in #776
- Add hostname with optional DEDICATED_DEPLOYMENT_ID to usage payload by @grzegorz-roboflow in #778
- Return single top class confidence for mulit-label predictions by @EmilyGavrilenko in #781
- Aggregate usage for streams and photos separately by @grzegorz-roboflow in #786
- Add gzip support by @alexnorell in #783
- avoiding downloading images if possible by @isaacrob-roboflow in #782
🔧 Fixed
- vulnerability issue with
crypthography
by @PawelPeczek-Roboflow in #790 - Fix model type for classification by @robiscoding in #773
- fix case where there are no good matches for the prompt by @isaacrob-roboflow in #770
- Bugfix: keypoint visualization block by @EmilyGavrilenko in #769
- Do not store usage in cache when API key is not available by @grzegorz-roboflow in #772
- Fix the bug with two stage workflow and continue-if failing when nothing gets detected by primary model by @PawelPeczek-Roboflow in #777
- Remove debug step from 'Test package install - inference-gpu' by @grzegorz-roboflow in #780
- Allow easier inheritance of pipeline by @RossLote in #789
🏅 New Contributors
Full Changelog: v0.25...v0.26.0
v0.25
🚀 Added
Newer onnxruntime
👉 faster inference
on MacBook 🐎
@yeldarby bumped the onnxruntime
from 0.15.x
into 0.19.0
and that small change induced great performance improvement for YOLOv8 models running on resolution up to 640 🤯 Some variants of yolo runs now 2x faster on M2 chips ❗
profiling.mp4
🏎️ Better and Faster OWLv2 inference
@isaacrob-roboflow and @probicheaux prepared something special in #759, #763 and #755
🧙 Box prompting in annotations
We built a new tool to automatically label your data for you!
Inspired by a recent open source release, now when you annotate a dataset you can automatically get recommendations for other likely bounding boxes! And if you don’t like a recommendation, you can mark it as ‘negative’ and it will learn not to recommend boxes like that again!
Under the hood we use your annotations and feedback to train a few shot model based on OWLv2 on the fly, and then run it against your data to propose other likely bounding boxes.
We think this will save you a lot of time!
🐎 Inference speedup
Over 10x inference speed boost on T4 GPU. Previous version run in 440ms, now it is only 36ms 🔥
Workflows enhancements
🅰️ Single character detection 👉 OCR
Ever wondered how to read the text if you have model detecting separate characters? Now it is easy with workflows thanks to @reiffd7
Check out Stitch OCR Detections block docs 📖
ocr_stitch.mp4
🤺 Keypoints detection visualisation
Thanks to @EmilyGavrilenko, Workflows can now visualise predictions from keypoints detection models - for instance pose-estimation ones 😄 I bet you find the visualisation familiar - the new block is powered by supervision
.
Check out Keypoint Visualization block docs 📖
keypoints_visualization.mp4
🔧 Fixed
- Binary attachments in e-mail block (like JPEG images) now are possible to be sent - @PawelPeczek-Roboflow in #758
🏅 New Contributors
- @isaacrob-roboflow made their first contribution in #759
- @reiffd7 made their first contribution in #765
Full Changelog: v0.24.0...v0.25.0
v0.24.0
🚀 Added
🎥 Data analysis and export in Workflows
We’re excited to introduce a suite of new blocks to supercharge your video processing and streamline your workflow exports!
✨ What’s New?
- Enhanced Video Analytics: Easily track object counts over time or within specific zones. Want to know how many items appear in a unit of time? ✅ Now you can!
- Custom Notifications: Send automatic emails 📧 when a detected object enters a defined area. Stay informed without manual checks!
- REST API Integration: Effortlessly export your workflow results 🌐. Connect to any REST API and deliver your data wherever you need it.
Our new blocks make your Workflows more powerful and versatile than ever before. Start building smarter workflows today! 🚀
video_analysis_with_workflows.mp4
New blocks
- Data Aggregator: Collects and processes Workflow data to create time-based analytics. 📊 Supports custom aggregation strategies, making it easy to summarize data streams efficiently.
- CSV Formatter: Formats the data into CSV files which can be saved or send as an attachment to in notification block 📚
- Email Notification: Send email notifications 📧 in Workflows.
- Local File Sink: Saves data generated in Workflow runtime into local file 📁
- Webhook SInk: Enables users to integrate their Workflows with REST API to export data or analysis results
Important
At the moment of release, Workflows UI lack some capabilities to display new blocks, but stay tuned - we will fix that shortly
🏷️ Tracking stabiliser block
Ever experienced flickering detections and loosing tracker id? We know this pain - that's why @grzegorz-roboflow prepared Detections Stabilizer block.
376666040-4a259335-ac24-4af0-a1c5-46b4bc27f093.1.mp4
💻 Improvements in stream processing
Each week we are closer and closer to enabling full-blown video processing features - this week @grzegorz-roboflow and @hansent pushed us forward:
- WebRTC streams are now faster - #751
- we have better management of
InferencePipelines
ininference
server - #751
🔧 Fixed
- Loosed
typer
requirements in #746 fixing the problem raised in #738 - Fixed Google Vision OCR icon by @brunopicinin in #749
🌱 Changed
- Adding more inference metrics to the prometheus scraper by @bigbitbus in #750
Full Changelog: v0.23.0...v0.24.0
v0.23.0
🚀 Added
🕵️ Predictions difference visualization in Workflows 🔎
Ever felt like a detective trying to uncover the subtle differences between model predictions? It used to be hard—sifting through data, struggling to spot where models disagreed. But not anymore! 🔦
The Model Comparison Visualization block makes comparing models effortless by visually highlighting the differences between two models’ predictions.
Don't you think that was a great idea by @yeldarby to create the block?
✨ Just take a look how it works
multiple_models_comparison.mp4
🐎 Compilation cache in Workflows Execution Engine 🚀
If you're familiar with programming, you know the trade-off between compiled and interpreted languages: interpreted ones offer flexibility, but interpreting every line of code can slow things down. To overcome this, interpreters often cache code to speed up execution.
We realized that the Workflows Execution engine was adding unnecessary graph interpretation overhead, even when running the same workflow multiple times. 🕒 In the quest for speed, we’ve introduced compiled Workflow caching, which drastically reduces execution time for repeated workflows! ⚡
When you will be able to see the speed-up? If you send multiple requests to inference
server asking to run the same Workflow - you will be impacted 😄 Now your workflows will run faster than ever! 🎯
Full details and benchmark results are available here
📐 Distance measurement in Workflows 📏
Introducing the Distance Measurement block, now available in Workflows! This block calculates the distance between two bounding boxes on a 2D plane using a camera positioned perpendicularly.
🔍 Key Features:
- Measure distance in centimeters or pixels with ease.
- Use either a reference object of known size or a pixel-to-centimeter ratio for accurate scaling.
- Whether you're analyzing footage or comparing object placements, this block gives you precise, scalable distance measurements in your workflows. Try it out and streamline your 2D distance calculations! 📐
Everything thanks to @ediardo 🏅
📊 inference
server telemetry
Thanks to @robiscoding, inference
server gained ability to export detailed metrics that can be pooled in runtime to ensure better service observability. Check out details.
🗞️ Exciting news
🎥 Video processing with Workflows
The Roboflow team is pushing the boundaries of video processing within Workflows, laying the foundation for powerful new capabilities. You can catch a glimpse of the preliminary changes we've introduced thanks to @grzegorz-roboflow: #719, #743,
Stay tuned as we continue to build and enhance video processing features, making it easier than ever to integrate video into your workflows. 📹✨
🌱 Changed
Deprecation of video_metadata
kind
The video_metadata kind has been deprecated. We recommend switching to the updated image kind, which now supports optional video_metadata
. We plan to remove video_metadata kind in Execution Engine v2.0.0
While this is non-breaking, some older blocks may become incompatible with future video processing blocks.
With the updated internal representation of image kind, two new methods, WorkflowImageData.copy_and_replace(...)
and WorkflowImageData.create_crop(...)
, have been added for easier metadata manipulation. See the updated usage guide.
From now one, we will also publish list of changes in Workflows Execution Engine in a changelog 📖
Remaining changes
- Add yolov11 aliases to
inference_sdk
by @probicheaux in #730 - CI changes by @alexnorell in #740, #700
- Update license reference by @emmanuel-ferdman in #741
- Retrieve device stats for docker containers by @robiscoding in #739
🏅 New Contributors
- @alexnorell made their first contribution in #740
- @emmanuel-ferdman made their first contribution in #741
- @ediardo made their first contribution in #731
Full Changelog: v0.22.2...v0.23.0
v0.22.2
What's Changed
- Relax openvino version by @probicheaux in #727
- Bump version by @probicheaux in #728
Full Changelog: v0.22.1...v0.22.2
v0.22.1
Bumps ONNX Runtime requirements to ensure our users can run the new yolov11 models. Also adds some yolov11 documentation to the aliases page.
What's Changed
- yolov11 improvements by @probicheaux in #726
Full Changelog: v0.22.0...v0.22.1
v0.22.0
🚀 Added
🔥 YOLOv11 in inference
🔥
We’re excited to announce that YOLOv11 has been added to inference
! 🚀 You can now use both inference
and the inference
server to get predictions from the latest YOLOv11 model. 🔥
All thanks to @probicheaux and @SolomonLake 🏅
skateboard_yolov11.mov
Try the model ininference
Python package
import cv2
from inference import get_model
image = cv2.imread("<your-image>")
model = get_model("yolov11n-640")
predictions = model.infer(image)
print(predictions)
💪 Workflows update
Google Vision OCR in workflows
Thanks to open source contribution from @brunopicinin we have Google Vision OCR integrated into workflow ecosystem. Great to see open source community contribution 🏅
google_vision_ocr.mp4
See 📖 documentation of the new block to explore it's capabilities.
Images stitch Workflow block
📷 Your camera is not able to cover the whole area you want to observe? Don't worry! @grzegorz-roboflow just added the Workflow block which would be able to combine the POV of multiple cameras into a single image that can be further processed in your Workflow.
image 1 | image 2 | stitched image |
---|---|---|
📏 Size measurement block
Thanks to @chandlersupple, we can now measure actual size of objects with Workflows! Take a look at 📖 documentation to discover how the block works.
Workflows profiler and Execution Engine speedup 🏇
We've added Workflows Profiler - ecosystem extension to profile the execution of your workflow. It works for inference
server requests (both self-hosted and on Roboflow platform) as well as for InferencePipeline
.
The cool thing about profiler is that it is compatible with chrome://tracing
- so you can easily grab profiler output and render it in Google Chrome browser.
To profile your Workflow execution use the following code snippet - traces are saved in ./inference_profiling
directory by default.
from inference_sdk import InferenceHTTPClient
client = InferenceHTTPClient(
api_url="https://detect.roboflow.com",
api_key="<YOUR-API-KEY>"
)
results = client.run_workflow(
workspace_name="<your-workspace>",
workflow_id="<your-workflow-id>",
images={
"image": "<YOUR-IMAGE>",
},
enable_profiling=True,
)
See detailed report regarding speed optimisations in the PR #710
❗ Important note
As part of speed optimisation we enabled server-side caching for workflows definitions saved on Roboflow Platform - if you frequently change and your Workflow, to see results immediately you need to specify use_cache=False
parameter of client.run_workflow(...)
method
🔧 Fixed
- Fix prometheus scraping by @robiscoding in #712
- Fix the problem with VLMs on batch inference by @PawelPeczek-Roboflow in #718
🌱 Changed
- Docker auto-reload configuration by @EmilyGavrilenko in #703
- Multi-Label Classification UQL Operations by @EmilyGavrilenko in #714
- Add port forward to Notebook Landing Page message by @hansent in #711
- Add optional descriptions to dynamic blocks by @EmilyGavrilenko in #702
- Add descriptions to task types in
VLM as Detector
by @PawelPeczek-Roboflow in #704 - Add tests for Google Vision OCR by @PawelPeczek-Roboflow in #715
- Improvements regarding custom python blocks by @PawelPeczek-Roboflow in #716
🏅 New Contributors
We do want to honor @brunopicinin who made their first contribution to inference
in #709 as a part of Hacktoberfest 2024. We invite other open-source community members to contribute 😄
Full Changelog: v0.21.1...v0.22.0
v0.21.1
What's Changed
- Improvements in contribution guides by @PawelPeczek-Roboflow in #691
- Fix issue with SAM2 producing segmentation masks as points and lines by @PawelPeczek-Roboflow in #697
Full Changelog: v0.21.0...v0.21.1