Dwi Yuda

Dwi Yuda

I audit my own work before someone else has to.

Informatics graduate from Universitas Islam Riau, Pekanbaru. I work on computer vision, LLM applications, and the evaluation that decides whether either one is telling the truth.

dwiiyudaaa@gmail.comLinkedInGitHub

GPA, cum laude
3.86/ 4.00
Thesis dataset
1,645images
Taught over 4 semesters
~300undergraduates
Four years, no repeats
144credits

Where the habit came from

I went to a pesantren for junior and senior high school. Arabic came from those years, and I can still hold a conversation in it, though I would not claim more than that. The language faded faster than the thing underneath it, which was the practice of staying with one text until it gave way.

Most of what I know as an engineer came from problems that were not mine. As a teaching assistant I reviewed six final-year projects across object detection, time series, clustering, and retrieval-augmented generation. The code and the reports belong to the people who wrote them. What I kept is range. The same category of mistake turns up in every one of those domains, and I have learned where it tends to sit.

When a task gets heavy my reflex is to build a tool for it instead of working faster. That is how the grading system started. It is also how I ended up auditing my own thesis dataset and finding a leak in it. I would rather report a smaller number that holds than a larger one that does not.

2022 to 2026

  1. Enrolled in Informatics at Universitas Islam Riau

    What followed ran four years to 144 credits, without a repeated course.

  2. Vice chairman, HIMATIF

    Seven operational divisions and 50 members, reporting to the chair.

  3. Desa Binaan, Pulau Gadang

    Community programme in Kampar. Pre-survey ran on 25 October.

  4. Teaching assistant

    Six courses and nine classes over the four semesters that followed.

  5. Journal article published, village internship begins

    I-Com Vol. 5 No. 1 on 10 March. OpenSID deployment starts the same month.

  6. Thesis defended

    Passed outright, scored 82.07, graded A. Six credits, no revision round.

  7. Commencement

    The degree was finished in July. What is left is the ceremony.

Two jobs, both finished

Teaching Assistant

Universitas Islam Riau · Nov 2024 – Jun 2026

  • Ran lab sections for six courses over four semesters. Around 300 undergraduates, nine classes.
  • Wrote the Statistics and Probability practicum myself and taught it: Z-test, T-test, ANOVA, confidence intervals.
  • Built the SQL lab modules on subqueries, views, and concurrency control. Student queries got debugged live, mid-session.
  • Reviewed six final-year projects across object detection, time series, clustering, and retrieval-augmented generation. Model setup, evaluation method, written report.
A computer lab at the end of a practicum session. Around
            thirty-five undergraduates stand and sit between two rows of
            monitors, facing the camera.
One of nine lab classes. Photograph used with permission.

Web Development Intern

Pulau Gadang Village Government, Kampar · Mar – Aug 2025

  • Deployed OpenSID v22.10 on PHP, CodeIgniter, and MariaDB as the village's official information system. The database holds 1,794 residents across 517 households.
  • Unlocked the User Group Management module, which OpenSID ships locked. Staff could then set their own access roles instead of sharing one administrator account.
  • Rebuilt the APBDes budget page to the village head's specification. Three tables of raw figures became one donut chart of budget against realisation.
  • Gathered requirements with village staff, then checked every figure with the finance officer before writing code.
  • Kept 570 articles, 77 MSME listings, and boundary maps for 4 hamlets current, on a scheduled backup.
The village budget page before the rebuild: three columns of
              plain tables listing budget and realisation figures for revenue,
              spending, and financing.
Before. Three tables, no way to see proportion at a glance.
The same page after the rebuild: a single donut chart showing
              total budget with three labelled segments and their amounts
              listed beside it.
After. One donut chart, budget against realisation.

Two I can defend line by line

Student ID card forgery detection

Final year project · PyTorch, FastAPI, Next.js 14, OpenCV ·Repository

Card checks at the university library were a person looking at a card. The printed QR code was never wired to any database, so a good forgery only had to survive a glance. This is a four-stage pipeline that decides instead, and shows its reasoning.

  1. Qwen3-VLSemantic gate. Rejects anything that is not an ID card, zero-shot.
  2. Florence-2 + CannyPhrase grounding locates the card, then edge detection crops and deskews it.
  3. EfficientNet-B0Binary classifier, genuine against forged.
  4. Grad-CAMHeatmap over the region that drove the decision.

The dataset is 1,645 images, 845 genuine scans and 800 forgeries built under five scenarios: generative-AI face swap, font inconsistency, print-scan recapture, identity text tampering, and hybrids that stack one on another. The model that ships runs at 1024×474 on a group-aware 80:10:10 split and scores 1.0000 across accuracy, precision, recall, F1, and ROC-AUC. It fits in 4 GB of VRAM.

The audit

Four models. Four perfect scores, with confusion matrices holding no errors at all. A result like that is not something to celebrate. It is a reason to go and check the data.

