Vehicle RF-DETR Small(車両 RF-DETR Small)

モデルラボ(インフラインテリジェンス)が公開している物体検出モデルです。 道路の画像や固定カメラの映像から車両を見つけ、日本の車の形に合わせた9つの種類に分けます。 映像の車両を種類ごとに数える(交通量を数える)ためのコードも同梱しています。

  • 見つけるもの: 車両(乗用車・バン・軽トラック・小型トラック・中型・大型トラック・トレーラー・バス・オートバイ・特殊車両の9クラス)
  • 元のモデル: RF-DETR Small(COCO で事前学習した公開重み、Apache-2.0)を追加学習
  • 学習: Mapillary に投稿された日本国内の路上の画像(CC BY-SA 4.0)
  • 入力: 512×512 の RGB 画像(縦横比を保たずに正方形へ引き伸ばす)
  • 出力: dets6([1, 300, 6]、1行が [x1, y1, x2, y2, score, class_id])
  • 使うしきい値: 0.45
  • ライセンス: 重みとコードは Apache-2.0。学習データの帰属表示は NOTICE と ATTRIBUTION.csv

何を見つけるか

交通量調査の車種の区分はナンバープレートで決まりますが、画像からナンバーは読めないので、見た目で分かる9つの種類に分けます。 台数は、数えたあとで交通量調査の区分に足し合わせます(次の節)。

番号 クラス 種類 見分け
0 car 乗用車 セダン・ハッチバック・SUV・ミニバン・ステーションワゴン・軽乗用車。タクシー・パトカーも含む
1 van バン ハイエース・キャラバンのような箱形で、ボンネットが短いか無い車。軽バンも含む
2 kei_truck 軽トラック 軽の運転席(幅が狭く、前に短い鼻)と、低いあおりの荷台
3 small_truck 小型トラック 2トン級まで。運転席の幅が乗用車に近く、後輪は1軸。平ボディ・箱・ダンプ・保冷車を含む
4 large_truck 中型・大型トラック 4トン級から上。運転席が高く幅が広い。後輪が2軸以上。タンクローリー・ミキサー車・塵芥車(中型以上)・車両運搬車を含む
5 trailer トレーラー(連結車) けん引する車と荷台がつながった物を1台として1つの枠にする。荷台だけで停まっている物も含む
6 bus バス 路線バス・観光バス・マイクロバス・送迎の中型・小型バス
7 motorcycle オートバイ 原付・スクーター・大型二輪。乗っている人も枠に含める
8 special_vehicle 特殊車両 建設機械・フォークリフト・除雪車・農耕用トラクタ・道路の作業車(高所作業車・標識車・散水車)
  • 枠は車体の外接矩形です。ミラー・荷台の積み荷・はみ出したクレーンの腕も含めます。オートバイは乗っている人も含めます。
  • 自転車・車いす・ベビーカーは見つけません。広告や車体のラッピングに描かれた車、カーブミラーや窓ガラスに映った車も見つけません。
  • 停まっている車も走っている車も見つけます。

交通量調査の区分への足し合わせ

クラス 4区分 2区分
car 乗用車 小型車
van 小型貨物車 小型車
kei_truck 小型貨物車 小型車
small_truck 小型貨物車 小型車
large_truck 普通貨物車 大型車
trailer 普通貨物車 大型車
bus バス 大型車
motorcycle 別に数える 別に数える
special_vehicle 特殊車両(別に数える) 特殊車両(別に数える)
  • バンには乗用の登録の物(ワゴン)もある。形では分けられないので、小型貨物車に入れる。
  • 幅の広い2トン車は、普通貨物車の登録のことがある。
  • ライトバン(形はステーションワゴン)は car に入るので、小型貨物車が少なめに、乗用車が多めに出る。
  • 交通量調査の区分はナンバープレートで決まる。このモデルはナンバーを読まず形で分けるので、4区分・2区分の台数は推定になる。

