Lite Classify · free and open source (GPL-3.0) · Windows 10/11 (64-bit) · NVIDIA GPU optional

Source on GitHub · Inquiries: ldbarua@gmail.com · or DM on Facebook

Download
Lite Classify Manual

Part C · Workflow

Workflow, tab by tab

The worked example from start to finish: every control you touch, in the order you touch it, with the settings used for the figures in this manual.

6Tab 1 · Load and prepare imagery

6.1 Start from drone photos (optional, WebODM)

If you have the drone photos but no orthomosaic yet, Lite Classify can have WebODM make the orthomosaic and DSM and then load them. Lite Classify contains no photogrammetry of its own. It sends the photos to a WebODM that you install and run yourself (free and open source, from OpenDroneMap), with one fixed set of processing settings, and downloads only the orthomosaic and the DSM. Skip this step if you already have an orthomosaic from WebODM, Metashape, Pix4D or similar software.

  1. Install and start WebODM. Its Processing Nodes page must show a node online.
  2. Choose Import › Orthomosaic from Drone Photos (WebODM)…, or click No orthomosaic yet? Process drone photos… under Input Data on Tab 1. The WebODM window opens beside the main window; you can keep working while it runs.
  3. Under Connection, click Find to locate WebODM on this PC (the Windows app on port 29800, or Docker on port 8000), or type its address. Enter your WebODM username and password. Remember me keeps the password, encrypted for your Windows account, and the Connection section then starts folded.
  4. Under Photos, pick the Photo folder. The line below summarises it: the number and size of the photos, the camera, the image size, the flight height above take-off, and the ground sampling distance (GSD) estimated from them.
  5. To process only part of the flight, click Choose Area. A map of the photo positions opens beside the form. Drag a rectangle, or pick Polygon, click the corners and double-click to finish. Only photos taken inside the area are sent, and the results are cropped to it. Draw a little beyond what you need: the edges of the area are seen by fewer photos. Scroll to zoom and middle-drag to pan; right-click or Use All Photos clears the area. If an orthomosaic in the same UTM zone is loaded, it is drawn under the photos.
  6. Choose the Quality. Standard aligns the photos at half resolution. Maximum aligns at full resolution, which is much slower for little geometric gain. Resolution is the orthomosaic's pixel size and starts at the estimated GSD; the DSM is made at four times this.
  7. Save results to defaults to a folder beside the photo folder, with _webodm added to its name. The results are odm_orthophoto.tif and odm_dsm.tif.
  8. Click Start Processing. Lite Classify uploads the photos, then follows WebODM's stages (aligning photos, building the dense cloud, the DSM and the orthomosaic) with a progress bar, the elapsed time and WebODM's own log. At the end it downloads the two files, checks them, removes the job from WebODM and offers to load them into Tab 1.
The WebODM window with a photo folder chosen and the area map open, showing 217 photo positions along parallel flight lines
The WebODM window. A 217-photo flight: the summary line gives the camera, flight height and a GSD of about 4.2 cm, which the Resolution box takes over. The map shows where each photo was taken; drawing an area there sends only the photos inside it.

Long runs. A few hundred photos can take hours. You can close the WebODM window, or Lite Classify itself, while WebODM works: a button in the status bar shows the progress, and the next time Lite Classify starts it reconnects to the job (if the password was not remembered, log in and click Reconnect). Closing Lite Classify during the upload stops the job, because a half-uploaded job cannot be resumed. Cancel stops the job and removes it from WebODM. Clean Up WebODM… lists jobs left in WebODM's Lite Classify project and leftover upload files on this PC, and removes them after you confirm.

No ground control points are used: positions and heights come from the photos' GPS, so the map can be shifted by a metre or so, and the DSM's absolute heights can be off by several metres. Height above ground, which the classifier uses, is not affected by a constant offset.

6.2 Load the orthomosaic

  1. On Tab 1, under Input Data, click Browse next to Orthomosaic (or use Import › Orthomosaic) and pick the GeoTIFF. You can also paste a path and press Enter. A WebODM result loads here by itself when you accept the offer at the end of its run.
  2. The image fills the viewer. The line under the resample slider shows its native resolution; for the worked example, 3.304 cm/px and 32,090 × 28,875 px.
  3. Very large images load at reduced resolution. Above about 400 megapixels (less if memory is short), Lite Classify reads the file straight at a coarser resolution, using the file's own overviews, instead of filling memory. The console says so, and the resample controls start at the loaded resolution. The worked example (0.93 gigapixels) loads this way.

