Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring old dev branch up-to-date #23

Merged
merged 427 commits into from
Jul 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
427 commits
Select commit Hold shift + click to select a range
4d1e213
test bf16 with same batch size
mwalmsley Feb 21, 2022
6495cc7
not possible, try boring f16
mwalmsley Feb 21, 2022
323c6b9
Doesn't seem any quicker - but perhaps I can increase the batch size
mwalmsley Feb 21, 2022
3950401
add back in dr12/dr8, change project. Keep f16/b512
mwalmsley Feb 21, 2022
c0fa921
swap exp dir
mwalmsley Feb 21, 2022
9afc1b0
load encoded jpegs into memory
mwalmsley Feb 22, 2022
f6e101d
adjust to do what I intend
mwalmsley Feb 22, 2022
62dc36a
debugging
mwalmsley Feb 22, 2022
f1d47a6
implementing albumentations
mb010 Feb 22, 2022
79cb719
Fixing to allow for conflict free merge
mb010 Feb 22, 2022
06762e3
Removing channel check
mb010 Feb 22, 2022
2ebe694
Merge pull request #6 from mwalmsley/pytorch-albumentations
mwalmsley Feb 22, 2022
229e441
inplace vs ref error
mwalmsley Feb 22, 2022
233e3d5
Merge branch 'pytorch' of github.com:mwalmsley/zoobot into pytorch
mwalmsley Feb 22, 2022
db876d5
missing import
mwalmsley Feb 22, 2022
6fd36fc
debugging
mwalmsley Feb 22, 2022
2914338
single gpu for debugging
mwalmsley Feb 22, 2022
fab4f94
disable wandb
mwalmsley Feb 22, 2022
4277beb
adjust transpose
mwalmsley Feb 22, 2022
03989be
that gave CHW now, but album. actually wants HWC
mwalmsley Feb 22, 2022
052c0f1
tweak torch cast
mwalmsley Feb 22, 2022
4913f18
tweak channels
mwalmsley Feb 22, 2022
674a171
add colour support
mwalmsley Feb 22, 2022
179bc78
seems to work single gpu, let's crank it up
mwalmsley Feb 22, 2022
df33261
update exp dir
mwalmsley Feb 22, 2022
7a7f6ba
debug aug hanging
mwalmsley Feb 22, 2022
730616d
back to debug mode, but multi-gpu
mwalmsley Feb 22, 2022
208cf32
adjust dataloader
mwalmsley Feb 22, 2022
98961be
see if still hangs with cv2 changed
mwalmsley Feb 22, 2022
e2659f9
no longer hangs. Turn off debug mode, test speed.
mwalmsley Feb 22, 2022
e05328f
doesn't hang but seems very very slow - 4 min for sanity check.
mwalmsley Feb 22, 2022
9330f7c
hmm, it's now 12 minutes per epoch :/ turn torchvision back to debug
mwalmsley Feb 22, 2022
a1d1f56
missed a line
mwalmsley Feb 22, 2022
aadda09
okay, works, turn off debug mode
mwalmsley Feb 22, 2022
a16a34d
with in-memory and torchvision, v v slow. try switch to OOM+album
mwalmsley Feb 22, 2022
50c0ac7
missed a conversion
mwalmsley Feb 22, 2022
401208c
fix transpose
mwalmsley Feb 22, 2022
09aef85
album (with non-grey) clocks in at 11-12 mins, out-of-mem
mwalmsley Feb 22, 2022
def0f5b
add scripts to move catalog to local
mwalmsley Feb 22, 2022
73eda01
echo
mwalmsley Feb 22, 2022
2f43a44
typo
mwalmsley Feb 22, 2022
3ef85d1
seems happy, do for realz
mwalmsley Feb 22, 2022
3e55884
dr5 first
mwalmsley Feb 22, 2022
c2d3532
enable/disable albumentations dynamically
mwalmsley Feb 22, 2022
93423ff
testing vison speed
mwalmsley Feb 22, 2022
c7676bf
typo
mwalmsley Feb 22, 2022
a32601b
typo
mwalmsley Feb 22, 2022
787163f
debugging
mwalmsley Feb 22, 2022
f080c1d
remove extra tensor cast
mwalmsley Feb 22, 2022
e009301
forgot to reduce channels
mwalmsley Feb 22, 2022
86c7d16
torchvison still 4-5 mins per, v quick. Try album w/ actual greyscale
mwalmsley Feb 22, 2022
70b1b33
album unhappy. try local training
mwalmsley Feb 22, 2022
c789306
oops I copied the png
mwalmsley Feb 22, 2022
38ae24f
debug saving
mwalmsley Feb 22, 2022
3bc9e44
add assert
mwalmsley Feb 22, 2022
8b7b339
do the jpegs
mwalmsley Feb 22, 2022
0ecd2ce
debug
mwalmsley Feb 22, 2022
d78cde8
maybe ref error?
mwalmsley Feb 22, 2022
72649ba
tweak locs
mwalmsley Feb 22, 2022
61d9643
hmm, it's slower. try /share with prefetch
mwalmsley Feb 22, 2022
5c2efce
prefetch=5 went from 4 mins to 3 mins? Try 40
mwalmsley Feb 22, 2022
2ffd41c
turn wandb on
mwalmsley Feb 22, 2022
1a58644
try pass the strategy as a plugin
mwalmsley Feb 22, 2022
da6bc79
working well on wandb, a little over 4 mins. try 6 workers
mwalmsley Feb 22, 2022
f5f7070
measured cpu use is lower but time v similar, gpu use v similar. Try 24
mwalmsley Feb 22, 2022
0697115
similar speed again.
mwalmsley Feb 22, 2022
1320fb6
a little under 3 mins per epoch! augs are important, but not critically.
mwalmsley Feb 22, 2022
a0741ed
oops, I forgot to put num_workers back to 12 from 24!
mwalmsley Feb 22, 2022
275a946
rename
mwalmsley Feb 22, 2022
c6939c6
2:30! turn augs back on, then compare simplejpeg vs tv
mwalmsley Feb 22, 2022
7457825
and rename
mwalmsley Feb 22, 2022
8894437
02:50 for simplejpeg. How about tv read_image?
mwalmsley Feb 22, 2022
9b08e34
3:00 for tv, very similar.
mwalmsley Feb 22, 2022
9b637e2
add replication folder (tf)
mwalmsley Feb 24, 2022
803693d
adjust warnings
mwalmsley Mar 3, 2022
d0e5502
hdf5 tweak
mwalmsley Mar 14, 2022
73d7d35
refactor hdf5 loading
mwalmsley Mar 14, 2022
4e8bec7
typo
mwalmsley Mar 14, 2022
7fca07e
minor cleanup
mwalmsley Mar 15, 2022
03b59aa
minor changes for pytorch and tf2.8
mwalmsley Mar 24, 2022
556e517
` to ``
mwalmsley Mar 24, 2022
4ecfeee
complete quick docs pass to get compiling again
mwalmsley Mar 24, 2022
2b5a288
Merge pull request #9 from mwalmsley/pytorch-docs
mwalmsley Mar 24, 2022
3835cd2
change to furo from alabaster
mwalmsley Mar 24, 2022
19622c9
fix broken links
camallen Apr 1, 2022
480960f
Merge pull request #10 from camallen/patch-1 - thanks Cam!
mwalmsley Apr 2, 2022
e756a46
Updating docs ahead of torch pr
mwalmsley Apr 2, 2022
6878f71
Continue updating documentation
mwalmsley Apr 4, 2022
bd7a39f
add resnet/detectron integration
mwalmsley Apr 4, 2022
e32d094
tweak run params
mwalmsley Apr 4, 2022
1694b55
remove nodelist
mwalmsley Apr 4, 2022
675b03c
cuda debugging
mwalmsley Apr 4, 2022
9b56101
adjust node
mwalmsley Apr 4, 2022
ef555c6
post-refactor update
mwalmsley Apr 4, 2022
09f8e38
return res4 as output
mwalmsley Apr 4, 2022
c5a9aaa
enable variable representaiton_dim
mwalmsley Apr 4, 2022
4e11c9f
fix shapes with a flatten
mwalmsley Apr 4, 2022
4995cc2
4x batch size, full dr8
mwalmsley Apr 4, 2022
d215820
works, but let's do with b512 just for easy comparison
mwalmsley Apr 4, 2022
d293046
switch to res5 output
mwalmsley Apr 5, 2022
c72e37d
test batch size 256, as with original paper
mwalmsley Apr 5, 2022
616c407
add s244, color, back to batch=512
mwalmsley Apr 5, 2022
71a3426
typo re transforms
mwalmsley Apr 5, 2022
9819e6d
check images
mwalmsley Apr 5, 2022
ac59304
exited before upload
mwalmsley Apr 5, 2022
ef92bd8
try single gpu
mwalmsley Apr 5, 2022
a7d3c7b
transpose images for wandb
mwalmsley Apr 5, 2022
898b960
transpose earlier
mwalmsley Apr 5, 2022
adf9323
try to log earlier
mwalmsley Apr 5, 2022
4338d3d
restrict dataset size
mwalmsley Apr 5, 2022
72b9aa3
debugging
mwalmsley Apr 5, 2022
637cac6
try without colour
mwalmsley Apr 5, 2022
7ac02a7
change node
mwalmsley Apr 5, 2022
92571f5
back to greyscale, 224, low prefactor
mwalmsley Apr 5, 2022
147de77
new node
mwalmsley Apr 5, 2022
e409bc2
new node
mwalmsley Apr 5, 2022
537b19a
refactor for speed
mwalmsley Apr 5, 2022
1c7eb9d
faster - try debug
mwalmsley Apr 5, 2022
3ec324f
debug torchvision
mwalmsley Apr 5, 2022
1b9f444
works, add greyscale back
mwalmsley Apr 5, 2022
77d26b1
typo, add custom greyscale
mwalmsley Apr 5, 2022
bb86acb
typo
mwalmsley Apr 5, 2022
1fe94c5
adjust mean
mwalmsley Apr 5, 2022
e0b9577
works, add color back
mwalmsley Apr 5, 2022
894d125
works - now, finally, log the images
mwalmsley Apr 5, 2022
7f1e263
works and logs, try with 244 images on 1 gpu
mwalmsley Apr 5, 2022
94cafe8
works, do full 2xgpu run
mwalmsley Apr 5, 2022
1af610b
increase prefetch
mwalmsley Apr 5, 2022
0ace605
begin adjusting data notes
mwalmsley Apr 5, 2022
0194194
restart?
mwalmsley Apr 6, 2022
7bc2b74
hmm, color broken, try greyscale
mwalmsley Apr 6, 2022
230e8c6
seems to work in greyscale...try again with color
mwalmsley Apr 6, 2022
b56b4af
typo
mwalmsley Apr 6, 2022
1407578
color definitely unhappy - check images on wandb
mwalmsley Apr 6, 2022
ffaa270
color images look perfect...try 1 gpu
mwalmsley Apr 6, 2022
01844d4
enable albumentations
mwalmsley Apr 6, 2022
60398d9
check if effnet still works
mwalmsley Apr 6, 2022
bdf1b34
effnet works in color, so not data loading.
mwalmsley Apr 6, 2022
bf3fa4f
typo
mwalmsley Apr 6, 2022
7e97d94
2 gpu -2cpu, see if dataloader still times out
mwalmsley Apr 6, 2022
2f95278
try with unfrozen bn
mwalmsley Apr 6, 2022
a8a0bf1
works :) unfreezing batch norm was crucial
mwalmsley Apr 6, 2022
6949efe
reduce prefetch factor
mwalmsley Apr 6, 2022
3ae2a53
still prefetching too much
mwalmsley Apr 6, 2022
5e6eee5
mem still high, try num workers 1
mwalmsley Apr 6, 2022
2639619
try one gpu - maybe it's smth with batchnorm
mwalmsley Apr 6, 2022
68eb32e
seems the memory keeps going up slowly, even with 1 gpu, 1 worker - t…
mwalmsley Apr 6, 2022
94ca24a
drop batch size
mwalmsley Apr 6, 2022
cbe0abd
try with normal dataloaders etc
mwalmsley Apr 6, 2022
3f46d0d
add emptycache
mwalmsley Apr 6, 2022
315658f
clearing cache on each batch seems to solve the problem :)
mwalmsley Apr 6, 2022
99d1604
try enforce catalog dtypes, columns
mwalmsley Apr 6, 2022
c3083bc
typo
mwalmsley Apr 6, 2022
2cda25c
JUST fits with effnet. Switch to detectron resnet, 2gpu (same num of …
mwalmsley Apr 6, 2022
c3228bc
got a nan - maybe from b16, let's disable
mwalmsley Apr 6, 2022
2fa60ca
another node
mwalmsley Apr 6, 2022
686fbfc
galahad still crashing - try with 1 gpu
mwalmsley Apr 6, 2022
c70c186
try for real and cross fingers
mwalmsley Apr 6, 2022
e472954
add resnet->detectron2 example
mwalmsley Apr 7, 2022
66f8db7
train effnet greyscale on dr5
mwalmsley Apr 7, 2022
6bf34ce
typo from refactoring
mwalmsley Apr 7, 2022
0328e21
expand on pytorch/tf docs
mwalmsley Apr 7, 2022
51ccfa3
data tweaks before adding resnet
mwalmsley Apr 7, 2022
e3708c1
minor cleanup throughout
mwalmsley Apr 7, 2022
5dbfec5
Merge branch 'pytorch' into resnet
mwalmsley Apr 7, 2022
e9381a0
Merge pull request #11 from mwalmsley/resnet
mwalmsley Apr 7, 2022
680cc23
major refactor to sep. user choice from zoobot api
mwalmsley Apr 7, 2022
7458bfb
remove extra arg
mwalmsley Apr 7, 2022
a7ab73e
typo
mwalmsley Apr 7, 2022
37f819a
update cols
mwalmsley Apr 7, 2022
ce8c248
wandb default on
mwalmsley Apr 7, 2022
035e35d
epochs typo
mwalmsley Apr 7, 2022
d26bfea
add more defaults
mwalmsley Apr 7, 2022
b542794
typo
mwalmsley Apr 7, 2022
f457520
set default precision correctly
mwalmsley Apr 7, 2022
a20a119
enable mixed precision
mwalmsley Apr 7, 2022
ed76612
works - add color version
mwalmsley Apr 7, 2022
eb54ec8
works, let's do detectron with greyscale
mwalmsley Apr 7, 2022
e2b2c86
fix typo, increase prefetch to 8
mwalmsley Apr 7, 2022
a654852
actually, keep prefetch=4, set num_workers=8
mwalmsley Apr 7, 2022
cee5a98
restart effnet greyscale
mwalmsley Apr 7, 2022
2ef0c05
restart effnet color
mwalmsley Apr 7, 2022
53de68f
okay, back to detectron
mwalmsley Apr 7, 2022
0f3350f
Running well, bump to num_workers=11, add color
mwalmsley Apr 7, 2022
caaacdf
oops forgot name
mwalmsley Apr 7, 2022
ef8b64a
start color torchvision
mwalmsley Apr 7, 2022
01be9cd
and run torchvision without color
mwalmsley Apr 7, 2022
d2868c7
rebuild docs
mwalmsley Apr 7, 2022
51e4792
add training with pytorch guide
mwalmsley Apr 7, 2022
b642767
update components guide
mwalmsley Apr 7, 2022
a00ae5b
Merge branch 'main' into pytorch
mwalmsley Apr 7, 2022
048543f
Merge pull request #12 from mwalmsley/pytorch
mwalmsley Apr 7, 2022
b652796
hotfix index link
mwalmsley Apr 7, 2022
0e5f533
Merge branch 'main' of github.com:mwalmsley/zoobot
mwalmsley Apr 7, 2022
857362e
restart detectron with full precision
mwalmsley Apr 7, 2022
c1405d5
and with color
mwalmsley Apr 7, 2022
8d5c194
and with torchvision
mwalmsley Apr 7, 2022
b162e37
detectron color
mwalmsley Apr 7, 2022
9ed2e1d
and greyscale
mwalmsley Apr 7, 2022
90ed708
refactor tf api to match pytorch
mwalmsley Apr 8, 2022
1bc6891
add replication slurm scripts for tensorflow
mwalmsley Apr 8, 2022
1b09768
adjust slurm reqs
mwalmsley Apr 8, 2022
0350345
adjust docs to account for new tf api
mwalmsley Apr 8, 2022
0501e2b
Merge pull request #13 from mwalmsley/tf-api
mwalmsley Apr 8, 2022
8f5ff03
hotfix some readme links
mwalmsley Apr 8, 2022
33b644c
add docker setup
camallen Apr 8, 2022
d737836
add package groups for tf and pytorch
camallen Apr 8, 2022
ffb897e
ignore wandb stuff
camallen Apr 8, 2022
9650233
add model training args
camallen Apr 8, 2022
9d0f926
avoid dectectron 2 imports for now
camallen Apr 8, 2022
3d0920a
refactor out pytorch datasets
mwalmsley Apr 20, 2022
8d3128a
fix imports
mwalmsley Apr 20, 2022
0f9dd11
generic lightning vs plain pytorch
mwalmsley Apr 21, 2022
993208b
Update docs to point to dropbox and data more obviously
mwalmsley Apr 25, 2022
8d707cb
formatting error
mwalmsley Apr 25, 2022
e6253b7
add citation.cff
mwalmsley Apr 25, 2022
efa49ec
Add Zenodo info
mwalmsley Apr 25, 2022
a9a9961
update cff message, thanks Alice
mwalmsley Apr 26, 2022
2ff7c12
and fix doi typo
mwalmsley Apr 26, 2022
9bc43cb
gz2 label typo
mwalmsley Apr 26, 2022
8c98b1e
Merge branch 'refactor-pytorch-datasets' into main
mwalmsley Apr 26, 2022
8f74fa3
Merge pull request #15 from mwalmsley/main
mwalmsley Apr 26, 2022
d73ebff
Merge branch 'main' into dockerize
mwalmsley Apr 26, 2022
4aceb0e
Merge pull request #14 from camallen/dockerize
mwalmsley Apr 26, 2022
8d2ab06
only support GalaxyDataModule still
mwalmsley Apr 26, 2022
615fa3a
Add travis support to check install approach
mwalmsley Apr 26, 2022
af130b9
bump python version for tf 2.8
mwalmsley Apr 26, 2022
d68b311
update pluggy for travis
mwalmsley Apr 26, 2022
b42c037
hmm, pluggy is up2date, try pytest and 3.8
mwalmsley Apr 26, 2022
f929732
flail around a little solving module error on travis
mwalmsley Apr 26, 2022
9f7388e
typo
mwalmsley Apr 26, 2022
5a3e215
I think it's the inits - add them
mwalmsley Apr 26, 2022
f42f434
Travis works :) update readme with new instructions
mwalmsley Apr 26, 2022
fac237c
Merge branch 'main' into refactor-pytorch-datasets
mwalmsley Apr 27, 2022
6e1e763
Complete refactor to use pytorch-galaxy-datasets, with example
mwalmsley Apr 29, 2022
39b10e1
build is unhappy, maybe missing this syntax
mwalmsley Apr 29, 2022
4567825
Merge pull request #16 from mwalmsley/refactor-pytorch-datasets
mwalmsley Apr 29, 2022
deff1f3
missed a rename, thanks cam
mwalmsley Apr 29, 2022
0893114
Merge pull request #17 from mwalmsley/refactor-pytorch-datasets
mwalmsley Apr 29, 2022
66eedf4
Minor refactor + add ortho gz2 label cols etc
mwalmsley May 11, 2022
b07008a
Move detectron import into conditional
mwalmsley May 16, 2022
a3e5fd8
add gz2 ortho dependencies explicitly
mwalmsley May 20, 2022
4c67f90
typo
mwalmsley May 20, 2022
cb5286c
allow multiple catalog paths to be passed
camallen May 24, 2022
fb2935a
allow install of git based packages (pytorch_galaxy_datasets)
camallen May 24, 2022
03f24db
Merge pull request #19 from camallen/add-multi-catalog-loading
mwalmsley Jun 30, 2022
1e1345f
Merge pull request #20 from camallen/add-git-to-dockerfile
mwalmsley Jun 30, 2022
65d7a10
minor cleanup
mwalmsley Jul 7, 2022
ea356a7
new gitignore
mwalmsley Jul 7, 2022
a3f88d5
adjust main with minor changes from dev.
mwalmsley Jul 7, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.git/
data/example_images/
data/pretrained_models/

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ dmypy.json
*.csv

wandb_api.txt
wandb/

*.pdf
*.png
Expand All @@ -152,4 +153,4 @@ checkpoint*

.vscode

data/example_images/advanced/images
data/example_images/advanced/images
24 changes: 24 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
env:
- EXTRA_DEPENDENCIES=pytorch,tensorflow
# - EXTRA_DEPENDENCIES=pytorch
# tests need both pytorch and tensorflow as they check they agree mathematically
# TODO add skip option for tests so I can consider single build versions
language: python
python:
# - "3.8" # tf 2.8 requires Python 3.7 and above, pytest requires pluggy 1.0.0 which requires python 3.8
- "3.9"
# command to install dependencies
before_install:
- python --version
- pip install -U pip
- python setup.py install
install:
# let's check all three permutations resolve/install okay
- pip install -U pluggy>=1.0.0 # required to avoid a cryptic error when running tests, requires py>=3.8
- pip install .[$EXTRA_DEPENDENCIES]

# command to run tests
script:
- pytest

# see https://docs.travis-ci.com/user/languages/python/
51 changes: 51 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
cff-version: 1.1.0
message: "Please cite the following works when using this software: https://ui.adsabs.harvard.edu/abs/2022MNRAS.509.3966W and https://doi.org/10.5281/zenodo.6483175"
authors:
- family-names: Walmsley
given-names: Mike
orcid: https://orcid.org/0000-0002-6408-4181
- family-names: Lintott
given-names: Chris
- family-names: Géron
given-names: Tobias
- family-names: Kruk
given-names: Sandor
- family-names: Krawczyk
given-names: Coleman
- family-names: Willett
given-names: Kyle W.
- family-names: Bamford
given-names: Steven
- family-names: Kelvin
given-names: Lee S.
- family-names: Fortson
given-names: Lucy
- family-names: Gal
given-names: Yarin
- family-names: Keel
given-names: William
- family-names: Masters
given-names: Karen L.
- family-names: Mehta
given-names: Vihang
- family-names: Simmons
given-names: Brooke D.
- family-names: Smethurst
given-names: Rebecca
- family-names: Smith
given-names: Lewis
- family-names: Baeten
given-names: Elisabeth M.
- family-names: Macmillan
given-names: Christine
title: "Zoobot: Deep learning galaxy morphology classifier"
version: 0.0.3
date-released: 2022-04-01
identifiers:
- type: "ascl-id"
value: "2203.027"
- type: "doi"
value: 10.5281/zenodo.6483176
- type: "bibcode"
value: "2022ascl.soft03027W"
abstract: "Zoobot classifies galaxy morphology with Bayesian CNN. Deep learning models were trained on volunteer classifications; these models were able to both learn from uncertain volunteer responses and predict full posteriors (rather than point estimates) for what volunteers would have said. The code reproduces and improves Galaxy Zoo DECaLS automated classifications, and can be finetuned for new tasks."
22 changes: 22 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FROM python:3.7-slim

ENV LANG=C.UTF-8

WORKDIR /usr/src/zoobot

RUN apt-get update && apt-get -y upgrade && \
apt-get install --no-install-recommends -y \
build-essential \
git && \
apt-get clean && rm -rf /var/lib/apt/lists/*

# install dependencies
COPY README.md .
COPY setup.py .
RUN pip install -U .[pytorch]
# install the zoobot locally as a package
# COPY setup.py .
# RUN pip install -e .

# install package
COPY . .
14 changes: 14 additions & 0 deletions Dockerfile.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM tensorflow/tensorflow:2.8.0

# if you have a supported nvidia GPU and https://github.com/NVIDIA/nvidia-docker
# FROM tensorflow/tensorflow:2.8.0-gpu

WORKDIR /usr/src/zoobot

# install dependencies but remove tensorflow as it's in the base image
COPY README.md .
COPY setup.py .
RUN pip install -U .[tensorflow]

# install package
COPY . .
54 changes: 38 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Zoobot

[![Documentation Status](https://readthedocs.org/projects/zoobot/badge/?version=latest)](https://zoobot.readthedocs.io/en/latest/?badge=latest)
[![Documentation Status](https://readthedocs.org/projects/zoobot/badge/?version=latest)](https://zoobot.readthedocs.io/)
[![Build Status](https://app.travis-ci.com/mwalmsley/zoobot.svg?branch=main)](https://app.travis-ci.com/mwalmsley/zoobot)
[![DOI](https://zenodo.org/badge/343787617.svg)](https://zenodo.org/badge/latestdoi/343787617)
<a href="https://ascl.net/2203.027"><img src="https://img.shields.io/badge/ascl-2203.027-blue.svg?colorB=262255" alt="ascl:2203.027" /></a>

Zoobot classifies galaxy morphology with deep learning. This code will let you:

Expand Down Expand Up @@ -32,32 +35,43 @@ training_config.train_estimator(

You can finetune Zoobot with a free GPU using this [Google Colab notebook](https://colab.research.google.com/drive/1miKj3HVmt7NP6t7xnxaz7V4fFquwucW2?usp=sharing). To install locally, keep reading.

Install using git and pip:
Download the code using git:

# I recommend using a virtual environment, see below
git clone git@github.com:mwalmsley/zoobot.git
pip install -r zoobot/requirements.txt
pip install -e zoobot

And then install Zoobot using pip, specifying either the pytorch dependencies, the tensorflow dependencies, or both:

pip install -e zoobot[pytorch] # pytorch dependencies
pip install -e zoobot[tensorflow] # tensorflow dependencies
pip install -e zoobot[pytorch,tensorflow] # both

I recommend installing in a virtual environment like anaconda. For example, `conda create --name zoobot python=3.7`, then `conda activate zoobot`.
Do not install directly with anaconda itself (e.g. `conda install tensorflow`). Anaconda currently installs tensorflow 2.0.0, which is too old for the latest features used here.
Use pip instead, as above.
Do not install directly with anaconda itself (e.g. `conda install tensorflow`) as Anaconda may install older versions.
Use pip instead, as above. Python 3.7 or greater is required.

The `main` branch is for stable-ish releases. The `dev` branch includes the shiniest features but may change at any time.

To get started, see the [documentation](https://zoobot.readthedocs.io/).
To get started, see the [documentation](https://zoobot.readthedocs.io/). For pretrained model weights, precalculated representations, catalogues, and so forth, see the [data notes](https://zoobot.readthedocs.io/data_notes.html) in particular.

I also include some working examples for you to copy and adapt:

- [decals_dr5_to_shards.py](https://github.com/mwalmsley/zoobot/blob/main/decals_dr5_to_shards.py) (only necessary to train from scratch)
- [train_model.py](https://github.com/mwalmsley/zoobot/blob/main/train_model.py) (similarly)
- [make_predictions.py](https://github.com/mwalmsley/zoobot/blob/main/make_predictions.py)
- [finetune_minimal.py](https://github.com/mwalmsley/zoobot/blob/main/finetune_minimal.py)
- [finetune_advanced.py](https://github.com/mwalmsley/zoobot/blob/main/finetune_advanced.py)
- [gz_decals_data_release_analysis_demo.ipynb](https://github.com/mwalmsley/zoobot/blob/main/gz_decals_data_release_analysis_demo.ipynb) (to better understand Zoobot's statistical outputs)
- [tensorflow/examples/decals_dr5_to_shards.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/tensorflow/examples/decals_dr5_to_shards.py) (only necessary to train from scratch)
- [tensorflow/examples/train_model_on_shards.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/tensorflow/examples/train_model_on_shards.py) (only necessary to train from scratch)
- [tensorflow/examples/make_predictions.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/tensorflow/examples/make_predictions.py)
- [tensorflow/examples/finetune_minimal.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/tensorflow/examples/finetune_minimal.py)
- [tensorflow/examples/finetune_advanced.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/tensorflow/examples/finetune_advanced.py)
- [pytorch/examples/train_model_on_catalog.py](https://github.com/mwalmsley/zoobot/blob/main/zoobot/pytorch/examples/train_model_on_catalog.py) (only necessary to train from scratch)

I also include some examples which record how the models in W+22a (the GZ DECaLS data release) were trained:
- [replication/tensorflow/train_model_on_decals_dr5_splits.py](https://github.com/mwalmsley/zoobot/blob/main/replication/tensorflow/train_model_on_decals_dr5_splits.py)
- [replication/pytorch/train_model_on_decals_dr5_splits.py](https://github.com/mwalmsley/zoobot/blob/main/replication/pytorch/train_model_on_decals_dr5_splits.py)

There's also the [gz_decals_data_release_analysis_demo.ipynb](https://github.com/mwalmsley/zoobot/blob/main/gz_decals_data_release_analysis_demo.ipynb), which describes Zoobot's statistical predictions. When trained from scratch, it predicts the parameters for distributions, not simple class labels!

Latest features:
### Latest features

- PyTorch version! Integrates with PyTorch Lightning and WandB. Multi-GPU support. Trains on jpeg images, rather than TFRecords, and does not yet have a finetuning example script.
- Train on colour (3-band) images: Add --color (American-friendly) to `train_model.py`
- Select which EfficientNet variant to train using the `get_effnet` arg in `define_model.py` - or replace with a func. returning your own architecture!
- New `predict_on_dataset.py` and `save_predictons.py` modules with useful functions for making predictions on large sets of images. Predictions are now saved to .hdf5 by default, which is much more convenient than csv for multi-forward-pass predictions. If using .hdf5, `reformat_predictions.py` is no longer needed.
Expand All @@ -66,11 +80,19 @@ Latest features:
- Support for Weights and Biases (wandb)
- Worked examples for custom representations
- [Colab notebook](https://colab.research.google.com/drive/1miKj3HVmt7NP6t7xnxaz7V4fFquwucW2?usp=sharing) for GZ predictions and fine-tuning
- Schemas (questions and answers for the decision trees) extended to include DECaLS DR1/2 and DR8, in various combinations. See `zoobot.label_metadata.py`.
- Schemas (questions and answers for the decision trees) extended to include DECaLS DR1/2 and DR8, in various combinations. See `zoobot.shared.label_metadata.py`.
- Test time augmentations are now off by default but can be enabled with `--test-time-augs` on `train_model.py`
- `create_shards.py` has been refactored. Use the new example script `decals_dr5_to_shards.py` to replicate Zoobot on DECaLS, and `create_shards.py` for general creation of TFRecords from catalogs. `decals_dr5_to_shards.py` now includes train/val/test splits, which it should have had in the first place.
- `zoobot/data_utils/image_datasets.py` will optionally check if the image paths provided really exist (slightly slower, but sometimes useful). `tfrecord_datasets` and `image_datasets` now serve equivalent purposes.

Contributions are welcome and will be credited in any future work.

If you use this repo for your research, please cite [the paper](https://arxiv.org/abs/2102.08414).
### Replication

For replication of the GZ DECaLS classifier see /replicate. This contains slurm scripts to:
- Create training TFRecords equivalent to those used to train the published classifier
- Train the classifier itself (by calling `zoobot/tensorflow/examples/train_model.py`)

### Citing

If you use this repo for your research, please cite [the paper](https://arxiv.org/abs/2102.08414) and the [code](https://doi.org/10.5281/zenodo.6483175) (via Zenodo).
2 changes: 0 additions & 2 deletions data/pretrained_models/decals_dr_train_set_only_m0/checkpoint

This file was deleted.