The check found something. Every forgery was built from a real card and kept its number, so real_214 becamefake_214. My split script shuffled the genuine files and the forged files independently, which let two halves of one physical card land on opposite sides of the train-test boundary. On the 80:10:10 split, 48 of 165 test images were contaminated. That is 29.1%. On 70:15:15 it was 71 of 248.

I rewrote the split to work on card families rather than files. Every derivative of one card now lands in the same subset. Contamination went to zero.

Then I retrained, and it was still 1.0000.

The leak was real and it explained nothing. I had spent the audit proving my own suspicion wrong. A five-fold group-aware cross-validation agreed. At 1024×474 the two classes genuinely do separate, and the contamination had been riding along without changing the outcome.

My examiners raised a different objection. If every model scores 1.0, there is no basis for saying which one is better. They asked for results that were not perfect.

The quick way to do that is to make the numbers worse. I did not. Instead I ran a resolution ablation, holding every other parameter fixed and dropping the input to each architecture's native size, 224×224 for B0 and 300×300 for B3. Accuracy fell to between0.9606 and0.9774 on its own, and the fall carried information: the model leans on high-frequency forensic traces that do not survive being shrunk.

Every false negative in those runs came from one scenario. Font inconsistency. Not a single face swap, recapture, text patch, or hybrid got past. Four files defeated every native-resolution model I trained. Letterforms are the finest detail in the dataset, so they are the first thing to go when a card is squeezed to 224 pixels wide.

LLM practicum grading system

Personal project, approved by the head of department · Python, Gemini API

  • Reads the question, the answer key, and the lecturer's rubric, scores each submission against it, then writes an Excel recap with feedback per student. Covers eight sessions, six of material plus a quiz and a final.
  • No retrieval layer. The whole context fits in one prompt, so RAG would have been machinery with nothing to do.
  • Every output carries a confidence label. Anything below high confidence goes to a human before it counts.
  • Answer keys drafted by the model are validated by the lecturer before they grade anything. Student code is read, never executed.

Running things I did not build

Vice Chairman, HIMATIF

Informatics Student Association, UIR · Feb 2024 – Apr 2025

  • Supervised seven operational divisions and 50 members, reporting to the chair.
  • Directed the Research and Technology division through the association's Next.js profile site. I set the scope and reviewed what came back. The code is theirs.
  • Ran an IT and cyber security seminar at SMK Labor for around 50 vocational students. Twelve volunteers delivered it with me.
  • Coordinated the student induction camp: 280 participants, 100 committee members.

Student team member, Desa Binaan

Pulau Gadang, Kampar · Oct 2024 – Mar 2025

  • Community empowerment programme run by a UIR student team. The pre-survey went out on 25 October 2024.
  • Sessions at the village hall with the village head and every member of staff, on village law and on publishing budget records.
  • The programme was written up afterwards and published. It is the article in the next section.
Handover in the village meeting room. A student team member
            passes a laptop showing the new site to the village head, with four
            others standing alongside.
Handing the finished site to the village head. Photograph used with permission.

One article, and what it is not

Pemberdayaan Desa Binaan Berbasis Budaya Hukum dengan Penerapan (SIMDES) Sistem Informasi Transparansi Dana Desa di Pulau Gadang

On a village fund transparency information system, built around legal literacy for village staff.

Journal
I-Com: Indonesian Community Journal
Issue
Vol. 5 No. 1, March 2025, pp. 333–342

I am the seventh of eleven authors. The team was led by Dr. Heni Susanti from the law faculty, and the article reports the village programme rather than a study of my own. I-Com is a national community-service journal. It is not Scopus-indexed and it is not a research venue, so read it as external evidence that the village work happened, nothing more.

What the transcript says

Cumulative GPA
3.86/ 4.00
Semester 8
4.00final term
Completed in four years
144credits
Thesis defence
82.07graded A

Four years, September 2022 to July 2026, with no repeated course. The lowest grade anywhere on the transcript is a B− in Linear Algebra. Cum laude. The defence on 20 July passed outright, with no revision round attached.

Semester 8 record, PDF

What I use, and where I used it

Modelling

PyTorch
Both training phases of the detection model
Hugging Face Transformers
Qwen3-VL and Florence-2 in the pipeline
Scikit-learn
Metrics and StratifiedGroupKFold on the thesis data
OpenCV
Canny edge detection and deskewing before classification
Grad-CAM
Checking which region drove each decision

Evaluation

Group-aware splitting
Rebuilt the thesis split by card family
ROC-AUC, confusion matrix
Reported per model and per split
Ablation study
Resolution ablation that broke the 1.0 ceiling
Robustness benchmark
JPEG, blur, occlusion, rotation, noise
LLM-as-a-judge
Independent check on the semantic gate

Building

Python
The detection pipeline and the grading system
FastAPI
Serving the detection model
Next.js 14, JavaScript
The detection frontend
PHP, CodeIgniter, MariaDB
OpenSID at Pulau Gadang
SQL, MySQL
Lab modules I wrote for the database course
Git
Everything above

Languages

Indonesian
Native
English
Professional working
Arabic
Elementary, conversational

Reach me

Based in Pekanbaru, Riau. Open to remote.