Lite Classify reads the first three bands as red, green and blue, and uses the file's mask (or alpha band) to ignore empty corners of rotated mosaics. Building overviews (pyramids) in your photogrammetry software or GIS makes large files load faster.

6.3 Add a DSM (optional, recommended)

  1. Click Browse next to Elevation Model (Optional DSM) and pick the surface model.
  2. Only the file's header is read now. Heights are matched to the working grid when they are first needed, normally during segmentation, by their coordinates. The DSM may have a different pixel size and extent from the orthomosaic (the example's is 13.2 cm against 3.3 cm).

With a DSM the classifier gets 24 features instead of 19. Unload DSM drops it again; do that before segmenting if you want a colour-only model.

6.4 Resample to a working resolution

Very fine imagery makes more, smaller, noisier objects and uses more memory. Resampling re-reads the file at a coarser resolution. It always reads from the original file, so going coarse and back loses nothing.

  1. Type a Target Resolution of 5 cm/px, or move the Resample Scale slider. The cm/px box appears only for projected coordinate systems such as UTM.
  2. Check the preview line under the slider: it shows the target resolution and the new image size, 10,510 × 10,378 px for the example.
  3. Click Apply Resample. Lite Classify checks free memory first and suggests a coarser resolution if the result would not fit.

Resampling clears downstream work. The segmentation, Discover groups, the classification and all training samples are tied to the old pixel grid and are cleared. Your class names and colours are kept, and so are accuracy points (they are stored in map coordinates). Resample first, then segment.

6.5 Process only part of the image (optional)

To work on one area only, for example on a modest computer, during a demo, or when only part of the survey matters, zoom and pan the Tab 1 map to that area and press Process This Extent Only above the map. Only that part of the orthomosaic (and DSM) is read, at the current working resolution, and everything after it (segmentation, features, Discover, classification, export and accuracy) runs on it alone. The rest of the image stays visible around it at lower resolution, with a yellow outline around the processed area, so you can still scroll the whole survey for context.

6.6 Colour correction

Click Color Correction to open the panel. Auto-Correct stretches the image so its darkest 2% and brightest 2% of values become black and white. The sliders adjust brightness, contrast, hue, saturation, temperature and the red, green and blue gains; Reset Colors undoes everything.

Original colours
After Auto-Correct
OriginalAuto-Correct (2–98%)

What correction changes. The corrected image is what the segmenter sees, so it changes where boundaries fall. The features, however, are always measured on the original, uncorrected pixels. Correction helps segmentation on dull or hazy imagery but does not shift the values the classifier learns from.

6.7 Elevation overlay

Tick Show Elevation above the viewer to lay the shaded DSM over the image, and set its Opacity (default 60%). Use it to confirm the DSM lines up with the image: roof edges and crown outlines should sit exactly on their shading.

Close-up of the shaded DSM over the image
Checking alignment. Roofs, the shed and crown edges line up with their relief.

7Tab 1 · Segment the image

ControlRangeDefaultWorked exampleStart here
Object Size0.5–10,000 m²10 m²~8.6 m²The size of one object on the ground. Aim for a few m² to a few tens of m², and small enough that the narrowest thing you map gets objects of its own. Sets Num Segments from the image's valid area.
Num Segments100–2,000,000from Object Size67,536The same choice as a count. Edit either box; the other follows. Whichever you set last is kept when you resample.
Compactness0.01–1.000.150.15Keep 0.15. Lower only if segments cut across clear edges.
Sigma (Smoothing)0–102.52.5Keep 2.5. Raise if segments look ragged or grid-like.
Colour/texture atnative–workingworking grid3.30 cm/pxSet to the native resolution when the image allows: texture then comes from full detail (Part B, 5.3). Shown for images in projected coordinates.
Segmentation EngineCPU · GPUGPU if foundGPUUse GPU when available, and keep the same engine for the whole project.
  1. Set Object Size (or type a segment count) and the other controls above. Read the plan line under Num Segments: it confirms the object size in m² and pixels, and whether the run will be done in one go or as N tiles.
  2. Click Run Segmentation. Lite Classify checks memory first. The console counts through the steps: segmentation (tile by tile if needed), display layers, polygons, features, neighbour features and height above ground.
  3. To stop, click Cancel beside the button. The run stops at its next checkpoint (between tiles, or during feature measurement), and the previous segmentation, if there was one, is kept unchanged.
  4. When it finishes, the console prints the object count and time, and the app opens Tab 2.
  5. Return to Tab 1 and tick Show Segment Boundaries to inspect the result over the image.
