Nama Mahasiswa: Akmal Nafis
NRP: 5025211216
Judul TA: Estimasi Kecepatan Relatif dengan Penghapusan Objek Di Optical Flow
Proyek ini menyediakan pipeline untuk mengestimasi kecepatan kendaraan menggunakan optical flow pada video dengan model RAFT untuk optical flow dan Sernet-former untuk segmentasi. Pipeline ini mengekstrak frame dari video, menghitung optical flow, menerapkan segmentation mask, serta menghasilkan perbedaan antara flow field dan mengestimasi kecepatan menggunakan model deep learning.
-
Python 3.7+
-
PyTorch
-
OpenCV
-
NumPy
-
ffmpeg
-
Pandas
-
Matplotlib
-
tqdm
-
Dependensi lain yang tercantum di
Sernet_former/requirements.txt
-
Dependensi lain yang tercantum di
Raft/requirements.txt
-
model pretrained pada Sernet Former dan Raft menggunakan KITTI dan cityscapes atau sejenisnya, agar sesuai dengan video dashcam.
Masuk ke folder terkait, lalu instal dependensi Python:
pip install -r Sernet_former/requirements.txt
pip install -r Raft/requirements.txt
Digunakan untuk menghasilkan file flow_diff.npy
-
Siapkan Video Input
Tempatkan file
.mp4
Anda di direktoriinput_videos/
. -
Jalankan Pipeline
python main.py
Ini akan:
- Mengekstrak frame dari setiap video.
- Menghitung optical flow antar frame menggunakan RAFT.
- Menerapkan segmentation mask menggunakan Sernet-former.
- Menghitung dan menyimpan perbedaan antar flow field, beserta visualisasinya.
-
Hasil
- Frame yang diekstrak:
extracted_frames/<nama_video>/
- Optical flow:
flow/<nama_video>/
- Perbedaan flow dan visualisasi:
flow_diff/diff_<nama_video>/
- Frame yang diekstrak:
- Pastikan Anda memiliki bobot model (model weights) untuk RAFT dan Sernet-former di direktori yang sesuai.
- Script akan otomatis membuat folder output yang diperlukan jika belum ada.
- Pipeline akan memproses semua file
.mp4
di folderinput_videos/
(batch video).
main.py
Raft/
Sernet_former/
input_videos/
extracted_frames/
flow/
flow_diff/
- main.py: Script utama untuk menjalankan pipeline.
- Raft/: Berisi model RAFT dan utilitas optical flow.
- Raft/rdemo.py : file tuning dari demo.py yang disesuaikan untuk project ini
- Sernet_former/: Berisi model segmentasi dan script terkait.
- input_videos/: Tempatkan video
.mp4
Anda di sini. - extracted_frames/: Frame hasil ekstraksi dari video.
- flow/: Hasil optical flow.
- flow_diff/: Perbedaan antar flow field.
Repositori ini berisi kode dan data untuk tugas klasifikasi dan regresi berbasis deep learning menggunakan PyTorch.
- Siapkan data Anda di direktori
data/
. - Sesuaikan data loader dan definisi model jika diperlukan.
- Jalankan script training:
python training_clasification/main.py
python training_regresion/main.py
- Hasil, plot, dan checkpoint model akan disimpan di direktori
result/
.
-
data/
Berisi semua data dan script untuk preprocessing.data_filtered.json
: Dataset utama dalam format JSON, speed pada tiap frame video awal.flow_diff.json
: Hasil perbedaan kecepatan antar frame.diff_speed.py
: Script untuk menghasilkan flow_diff.json dan membagi kelas training.sub.py
: Script untuk memindahkan file .npy dari subfolder. Contohnyaflow_diff/vid0100/flow_diff_vid0100_frame1.jpg.npy
menjadiflow_diff/flow_diff_vid0100_frame1.jpg.npy
. Sangat berguna jika terdapat batch folder.flow_diff/
: Berisi file.npy
yang mewakili perbedaan optical flow untuk setiap frame/urutan.
-
result/
Menyimpan hasil training model, termasuk plot dan checkpoint model.training_clf/
,training_reg/
: Hasil untuk klasifikasi dan regresi.
-
testing/
Script dan modul untuk pengujian model.data_loader.py
,test.py
: Script untuk loading data dan pengujian.cnn/
,model/
: Definisi model cnn dan model hasil training.
-
training_clasification/
Kode untuk training model klasifikasi.train.py
: Training loop utama untuk klasifikasi.data_loader.py
,main.py
: Script loading data, dan main programcnn/
: Definisi model CNN.
-
training_regresion/
Kode untuk training model regresi.train_reg.py
: Training loop utama untuk regresi.data_loader.py
,main.py
: Script loading data dan entry point.cnn/
: Definisi model CNN.
- Tujuan:
Data raw mentah setiap frame dari proses video. untuk membuatdiff_speed.py
sebagai label pada setiap flow_diff.npy
- Tujuan:
Menyimpan informasi tentang perbedaan optical flow antar frame. Digunakan untuk training.
- Tujuan:
Berisi file.npy
yang mewakili perbedaan optical flow untuk setiap frame/urutan. File tersebut diasosiasikan dengan flow_diff.json
-
Tambahkan file video ke folder
input_videos/
(misal:test1.mp4
). -
Jalankan pipeline utama:
python main.py --initial_speed 0 --folder test1 --gt_json json/test1.json
--initial_speed
: Nilai kecepatan awal (misal: 65.0)--folder
: Nama subfolder di dalamflow_diff
(misal: test1)--gt_json
: (Opsional) Path ke file JSON ground truth
-
Hasil akan disimpan di folder
result/
.
- Ekstraksi Frame: Mengekstrak frame dari video input menggunakan FFmpeg.
- Optical Flow: Menghitung optical flow antar frame menggunakan RAFT.
- Segmentasi: Melakukan segmentasi pada frame menggunakan Sernet_former.
- Flow Difference: Menghitung perbedaan optical flow antar frame, dengan masking berbasis segmentasi.
- Estimasi Kecepatan: Mengestimasi kecepatan menggunakan model deep learning.
main.py
input_videos/
extracted_frames/
flow/
flow_diff/
json/
Raft/
Sernet_former/
Speed_estimation/
result/
temp/ (view.py untuk visualisasi panah vektor)
-
Tambahkan file video ke folder
input_videos/
(misal:test1.mp4
). -
Jalankan pipeline utama:
menggunakan Ground truth
python main.py --initial_speed 0 --folder test1 --gt_json json/test1.json
tidak menggunakan Ground truth
python main.py --initial_speed 0 --folder test1
--initial_speed
: Nilai kecepatan awal (misal: 65.0)--folder
: Nama subfolder di dalamflow_diff
(misal: test1)--gt_json
: Path ke file JSON ground truth (opsional)
- Hasil akan disimpan di folder
result/
.
- RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
- https://github.com/serdarch/SERNet-Former
- Pipeline akan memproses semua file
.mp4
di folderinput videos
- Fps pada video sangat berpengaruh, hasil dari internet tidak konsisten. Meskipun saya menggunakan video 24fps/ hasil konversi dari 30fps ke 24fps (untuk menghindari frame duplaicate). Masih mengakibatkan adanya frame noise, pergerakannya berbeda sendiri. Sehingga pada hasil optical flow difference setiap beberapa frame akan muncul frame noise yang sangat berbeda
- Dibeberapa frame perpindahan pikselnya tidak konsisten, biasanya tiap 6 frame pergerakannya berbeda dari frame sebelumnya. Hal tersebut mengakibatkannya noise (optical flownya berbeda sendiri). Frame tersebut seharusnya tidak dimasukkan dalam proses training.