{"id":20304,"name":"DeepTreeAttention","description":"Hyperspectral Image Classification with Attention Aided CNNs.","url":"https://github.com/weecology/DeepTreeAttention","last_synced_at":"2026-10-19T03:01:15.012Z","repository":{"id":37879465,"uuid":"268541551","full_name":"weecology/DeepTreeAttention","owner":"weecology","description":"Implementation of Hang et al. 2020 \"Hyperspectral Image Classification with Attention Aided CNNs\" for tree species prediction ","archived":false,"fork":false,"pushed_at":"2026-05-14T17:06:31.000Z","size":331339,"stargazers_count":140,"open_issues_count":13,"forks_count":38,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-10-16T09:18:46.609Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weecology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-01T14:14:29.000Z","updated_at":"2026-10-10T11:32:04.000Z","dependencies_parsed_at":"2024-04-09T18:07:53.755Z","dependency_job_id":null,"html_url":"https://github.com/weecology/DeepTreeAttention","commit_stats":{"total_commits":3067,"total_committers":5,"mean_commits":613.4,"dds":"0.48223019237039455","last_synced_commit":"cae13f1e4271b5386e2379068f8239de3033ec40"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/weecology/DeepTreeAttention","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344836268,"owners_count":38330787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-16T02:00:06.653Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"weecology","name":"Weecology","uuid":"1156696","kind":"organization","description":null,"email":null,"website":"http://weecology.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1156696?v=4","repositories_count":207,"last_synced_at":"2026-10-16T06:08:39.854Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/weecology","funding_links":[],"total_stars":2206,"followers":144,"following":0,"created_at":"2022-11-02T21:15:58.355Z","updated_at":"2026-10-16T06:08:39.869Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology/repositories"},"packages":[{"id":11733683,"name":"github.com/weecology/DeepTreeAttention","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/weecology/DeepTreeAttention","keywords_array":[],"namespace":null,"versions_count":4,"first_release_published_at":"2025-06-05T11:17:44.849Z","latest_release_published_at":"2021-01-01T22:34:01.000Z","latest_release_number":"v0.0.5","last_synced_at":"2026-10-18T02:39:20.622Z","created_at":"2025-06-05T11:17:43.966Z","updated_at":"2026-10-18T02:39:20.623Z","registry_url":"https://pkg.go.dev/github.com/weecology/DeepTreeAttention","install_command":"go get github.com/weecology/DeepTreeAttention","documentation_url":"https://pkg.go.dev/github.com/weecology/DeepTreeAttention#section-documentation","metadata":{},"repo_metadata":{"id":37879465,"uuid":"268541551","full_name":"weecology/DeepTreeAttention","owner":"weecology","description":"Implementation of Hang et al. 2020 \"Hyperspectral Image Classification with Attention Aided CNNs\" for tree species prediction ","archived":false,"fork":false,"pushed_at":"2026-05-14T17:06:31.000Z","size":331339,"stargazers_count":140,"open_issues_count":13,"forks_count":38,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-10-16T09:18:46.609Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weecology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-01T14:14:29.000Z","updated_at":"2026-10-10T11:32:04.000Z","dependencies_parsed_at":"2024-04-09T18:07:53.755Z","dependency_job_id":null,"html_url":"https://github.com/weecology/DeepTreeAttention","commit_stats":{"total_commits":3067,"total_committers":5,"mean_commits":613.4,"dds":"0.48223019237039455","last_synced_commit":"cae13f1e4271b5386e2379068f8239de3033ec40"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/weecology/DeepTreeAttention","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344836268,"owners_count":38330787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-16T02:00:06.653Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"weecology","name":"Weecology","uuid":"1156696","kind":"organization","description":null,"email":null,"website":"http://weecology.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1156696?v=4","repositories_count":207,"last_synced_at":"2026-10-16T06:08:39.854Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/weecology","funding_links":[],"total_stars":2206,"followers":144,"following":0,"created_at":"2022-11-02T21:15:58.355Z","updated_at":"2026-10-16T06:08:39.869Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology/repositories"},"tags":[{"name":"v1.1","sha":"8ee0fa1f2958cca4bb120fbc2cebd4f7241c0f85","kind":"commit","published_at":"2023-11-01T18:22:46.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v1.1","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.1/manifests"},{"name":"v1.0","sha":"91b2def6a39539b24003f12b87226ffeaa2b7f98","kind":"commit","published_at":"2022-11-09T18:40:20.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v1.0","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.0/manifests"},{"name":"v0.0.5","sha":"439f959416f35789972c08b529212885c72b534f","kind":"tag","published_at":"2021-01-01T22:41:35.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.5","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"2e3e781d1fd8dc114efae84c99507cc88c84b350","kind":"commit","published_at":"2020-11-10T15:46:49.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.4","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.4/manifests"},{"name":"0.0.3","sha":"deeb89d2771f043bfff5be4a4d0dbd0d66cc3479","kind":"commit","published_at":"2020-08-25T17:55:41.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/0.0.3","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/0.0.3/manifests"},{"name":"v0.0.2","sha":"a1f1e8592b775b899c3a09868e7c795dde43e0d2","kind":"commit","published_at":"2020-08-01T14:31:55.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.2","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"27991d90c4b13b8d7c3165ebfa60a46ab9dfe66b","kind":"commit","published_at":"2020-07-28T19:40:42.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.1","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2026-10-16T13:24:08.140Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/weecology/DeepTreeAttention","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/weecology/DeepTreeAttention","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/weecology/DeepTreeAttention","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/weecology/DeepTreeAttention/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-10-16T01:31:25.980Z","issues_count":153,"pull_requests_count":24,"avg_time_to_close_issue":6783029.411347518,"avg_time_to_close_pull_request":634306.1739130435,"issues_closed_count":141,"pull_requests_closed_count":23,"pull_request_authors_count":5,"issue_authors_count":3,"avg_comments_per_issue":0.5294117647058824,"avg_comments_per_pull_request":0.041666666666666664,"merged_pull_requests_count":18,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":0,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/issues","maintainers":[{"login":"bw4sz","count":167,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"},{"login":"ethanwhite","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ethanwhite"}],"active_maintainers":[{"login":"bw4sz","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2FDeepTreeAttention/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2540947,"maintainers_count":0,"namespaces_count":853422,"keywords_count":141783,"github":"golang","metadata":{"funded_packages_count":116681,"sync_missing_packages_cursor":{"timestamp":"2026-09-29T00:04:57.155362Z","path":"github.com/virtengine/virtengine/sdk/specs","version":"v0.0.0-20260928231908-c0c887541540"},"rate_limit":5},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-10-17T05:08:55.707Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}},{"id":11733709,"name":"github.com/weecology/deeptreeattention","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/weecology/deeptreeattention","keywords_array":[],"namespace":null,"versions_count":4,"first_release_published_at":"2020-07-28T19:40:42.000Z","latest_release_published_at":"2021-01-01T22:34:01.000Z","latest_release_number":"v0.0.5","last_synced_at":"2026-10-18T02:39:20.873Z","created_at":"2025-06-05T11:17:45.567Z","updated_at":"2026-10-18T02:39:20.874Z","registry_url":"https://pkg.go.dev/github.com/weecology/deeptreeattention","install_command":"go get github.com/weecology/deeptreeattention","documentation_url":"https://pkg.go.dev/github.com/weecology/deeptreeattention#section-documentation","metadata":{},"repo_metadata":{"id":37879465,"uuid":"268541551","full_name":"weecology/DeepTreeAttention","owner":"weecology","description":"Implementation of Hang et al. 2020 \"Hyperspectral Image Classification with Attention Aided CNNs\" for tree species prediction ","archived":false,"fork":false,"pushed_at":"2026-05-14T17:06:31.000Z","size":331339,"stargazers_count":140,"open_issues_count":13,"forks_count":38,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-10-16T09:18:46.609Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weecology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-01T14:14:29.000Z","updated_at":"2026-10-10T11:32:04.000Z","dependencies_parsed_at":"2024-04-09T18:07:53.755Z","dependency_job_id":null,"html_url":"https://github.com/weecology/DeepTreeAttention","commit_stats":{"total_commits":3067,"total_committers":5,"mean_commits":613.4,"dds":"0.48223019237039455","last_synced_commit":"cae13f1e4271b5386e2379068f8239de3033ec40"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/weecology/DeepTreeAttention","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344836268,"owners_count":38330787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-16T02:00:06.653Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"weecology","name":"Weecology","uuid":"1156696","kind":"organization","description":null,"email":null,"website":"http://weecology.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1156696?v=4","repositories_count":207,"last_synced_at":"2026-10-16T06:08:39.854Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/weecology","funding_links":[],"total_stars":2206,"followers":144,"following":0,"created_at":"2022-11-02T21:15:58.355Z","updated_at":"2026-10-16T06:08:39.869Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weecology/repositories"},"tags":[{"name":"v1.1","sha":"8ee0fa1f2958cca4bb120fbc2cebd4f7241c0f85","kind":"commit","published_at":"2023-11-01T18:22:46.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v1.1","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.1/manifests"},{"name":"v1.0","sha":"91b2def6a39539b24003f12b87226ffeaa2b7f98","kind":"commit","published_at":"2022-11-09T18:40:20.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v1.0","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v1.0/manifests"},{"name":"v0.0.5","sha":"439f959416f35789972c08b529212885c72b534f","kind":"tag","published_at":"2021-01-01T22:41:35.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.5","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"2e3e781d1fd8dc114efae84c99507cc88c84b350","kind":"commit","published_at":"2020-11-10T15:46:49.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.4","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.4/manifests"},{"name":"0.0.3","sha":"deeb89d2771f043bfff5be4a4d0dbd0d66cc3479","kind":"commit","published_at":"2020-08-25T17:55:41.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/0.0.3","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/0.0.3/manifests"},{"name":"v0.0.2","sha":"a1f1e8592b775b899c3a09868e7c795dde43e0d2","kind":"commit","published_at":"2020-08-01T14:31:55.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.2","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"27991d90c4b13b8d7c3165ebfa60a46ab9dfe66b","kind":"commit","published_at":"2020-07-28T19:40:42.000Z","download_url":"https://codeload.github.com/weecology/DeepTreeAttention/tar.gz/v0.0.1","html_url":"https://github.com/weecology/DeepTreeAttention/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/weecology/DeepTreeAttention@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2026-10-16T13:24:08.297Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/weecology/deeptreeattention","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/weecology/deeptreeattention","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/weecology/deeptreeattention","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/weecology/deeptreeattention/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-10-16T01:31:25.980Z","issues_count":153,"pull_requests_count":24,"avg_time_to_close_issue":6783029.411347518,"avg_time_to_close_pull_request":634306.1739130435,"issues_closed_count":141,"pull_requests_closed_count":23,"pull_request_authors_count":5,"issue_authors_count":3,"avg_comments_per_issue":0.5294117647058824,"avg_comments_per_pull_request":0.041666666666666664,"merged_pull_requests_count":18,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":0,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/issues","maintainers":[{"login":"bw4sz","count":167,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"},{"login":"ethanwhite","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ethanwhite"}],"active_maintainers":[{"login":"bw4sz","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fweecology%2Fdeeptreeattention/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2540947,"maintainers_count":0,"namespaces_count":853422,"keywords_count":141783,"github":"golang","metadata":{"funded_packages_count":116681,"sync_missing_packages_cursor":{"timestamp":"2026-09-29T00:04:57.155362Z","path":"github.com/virtengine/virtengine/sdk/specs","version":"v0.0.0-20260928231908-c0c887541540"},"rate_limit":5},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-10-17T05:08:55.707Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":1254266,"full_name":"weecology/DeepTreeAttention","default_branch":"main","total_commits":3067,"total_committers":5,"total_bot_commits":2,"total_bot_committers":1,"mean_commits":613.4,"dds":0.48223019237039455,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-10-18T02:31:37.998Z","last_synced_commit":"cae13f1e4271b5386e2379068f8239de3033ec40","created_at":"2023-03-27T11:02:04.482Z","updated_at":"2026-10-18T02:31:37.779Z","committers":[{"name":"Ben Weinstein","email":"benweinstein@Bens-MacBook-Pro.local","login":null,"count":1588},{"name":"bw4sz","email":"benweinstein2010@gmail.com","login":"bw4sz","count":1474},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":2},{"name":"Ethan White (he/him)","email":"ethan@weecology.org","login":"ethanwhite","count":2},{"name":"Ben Weinstein","email":"benweinstein@Bens-MBP.lan","login":null,"count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-10-19T00:00:15.058Z","repositories_count":8464928,"commits_count":1281428469,"contributors_count":58711954,"owners_count":1811371,"committers_count":3855946,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"weecology/DeepTreeAttention","html_url":"https://github.com/weecology/DeepTreeAttention","last_synced_at":"2026-10-18T02:31:30.469Z","status":null,"issues_count":153,"pull_requests_count":24,"avg_time_to_close_issue":6783029.411347518,"avg_time_to_close_pull_request":634306.1739130435,"issues_closed_count":141,"pull_requests_closed_count":23,"pull_request_authors_count":5,"issue_authors_count":3,"avg_comments_per_issue":0.5294117647058824,"avg_comments_per_pull_request":0.041666666666666664,"merged_pull_requests_count":18,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":0,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:39:06.575Z","updated_at":"2026-10-18T02:31:30.469Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/weecology%2FDeepTreeAttention/issues","issue_labels_count":{},"pull_request_labels_count":{"dependencies":3},"issue_author_associations_count":{"COLLABORATOR":150,"NONE":3},"pull_request_author_associations_count":{"COLLABORATOR":17,"CONTRIBUTOR":3,"MEMBER":2,"NONE":2},"issue_authors":{"bw4sz":150,"mgwein":2,"SebastianKyle":1},"pull_request_authors":{"bw4sz":17,"dependabot[bot]":3,"ethanwhite":2,"henrykironde":1,"MarconiS":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-10-19T00:00:06.459Z","repositories_count":18127432,"issues_count":48714848,"pull_requests_count":150129732,"authors_count":12065347,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"COLLABORATOR":1},"past_year_issue_authors":{},"past_year_pull_request_authors":{"bw4sz":1},"maintainers":[{"login":"bw4sz","count":167,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"},{"login":"ethanwhite","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ethanwhite"}],"active_maintainers":[{"login":"bw4sz","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/bw4sz"}]},"events":{"total":{"CreateEvent":3,"ForkEvent":2,"IssueCommentEvent":1,"IssuesEvent":1,"PushEvent":2,"WatchEvent":12},"last_year":{"CreateEvent":3,"PushEvent":2,"WatchEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/pytest.yml","sha":null,"kind":"manifest","created_at":"2023-02-12T14:45:23.627Z","updated_at":"2023-02-12T14:45:23.627Z","repository_link":"https://github.com/weecology/DeepTreeAttention/blob/main/.github/workflows/pytest.yml","dependencies":[{"id":7588067332,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7588067333,"package_name":"actions/cache","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":7588067334,"package_name":"conda-incubator/setup-miniconda","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2023-09-21T19:58:48.230Z","updated_at":"2023-09-21T19:58:48.230Z","repository_link":"https://github.com/weecology/DeepTreeAttention/blob/main/requirements.txt","dependencies":[{"id":13857066302,"package_name":"comet_ml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066303,"package_name":"dask","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066304,"package_name":"dask_jobqueue","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066305,"package_name":"deepforest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066306,"package_name":"descartes","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066307,"package_name":"distributed","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066308,"package_name":"geopandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066309,"package_name":"h5py","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066310,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066311,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066312,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066313,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066314,"package_name":"pytorch_lightning","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066315,"package_name":"PyYAML","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066316,"package_name":"rasterio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066317,"package_name":"rasterstats","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066318,"package_name":"scikit_learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066319,"package_name":"setuptools","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066320,"package_name":"Shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066321,"package_name":"skimage","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066322,"package_name":"torch","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066323,"package_name":"torchmetrics","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13857066324,"package_name":"torchvision","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-09-21T19:58:48.245Z","updated_at":"2023-09-21T19:58:48.245Z","repository_link":"https://github.com/weecology/DeepTreeAttention/blob/main/setup.py","dependencies":[]},{"ecosystem":"conda","filepath":"environment.yml","sha":null,"kind":"manifest","created_at":"2024-04-09T18:07:48.963Z","updated_at":"2024-04-09T18:07:48.963Z","repository_link":"https://github.com/weecology/DeepTreeAttention/blob/main/environment.yml","dependencies":[{"id":17332220721,"package_name":"bokeh","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220927,"package_name":"descartes","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220928,"package_name":"h5py","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220929,"package_name":"matplotlib","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220930,"package_name":"numpydoc","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220931,"package_name":"pip","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220932,"package_name":"pytest","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220933,"package_name":"pytorch","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220934,"package_name":"pyyaml","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332220935,"package_name":"recommonmark","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221114,"package_name":"scikit-learn","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221115,"package_name":"sphinx","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221116,"package_name":"sphinx_rtd_theme","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221151,"package_name":"torchvision","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221152,"package_name":"twine","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":17332221187,"package_name":"yapf","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false}]}],"score":null,"created_at":"2023-09-11T14:52:11.526Z","updated_at":"2026-10-19T03:01:15.015Z","avatar_url":"https://github.com/weecology.png","language":"Python","category":"Biosphere","sub_category":"Forest Remote Sensing","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"DeepTreeAttention\n==============================\n\n[![Github Actions](https://github.com/Weecology/DeepTreeAttention/actions/workflows/pytest.yml/badge.svg)](https://github.com/Weecology/DeepTreeAttention/actions/)\n\nTree Species Prediction for the National Ecological Observatory Network (NEON)\n\nImplementation of Hang et al. 2020 [Hyperspectral Image Classification with Attention Aided CNNs](https://arxiv.org/abs/2005.11977) for tree species prediction.\n\n# Model Architecture\n\n![](www/model.png)\n\nProject Organization\n------------\n\n    ├── LICENSE\n    ├── README.md          \u003c- The top-level README for developers using this project.\n    ├── data\n    │   ├── processed      \u003c- The final, canonical data sets for modeling.\n    │   └── raw            \u003c- The original, immutable data dump.\n    │\n    ├── environment.yml   \u003c- Conda requirements\n    │\n    ├── setup.py           \u003c- makes project pip installable (pip install -e .) so src can be imported\n    ├── src                \u003c- Source code for use in this project.\n    │   ├── Models         \u003c- Model Architectures\n\n--------\n\n# Workflow\nThere are three main parts to this project, a 1) data module, a 2) model module, and 3) a trainer module. Usually the data_module is created to hold the train and test split and keep track of data generation reproducibility. Then a model architecture is created and pass to the model module along with the data module. Finally the model module is passed to the trainer.\n\n```\n#1) \ndata_module = data.TreeData(csv_file=\"data/raw/neon_vst_data_2021.csv\", regenerate=False, client=client)\n\n#2)\nmodel = \u003ccreate a pytorch NN.module\u003e\nm = main.TreeModel(model=model, bands=data_module.config[\"bands\"], classes=data_module.num_classes,label_dict=data_module.species_label_dict)\n\n#3\ntrainer = Trainer()\ntrainer.fit(m, datamodule=data_module)\n```\n\n## Pytorch Lightning Data Module (data.TreeData)\n\nThis repo contains a pytorch lightning data module for reproducibility. The goal of the project is to make it easy to share with others within our research group, but we welcome contributions from outside the community. While all data is public, it is VERY large (\u003e20TB) and cannot be easily shared. If you want to reproduce this work, you will need to download the majority of NEON's camera, HSI and CHM data and change the paths in the config file. For the 'raw' NEON tree stem data see data/raw/neon_vst_2021.csv. The data module starts from this state, which are x,y locations for each tree. It then performs the following actions as an end-to-end workflow.\n\n1. Filters the data to represent trees over 3m with sufficient number of training samples\n2. Extract the LiDAR derived canopy height and compares it to the field measured height. Trees that are below the canopy are excluded based on the min_CHM_diff parameter in the config.\n3. Splits the training and test x,y data such that field plots are either in training or test.\n4. For each x,y stem location the crown is predicted by the tree detection algorithm (DeepForest - https://deepforest.readthedocs.io/).\n5. Crops of each tree crown are created and divided into pixel windows for pixel-level prediction.\n\nThis workflow does not need to be run on every experiment. If you are satisifed with the current train/test split and data generation process, set regenerate=False\n\n```\ndata_module = data.TreeData(csv_file=\"data/raw/neon_vst_data_2021.csv\", regenerate=False)\ndata_module.setup()\n```\n\n## Pytorch Lightning Training Module (data.TreeModel)\n\nTraining is handled by the TreeModel class which loads a model from the models folder, reads the config file and runs the training. The evaluation metrics and images are computed and put of the comet dashboard\n\n```\nm = main.TreeModel(model=Hang2020.vanilla_CNN, bands=data_module.config[\"bands\"], classes=data_module.num_classes,label_dict=data_module.species_label_dict)\n\ntrainer = Trainer(\n    gpus=data_module.config[\"gpus\"],\n    fast_dev_run=data_module.config[\"fast_dev_run\"],\n    max_epochs=data_module.config[\"epochs\"],\n    accelerator=data_module.config[\"accelerator\"],\n    logger=comet_logger)\n   \ntrainer.fit(m, datamodule=data_module)\n```\n\n## Alive/Dead Filtering\n\nAs part of the prediction pipeline, RGB crops are scored as either 'Alive', meanining they have leaves during presumed leaf-on season, or 'Dead', meaning they do not have leaves.\nTo finetune the resent50 model, see src/models/dead.py. The classified data for the Alive/Dead crops can be found in data/raw/dead_train and dead/raw/dead_test.\n\n### Dev Guide\n\nIn general, major changes or improvements should be made on a new git branch. Only core improvements should be made on the main branch. If a change leads to higher scores, please create a pull request. Any pull requests are expected to have pytest unit tests (see tests/) that cover major use cases.\n\n## Model Architectures\n\nThe TreeModel class takes in a create model function\n\n```\nm = main.TreeModel(model=Hang2020.vanilla_CNN)\n```\n\nAny model can be specified provided it follows the following input and output arguments\n\n```\nclass myModel(Module):\n    \"\"\"\n    Model description\n    \"\"\"\n    def __init__(self, bands, classes):\n        super(myModel, self).__init__()\n        \u003cdefine model architecture here\u003e\n\n    def forward(self, x):\n        \u003cforward method for computing loss goes here\u003e\n        class_scores = F.softmax(x)\n        \n        return class_scores\n```\n\n### Extending the model\n\nTo create a model that takes in new inputs, I strongly recommend sub-classing the existing TreeData and TreeModel classes. For an example, see the MetadataModel in models/metadata.py\n\n```\n#Subclass of the training model\nclass MetadataModel(main.TreeModel):\n    \"\"\"Subclass the core model and update the training loop to take two inputs\"\"\"\n    def __init__(self, model, sites,classes, label_dict, config):\n        super(MetadataModel,self).__init__(model=model,classes=classes,label_dict=label_dict, config=config)  \n    \n    def training_step(self, batch, batch_idx):\n        \"\"\"Train on a loaded dataset\n        \"\"\"\n        #allow for empty data if data augmentation is generated\n        inputs, y = batch\n        images = inputs[\"HSI\"]\n        metadata = inputs[\"site\"]\n        y_hat = self.model.forward(images, metadata)\n        loss = F.cross_entropy(y_hat, y)    \n        \n        return loss\n\n```\n\n## Getting Started (UF - collaboration)\n\nThis section is meant solely for members of the idtrees group who have access to the data.\n\n1) Fork this repo and install the conda environment.\n\n```\nconda env create -f=environment.yml\nconda activate DeepTreeAttention\n```\n\n2) Update the config.yml\n\nCurrently, only members of the ewhite group have permissions to the raw NEON data.\n\nFor example:\n\n```\nrgb_sensor_pool: /orange/ewhite/NeonData/*/DP3.30010.001/**/Camera/**/*.tif\n```\n\nThis is not a problem, just set \n\n```\nregenerate: False\n```\n\nand it will bypass these steps and use the existing train/test split (e.g. data/processed/train.csv) \n\nYou will need to set the correct crop directories\n\n```\ncrop_dir: /blue/ewhite/b.weinstein/DeepTreeAttention/crops/\n```\nTo wherever the crops are saved. This is currently \n\n```\n/orange/idtrees-collab/DeepTreeAttention/crops/\n```\n\nI highly recommend making a comet login. Change\n\n```\n#Comet dashboard\ncomet_workspace: bw4sz\n```\nto your usename and add a [.comet.config file](https://www.comet.ml/docs/python-sdk/advanced/#non-interactive-setup) to authenticate.\n\n3) Submit a job\n\nSubmit a SLURM job\n\n```\nsbatch SLURM/experiment.sh\n```\n\n4) Look at the comet repo for results\n\nThe metrics tab has the Micro and Macro Accuracy.\n\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["transforms","optimize","archiving","measur","generic","compose","observation","animals","conversion","projection"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20304","html_url":"https://ost.ecosyste.ms/projects/20304"}