Segment boundaries over the row-field crop
Judging the segmentation. Zoom to a few rows, beds and strips. Good segments follow real edges and never straddle two classes. A bed cut into a few pieces is fine; a piece that is half crop row and half bare bed is not.

Checklist before you move on. (1) No segment mixes two of your classes. (2) The smallest things you want to map, such as crop rows, paths or single trees, get their own segments; strips narrower than that can be left to the greenness refinement. (3) Large uniform areas are not shattered into hundreds of slivers. If (1) or (2) fails, raise Num Segments. If only (3) fails, you can live with it.

8Tab 2 · Discover classes

Discover is optional, but it is the fastest way to a good class list and a first set of training samples. You can skip straight to Tab 3 and label from scratch.

8.1 Find groups

  1. Under Find Groups, keep both Appearance (deep features) and Colour, texture, shape & height ticked.
  2. Set Number of groups (5–60, default 30) to well above the number of classes you expect. The example asked for for an expected eight or nine classes.
  3. Keep Leave out segments at the image edge ticked: their patches are partly empty and would group by that.
  4. Click Find Groups. The first run computes the appearance of every segment with the chosen backbone (the slow part, done once per segmentation) and then clusters. Later runs with other settings reuse it. Cancel, beside the button, stops the appearance step; press Find Groups to start it again.

Backbone (optional DINOv3). Under Appearance, Backbone chooses the model that describes each patch. DINOv2 ViT-S/14 (bundled) is the default and needs nothing else. DINOv3 ViT-S+/16 (your file) is optional and not included (the worked example uses it; Part B, 5.4): request access from Meta, download the backbone file dinov3_vits16plus_pretrain_lvd1689m-….pth (about 115 MB) under Meta's DINOv3 License, and choose it when asked. Lite Classify checks the file, reads it where it is, and never copies it into a workspace. Switching backbone recomputes the appearance of every segment, rebuilds the groups, and means training a classifier that used deep features again. The workspace records which backbone made its features; don't compare or combine results from the two without saying so.

8.2 Review a group

The Groups list shows one card per group (Group_01, Group_02…, largest first) with its colour, segment count and a strip of sample tiles. Each tile shows the segment outlined in cyan in the middle third, with its surroundings. Filter it (All, Unnamed, Named, Ignored) and sort it (Largest first, or Look-alikes together to put similar groups side by side). Click a card to open it in the middle panel.

Group colours over the row-field crop
All groups over the row-field crop.
Groups over the whole survey
Whole scene. Large groups follow fields, beds and grass; small ones pick out roofs, water and mud.

8.3 Name groups

  1. With a group selected, pick a class in Name this group, or type a new name and click Add Class. A new class is created at once, with a suggested colour from its name (trees dark green, grass yellow-green, water blue, buildings red, …), and appears in Tab 3 too: the two tabs share one class list.
  2. Several groups can share a name. The example named of its groups. Bare took five groups, Grass three, and Road, Tree, Water, Mud and Building two each; Crop 1 and Crop 2 took one each. Ctrl-select several cards to name them together.
  3. Right-click a class in the dropdown to rename it, change its colour or remove it.

Leave a group unnamed when you are unsure; unnamed groups simply do not become training samples.

8.4 Merge, split, ignore and move