区分の決め方は、福井県「平成22年度道路交通センサスの解説」(https://www.pref.fukui.lg.jp/doc/douken/census/h22census_d/fil/001.pdf) を参考にしました。

ファイル

ファイル 中身
vehicle_rfdetr_small_v1.pth PyTorch の重み(rfdetr 1.11.2 で読み込めることを確認。torch.load(weights_only=True) で開ける)
vehicle_rfdetr_small_v1.onnx ONNX(opset 17、入力 512×512 で固定)。出力は dets6
config.json クラス・交通量調査の区分への足し合わせ・入出力・前処理・しきい値
MODEL_CONTRACT.md 入出力の決まり(dets6)
counting/ 映像の車両を数えるコード(線で数える・道路ごとのゲートで流入・流出と方向別を数える)。使い方は counting/README.md
eval/ 評価の結果と、形式ごとの出力の一致の記録
examples/predict_onnx.py ONNX で動かす例
LICENSE / NOTICE / ATTRIBUTION.csv ライセンスと帰属表示(学習に使った画像ごとの投稿者)

使い方

ONNX

pip install onnxruntime numpy opencv-python
python examples/predict_onnx.py vehicle_rfdetr_small_v1.onnx road.jpg

PyTorch(rfdetr)

from rfdetr import RFDETRSmall

model = RFDETRSmall(pretrain_weights="vehicle_rfdetr_small_v1.pth", num_classes=9)
detections = model.predict("road.jpg", threshold=0.45)
print(detections.xyxy, detections.class_id, detections.confidence)

class_id の番号は「何を見つけるか」の表のとおりです。 predict は同じ枠を種類を替えて2回返すことがあるので、台数を数えるときは種類を問わない NMS をかけてください(detections.with_nms(threshold=0.7, class_agnostic=True))。

映像で台数を数える

pip install rfdetr trackers supervision opencv-python
cd counting
# 線を越えた車両を、向きごとに数える
python count.py video.mp4 --weights ../vehicle_rfdetr_small_v1.pth --out out/line --line 0,0.6,1,0.6
# 交差点の道路ごとのゲートで、流入・流出と、どの道路からどの道路へ行ったかを数える
python count.py video.mp4 --weights ../vehicle_rfdetr_small_v1.pth --out out/gates --gates gates.json

追跡は Roboflow の trackers(ByteTrack・OC-SORT)です。gates.json の書き方は counting/README.md にあります。

入出力の決まり

  • 入力 image は [1, 3, 512, 512]、RGB、0〜255 の float32 です。元の画像を正方形へ引き伸ばします(cv2.INTER_LINEAR)。正規化はモデルの中で行います。
  • 出力 dets6 は [1, 300, 6]。1行が [x1, y1, x2, y2, score, class_id] で、座標は 0〜1 の割合です。クエリごとに一番スコアの大きい種類を1つだけ出します。
  • NMS は要りません。score がしきい値以上の行だけを使います。
  • 詳しくは MODEL_CONTRACT.md を見てください。

評価

検証(valid)

学習と同じ地域から、200m 四方の区画ごとに学習と分けた画像 468 枚(車両の枠 1,488 個)での数です。 しきい値を決め、重みを選ぶのに使いました。

指標 値
AP50 0.750
AP50:95 0.612
AP50:95(小さい車、32 画素角未満) 0.218
適合率(しきい値 0.45) 0.803
再現率(しきい値 0.45) 0.749(1,114/1,488)
F1(しきい値 0.45) 0.775
適合率(種類を問わない) 0.900
再現率(種類を問わない) 0.839(1,248/1,488)

AP50 は、予測の枠と正解の枠が IoU 0.5 以上で重なり、種類も同じときに合ったとした平均適合率(AP。しきい値を変えたときの適合率と再現率から出す、検出の総合点)です。 再現率(見逃さずに見つけた割合)と適合率(見つけた物のうち正しかった割合)は、しきい値 0.45 で数えました。 「種類を問わない」は、種類が違っても車として見つけていれば合ったとする数え方で、台数を数えるときに近い数です。

種類ごとの数です。再現率は、しきい値 0.45 で、種類も合ったものの割合です。

クラス 枠の数 AP50 AP50:95 再現率(種類も一致) 再現率(種類を問わない)
car 818 0.881 0.710 0.819 0.847
van 176 0.713 0.626 0.591 0.875
kei_truck 37 0.733 0.608 0.649 0.811
small_truck 113 0.651 0.529 0.637 0.832
large_truck 182 0.741 0.584 0.714 0.802
trailer 36 0.643 0.556 0.500 0.778
bus 42 0.888 0.753 0.810 0.905
motorcycle 72 0.823 0.559 0.736 0.764
special_vehicle 12 0.679 0.579 0.750 0.833

この公開物の重みを CPU で流し直すと、AP50 は 0.750(しきい値 0.45 で適合率 0.803・再現率 0.749)でした。ONNX の出力(dets6。枠ごとに種類を1つだけ出す)で同じように数えると、AP50 は 0.695(適合率 0.805・再現率 0.739)です(eval/valid_reproduced.json)。dets6 は種類を迷った枠でも種類を1つしか出さないので、種類ごとの AP は低く出ますが、しきい値での適合率・再現率はほぼ同じです。

テスト(評価用の地域)

学習にも検証にも使っていない、別の地域の画像 429 枚(車両の枠 1,369 個)で、最後に1回だけ評価しました。しきい値は検証で決めた 0.45 です。

指標 値
AP50 0.642
AP50:95 0.523
AP50:95(小さい車、32 画素角未満) 0.134
適合率(しきい値 0.45) 0.843
再現率(しきい値 0.45) 0.752(1,029/1,369)
F1(しきい値 0.45) 0.795
適合率(種類を問わない) 0.920
再現率(種類を問わない) 0.820(1,122/1,369)
クラス 枠の数 AP50 AP50:95 再現率(種類も一致) 再現率(種類を問わない)
car 1,035 0.885 0.690 0.816 0.837
van 126 0.624 0.541 0.508 0.810
kei_truck 14 0.602 0.556 0.429 0.786
small_truck 28 0.602 0.486 0.607 0.964
large_truck 59 0.550 0.455 0.576 0.644
trailer 12 0.373 0.337 0.250 1.000
bus 32 0.876 0.770 0.812 0.906
motorcycle 57 0.643 0.459 0.561 0.596
special_vehicle 6 0.626 0.409 0.333 0.500

kei_truck(14 個)・small_truck(28 個)・trailer(12 個)・bus(32 個)・special_vehicle(6 個)は枠が少なく、数値は目安です。数値の元データは eval/test.json にあります。

  • テストの正解の枠は、COCO で学習した RF-DETR Large の公開重みの検出(スコア 0.2 以上)を候補にし、AIアシスタントが学習と同じ決まりで判定したものです。数の少ない種類(バス・トレーラー・軽トラック・特殊車両)は、開発者がもう一度見直しました。人が1枚ずつ確かめてはいません。評価するこのモデルの出力は、正解づくりに使っていません。
  • 候補に出なかった車は正解に入らないため、このモデルがそれを見つけると誤検知に数えられます。適合率は実際より低めに出ている可能性があります。

評価についての注意

  • 検証の正解の枠も、学習と同じ付け方(「学習データ」の節)で付けたものです。人が1枚ずつ確かめてはいません。
  • 小さすぎる車(長辺 2048 画素にしたときの幅 24 画素未満)、半分以上隠れて種類が決められない車は、正解に入れていません。こうした車に出た枠は誤検知に数えています。
  • kei_truck(37 個)・trailer(36 個)・special_vehicle(12 個)は検証の枠が少なく、数値は目安です。
  • 数値の元データは eval/ にあります。

映像で数えた結果

渋谷の交差点を高い所から写した昼の映像(3分、1920×1080、30 fps で処理)で、交差点につながる4本の道路にゲートを置いて数えました(追跡は ByteTrack、counting/count.py の既定の設定)。 正解は、AIアシスタントがモデルの出力を見ずに映像のフレームを見て、ゲートを越えた車を1台ずつ付け、同じ車の入口と出口を組んだものです。人が1台ずつ確かめてはいません。

項目 正解 合った 余分
流入(道路ごとの合計) 103台 93台(90%) 0台
流出(道路ごとの合計) 104台 98台(94%) 3台
  • 方向別(どの道路からどの道路へ行ったか): 入口と出口の両方が写る 91台のうち、向きが合ったのは 72台(79%)です。
  • 外れは、歩行者の時間のあとに両方向の車が一度に動き出す 30 秒ほどに集まりました。大型バスが奥の道路の口をふさいだ陰で、すれ違う車の追跡の番号が入れ替わり、ある道路から別の道路へ行った 6台のうち 1台しか合いませんでした。
  • 入口か出口がバスの陰で見えない車は、その端を正解に数えていません。映像は1本・3分だけで、夜・雨・別の交差点では確かめていません。
  • 映像: Internet Archive の livecam-japan1-20181015(SHIBUYA COMMUNITY NEWS(sibch.tv のライブカメラ)、CC BY 3.0)。

苦手なこと・使うときの注意

  • 小さい車: 小さく写った車(32 画素角未満)の AP は検証で 0.218 と低いです。遠くの車は見逃しやすくなります。
  • 夜の光る荷台: 夜の映像で、荷台が白く光る広告トラックには一度も枠が出ませんでした。学習の画像に夜の光る荷台がありません。夜間の成績は確かめていません。
  • バイクの見逃し: 高い所から見下ろした映像では、バイクが小さく、人とも重なり、見逃しました。
  • van と car の取り違え: 軽のバンやワンボックスを car と答えることがあります(検証の van の再現率は、種類も一致では 0.59、種類を問わないと 0.88)。背の高い乗用車とミニバンは car、箱形でボンネットが短い物は van という分け方自体にも迷う車があります。
  • 混雑: 混んだ交差点で向きの違う車がすれ違ったり、大きな車の陰に入ったりすると、追跡の番号が入れ替わり、方向別の台数が外れます。
  • 交通量調査の4区分・2区分への足し合わせは、形からの推定です。ナンバーで決まる区分とはずれます(ライトバンは乗用車に、乗用の登録のワゴンは小型貨物車に入るなど)。
  • 学習の画像は日本国内の路上の画像だけです。ほかの国の車には合わないことがあります。
  • 道路の点検や安全の判断を、このモデルの結果だけで行わないでください。交通量の調査に使うときは、映像の一部を人が数えた台数と比べてから使ってください。

学習データ

Mapillary(https://www.mapillary.com/)に投稿された、日本国内の路上の画像を使いました。画像のライセンスは CC BY-SA 4.0 です。 学習 2,621 枚・検証 468 枚、投稿者は 70 人です。 学習と検証は、200m 四方の区画ごとに分けています(同じ場所の画像が学習と検証の両方に入らないように)。

分割 画像 car van kei_truck small_truck large_truck trailer bus motorcycle special_vehicle 枠の計
学習 2,621 4,425 1,049 231 531 1,046 115 286 518 86 8,287
検証 468 818 176 37 113 182 36 42 72 12 1,488

ラベルの付け方

  • COCO で学習した RF-DETR の公開重みの検出を下書きにし、AIアシスタントが、文書にまとめた決まり(種類の見分け方・枠の付け方・数えない物の扱い)に沿って種類を判定しました。取り違えやすい種類は、もう一度見直しました。
  • 前の版のモデルで、下書きが見逃した車の候補を探し、トレーラー・特殊車両・軽トラックが写った画像を足して、同じように判定しました。
  • 決まりは開発者が決めました。人が1枚ずつ確かめてはいません。
  • 小さすぎる車・種類が決められない車(ignore)は、学習の画像では灰色で塗りつぶし、正解の枠には入れていません。
  • 画像とラベル(データセット)は、この公開物には含めていません。画像そのものは重みに含まれていません。
  • 帰属表示: Contains imagery from Mapillary contributors, licensed CC BY-SA 4.0(https://www.mapillary.com/)。画像ごとの投稿者と元の画像の URL は ATTRIBUTION.csv に、投稿者の一覧は NOTICE にあります。

学習の設定

  • 元の重み: RF-DETR Small(COCO で事前学習した公開重み)
  • 入力の大きさ: 512(正方形へ引き伸ばす。学習のときはバッチごとに大きさを変えて混ぜる)
  • エポック: 30。公開する重みは、学習中の検証の mAP(AP50:95)が一番よかった 10 エポック目のもの
  • バッチ: 4、勾配の累積: 4(実質 16)
  • 学習率: 0.0001(エンコーダ 0.00015)、AdamW、重み減衰 0.0001
  • EMA(重みの移動平均): あり(減衰 0.993)。公開する重みは EMA のもの
  • 乱数の種: 42
  • 計算機: Apple Silicon(PyTorch MPS)

ライセンスと帰属表示

重みとコードは Apache-2.0 です(LICENSE)。著作権表示と帰属は NOTICE にまとめています。

学習に使った画像は CC BY-SA 4.0 ですが、画像そのものは公開物に含めていません。 学習済みの重みは画像そのものではないと考え、重みは Apache-2.0 で公開しています。 この考え方は作者の解釈で、これを確かめた判例はありません。 学習に使った画像への帰属として、Mapillary とその投稿者を NOTICE と ATTRIBUTION.csv に記しています。

元のモデル RF-DETR は Copyright 2025 Roboflow, Inc.(Apache-2.0)です。構造を引用するときは、次の文献を挙げてください(rfdetr 1.11.2 の README に載っている形)。

@inproceedings{robinson2026rfdetr,
  title     = {RF-DETR: Real-Time Detection Transformer},
  author    = {Robinson, Isaac and Robicheaux, Peter and Popov, Matvei and Ramanan, Deva and Peri, Neehar},
  booktitle = {International Conference on Learning Representations (ICLR)},
  year      = {2026},
  url       = {https://arxiv.org/abs/2511.09554}
}

問い合わせ

インフラインテリジェンス(https://infra-intelligence.com/) contact@infra-intelligence.com


English summary

Vehicle RF-DETR Small detects vehicles in road images and fixed-camera video and sorts them into nine classes that follow Japanese vehicle shapes: car, van (box-shaped vans incl. kei vans), kei_truck, small_truck (up to ~2 t, single rear axle), large_truck (4 t and up), trailer (tractor + trailer as one box), bus, motorcycle, special_vehicle (construction machines, road work vehicles, etc.). The class counts can be summed into the 4-class / 2-class categories of Japanese traffic censuses (see config.json); those are estimates because census categories are defined by license plates, which the model does not read. Published by Model Lab (Infra Intelligence). Code for counting vehicles in video (line crossing, and per-road inflow/outflow and origin–destination counts with gates) is included in counting/.

  • Base model: RF-DETR Small (COCO-pretrained, Apache-2.0), fine-tuned on 2,621 training images from Mapillary contributors in Japan (CC BY-SA 4.0). The images are not included.
  • Input image: float32 [1,3,512,512], RGB, raw 0–255, stretched to a square with bilinear interpolation (no antialias, cv2.INTER_LINEAR). Normalization is inside the graph.
  • Output dets6: [1,300,6] rows of [x1,y1,x2,y2,score,class_id], normalized coordinates, one best class per query, no NMS needed.
  • Operating threshold: 0.45 (max F1 on validation).
  • Validation (468 images, 1,488 boxes, split from training by 200 m grid cells): AP50 0.750, AP50:95 0.612; at 0.45: precision 0.803, recall 0.749 (class must match), class-agnostic precision 0.900, recall 0.839. Held-out test results are given in the evaluation section above.
  • Counting (3-minute daytime fixed camera at a Shibuya intersection, 4 road gates, ByteTrack): inflow 93/103 (90%), outflow 98/104 (94%) with 3 extra; origin–destination correct for 72 of 91 vehicles (79%).
  • Limitations: small/distant vehicles (AP_small 0.218), glowing truck bodies at night, motorcycles seen from above, van/car confusion, ID switches in crowded scenes. Labels were made by an AI assistant following written rules set by the developer and were not reviewed by a human image by image. Do not use the results alone for road inspection or safety decisions.
  • Formats: PyTorch (rfdetr), ONNX. ONNX outputs were checked against PyTorch (see eval/onnx_parity.json).
  • License: Apache-2.0 for weights and code. Contains imagery from Mapillary contributors, licensed CC BY-SA 4.0 (contributors in NOTICE and ATTRIBUTION.csv). Contact: contact@infra-intelligence.com
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for infra-intelligence/vehicle-rfdetr-small