ToolUse it whenHow
Merge…Two or more groups are the same cover typeCtrl-select the cards, or pick from the suggested look-alikes, then Merge Ticked.
Split…A group mixes two cover typesSplit into 2–4 by Appearance, Height above surroundings (DSM) or Brightness. A preview shows every tile of each part before you apply.
Ignore GroupA group is noise: shadows, edge artefacts, mixed odds and endsIt stays out of training and out of the views.
Find Similar ElsewhereYou want look-alikes from other groupsLists the nearest segments outside the group to move in.
Move tilesA few tiles are in the wrong groupSelect tiles (click, Ctrl/Shift-click), right-click, move to a group, a new group, or out of all groups. Right-clicking a segment on the map does the same.

The example split rather than merged. One of its groups mixed the pond's open water with the dark patches in it, so it was split and the pieces were named Water and Mud; splits like this took it from groups to .

8.5 Send named groups to Classification

  1. Click Send Named Groups to Classification. The dialog lists each class with its groups.
  2. Set Typical segments per group (default 12): the segments nearest each group's centre, so the most representative ones.
  3. Choose Add to existing training samples or Replace the existing samples of these classes, then Send and Open Classification.

Then File › Save Workspace: groups and appearance features are saved with the session.

9Tab 3 · Classes and training samples

9.1 Classes

  1. Classes created in Discover are already here. To add one, type a name in Enter new class name…, click Add and pick a colour.
  2. The order matters: it sets each class's value in the exported raster. The example's order: bare = 1, crop 1, crop 2, grass, water, tree, road, building, mud = 9.

Double-click a class to rename it or change its colour. Merge Selected Classes folds two or more classes into one (select them with Ctrl-click). Remove Selected Class deletes a class; Clear Selected Class and Clear All Training Data drop samples but keep classes. All four ask before acting, and an existing classified map is updated to match.

9.2 Click and paint samples

  1. Click a class in the list to make it active. It turns bold.
  2. Click an object in the viewer to add it as a sample of that class. It is tinted in the class colour, and the count beside the class name goes up.
  3. Ctrl + drag to paint: every object the cursor crosses joins the active class.
  4. Click a sample again to remove it.

9.3 Grow a selection by similarity

  1. Click Selection Mode: OFF to turn it on. Clicks now select instead of labelling; selected objects show in cyan.
  2. Click one object as a seed, then drag Grow Tolerance up. The selection spreads through touching objects similar to the seed.
  3. Click Assign to Class (assigns the selection to the active class), or Clear. Ctrl+Z undoes selection steps.
How the tolerance works, and why it can leak

Similarity uses six features: mean red, green, blue and brightness, GLCM contrast and homogeneity. Each is divided by its spread across the whole scene, and a neighbour joins if its distance to the seed's average is within tolerance × √6. Growth spreads through any touching object that passes, so a high tolerance can cross into different-looking ground. Start low and raise it in small steps.

9.4 Merge fragments into one object

SLIC cuts large objects (a long roof, a big crown) into pieces, and each piece then has the wrong area and shape. Merge them so the classifier sees the real outline.

  1. With Selection Mode on, select the pieces (click, grow, or Ctrl+drag).
  2. Click Merge. The pieces become one object, its features are recomputed, and its neighbours' context features are updated. If the pieces were samples of different classes, the console warns and the first class in the list wins.
A long roof split into many segments, selected in cyan
The same roof as a single merged object
Selected: piecesMerged: one object

A m² roof that SLIC split into pieces. Merging cannot be undone, short of re-running segmentation.

9.5 Find similar segments, and what to label next

9.6 Where to put samples

The survey with every training object filled in its class colour
The worked example's training objects, filled in their class colours: in all, under 1% of the objects.

10Tab 3 · Train, classify, generalise and export

10.1 Check class separability

Click Check Class Separability before training. The window shows the pairwise table, the closest pairs with a one-line reason each, and a signature plot for the pair you pick in Signature plot pair. Copy Image puts it on the clipboard, and it is saved as class_separability.png. How to read it: Part B, 5.7.

10.2 Train and classify

  1. Tick Use deep appearance features to give the classifier the 20 appearance components as well (needs Find Groups with Appearance run once). The example used it, with the DINOv3 backbone: 44 features.
  2. Click Train Classifier. You need samples in at least two classes. The console lists every feature used and the number of samples.
  3. Click Classify All Segments. Every object gets a class within seconds, the sieve is applied, and the view switches to the classified map.

10.3 Check with the views

In Map View, Show picks one of three views: Ortho (the image alone), Segments (objects in their mean colour) and Classified (the map, available after classifying). Two switches work in every view: Training samples and Segment boundaries. The opacity slider and switch fade the segments or classes over the image; the mode is Normal (plain transparency, at 100% the flat map, the default) or Multiply (tints the image and keeps its texture). Flip between them often: errors that hide in one view jump out in another.

Drag across each pair below to compare the image with the worked example's map, at five places in the survey:

OrthomosaicClassified

10.4 The retraining loop

Retraining is the core of the method. Part B, 5.8 replays it on the example's own labels.

  1. Scan the whole map in the Classified view at 50–70% opacity (Multiply). Note each kind of error: "faint grass rows read as bare", "dry mud read as bare", "young crop read as grass".
  2. Add a few correct samples of each kind, in different parts of the scene. Use What to Label Next for the cases the model itself is unsure about.
  3. Train Classifier, then Classify All Segments again. All samples, old and new, are used.
  4. Repeat until a round changes little. Then measure on Tab 4 instead of judging by eye.

10.5 Refine two classes by greenness (optional)

How it works and when to use it: Part B, 5.9. Objects decide what kind of land an area is, but a feature narrower than an object, such as a grass row between bare beds or a strip along a ditch, is lost inside it. Greenness Refinement (pixel level) re-decides, pixel by pixel, the pixels mapped as two classes you pick, using their greenness (ExG, the same index as the exg_mean feature, averaged over a small window). Every other class stays as the objects decided.

  1. Tick Refine two classes by greenness (ExG) before Classify All Segments (or after; the map updates either way).
  2. Check Green and Other, in the example Grass and Bare. They are guessed from the class names.
  3. The Cutoff is set from your training samples the first time: the ExG value that best separates the two classes' samples. From Samples sets it again after you add samples. Lower it to keep faint or dying grass green; raise it to make rows thinner.
  4. Window is the square greenness is averaged over. 3×3 pixels is the default; a smaller window follows thin rows more tightly but is noisier.

The two modes differ only in how the green class can turn into the other one. In both, pixels of the other class that read green become the green class one by one, which is what brings out the rows.

The refined map is what the view, the minimum mapping unit, the export and the accuracy assessment all use. The console reports how much of the map moved each way. The map is then no longer purely object-based for those two classes: rows can come out a little wider than they are, so treat the green class's area with care in row crops. The setting is saved with the workspace and with each iteration.

10.6 Set a minimum mapping unit

Under Post-Classification Generalization, set the MMU either in pixels (0–2,000) or as an area in m²; the two boxes stay in step with the working grid (at 5 cm, 4,000 px = 10 m²). Patches of one class smaller than this are absorbed by the class around them. The map updates when you release the slider or leave a box. The example uses none (0), because an MMU would erase the grass strips the greenness refinement recovers; see Part B, 5.10.

10.7 Export and save

  1. Click Export Final Classified TIF. The dialog suggests <name>_classified.tif in the workspace folder.
  2. Lite Classify writes a single-band GeoTIFF (value 1 = first class in the list, 2 = second, …, 0 = no data) with your colours embedded, plus a .qml style file of the same name for QGIS.
  3. File › Save Workspace (Ctrl+S) keeps the session: segments, features, appearance features, groups, classes, training samples, the classification, accuracy points and iterations.

Export again after you retrain. The exported GeoTIFF is a snapshot. Saving the workspace does not update it; the accuracy assessment, however, always uses the current map.

The final classified map of the whole survey
  • 1 Bare
  • 2 Crop 1
  • 3 Crop 2
  • 4 Grass
  • 5 Water
  • 6 Tree
  • 7 Road
  • 8 Building
  • 9 Mud
The worked example's map, with the raster value each class receives.

11Tab 4 · Assess accuracy

11.1 Choose a reference source

Under Ground Truth Source, pick one:

A ground-truth CSV needs an x column, a y column and a class column, with coordinates in the orthomosaic's own coordinate system. Header names are matched loosely (x/lon/easting, y/lat/northing, class/reference_class/label). A CSV written by Export Points in another Lite Classify workspace imports directly.

When a CSV class name doesn't match Tab 3, the import dialog lets you send its points to an existing class (close spellings are suggested), to a new class, or leave them out, and it lists workspace classes the CSV has no points for. With Process This Extent Only on, it also offers Only import points inside the processed extent (ticked by default).

11.2 Choose a design and generate points

  1. Under Random Point Generation, pick a Design: Simple random, or Stratified by map class (Part B, 5.11).
  2. For stratified, set Min per Class (default 50). Each class gets the larger of that minimum and its area share of Points to Add. The strata are the classes of the current map, so classify first.
  3. Click Generate. Points never fall on training objects. A stratified sample records each point's stratum and a seed, so it can be reproduced; there can be one stratified sample per map.

The example drew a stratified sample of 50 per class on its nine-class map at the time, with no sieve: points, seed . 229 of the 450 randomly drawn points were moved a median of 1.7 m by the interpreter, without reference to the classified map, to a spot with a clearer view of the land cover. The samples were then refined, and the estimates keep the original strata as their weights.

11.3 Label the points

  1. Double-click a point in the list, or press . and ,, to fly to it. The viewer shows the raw image only.
  2. Decide what is under the point. Right-click it and choose a class, or tick several points and use Assign checked to. Unassign Checked clears their class; Delete Checked removes them.
  3. Use Save Points as you go; a long labelling session is real work. Export Points… writes the labelled points to a CSV (point_id, x, y, class, crs) that another Lite Classify user can import as ground truth.

Label what is under the point, not what is nearby. If the point sits on a roof edge under an overhanging crown, label what covers that spot from above. If you truly cannot tell, delete the point rather than guess. Ideally, someone other than the person who picked the training samples does the labelling.

11.4 Run the assessment

Click Run Accuracy Assessment. Unlabelled points are left out (the warning says how many). Lite Classify reads each point's class from the current map with the sieve applied, the same map Export writes. The results window opens beside the main window, so you can keep working while it is open. It writes to the workspace folder:

11.5 Read the result

The worked example's own assessment

The matrix below is the example's accuracy_report.csv: stratified points labelled by photo-interpretation of the orthomosaic with the classification hidden. Cells are point counts. The user's and producer's accuracies in the margins, and the overall accuracy, are the area-weighted estimates with their 95% confidence intervals. Photo-interpreted points are reference data, not field-checked ground truth.

The largest confusions are Mud on the map that is open water (8 points), reference Mud and Grass mapped as Bare (3 and 2), Bare mapped as Grass (4), and four shaded tree crowns mapped as Building. Building and Mud are the weakest classes, at a user's accuracy of about 77%.

ClassMapped (ha)Estimated (ha)95% CI (ha)Reading
Bare±Mapped area is above the estimate, within the interval: a few Mud, Grass and Road points are mapped as Bare.
Crop 1±The most reliable crop figure: no reference Crop 1 point was mapped as anything else.
Crop 2±Mapped area sits close to the estimate; its plants are sparse, so bare ground between them can be mapped as Crop 2.
Grass±The map may slightly understate it; the estimate's interval includes the mapped area.
Water±Slightly understated: 8 points mapped as Mud are open water, so the interval excludes the mapped area.
Tree±Every point mapped as Tree is tree, but 4 shaded crowns were mapped as Building.
Road±Every point mapped as Road is road. The interval is wide because a few road points fall in the large Bare class.
Building±The weakest figure: a single building point mapped as Bare carries a lot of weight, so the interval is very wide.
Mud±Overstated: the map's Mud includes open water between the patches, so use the estimate.

The estimated areas correct the mapped areas for the errors the sample found. For anything reported in hectares, quote the estimate and its interval, not the mapped area.

Next retraining target: the row with the most off-diagonal points. In the example that is Mud, where 8 of 34 points are open water, closely followed by Bare, whose 8 misses are spread across several classes.

11.6 Iterations: keep and roll back rounds

Every Run Accuracy Assessment adds a row to the Iterations list: its number, overall accuracy, and how many samples and points it used. Each row keeps everything that run was based on: the training samples, class names, Discover group names, accuracy points and the classified map.